aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/gpu/vk/GrVkCopyManager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/gpu/vk/GrVkCopyManager.cpp')
-rw-r--r--src/gpu/vk/GrVkCopyManager.cpp25
1 files changed, 16 insertions, 9 deletions
diff --git a/src/gpu/vk/GrVkCopyManager.cpp b/src/gpu/vk/GrVkCopyManager.cpp
index 28ca8b411c..9af85db94c 100644
--- a/src/gpu/vk/GrVkCopyManager.cpp
+++ b/src/gpu/vk/GrVkCopyManager.cpp
@@ -17,6 +17,7 @@
#include "GrVkDescriptorSet.h"
#include "GrVkGpu.h"
#include "GrVkImageView.h"
+#include "GrVkPipelineLayout.h"
#include "GrVkRenderTarget.h"
#include "GrVkResourceProvider.h"
#include "GrVkSampler.h"
@@ -30,7 +31,7 @@
GrVkCopyManager::GrVkCopyManager()
: fVertShaderModule(VK_NULL_HANDLE)
, fFragShaderModule(VK_NULL_HANDLE)
- , fPipelineLayout(VK_NULL_HANDLE) {}
+ , fPipelineLayout(nullptr) {}
GrVkCopyManager::~GrVkCopyManager() {}
@@ -114,15 +115,18 @@ bool GrVkCopyManager::createCopyProgram(GrVkGpu* gpu) {
layoutCreateInfo.pushConstantRangeCount = 0;
layoutCreateInfo.pPushConstantRanges = nullptr;
+ VkPipelineLayout pipelineLayout;
VkResult err = GR_VK_CALL(gpu->vkInterface(), CreatePipelineLayout(gpu->device(),
&layoutCreateInfo,
nullptr,
- &fPipelineLayout));
+ &pipelineLayout));
if (err) {
this->destroyResources(gpu);
return false;
}
+ fPipelineLayout = new GrVkPipelineLayout(pipelineLayout);
+
static const float vdata[] = {
0, 0,
0, 1,
@@ -169,7 +173,7 @@ bool GrVkCopyManager::copySurfaceAsDraw(GrVkGpu* gpu,
if (VK_NULL_HANDLE == fVertShaderModule) {
SkASSERT(VK_NULL_HANDLE == fFragShaderModule &&
- VK_NULL_HANDLE == fPipelineLayout &&
+ nullptr == fPipelineLayout &&
nullptr == fVertexBuffer.get() &&
nullptr == fUniformBuffer.get());
if (!this->createCopyProgram(gpu)) {
@@ -177,12 +181,13 @@ bool GrVkCopyManager::copySurfaceAsDraw(GrVkGpu* gpu,
return false;
}
}
+ SkASSERT(fPipelineLayout);
GrVkResourceProvider& resourceProv = gpu->resourceProvider();
GrVkCopyPipeline* pipeline = resourceProv.findOrCreateCopyPipeline(rt,
fShaderStageInfo,
- fPipelineLayout);
+ fPipelineLayout->layout());
if (!pipeline) {
return false;
}
@@ -412,10 +417,9 @@ void GrVkCopyManager::destroyResources(GrVkGpu* gpu) {
fFragShaderModule = VK_NULL_HANDLE;
}
- if (VK_NULL_HANDLE != fPipelineLayout) {
- GR_VK_CALL(gpu->vkInterface(), DestroyPipelineLayout(gpu->device(), fPipelineLayout,
- nullptr));
- fPipelineLayout = VK_NULL_HANDLE;
+ if (fPipelineLayout) {
+ fPipelineLayout->unref(gpu);
+ fPipelineLayout = nullptr;
}
if (fUniformBuffer) {
@@ -427,7 +431,10 @@ void GrVkCopyManager::destroyResources(GrVkGpu* gpu) {
void GrVkCopyManager::abandonResources() {
fVertShaderModule = VK_NULL_HANDLE;
fFragShaderModule = VK_NULL_HANDLE;
- fPipelineLayout = VK_NULL_HANDLE;
+ if (fPipelineLayout) {
+ fPipelineLayout->unrefAndAbandon();
+ fPipelineLayout = nullptr;
+ }
if (fUniformBuffer) {
fUniformBuffer->abandon();