Fix double deletion of DescriptorSetLayouts
authorJim Van Verth <jvanverth@google.com>
Thu, 17 Nov 2016 18:30:22 +0000 (13:30 -0500)
committerSkia Commit-Bot <skia-commit-bot@chromium.org>
Thu, 17 Nov 2016 20:24:33 +0000 (20:24 +0000)
When VkPipeline creation fails the PipelineStateBuilder cleans up
afterwards. It was deleting the sampler DescriptorSetLayout when that
is owned by the ResourceProvider.

BUG=skia:

GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=4964

Change-Id: I876c570349f96f58e0256dc91bc1135c59a2058d
Reviewed-on: https://skia-review.googlesource.com/4964
Reviewed-by: Greg Daniel <egdaniel@google.com>
Commit-Queue: Jim Van Verth <jvanverth@google.com>

src/gpu/vk/GrVkPipelineStateBuilder.cpp

index c088a8a..5a783f0 100644 (file)
@@ -84,7 +84,7 @@ GrVkPipelineState* GrVkPipelineStateBuilder::finalize(const GrStencilSettings& s
     VkShaderModule fragShaderModule;
 
     GrVkResourceProvider& resourceProvider = fGpu->resourceProvider();
-    // This layout is not owned by the PipelineStateBuilder and thus should no be destroyed
+    // These layouts are not owned by the PipelineStateBuilder and thus should not be destroyed
     dsLayout[GrVkUniformHandler::kUniformBufferDescSet] = resourceProvider.getUniformDSLayout();
 
     GrVkDescriptorSetManager::Handle samplerDSHandle;
@@ -146,11 +146,6 @@ GrVkPipelineState* GrVkPipelineStateBuilder::finalize(const GrStencilSettings& s
     if (!pipeline) {
         GR_VK_CALL(fGpu->vkInterface(), DestroyPipelineLayout(fGpu->device(), pipelineLayout,
                                                               nullptr));
-        GR_VK_CALL(fGpu->vkInterface(),
-                   DestroyDescriptorSetLayout(fGpu->device(),
-                                              dsLayout[GrVkUniformHandler::kSamplerDescSet],
-                                              nullptr));
-
         this->cleanupFragmentProcessors();
         return nullptr;
     }