8#ifndef skgpu_graphite_ShaderCodeDictionary_DEFINED
9#define skgpu_graphite_ShaderCodeDictionary_DEFINED
46class RuntimeEffectDictionary;
53 const char*
name()
const {
return fName; }
92 const char* functionName,
140 , fRequiredFlags(snippet->fSnippetRequirementFlags) {
187 return fRuntimeEffectDictionary;
193 std::string toSkSL(
const Caps* caps,
195 bool useStorageBuffers,
196 int* numTexturesAndSamplersUsed,
197 int* numPaintUniforms,
198 int* renderStepUniformTotalBytes,
199 int* paintUniformsTotalBytes,
206 const RuntimeEffectDictionary* fRuntimeEffectDictionary;
207 const char* fSsboIndex;
239 return fBuiltInCodeSnippets[(
int)
id].fSnippetRequirementFlags;
243 bool isValidID(
int snippetID)
const SK_EXCLUDES(fSpinLock);
249 return this->
getEntry(SkTo<int>(codeSnippetID));
254#if defined(GRAPHITE_TEST_UTILS)
259 const char* addTextToArena(std::string_view
text);
263 std::array<ShaderSnippet, kBuiltInCodeSnippetIDCount> fBuiltInCodeSnippets;
265 using KnownRuntimeEffectArray = std::array<ShaderSnippet, SkKnownRuntimeEffects::kStableKeyCnt>;
266 KnownRuntimeEffectArray fKnownRuntimeEffectCodeSnippets
SK_GUARDED_BY(fSpinLock);
271 RuntimeEffectArray fUserDefinedCodeSnippets
SK_GUARDED_BY(fSpinLock);
274 mutable SkSpinlock fSpinLock;
284 struct RuntimeEffectKey {
286 uint32_t fUniformSize;
288 bool operator==(RuntimeEffectKey rhs)
const {
289 return fHash == rhs.fHash && fUniformSize == rhs.fUniformSize;
static int step(int x, SkScalar min, SkScalar max)
#define SK_MAKE_BITMASK_OPS(E)
#define SK_BEGIN_REQUIRE_DENSE
#define SK_END_REQUIRE_DENSE
static constexpr bool SkToBool(const T &x)
Type::kYUV Type::kRGBA() int(0.7 *637)
SkString toString(const ShaderCodeDictionary *dict) const
PaintParamsKey lookup(UniquePaintParamsID) const SK_EXCLUDES(fSpinLock)
SkEnumBitMask< SnippetRequirementFlags > getSnippetRequirementFlags(BuiltInCodeSnippetID id) const
UniquePaintParamsID findOrCreate(PaintParamsKeyBuilder *) SK_EXCLUDES(fSpinLock)
const ShaderSnippet * getEntry(BuiltInCodeSnippetID codeSnippetID) const SK_EXCLUDES(fSpinLock)
int findOrCreateRuntimeEffectSnippet(const SkRuntimeEffect *effect)
SkSpan< const Uniform > getUniforms(BuiltInCodeSnippetID) const
const ShaderSnippet * getEntry(int codeSnippetID) const SK_EXCLUDES(fSpinLock)
SkString idToString(UniquePaintParamsID id) const
const char * ssboIndex() const
bool needsLocalCoords() const
ShaderInfo(UniquePaintParamsID id, const ShaderCodeDictionary *dict, const RuntimeEffectDictionary *rteDict, const char *ssboIndex)
const skgpu::BlendInfo & blendInfo() const
bool needsSurfaceColor() const
const RuntimeEffectDictionary * runtimeEffectDictionary() const
const ShaderNode * child(int childIndex) const
const ShaderSnippet * entry() const
ShaderNode(const ShaderSnippet *snippet, SkSpan< const ShaderNode * > children, int codeID, int keyIndex)
SkSpan< const ShaderNode * > children() const
SkEnumBitMask< SnippetRequirementFlags > requiredFlags() const
int32_t codeSnippetId() const
const char * name() const
constexpr TextureAndSampler(const char *name)
G_BEGIN_DECLS G_MODULE_EXPORT FlValue * args
std::string fPriorStageOutput
std::string fBlenderDstColor
std::string(*)(const ShaderInfo &shaderInfo, const ShaderNode *) GeneratePreambleForSnippetFn
const char * fStaticFunctionName
SkEnumBitMask< SnippetRequirementFlags > fSnippetRequirementFlags
GeneratePreambleForSnippetFn fPreambleGenerator
SkSpan< const Uniform > fUniforms
bool needsPriorStageOutput() const
bool needsBlenderDstColor() const
bool needsLocalCoords() const
std::string(*)(const ShaderInfo &shaderInfo, const ShaderNode *, const Args &args) GenerateExpressionForSnippetFn
GenerateExpressionForSnippetFn fExpressionGenerator
SkSpan< const TextureAndSampler > fTexturesAndSamplers
ShaderSnippet(const char *name, SkSpan< const Uniform > uniforms, SkEnumBitMask< SnippetRequirementFlags > snippetRequirementFlags, SkSpan< const TextureAndSampler > texturesAndSamplers, const char *functionName, GenerateExpressionForSnippetFn expressionGenerator, GeneratePreambleForSnippetFn preambleGenerator, int numChildren)