1cb93a386Sopenharmony_ci/* 2cb93a386Sopenharmony_ci * Copyright 2018 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 GrMtlOpsRenderPass_DEFINED 9cb93a386Sopenharmony_ci#define GrMtlOpsRenderPass_DEFINED 10cb93a386Sopenharmony_ci 11cb93a386Sopenharmony_ci#include "src/gpu/GrOpFlushState.h" 12cb93a386Sopenharmony_ci#include "src/gpu/GrOpsRenderPass.h" 13cb93a386Sopenharmony_ci#include "src/gpu/mtl/GrMtlGpu.h" 14cb93a386Sopenharmony_ci 15cb93a386Sopenharmony_ci#import <Metal/Metal.h> 16cb93a386Sopenharmony_ci 17cb93a386Sopenharmony_citypedef uint32_t GrColor; 18cb93a386Sopenharmony_ciclass GrMtlBuffer; 19cb93a386Sopenharmony_ciclass GrMtlFramebuffer; 20cb93a386Sopenharmony_ciclass GrMtlPipelineState; 21cb93a386Sopenharmony_ciclass GrMtlRenderCommandEncoder; 22cb93a386Sopenharmony_ciclass GrMtlRenderTarget; 23cb93a386Sopenharmony_ci 24cb93a386Sopenharmony_ciclass GrMtlOpsRenderPass : public GrOpsRenderPass { 25cb93a386Sopenharmony_cipublic: 26cb93a386Sopenharmony_ci GrMtlOpsRenderPass(GrMtlGpu* gpu, GrRenderTarget* rt, sk_sp<GrMtlFramebuffer>, 27cb93a386Sopenharmony_ci GrSurfaceOrigin origin, const GrOpsRenderPass::LoadAndStoreInfo& colorInfo, 28cb93a386Sopenharmony_ci const GrOpsRenderPass::StencilLoadAndStoreInfo& stencilInfo); 29cb93a386Sopenharmony_ci 30cb93a386Sopenharmony_ci ~GrMtlOpsRenderPass() override; 31cb93a386Sopenharmony_ci 32cb93a386Sopenharmony_ci void initRenderState(GrMtlRenderCommandEncoder*); 33cb93a386Sopenharmony_ci 34cb93a386Sopenharmony_ci void inlineUpload(GrOpFlushState* state, GrDeferredTextureUploadFn& upload) override; 35cb93a386Sopenharmony_ci void submit(); 36cb93a386Sopenharmony_ci 37cb93a386Sopenharmony_ciprivate: 38cb93a386Sopenharmony_ci GrGpu* gpu() override { return fGpu; } 39cb93a386Sopenharmony_ci 40cb93a386Sopenharmony_ci bool onBindPipeline(const GrProgramInfo&, const SkRect& drawBounds) override; 41cb93a386Sopenharmony_ci void onSetScissorRect(const SkIRect&) override; 42cb93a386Sopenharmony_ci bool onBindTextures(const GrGeometryProcessor&, 43cb93a386Sopenharmony_ci const GrSurfaceProxy* const geomProcTextures[], 44cb93a386Sopenharmony_ci const GrPipeline&) override; 45cb93a386Sopenharmony_ci void onBindBuffers(sk_sp<const GrBuffer> indexBuffer, sk_sp<const GrBuffer> instanceBuffer, 46cb93a386Sopenharmony_ci sk_sp<const GrBuffer> vertexBuffer, GrPrimitiveRestart) override; 47cb93a386Sopenharmony_ci void onDraw(int vertexCount, int baseVertex) override; 48cb93a386Sopenharmony_ci void onDrawIndexed(int indexCount, int baseIndex, uint16_t minIndexValue, 49cb93a386Sopenharmony_ci uint16_t maxIndexValue, int baseVertex) override; 50cb93a386Sopenharmony_ci void onDrawInstanced(int instanceCount, int baseInstance, int vertexCount, 51cb93a386Sopenharmony_ci int baseVertex) override; 52cb93a386Sopenharmony_ci void onDrawIndexedInstanced(int indexCount, int baseIndex, int instanceCount, int baseInstance, 53cb93a386Sopenharmony_ci int baseVertex) override; 54cb93a386Sopenharmony_ci void onDrawIndirect(const GrBuffer* drawIndirectBuffer, size_t bufferOffset, 55cb93a386Sopenharmony_ci int drawCount) override; 56cb93a386Sopenharmony_ci void onDrawIndexedIndirect(const GrBuffer* drawIndirectBuffer, size_t bufferOffset, 57cb93a386Sopenharmony_ci int drawCount) override; 58cb93a386Sopenharmony_ci 59cb93a386Sopenharmony_ci void onClear(const GrScissorState& scissor, std::array<float, 4> color) override; 60cb93a386Sopenharmony_ci 61cb93a386Sopenharmony_ci void onClearStencilClip(const GrScissorState& scissor, bool insideStencilMask) override; 62cb93a386Sopenharmony_ci 63cb93a386Sopenharmony_ci void setupRenderPass(const GrOpsRenderPass::LoadAndStoreInfo& colorInfo, 64cb93a386Sopenharmony_ci const GrOpsRenderPass::StencilLoadAndStoreInfo& stencilInfo); 65cb93a386Sopenharmony_ci 66cb93a386Sopenharmony_ci void setVertexBuffer(GrMtlRenderCommandEncoder*, const GrBuffer*, size_t offset, 67cb93a386Sopenharmony_ci size_t inputBufferIndex); 68cb93a386Sopenharmony_ci 69cb93a386Sopenharmony_ci GrMtlRenderCommandEncoder* setupResolve(); 70cb93a386Sopenharmony_ci 71cb93a386Sopenharmony_ci GrMtlGpu* fGpu; 72cb93a386Sopenharmony_ci 73cb93a386Sopenharmony_ci sk_sp<GrMtlFramebuffer> fFramebuffer; 74cb93a386Sopenharmony_ci GrMtlRenderCommandEncoder* fActiveRenderCmdEncoder; 75cb93a386Sopenharmony_ci GrMtlPipelineState* fActivePipelineState = nullptr; 76cb93a386Sopenharmony_ci MTLPrimitiveType fActivePrimitiveType; 77cb93a386Sopenharmony_ci MTLRenderPassDescriptor* fRenderPassDesc; 78cb93a386Sopenharmony_ci SkRect fBounds; 79cb93a386Sopenharmony_ci size_t fCurrentVertexStride; 80cb93a386Sopenharmony_ci#ifdef SK_ENABLE_MTL_DEBUG_INFO 81cb93a386Sopenharmony_ci bool fDebugGroupActive = false; 82cb93a386Sopenharmony_ci#endif 83cb93a386Sopenharmony_ci 84cb93a386Sopenharmony_ci using INHERITED = GrOpsRenderPass; 85cb93a386Sopenharmony_ci}; 86cb93a386Sopenharmony_ci 87cb93a386Sopenharmony_ci#endif 88