/* * Copyright 2019 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #ifndef GrDawnOpsRenderPass_DEFINED #define GrDawnOpsRenderPass_DEFINED #include "src/gpu/GrOpsRenderPass.h" #include "include/gpu/GrTypes.h" #include "src/gpu/GrColor.h" #include "dawn/webgpu_cpp.h" class GrDawnGpu; class GrDawnRenderTarget; struct GrDawnProgram; class GrDawnOpsRenderPass : public GrOpsRenderPass { public: GrDawnOpsRenderPass(GrDawnGpu*, GrRenderTarget*, GrSurfaceOrigin, const LoadAndStoreInfo&, const StencilLoadAndStoreInfo&); ~GrDawnOpsRenderPass() override; wgpu::RenderPassEncoder beginRenderPass(wgpu::LoadOp colorOp, wgpu::LoadOp stencilOp); void inlineUpload(GrOpFlushState* state, GrDeferredTextureUploadFn& upload) override; void submit(); private: GrGpu* gpu() override; void applyState(GrDawnProgram*, const GrProgramInfo& programInfo); void onEnd() override; bool onBindPipeline(const GrProgramInfo& programInfo, const SkRect& drawBounds) override; void onSetScissorRect(const SkIRect&) override; bool onBindTextures(const GrGeometryProcessor&, const GrSurfaceProxy* const geomProcTextures[], const GrPipeline&) override; void onBindBuffers(sk_sp indexBuffer, sk_sp instanceBuffer, sk_sp vertexBuffer, GrPrimitiveRestart) override; void onDraw(int vertexCount, int baseVertex) override; void onDrawIndexed(int indexCount, int baseIndex, uint16_t minIndexValue, uint16_t maxIndexValue, int baseVertex) override; void onDrawInstanced(int instanceCount, int baseInstance, int vertexCount, int baseVertex) override; void onDrawIndexedInstanced(int indexCount, int baseIndex, int instanceCount, int baseInstance, int baseVertex) override; void onClear(const GrScissorState& scissor, std::array color) override; void onClearStencilClip(const GrScissorState& scissor, bool insideStencilMask) override; struct InlineUploadInfo { InlineUploadInfo(GrOpFlushState* state, const GrDeferredTextureUploadFn& upload) : fFlushState(state), fUpload(upload) {} GrOpFlushState* fFlushState; GrDeferredTextureUploadFn fUpload; }; GrDawnGpu* fGpu; wgpu::CommandEncoder fEncoder; wgpu::RenderPassEncoder fPassEncoder; sk_sp fCurrentProgram; LoadAndStoreInfo fColorInfo; using INHERITED = GrOpsRenderPass ; }; #endif