Index: src/gpu/vk/GrVkResourceProvider.cpp |
diff --git a/src/gpu/vk/GrVkResourceProvider.cpp b/src/gpu/vk/GrVkResourceProvider.cpp |
index 19bda4152514af6e38c3cd6788740cd52886c25d..b0ca5ac86c91dac8395bf4778804a0951f05318c 100644 |
--- a/src/gpu/vk/GrVkResourceProvider.cpp |
+++ b/src/gpu/vk/GrVkResourceProvider.cpp |
@@ -7,9 +7,11 @@ |
#include "GrVkResourceProvider.h" |
+#include "GrTextureParams.h" |
#include "GrVkCommandBuffer.h" |
#include "GrVkPipeline.h" |
#include "GrVkRenderPass.h" |
+#include "GrVkSampler.h" |
#include "GrVkUtil.h" |
#ifdef SK_TRACE_VK_RESOURCES |
@@ -81,6 +83,17 @@ GrVkDescriptorPool* GrVkResourceProvider::findOrCreateCompatibleDescriptorPool( |
return new GrVkDescriptorPool(fGpu, typeCounts); |
} |
+GrVkSampler* GrVkResourceProvider::findOrCreateCompatibleSampler(const GrTextureParams& params) { |
+ GrVkSampler* sampler = fSamplers.find(GrVkSampler::GenerateKey(params)); |
+ if (!sampler) { |
+ sampler = GrVkSampler::Create(fGpu, params); |
+ fSamplers.add(sampler); |
+ } |
+ SkASSERT(sampler); |
+ sampler->ref(); |
+ return sampler; |
+} |
+ |
GrVkCommandBuffer* GrVkResourceProvider::createCommandBuffer() { |
GrVkCommandBuffer* cmdBuffer = GrVkCommandBuffer::Create(fGpu, fGpu->cmdPool()); |
fActiveCommandBuffers.push_back(cmdBuffer); |
@@ -112,6 +125,13 @@ void GrVkResourceProvider::destroyResources() { |
} |
fSimpleRenderPasses.reset(); |
+ // Iteratre through all store GrVkSamplers and unref them before reseting the hash. |
jvanverth1
2016/03/03 18:32:58
Typos: Iterate, resetting
egdaniel
2016/03/04 15:25:08
Done.
|
+ SkTDynamicHash<GrVkSampler, uint8_t>::Iter iter(&fSamplers); |
+ for (; !iter.done(); ++iter) { |
+ (*iter).unref(fGpu); |
+ } |
+ fSamplers.reset(); |
+ |
#ifdef SK_TRACE_VK_RESOURCES |
SkASSERT(0 == GrVkResource::fTrace.count()); |
#endif |
@@ -133,6 +153,13 @@ void GrVkResourceProvider::abandonResources() { |
} |
fSimpleRenderPasses.reset(); |
+ // Iteratre through all store GrVkSamplers and unferAndAbandon them before reseting the hash. |
jvanverth1
2016/03/03 18:32:58
Typos: Iterate, unrefAndAbandon, resetting
egdaniel
2016/03/04 15:25:08
Done.
|
+ SkTDynamicHash<GrVkSampler, uint8_t>::Iter iter(&fSamplers); |
+ for (; !iter.done(); ++iter) { |
+ (*iter).unrefAndAbandon(); |
+ } |
+ fSamplers.reset(); |
+ |
#ifdef SK_TRACE_VK_RESOURCES |
SkASSERT(0 == GrVkResource::fTrace.count()); |
#endif |