1 /* 2 * Copyright 2022 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 skgpu_graphite_render_TessellateWedgesRenderStep_DEFINED 9 #define skgpu_graphite_render_TessellateWedgesRenderStep_DEFINED 10 11 #include "src/base/SkVx.h" 12 #include "src/gpu/graphite/Renderer.h" 13 #include "src/gpu/graphite/ResourceTypes.h" 14 15 #include <string> 16 #include <string_view> 17 #include <utility> 18 19 namespace skgpu::graphite { 20 21 class DrawParams; 22 class DrawWriter; 23 class PipelineDataGatherer; 24 class StaticBufferManager; 25 struct DepthStencilSettings; 26 27 class TessellateWedgesRenderStep final : public RenderStep { 28 public: 29 // 'vertexBuffer' and 'indexBuffer' must have been returned by CreateVertexTemplate(), but they 30 // can be shared by all instances of TessellateWedgesRenderStep. 31 TessellateWedgesRenderStep(std::string_view variantName, 32 bool infinitySupport, 33 DepthStencilSettings depthStencilSettings, 34 StaticBufferManager* bufferManager); 35 36 ~TessellateWedgesRenderStep() override; 37 38 static std::pair<BindBufferInfo, BindBufferInfo> CreateVertexTemplate(StaticBufferManager*); 39 40 std::string vertexSkSL() const override; 41 void writeVertices(DrawWriter*, const DrawParams&, skvx::uint2 ssboIndices) const override; 42 void writeUniformsAndTextures(const DrawParams&, PipelineDataGatherer*) const override; 43 44 private: 45 // Points to the static buffers holding the fixed indexed vertex template for drawing instances. 46 BindBufferInfo fVertexBuffer; 47 BindBufferInfo fIndexBuffer; 48 bool fInfinitySupport; 49 }; 50 51 } // namespace skgpu::graphite 52 53 #endif // skgpu_graphite_render_TessellateWedgesRenderStep_DEFINED 54