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