blob: 716c87cfe88ff3adb6ce3e9a936e9bedefaeec25 [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
Robert Phillipsb0e93a22017-08-29 08:26:54 -040011#include "GrTypes.h"
egdanielbc9b2962016-09-27 08:00:53 -070012#include "GrVkDescriptorSetManager.h"
Greg Daniel487132b2018-12-20 14:09:36 -050013#include "vk/GrVkTypes.h"
egdanielbc9b2962016-09-27 08:00:53 -070014
egdanielbc9b2962016-09-27 08:00:53 -070015class GrSurface;
16class GrVkCopyPipeline;
17class GrVkGpu;
Greg Daniel7d918fd2018-06-19 15:22:01 -040018class GrVkPipelineLayout;
egdanielbc9b2962016-09-27 08:00:53 -070019class GrVkUniformBuffer;
20class GrVkVertexBuffer;
21struct SkIPoint;
22struct SkIRect;
23
24class GrVkCopyManager {
25public:
Greg Danielf9f27232017-01-06 14:40:08 -050026 GrVkCopyManager();
27
28 ~GrVkCopyManager();
egdanielbc9b2962016-09-27 08:00:53 -070029
30 bool copySurfaceAsDraw(GrVkGpu* gpu,
Robert Phillipsb0e93a22017-08-29 08:26:54 -040031 GrSurface* dst, GrSurfaceOrigin dstOrigin,
32 GrSurface* src, GrSurfaceOrigin srcOrigin,
Greg Daniel55fa6472018-03-16 16:13:10 -040033 const SkIRect& srcRect, const SkIPoint& dstPoint,
34 bool canDiscardOutsideDstRect);
egdanielbc9b2962016-09-27 08:00:53 -070035
36 void destroyResources(GrVkGpu* gpu);
37 void abandonResources();
38
39private:
40 bool createCopyProgram(GrVkGpu* gpu);
41
42 // Everything below is only created once and shared by all copy draws/pipelines
43 VkShaderModule fVertShaderModule;
44 VkShaderModule fFragShaderModule;
45 VkPipelineShaderStageCreateInfo fShaderStageInfo[2];
46
47 GrVkDescriptorSetManager::Handle fSamplerDSHandle;
Greg Daniel7d918fd2018-06-19 15:22:01 -040048 GrVkPipelineLayout* fPipelineLayout;
egdanielbc9b2962016-09-27 08:00:53 -070049
Hal Canary144caf52016-11-07 17:57:18 -050050 sk_sp<GrVkVertexBuffer> fVertexBuffer;
Greg Danielf9f27232017-01-06 14:40:08 -050051 std::unique_ptr<GrVkUniformBuffer> fUniformBuffer;
egdanielbc9b2962016-09-27 08:00:53 -070052};
53
54#endif