| /* |
| * 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 |