blob: 3a92d58bdaccc39efab944fde0de479506ed6489 [file] [log] [blame]
egdanielbc9b2962016-09-27 08:00:53 -07001/*
2 * Copyright 2016 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6*/
7
8#ifndef GrVkCopyManager_DEFINED
9#define GrVkCopyManager_DEFINED
10
11#include "GrVkDescriptorSetManager.h"
12
13#include "vk/GrVkDefines.h"
14
15class GrSurface;
16class GrVkCopyPipeline;
17class GrVkGpu;
18class GrVkUniformBuffer;
19class GrVkVertexBuffer;
20struct SkIPoint;
21struct SkIRect;
22
23class GrVkCopyManager {
24public:
25 GrVkCopyManager()
26 : fVertShaderModule(VK_NULL_HANDLE)
27 , fFragShaderModule(VK_NULL_HANDLE)
28 , fPipelineLayout(VK_NULL_HANDLE)
29 , fUniformBuffer(nullptr) {}
30
31 bool copySurfaceAsDraw(GrVkGpu* gpu,
32 GrSurface* dst,
33 GrSurface* src,
34 const SkIRect& srcRect,
35 const SkIPoint& dstPoint);
36
37 void destroyResources(GrVkGpu* gpu);
38 void abandonResources();
39
40private:
41 bool createCopyProgram(GrVkGpu* gpu);
42
43 // Everything below is only created once and shared by all copy draws/pipelines
44 VkShaderModule fVertShaderModule;
45 VkShaderModule fFragShaderModule;
46 VkPipelineShaderStageCreateInfo fShaderStageInfo[2];
47
48 GrVkDescriptorSetManager::Handle fSamplerDSHandle;
49 VkPipelineLayout fPipelineLayout;
50
Hal Canary144caf52016-11-07 17:57:18 -050051 sk_sp<GrVkVertexBuffer> fVertexBuffer;
52 GrVkUniformBuffer* fUniformBuffer;
egdanielbc9b2962016-09-27 08:00:53 -070053};
54
55#endif