diff options
author | 2018-06-19 15:22:01 -0400 | |
---|---|---|
committer | 2018-06-20 13:37:28 +0000 | |
commit | 7d918fde03d44011e7aac067227f88c4ba4cc3b8 (patch) | |
tree | 5f185edf442e4afff5c16bec75df4ad65d560082 /src/gpu/vk/GrVkPipelineState.cpp | |
parent | 53418da8c64773fed8c927404a8f7e78e93e1c95 (diff) |
Don't destroy VkPipelineLayouts until after command buffer recording.
Bug: skia:
Change-Id: I70be1dc6b29db9a9152e008293a7d0a276384011
Reviewed-on: https://skia-review.googlesource.com/135867
Reviewed-by: Jim Van Verth <jvanverth@google.com>
Commit-Queue: Greg Daniel <egdaniel@google.com>
Diffstat (limited to 'src/gpu/vk/GrVkPipelineState.cpp')
-rw-r--r-- | src/gpu/vk/GrVkPipelineState.cpp | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/src/gpu/vk/GrVkPipelineState.cpp b/src/gpu/vk/GrVkPipelineState.cpp index 993f57d9e4..84aa68248c 100644 --- a/src/gpu/vk/GrVkPipelineState.cpp +++ b/src/gpu/vk/GrVkPipelineState.cpp @@ -19,6 +19,7 @@ #include "GrVkImageView.h" #include "GrVkMemory.h" #include "GrVkPipeline.h" +#include "GrVkPipelineLayout.h" #include "GrVkSampler.h" #include "GrVkTexelBuffer.h" #include "GrVkTexture.h" @@ -45,7 +46,7 @@ GrVkPipelineState::GrVkPipelineState( std::unique_ptr<std::unique_ptr<GrGLSLFragmentProcessor>[]> fragmentProcessors, int fragmentProcessorCnt) : fPipeline(pipeline) - , fPipelineLayout(layout) + , fPipelineLayout(new GrVkPipelineLayout(layout)) , fUniformDescriptorSet(nullptr) , fSamplerDescriptorSet(nullptr) , fTexelBufferDescriptorSet(nullptr) @@ -119,10 +120,8 @@ void GrVkPipelineState::freeGPUResources(const GrVkGpu* gpu) { } if (fPipelineLayout) { - GR_VK_CALL(gpu->vkInterface(), DestroyPipelineLayout(gpu->device(), - fPipelineLayout, - nullptr)); - fPipelineLayout = VK_NULL_HANDLE; + fPipelineLayout->unref(gpu); + fPipelineLayout = nullptr; } if (fGeometryUniformBuffer) { @@ -153,10 +152,15 @@ void GrVkPipelineState::freeGPUResources(const GrVkGpu* gpu) { } void GrVkPipelineState::abandonGPUResources() { - fPipeline->unrefAndAbandon(); - fPipeline = nullptr; + if (fPipeline) { + fPipeline->unrefAndAbandon(); + fPipeline = nullptr; + } - fPipelineLayout = VK_NULL_HANDLE; + if (fPipelineLayout) { + fPipelineLayout->unrefAndAbandon(); + fPipelineLayout = nullptr; + } fGeometryUniformBuffer->abandon(); fFragmentUniformBuffer->abandon(); |