Index: src/gpu/vk/GrVkCommandBuffer.cpp |
diff --git a/src/gpu/vk/GrVkCommandBuffer.cpp b/src/gpu/vk/GrVkCommandBuffer.cpp |
index 7fb143ed987065b4d2697a49ddf16cada071d3ed..ae2f0d4022344bf6c356873a135651961d621b9d 100644 |
--- a/src/gpu/vk/GrVkCommandBuffer.cpp |
+++ b/src/gpu/vk/GrVkCommandBuffer.cpp |
@@ -40,6 +40,10 @@ void GrVkCommandBuffer::freeGPUData(const GrVkGpu* gpu) const { |
fTrackedResources[i]->unref(gpu); |
} |
+ for (int i = 0; i < fTrackedRecycledResources.count(); ++i) { |
+ fTrackedRecycledResources[i]->recycle(const_cast<GrVkGpu*>(gpu)); |
+ } |
+ |
GR_VK_CALL(gpu->vkInterface(), FreeCommandBuffers(gpu->device(), gpu->cmdPool(), |
1, &fCmdBuffer)); |
@@ -50,6 +54,11 @@ void GrVkCommandBuffer::abandonSubResources() const { |
for (int i = 0; i < fTrackedResources.count(); ++i) { |
fTrackedResources[i]->unrefAndAbandon(); |
} |
+ |
+ for (int i = 0; i < fTrackedRecycledResources.count(); ++i) { |
+ // We don't recycle resources when abandoning them. |
+ fTrackedRecycledResources[i]->unrefAndAbandon(); |
+ } |
} |
void GrVkCommandBuffer::reset(GrVkGpu* gpu) { |
@@ -59,6 +68,13 @@ void GrVkCommandBuffer::reset(GrVkGpu* gpu) { |
} |
fTrackedResources.reset(); |
+ for (int i = 0; i < fTrackedRecycledResources.count(); ++i) { |
+ fTrackedRecycledResources[i]->recycle(const_cast<GrVkGpu*>(gpu)); |
+ fTrackedRecycledResources[i]->unref(gpu); |
jvanverth1
2016/07/20 14:51:36
I think you have an extra unref here.
egdaniel
2016/07/20 14:53:26
Done.
|
+ } |
+ fTrackedRecycledResources.reset(); |
+ |
+ |
this->invalidateState(); |
// we will retain resources for later use |