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