blob: 921cf9d8d8856eae48b14ff8d43a3c0e894edd22 [file] [log] [blame]
/*
* 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