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