Index: src/gpu/vk/GrVkResourceProvider.cpp |
diff --git a/src/gpu/vk/GrVkResourceProvider.cpp b/src/gpu/vk/GrVkResourceProvider.cpp |
index e3c19d67a068542d235f43561e1c36e5680601b2..f735de42693c10960d5213904d48f7a5dc1645c1 100644 |
--- a/src/gpu/vk/GrVkResourceProvider.cpp |
+++ b/src/gpu/vk/GrVkResourceProvider.cpp |
@@ -12,6 +12,7 @@ |
#include "GrVkPipeline.h" |
#include "GrVkRenderTarget.h" |
#include "GrVkSampler.h" |
+#include "GrVkUniformBuffer.h" |
#include "GrVkUtil.h" |
#ifdef SK_TRACE_VK_RESOURCES |
@@ -265,6 +266,23 @@ void GrVkResourceProvider::recycleSecondaryCommandBuffer(GrVkSecondaryCommandBuf |
fAvailableSecondaryCommandBuffers.push_back(cb); |
} |
+const GrVkResource* GrVkResourceProvider::findOrCreateStandardUniformBufferResource() { |
+ const GrVkResource* resource = nullptr; |
+ int count = fAvailableUniformBufferResources.count(); |
+ if (count > 0) { |
+ resource = fAvailableUniformBufferResources[count - 1]; |
+ fAvailableUniformBufferResources.removeShuffle(count - 1); |
+ } else { |
+ resource = GrVkUniformBuffer::CreateResource(fGpu, GrVkUniformBuffer::kStandardSize); |
+ } |
+ return resource; |
+} |
+ |
+void GrVkResourceProvider::recycleStandardUniformBufferResource(const GrVkResource* resource) { |
+ resource->ref(); |
+ fAvailableUniformBufferResources.push_back(resource); |
+} |
+ |
void GrVkResourceProvider::destroyResources() { |
// release our active command buffers |
for (int i = 0; i < fActiveCommandBuffers.count(); ++i) { |
@@ -314,6 +332,13 @@ void GrVkResourceProvider::destroyResources() { |
fUniformDescLayout = VK_NULL_HANDLE; |
} |
fUniformDescPool->unref(fGpu); |
+ |
+ // release our uniform buffers |
egdaniel
2016/07/19 20:48:37
do you need an abandon form of this?
|
+ for (int i = 0; i < fAvailableUniformBufferResources.count(); ++i) { |
+ SkASSERT(fAvailableUniformBufferResources[i]->unique()); |
+ fAvailableUniformBufferResources[i]->unref(fGpu); |
+ } |
+ fAvailableUniformBufferResources.reset(); |
} |
void GrVkResourceProvider::abandonResources() { |