| /* | 
 |  * 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<const GrBuffer> indexBuffer, sk_sp<const GrBuffer> instanceBuffer, | 
 |                        sk_sp<const GrBuffer> 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<float, 4> 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<GrDawnProgram>        fCurrentProgram; | 
 |     LoadAndStoreInfo            fColorInfo; | 
 |  | 
 |     using INHERITED = GrOpsRenderPass    ; | 
 | }; | 
 |  | 
 | #endif |