1*c8dee2aaSAndroid Build Coastguard Worker /* 2*c8dee2aaSAndroid Build Coastguard Worker * Copyright 2016 Google Inc. 3*c8dee2aaSAndroid Build Coastguard Worker * 4*c8dee2aaSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license that can be 5*c8dee2aaSAndroid Build Coastguard Worker * found in the LICENSE file. 6*c8dee2aaSAndroid Build Coastguard Worker */ 7*c8dee2aaSAndroid Build Coastguard Worker 8*c8dee2aaSAndroid Build Coastguard Worker #ifndef GrVkPipeline_DEFINED 9*c8dee2aaSAndroid Build Coastguard Worker #define GrVkPipeline_DEFINED 10*c8dee2aaSAndroid Build Coastguard Worker 11*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkRefCnt.h" 12*c8dee2aaSAndroid Build Coastguard Worker #include "include/private/base/SkAssert.h" 13*c8dee2aaSAndroid Build Coastguard Worker #include "include/private/base/SkDebug.h" 14*c8dee2aaSAndroid Build Coastguard Worker #include "include/private/gpu/vk/SkiaVulkan.h" 15*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ganesh/GrGeometryProcessor.h" 16*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ganesh/GrManagedResource.h" 17*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ganesh/vk/GrVkManagedResource.h" 18*c8dee2aaSAndroid Build Coastguard Worker 19*c8dee2aaSAndroid Build Coastguard Worker #include <cinttypes> 20*c8dee2aaSAndroid Build Coastguard Worker #include <cstdint> 21*c8dee2aaSAndroid Build Coastguard Worker 22*c8dee2aaSAndroid Build Coastguard Worker class GrProgramInfo; 23*c8dee2aaSAndroid Build Coastguard Worker class GrStencilSettings; 24*c8dee2aaSAndroid Build Coastguard Worker class GrVkCommandBuffer; 25*c8dee2aaSAndroid Build Coastguard Worker class GrVkGpu; 26*c8dee2aaSAndroid Build Coastguard Worker class GrXferProcessor; 27*c8dee2aaSAndroid Build Coastguard Worker enum GrSurfaceOrigin : int; 28*c8dee2aaSAndroid Build Coastguard Worker enum class GrPrimitiveType : uint8_t; 29*c8dee2aaSAndroid Build Coastguard Worker struct SkIRect; 30*c8dee2aaSAndroid Build Coastguard Worker struct SkISize; 31*c8dee2aaSAndroid Build Coastguard Worker 32*c8dee2aaSAndroid Build Coastguard Worker namespace skgpu { 33*c8dee2aaSAndroid Build Coastguard Worker class Swizzle; 34*c8dee2aaSAndroid Build Coastguard Worker struct BlendInfo; 35*c8dee2aaSAndroid Build Coastguard Worker } // namespace skgpu 36*c8dee2aaSAndroid Build Coastguard Worker 37*c8dee2aaSAndroid Build Coastguard Worker class GrVkPipeline : public GrVkManagedResource { 38*c8dee2aaSAndroid Build Coastguard Worker public: 39*c8dee2aaSAndroid Build Coastguard Worker static sk_sp<GrVkPipeline> Make(GrVkGpu*, 40*c8dee2aaSAndroid Build Coastguard Worker const GrGeometryProcessor::AttributeSet& vertexAttribs, 41*c8dee2aaSAndroid Build Coastguard Worker const GrGeometryProcessor::AttributeSet& instanceAttribs, 42*c8dee2aaSAndroid Build Coastguard Worker GrPrimitiveType, 43*c8dee2aaSAndroid Build Coastguard Worker GrSurfaceOrigin, 44*c8dee2aaSAndroid Build Coastguard Worker const GrStencilSettings&, 45*c8dee2aaSAndroid Build Coastguard Worker int numSamples, 46*c8dee2aaSAndroid Build Coastguard Worker bool isHWAntialiasState, 47*c8dee2aaSAndroid Build Coastguard Worker const skgpu::BlendInfo&, 48*c8dee2aaSAndroid Build Coastguard Worker bool isWireframe, 49*c8dee2aaSAndroid Build Coastguard Worker bool useConservativeRaster, 50*c8dee2aaSAndroid Build Coastguard Worker uint32_t subpass, 51*c8dee2aaSAndroid Build Coastguard Worker VkPipelineShaderStageCreateInfo* shaderStageInfo, 52*c8dee2aaSAndroid Build Coastguard Worker int shaderStageCount, 53*c8dee2aaSAndroid Build Coastguard Worker VkRenderPass compatibleRenderPass, 54*c8dee2aaSAndroid Build Coastguard Worker VkPipelineLayout layout, 55*c8dee2aaSAndroid Build Coastguard Worker bool ownsLayout, 56*c8dee2aaSAndroid Build Coastguard Worker VkPipelineCache cache); 57*c8dee2aaSAndroid Build Coastguard Worker 58*c8dee2aaSAndroid Build Coastguard Worker static sk_sp<GrVkPipeline> Make(GrVkGpu*, 59*c8dee2aaSAndroid Build Coastguard Worker const GrProgramInfo&, 60*c8dee2aaSAndroid Build Coastguard Worker VkPipelineShaderStageCreateInfo* shaderStageInfo, 61*c8dee2aaSAndroid Build Coastguard Worker int shaderStageCount, 62*c8dee2aaSAndroid Build Coastguard Worker VkRenderPass compatibleRenderPass, 63*c8dee2aaSAndroid Build Coastguard Worker VkPipelineLayout layout, 64*c8dee2aaSAndroid Build Coastguard Worker VkPipelineCache cache, 65*c8dee2aaSAndroid Build Coastguard Worker uint32_t subpass); 66*c8dee2aaSAndroid Build Coastguard Worker pipeline()67*c8dee2aaSAndroid Build Coastguard Worker VkPipeline pipeline() const { return fPipeline; } layout()68*c8dee2aaSAndroid Build Coastguard Worker VkPipelineLayout layout() const { 69*c8dee2aaSAndroid Build Coastguard Worker SkASSERT(fPipelineLayout != VK_NULL_HANDLE); 70*c8dee2aaSAndroid Build Coastguard Worker return fPipelineLayout; 71*c8dee2aaSAndroid Build Coastguard Worker } 72*c8dee2aaSAndroid Build Coastguard Worker 73*c8dee2aaSAndroid Build Coastguard Worker static void SetDynamicScissorRectState(GrVkGpu*, 74*c8dee2aaSAndroid Build Coastguard Worker GrVkCommandBuffer*, 75*c8dee2aaSAndroid Build Coastguard Worker SkISize colorAttachmentDimensions, 76*c8dee2aaSAndroid Build Coastguard Worker GrSurfaceOrigin, const SkIRect& scissorRect); 77*c8dee2aaSAndroid Build Coastguard Worker static void SetDynamicViewportState(GrVkGpu*, 78*c8dee2aaSAndroid Build Coastguard Worker GrVkCommandBuffer*, 79*c8dee2aaSAndroid Build Coastguard Worker SkISize colorAttachmentDimensions); 80*c8dee2aaSAndroid Build Coastguard Worker static void SetDynamicBlendConstantState(GrVkGpu*, 81*c8dee2aaSAndroid Build Coastguard Worker GrVkCommandBuffer*, 82*c8dee2aaSAndroid Build Coastguard Worker const skgpu::Swizzle& writeSwizzle, 83*c8dee2aaSAndroid Build Coastguard Worker const GrXferProcessor&); 84*c8dee2aaSAndroid Build Coastguard Worker 85*c8dee2aaSAndroid Build Coastguard Worker #ifdef SK_TRACE_MANAGED_RESOURCES dumpInfo()86*c8dee2aaSAndroid Build Coastguard Worker void dumpInfo() const override { 87*c8dee2aaSAndroid Build Coastguard Worker SkDebugf("GrVkPipeline: %" PRIdPTR " (%d refs)\n", (intptr_t)fPipeline, this->getRefCnt()); 88*c8dee2aaSAndroid Build Coastguard Worker } 89*c8dee2aaSAndroid Build Coastguard Worker #endif 90*c8dee2aaSAndroid Build Coastguard Worker 91*c8dee2aaSAndroid Build Coastguard Worker protected: GrVkPipeline(const GrVkGpu * gpu,VkPipeline pipeline,VkPipelineLayout layout)92*c8dee2aaSAndroid Build Coastguard Worker GrVkPipeline(const GrVkGpu* gpu, VkPipeline pipeline, VkPipelineLayout layout) 93*c8dee2aaSAndroid Build Coastguard Worker : INHERITED(gpu), fPipeline(pipeline), fPipelineLayout(layout) {} 94*c8dee2aaSAndroid Build Coastguard Worker 95*c8dee2aaSAndroid Build Coastguard Worker VkPipeline fPipeline; 96*c8dee2aaSAndroid Build Coastguard Worker VkPipelineLayout fPipelineLayout; 97*c8dee2aaSAndroid Build Coastguard Worker 98*c8dee2aaSAndroid Build Coastguard Worker private: 99*c8dee2aaSAndroid Build Coastguard Worker void freeGPUData() const override; 100*c8dee2aaSAndroid Build Coastguard Worker 101*c8dee2aaSAndroid Build Coastguard Worker using INHERITED = GrVkManagedResource; 102*c8dee2aaSAndroid Build Coastguard Worker }; 103*c8dee2aaSAndroid Build Coastguard Worker 104*c8dee2aaSAndroid Build Coastguard Worker #endif 105