8#ifndef skgpu_graphite_Precompile_DEFINED
9#define skgpu_graphite_Precompile_DEFINED
27class PipelineDataGatherer;
28class PrecompileBasePriv;
29class UniquePaintParamsID;
35 const KeyContext& keyContext,
37 bool withPrimitiveBlender,
91 int desiredCombination)
const = 0;
102 if (desiredOption < (option ? option->numCombinations() : 1)) {
103 return { option, desiredOption };
105 desiredOption -= option ? option->numCombinations() : 1;
107 return {
nullptr, 0 };
118 option->priv().addToKey(keyContext, builder, gatherer, childOptions);
129 virtual bool isConstant(
int desiredCombination)
const {
return false; }
156 virtual std::optional<SkBlendMode>
asBlendMode()
const {
return {}; }
168class PaintOptionsPriv;
173 fShaderOptions.assign(shaders.begin(), shaders.end());
177 fMaskFilterOptions.assign(maskFilters.begin(), maskFilters.end());
181 fColorFilterOptions.assign(colorFilters.begin(), colorFilters.end());
193 if (
b->asBlendMode().has_value()) {
194 fBlendModeOptions.
push_back(
b->asBlendMode().value());
196 fBlenderOptions.push_back(
b);
207 bool withPrimitiveBlender,
217 int numShaderCombinations()
const;
218 int numMaskFilterCombinations()
const;
219 int numColorFilterCombinations()
const;
221 int numBlendModeCombinations()
const;
222 int numClipShaderCombinations()
const;
224 int numCombinations()
const;
229 int desiredCombination,
230 bool addPrimitiveBlender,
233 void buildCombinations(
237 bool addPrimitiveBlender,
241 std::vector<sk_sp<PrecompileShader>> fShaderOptions;
242 std::vector<sk_sp<PrecompileMaskFilter>> fMaskFilterOptions;
243 std::vector<sk_sp<PrecompileColorFilter>> fColorFilterOptions;
247 std::vector<sk_sp<PrecompileShader>> fClipShaderOptions;
248 bool fDither =
false;
#define SK_MAKE_BITMASK_OPS(E)
constexpr T * data() const
constexpr size_t size() const
void push_back(const T &v)
void setColorFilters(SkSpan< const sk_sp< PrecompileColorFilter > > colorFilters)
void setImageFilters(SkEnumBitMask< PrecompileImageFilters > options)
void setDither(bool dither)
void setShaders(SkSpan< const sk_sp< PrecompileShader > > shaders)
void setBlendModes(SkSpan< SkBlendMode > blendModes)
std::function< void(UniquePaintParamsID id, DrawTypeFlags, bool withPrimitiveBlender, Coverage)> ProcessCombination
void setMaskFilters(SkSpan< const sk_sp< PrecompileMaskFilter > > maskFilters)
void setClipShaders(SkSpan< const sk_sp< PrecompileShader > > clipShaders)
void setBlenders(SkSpan< const sk_sp< PrecompileBlender > > blenders)
static void AddToKey(const KeyContext &, PaintParamsKeyBuilder *, PipelineDataGatherer *, SkSpan< const sk_sp< T > > options, int desiredOption)
virtual bool isALocalMatrixShader() const
int numCombinations() const
virtual int numChildCombinations() const
PrecompileBasePriv priv()
virtual int numIntrinsicCombinations() const
virtual void addToKey(const KeyContext &, PaintParamsKeyBuilder *, PipelineDataGatherer *, int desiredCombination) const =0
PrecompileBase(Type type)
static std::pair< sk_sp< T >, int > SelectOption(SkSpan< const sk_sp< T > > options, int desiredOption)
virtual std::optional< SkBlendMode > asBlendMode() const
sk_sp< PrecompileColorFilter > makeComposed(sk_sp< PrecompileColorFilter > inner) const
sk_sp< PrecompileShader > makeWithColorFilter(sk_sp< PrecompileColorFilter >)
sk_sp< PrecompileShader > makeWithWorkingColorSpace(sk_sp< SkColorSpace >)
sk_sp< PrecompileShader > makeWithCTM()
virtual bool isConstant(int desiredCombination) const
sk_sp< PrecompileShader > makeWithLocalMatrix()
void PrecompileCombinations(Context *context, const PaintOptions &options, const KeyContext &keyContext, DrawTypeFlags drawTypes, bool withPrimitiveBlender, Coverage coverage)