/* * Copyright 2021 Google LLC * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #ifndef skgpu_graphite_ContextUtils_DEFINED #define skgpu_graphite_ContextUtils_DEFINED #include "src/gpu/graphite/PaintParamsKey.h" #include "src/gpu/graphite/PipelineDataCache.h" class SkColorInfo; class SkM44; namespace skgpu::graphite { class DrawParams; class GraphicsPipelineDesc; class PaintParams; class PipelineDataGatherer; class Recorder; class RenderStep; class RuntimeEffectDictionary; class UniquePaintParamsID; struct ResourceBindingRequirements; struct FragSkSLInfo { std::string fSkSL; BlendInfo fBlendInfo; bool fRequiresLocalCoords = false; int fNumTexturesAndSamplers = 0; }; std::tuple ExtractPaintData(Recorder*, PipelineDataGatherer* gatherer, PaintParamsKeyBuilder* builder, const Layout layout, const SkM44& local2Dev, const PaintParams&, const SkColorInfo& targetColorInfo); std::tuple ExtractRenderStepData( UniformDataCache* uniformDataCache, TextureDataCache* textureDataCache, PipelineDataGatherer* gatherer, const Layout layout, const RenderStep* step, const DrawParams& params); std::string GetSkSLVS(const ResourceBindingRequirements&, const RenderStep* step, bool defineShadingSsboIndexVarying, bool defineLocalCoordsVarying); FragSkSLInfo GetSkSLFS(const ResourceBindingRequirements&, const ShaderCodeDictionary*, const RuntimeEffectDictionary*, const RenderStep* renderStep, UniquePaintParamsID paintID, bool useStorageBuffers); std::string EmitPaintParamsUniforms(int bufferID, const char* name, const Layout layout, const std::vector&); std::string EmitRenderStepUniforms(int bufferID, const char* name, const Layout layout, SkSpan uniforms); std::string EmitPaintParamsStorageBuffer(int bufferID, const char* bufferTypePrefix, const char* bufferNamePrefix, const std::vector& readers); std::string EmitStorageBufferAccess(const char* bufferNamePrefix, const char* ssboIndex, const char* uniformName); std::string EmitTexturesAndSamplers(const ResourceBindingRequirements&, const std::vector&, int* binding); std::string EmitSamplerLayout(const ResourceBindingRequirements&, int* binding); std::string EmitVaryings(const RenderStep* step, const char* direction, bool emitShadingSsboIndexVarying, bool emitLocalCoordsVarying); } // namespace skgpu::graphite #endif // skgpu_graphite_ContextUtils_DEFINED