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 #include "src/gpu/graphite/Renderer.h"
9
10 namespace skgpu::graphite {
11
RenderStep(RenderStepID renderStepID,SkEnumBitMask<Flags> flags,std::initializer_list<Uniform> uniforms,PrimitiveType primitiveType,DepthStencilSettings depthStencilSettings,SkSpan<const Attribute> vertexAttrs,SkSpan<const Attribute> instanceAttrs,SkSpan<const Varying> varyings)12 RenderStep::RenderStep(RenderStepID renderStepID,
13 SkEnumBitMask<Flags> flags,
14 std::initializer_list<Uniform> uniforms,
15 PrimitiveType primitiveType,
16 DepthStencilSettings depthStencilSettings,
17 SkSpan<const Attribute> vertexAttrs,
18 SkSpan<const Attribute> instanceAttrs,
19 SkSpan<const Varying> varyings)
20 : fRenderStepID(renderStepID)
21 , fFlags(flags)
22 , fPrimitiveType(primitiveType)
23 , fDepthStencilSettings(depthStencilSettings)
24 , fUniforms(uniforms)
25 , fVertexAttrs(vertexAttrs.begin(), vertexAttrs.end())
26 , fInstanceAttrs(instanceAttrs.begin(), instanceAttrs.end())
27 , fVaryings(varyings.begin(), varyings.end())
28 , fVertexStride(0)
29 , fInstanceStride(0) {
30 for (auto v : this->vertexAttributes()) {
31 fVertexStride += v.sizeAlign4();
32 }
33 for (auto i : this->instanceAttributes()) {
34 fInstanceStride += i.sizeAlign4();
35 }
36 }
37
GetCoverage(SkEnumBitMask<Flags> flags)38 Coverage RenderStep::GetCoverage(SkEnumBitMask<Flags> flags) {
39 return !(flags & Flags::kEmitsCoverage) ? Coverage::kNone
40 : (flags & Flags::kLCDCoverage) ? Coverage::kLCD
41 : Coverage::kSingleChannel;
42 }
43
RenderStepName(RenderStepID id)44 const char* RenderStep::RenderStepName(RenderStepID id) {
45 #define CASE1(BaseName) case RenderStepID::k##BaseName: return #BaseName "RenderStep";
46 #define CASE2(BaseName, VariantName) \
47 case RenderStepID::k##BaseName##_##VariantName: return #BaseName "RenderStep[" #VariantName "]";
48
49 switch (id) {
50 SKGPU_RENDERSTEP_TYPES(CASE1, CASE2)
51 }
52 #undef CASE1
53 #undef CASE2
54
55 SkUNREACHABLE;
56 }
57
IsValidRenderStepID(uint32_t renderStepID)58 bool RenderStep::IsValidRenderStepID(uint32_t renderStepID) {
59 return renderStepID > (int) RenderStep::RenderStepID::kInvalid &&
60 renderStepID < RenderStep::kNumRenderSteps;
61 }
62
63 } // namespace skgpu::graphite
64