diff options
author | egdaniel <egdaniel@google.com> | 2016-03-04 07:35:10 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-03-04 07:35:10 -0800 |
commit | 8b6394c24f755db39936e4e5111a3f251cc56857 (patch) | |
tree | c9984ed5aae1a7a75fa2d3ec994e246ad2ecb944 /src/gpu/vk/GrVkResourceProvider.cpp | |
parent | d3312595c86289113ea5994234844388523499e8 (diff) |
Add a cache of GrVkSamplers in GrVkResourceProvider.
BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1765523002
Review URL: https://codereview.chromium.org/1765523002
Diffstat (limited to 'src/gpu/vk/GrVkResourceProvider.cpp')
-rw-r--r-- | src/gpu/vk/GrVkResourceProvider.cpp | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/src/gpu/vk/GrVkResourceProvider.cpp b/src/gpu/vk/GrVkResourceProvider.cpp index 19bda41525..b273e3b65d 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(); + // Iterate through all store GrVkSamplers and unref them before resetting the hash. + 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(); + // Iterate through all store GrVkSamplers and unrefAndAbandon them before resetting the hash. + 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 |