• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2020 Google LLC
3  *
4  * Use of this source code is governed by a BSD-style license that can be
5  * found in the LICENSE file.
6  */
7 
8 #ifndef GrD3DOpsRenderPass_DEFINED
9 #define GrD3DOpsRenderPass_DEFINED
10 
11 #include "src/gpu/GrOpsRenderPass.h"
12 
13 #include "include/gpu/GrTypes.h"
14 #include "include/private/GrTypesPriv.h"
15 
16 class GrD3DGpu;
17 class GrD3DPipelineState;
18 
19 class GrD3DOpsRenderPass : public GrOpsRenderPass {
20 public:
21     GrD3DOpsRenderPass(GrD3DGpu*);
22 
23     ~GrD3DOpsRenderPass() override;
24 
25     void inlineUpload(GrOpFlushState* state, GrDeferredTextureUploadFn& upload) override;
26 
onExecuteDrawable(std::unique_ptr<SkDrawable::GpuDrawHandler>)27     void onExecuteDrawable(std::unique_ptr<SkDrawable::GpuDrawHandler>) override {}
28 
29     bool set(GrRenderTarget*, GrSurfaceOrigin, const SkIRect& bounds,
30         const GrOpsRenderPass::LoadAndStoreInfo&,
31         const GrOpsRenderPass::StencilLoadAndStoreInfo&,
32         const SkTArray<GrSurfaceProxy*, true>& sampledProxies);
33 
34     void submit();
35 
36 private:
37     GrGpu* gpu() override;
38 
39     void onBegin() override;
40 
41     bool onBindPipeline(const GrProgramInfo&, const SkRect& drawBounds) override;
42     void onSetScissorRect(const SkIRect&) override;
43     bool onBindTextures(const GrGeometryProcessor&,
44                         const GrSurfaceProxy* const geomProcTextures[],
45                         const GrPipeline&) override;
46     void onBindBuffers(sk_sp<const GrBuffer> indexBuffer, sk_sp<const GrBuffer> instanceBuffer,
47                        sk_sp<const GrBuffer> vertexBuffer, GrPrimitiveRestart) override;
onDraw(int vertexCount,int baseVertex)48     void onDraw(int vertexCount, int baseVertex) override {
49         this->onDrawInstanced(1, 0, vertexCount, baseVertex);
50     }
onDrawIndexed(int indexCount,int baseIndex,uint16_t minIndexValue,uint16_t maxIndexValue,int baseVertex)51     void onDrawIndexed(int indexCount, int baseIndex, uint16_t minIndexValue,
52                        uint16_t maxIndexValue, int baseVertex) override {
53         this->onDrawIndexedInstanced(indexCount, baseIndex, 1, 0, baseVertex);
54     }
55     void onDrawInstanced(int instanceCount, int baseInstance, int vertexCount,
56                          int baseVertex) override;
57     void onDrawIndexedInstanced(int indexCount, int baseIndex, int instanceCount, int baseInstance,
58                                 int baseVertex) override;
59     void onDrawIndirect(const GrBuffer*, size_t offset, int drawCount) override;
60     void onDrawIndexedIndirect(const GrBuffer*, size_t offset, int drawCount) override;
61 
62     void onClear(const GrScissorState& scissor, std::array<float, 4> color) override;
63 
64     void onClearStencilClip(const GrScissorState& scissor, bool insideStencilMask) override;
65 
66     GrD3DGpu* fGpu;
67 
68     GrD3DPipelineState* fCurrentPipelineState = nullptr;
69 
70     SkIRect fBounds;
71     SkIRect fCurrentPipelineBounds;
72 
73     GrLoadOp fColorLoadOp;
74     std::array<float, 4> fClearColor;
75     GrLoadOp fStencilLoadOp;
76 
77     using INHERITED = GrOpsRenderPass;
78 };
79 
80 #endif
81