aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/gpu/vk/GrVkResourceProvider.cpp
diff options
context:
space:
mode:
authorGravatar egdaniel <egdaniel@google.com>2016-03-04 07:35:10 -0800
committerGravatar Commit bot <commit-bot@chromium.org>2016-03-04 07:35:10 -0800
commit8b6394c24f755db39936e4e5111a3f251cc56857 (patch)
treec9984ed5aae1a7a75fa2d3ec994e246ad2ecb944 /src/gpu/vk/GrVkResourceProvider.cpp
parentd3312595c86289113ea5994234844388523499e8 (diff)
Add a cache of GrVkSamplers in GrVkResourceProvider.
Diffstat (limited to 'src/gpu/vk/GrVkResourceProvider.cpp')
-rw-r--r--src/gpu/vk/GrVkResourceProvider.cpp27
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