Home | History | Annotate | Download | only in vk
      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:
     25     GrVkCopyManager();
     26 
     27     ~GrVkCopyManager();
     28 
     29     bool copySurfaceAsDraw(GrVkGpu* gpu,
     30                            GrSurface* dst,
     31                            GrSurface* src,
     32                            const SkIRect& srcRect,
     33                            const SkIPoint& dstPoint);
     34 
     35     void destroyResources(GrVkGpu* gpu);
     36     void abandonResources();
     37 
     38 private:
     39     bool createCopyProgram(GrVkGpu* gpu);
     40 
     41     // Everything below is only created once and shared by all copy draws/pipelines
     42     VkShaderModule fVertShaderModule;
     43     VkShaderModule fFragShaderModule;
     44     VkPipelineShaderStageCreateInfo fShaderStageInfo[2];
     45 
     46     GrVkDescriptorSetManager::Handle fSamplerDSHandle;
     47     VkPipelineLayout fPipelineLayout;
     48 
     49     sk_sp<GrVkVertexBuffer> fVertexBuffer;
     50     std::unique_ptr<GrVkUniformBuffer> fUniformBuffer;
     51 };
     52 
     53 #endif
     54