1 /* 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 15 class GrSurface; 16 class GrVkCopyPipeline; 17 class GrVkGpu; 18 class GrVkUniformBuffer; 19 class GrVkVertexBuffer; 20 struct SkIPoint; 21 struct SkIRect; 22 23 class GrVkCopyManager { 24 public: GrVkCopyManager()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 40 private: 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 51 SkAutoTUnref<GrVkVertexBuffer> fVertexBuffer; 52 GrVkUniformBuffer* fUniformBuffer; 53 }; 54 55 #endif 56