aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/gpu/vk/GrVkPipelineState.cpp
diff options
context:
space:
mode:
authorGravatar Greg Daniel <egdaniel@google.com>2018-06-19 15:22:01 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2018-06-20 13:37:28 +0000
commit7d918fde03d44011e7aac067227f88c4ba4cc3b8 (patch)
tree5f185edf442e4afff5c16bec75df4ad65d560082 /src/gpu/vk/GrVkPipelineState.cpp
parent53418da8c64773fed8c927404a8f7e78e93e1c95 (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.cpp20
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();