1*c8dee2aaSAndroid Build Coastguard Worker /* 2*c8dee2aaSAndroid Build Coastguard Worker * Copyright 2017 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 GrMockOpsRenderPass_DEFINED 9*c8dee2aaSAndroid Build Coastguard Worker #define GrMockOpsRenderPass_DEFINED 10*c8dee2aaSAndroid Build Coastguard Worker 11*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkRefCnt.h" 12*c8dee2aaSAndroid Build Coastguard Worker #include "include/private/gpu/ganesh/GrTypesPriv.h" 13*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ganesh/GrDeferredUpload.h" 14*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ganesh/GrOpsRenderPass.h" 15*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ganesh/GrRenderTarget.h" 16*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ganesh/GrTexture.h" 17*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ganesh/mock/GrMockGpu.h" 18*c8dee2aaSAndroid Build Coastguard Worker 19*c8dee2aaSAndroid Build Coastguard Worker #include <array> 20*c8dee2aaSAndroid Build Coastguard Worker #include <cstddef> 21*c8dee2aaSAndroid Build Coastguard Worker #include <cstdint> 22*c8dee2aaSAndroid Build Coastguard Worker 23*c8dee2aaSAndroid Build Coastguard Worker class GrBuffer; 24*c8dee2aaSAndroid Build Coastguard Worker class GrGeometryProcessor; 25*c8dee2aaSAndroid Build Coastguard Worker class GrGpu; 26*c8dee2aaSAndroid Build Coastguard Worker class GrOpFlushState; 27*c8dee2aaSAndroid Build Coastguard Worker class GrPipeline; 28*c8dee2aaSAndroid Build Coastguard Worker class GrProgramInfo; 29*c8dee2aaSAndroid Build Coastguard Worker class GrScissorState; 30*c8dee2aaSAndroid Build Coastguard Worker class GrSurfaceProxy; 31*c8dee2aaSAndroid Build Coastguard Worker enum GrSurfaceOrigin : int; 32*c8dee2aaSAndroid Build Coastguard Worker struct SkIRect; 33*c8dee2aaSAndroid Build Coastguard Worker struct SkRect; 34*c8dee2aaSAndroid Build Coastguard Worker 35*c8dee2aaSAndroid Build Coastguard Worker class GrMockOpsRenderPass : public GrOpsRenderPass { 36*c8dee2aaSAndroid Build Coastguard Worker public: GrMockOpsRenderPass(GrMockGpu * gpu,GrRenderTarget * rt,GrSurfaceOrigin origin,LoadAndStoreInfo colorInfo)37*c8dee2aaSAndroid Build Coastguard Worker GrMockOpsRenderPass(GrMockGpu* gpu, GrRenderTarget* rt, GrSurfaceOrigin origin, 38*c8dee2aaSAndroid Build Coastguard Worker LoadAndStoreInfo colorInfo) 39*c8dee2aaSAndroid Build Coastguard Worker : INHERITED(rt, origin) 40*c8dee2aaSAndroid Build Coastguard Worker , fGpu(gpu) 41*c8dee2aaSAndroid Build Coastguard Worker , fColorLoadOp(colorInfo.fLoadOp) { 42*c8dee2aaSAndroid Build Coastguard Worker } 43*c8dee2aaSAndroid Build Coastguard Worker gpu()44*c8dee2aaSAndroid Build Coastguard Worker GrGpu* gpu() override { return fGpu; } inlineUpload(GrOpFlushState *,GrDeferredTextureUploadFn &)45*c8dee2aaSAndroid Build Coastguard Worker void inlineUpload(GrOpFlushState*, GrDeferredTextureUploadFn&) override {} 46*c8dee2aaSAndroid Build Coastguard Worker numDraws()47*c8dee2aaSAndroid Build Coastguard Worker int numDraws() const { return fNumDraws; } 48*c8dee2aaSAndroid Build Coastguard Worker 49*c8dee2aaSAndroid Build Coastguard Worker private: onBegin()50*c8dee2aaSAndroid Build Coastguard Worker void onBegin() override { 51*c8dee2aaSAndroid Build Coastguard Worker if (GrLoadOp::kClear == fColorLoadOp) { 52*c8dee2aaSAndroid Build Coastguard Worker this->markRenderTargetDirty(); 53*c8dee2aaSAndroid Build Coastguard Worker } 54*c8dee2aaSAndroid Build Coastguard Worker } onBindPipeline(const GrProgramInfo &,const SkRect &)55*c8dee2aaSAndroid Build Coastguard Worker bool onBindPipeline(const GrProgramInfo&, const SkRect&) override { return true; } onSetScissorRect(const SkIRect &)56*c8dee2aaSAndroid Build Coastguard Worker void onSetScissorRect(const SkIRect&) override {} onBindTextures(const GrGeometryProcessor &,const GrSurfaceProxy * const geomProcTextures[],const GrPipeline &)57*c8dee2aaSAndroid Build Coastguard Worker bool onBindTextures(const GrGeometryProcessor&, 58*c8dee2aaSAndroid Build Coastguard Worker const GrSurfaceProxy* const geomProcTextures[], 59*c8dee2aaSAndroid Build Coastguard Worker const GrPipeline&) override { 60*c8dee2aaSAndroid Build Coastguard Worker return true; 61*c8dee2aaSAndroid Build Coastguard Worker } onBindBuffers(sk_sp<const GrBuffer> indexBuffer,sk_sp<const GrBuffer> instanceBuffer,sk_sp<const GrBuffer> vertexBuffer,GrPrimitiveRestart)62*c8dee2aaSAndroid Build Coastguard Worker void onBindBuffers(sk_sp<const GrBuffer> indexBuffer, sk_sp<const GrBuffer> instanceBuffer, 63*c8dee2aaSAndroid Build Coastguard Worker sk_sp<const GrBuffer> vertexBuffer, GrPrimitiveRestart) override {} onDraw(int,int)64*c8dee2aaSAndroid Build Coastguard Worker void onDraw(int, int) override { this->noopDraw(); } onDrawIndexed(int,int,uint16_t,uint16_t,int)65*c8dee2aaSAndroid Build Coastguard Worker void onDrawIndexed(int, int, uint16_t, uint16_t, int) override { this->noopDraw(); } onDrawInstanced(int,int,int,int)66*c8dee2aaSAndroid Build Coastguard Worker void onDrawInstanced(int, int, int, int) override { this->noopDraw(); } onDrawIndexedInstanced(int,int,int,int,int)67*c8dee2aaSAndroid Build Coastguard Worker void onDrawIndexedInstanced(int, int, int, int, int) override { this->noopDraw(); } onDrawIndirect(const GrBuffer *,size_t,int)68*c8dee2aaSAndroid Build Coastguard Worker void onDrawIndirect(const GrBuffer*, size_t, int) override { this->noopDraw(); } onDrawIndexedIndirect(const GrBuffer *,size_t,int)69*c8dee2aaSAndroid Build Coastguard Worker void onDrawIndexedIndirect(const GrBuffer*, size_t, int) override { this->noopDraw(); } onClear(const GrScissorState & scissor,std::array<float,4>)70*c8dee2aaSAndroid Build Coastguard Worker void onClear(const GrScissorState& scissor, std::array<float, 4>) override { 71*c8dee2aaSAndroid Build Coastguard Worker this->markRenderTargetDirty(); 72*c8dee2aaSAndroid Build Coastguard Worker } onClearStencilClip(const GrScissorState & scissor,bool insideStencilMask)73*c8dee2aaSAndroid Build Coastguard Worker void onClearStencilClip(const GrScissorState& scissor, bool insideStencilMask) override {} noopDraw()74*c8dee2aaSAndroid Build Coastguard Worker void noopDraw() { 75*c8dee2aaSAndroid Build Coastguard Worker this->markRenderTargetDirty(); 76*c8dee2aaSAndroid Build Coastguard Worker ++fNumDraws; 77*c8dee2aaSAndroid Build Coastguard Worker } markRenderTargetDirty()78*c8dee2aaSAndroid Build Coastguard Worker void markRenderTargetDirty() { 79*c8dee2aaSAndroid Build Coastguard Worker if (auto* tex = fRenderTarget->asTexture()) { 80*c8dee2aaSAndroid Build Coastguard Worker tex->markMipmapsDirty(); 81*c8dee2aaSAndroid Build Coastguard Worker } 82*c8dee2aaSAndroid Build Coastguard Worker } 83*c8dee2aaSAndroid Build Coastguard Worker 84*c8dee2aaSAndroid Build Coastguard Worker GrMockGpu* fGpu; 85*c8dee2aaSAndroid Build Coastguard Worker GrLoadOp fColorLoadOp; 86*c8dee2aaSAndroid Build Coastguard Worker int fNumDraws = 0; 87*c8dee2aaSAndroid Build Coastguard Worker 88*c8dee2aaSAndroid Build Coastguard Worker using INHERITED = GrOpsRenderPass; 89*c8dee2aaSAndroid Build Coastguard Worker }; 90*c8dee2aaSAndroid Build Coastguard Worker 91*c8dee2aaSAndroid Build Coastguard Worker #endif 92