• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2021 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_ContextUtils_DEFINED
9 #define skgpu_graphite_ContextUtils_DEFINED
10 
11 #include "src/gpu/graphite/PaintParamsKey.h"
12 #include "src/gpu/graphite/PipelineDataCache.h"
13 
14 class SkColorInfo;
15 class SkM44;
16 
17 namespace skgpu::graphite {
18 
19 class DrawParams;
20 class GraphicsPipelineDesc;
21 class PaintParams;
22 class PipelineDataGatherer;
23 class Recorder;
24 class RenderStep;
25 class RuntimeEffectDictionary;
26 class UniquePaintParamsID;
27 
28 struct ResourceBindingRequirements;
29 
30 struct FragSkSLInfo {
31     std::string fSkSL;
32     BlendInfo fBlendInfo;
33     bool fRequiresLocalCoords = false;
34     int fNumTexturesAndSamplers = 0;
35 };
36 
37 std::tuple<UniquePaintParamsID, const UniformDataBlock*, const TextureDataBlock*>
38 ExtractPaintData(Recorder*,
39                  PipelineDataGatherer* gatherer,
40                  PaintParamsKeyBuilder* builder,
41                  const Layout layout,
42                  const SkM44& local2Dev,
43                  const PaintParams&,
44                  const SkColorInfo& targetColorInfo);
45 
46 std::tuple<const UniformDataBlock*, const TextureDataBlock*> ExtractRenderStepData(
47         UniformDataCache* uniformDataCache,
48         TextureDataCache* textureDataCache,
49         PipelineDataGatherer* gatherer,
50         const Layout layout,
51         const RenderStep* step,
52         const DrawParams& params);
53 
54 std::string GetSkSLVS(const ResourceBindingRequirements&,
55                       const RenderStep* step,
56                       bool defineShadingSsboIndexVarying,
57                       bool defineLocalCoordsVarying);
58 
59 FragSkSLInfo GetSkSLFS(const ResourceBindingRequirements&,
60                        const ShaderCodeDictionary*,
61                        const RuntimeEffectDictionary*,
62                        const RenderStep* renderStep,
63                        UniquePaintParamsID paintID,
64                        bool useStorageBuffers);
65 
66 std::string EmitPaintParamsUniforms(int bufferID,
67                                     const char* name,
68                                     const Layout layout,
69                                     const std::vector<PaintParamsKey::BlockReader>&);
70 std::string EmitRenderStepUniforms(int bufferID,
71                                    const char* name,
72                                    const Layout layout,
73                                    SkSpan<const Uniform> uniforms);
74 std::string EmitPaintParamsStorageBuffer(int bufferID,
75                                          const char* bufferTypePrefix,
76                                          const char* bufferNamePrefix,
77                                          const std::vector<PaintParamsKey::BlockReader>& readers);
78 std::string EmitStorageBufferAccess(const char* bufferNamePrefix,
79                                     const char* ssboIndex,
80                                     const char* uniformName);
81 std::string EmitTexturesAndSamplers(const ResourceBindingRequirements&,
82                                     const std::vector<PaintParamsKey::BlockReader>&,
83                                     int* binding);
84 std::string EmitSamplerLayout(const ResourceBindingRequirements&, int* binding);
85 std::string EmitVaryings(const RenderStep* step,
86                          const char* direction,
87                          bool emitShadingSsboIndexVarying,
88                          bool emitLocalCoordsVarying);
89 
90 } // namespace skgpu::graphite
91 
92 #endif // skgpu_graphite_ContextUtils_DEFINED
93