• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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