blob: 2b511d86fa670be3287543a648ccc95a88b3c0b2 [file] [log] [blame]
/*
* 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<UniquePaintParamsID, const UniformDataBlock*, const TextureDataBlock*>
ExtractPaintData(Recorder*,
PipelineDataGatherer* gatherer,
PaintParamsKeyBuilder* builder,
const Layout layout,
const SkM44& local2Dev,
const PaintParams&,
const SkColorInfo& targetColorInfo);
std::tuple<const UniformDataBlock*, const TextureDataBlock*> 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<PaintParamsKey::BlockReader>&);
std::string EmitRenderStepUniforms(int bufferID,
const char* name,
const Layout layout,
SkSpan<const Uniform> uniforms);
std::string EmitPaintParamsStorageBuffer(int bufferID,
const char* bufferTypePrefix,
const char* bufferNamePrefix,
const std::vector<PaintParamsKey::BlockReader>& readers);
std::string EmitStorageBufferAccess(const char* bufferNamePrefix,
const char* ssboIndex,
const char* uniformName);
std::string EmitTexturesAndSamplers(const ResourceBindingRequirements&,
const std::vector<PaintParamsKey::BlockReader>&,
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