66 int desiredCombination)
const override {
75 return sk_make_sp<PrecompileEmptyShader>();
81 bool isConstant(
int desiredCombination)
const override {
89 int desiredCombination)
const override {
99 return sk_make_sp<PrecompileColorShader>();
105 return sk_make_sp<PrecompileColorShader>();
114 bool needsPorterDuffBased,
115 bool needsSeparableMode)
116 : fRuntimeBlendEffects(runtimeBlendEffects.
begin(), runtimeBlendEffects.
end())
117 , fDstOptions(dsts.
begin(), dsts.
end())
120 fNumBlenderCombos = 0;
121 for (
const auto& rt : fRuntimeBlendEffects) {
122 fNumBlenderCombos += rt->priv().numCombinations();
124 if (needsPorterDuffBased) {
127 if (needsSeparableMode) {
134 for (
const auto&
d : fDstOptions) {
135 fNumDstCombos +=
d->priv().numCombinations();
139 for (
const auto&
s : fSrcOptions) {
140 fNumSrcCombos +=
s->priv().numCombinations();
143 if (needsPorterDuffBased) {
144 fPorterDuffIndex = 0;
145 if (needsSeparableMode) {
146 fSeparableModeIndex = 1;
147 if (!fRuntimeBlendEffects.empty()) {
150 }
else if (!fRuntimeBlendEffects.empty()) {
153 }
else if (needsSeparableMode) {
154 fSeparableModeIndex = 0;
155 if (!fRuntimeBlendEffects.empty()) {
159 SkASSERT(!fRuntimeBlendEffects.empty());
165 int numChildCombinations()
const override {
166 return fNumBlenderCombos * fNumDstCombos * fNumSrcCombos;
169 void addToKey(
const KeyContext& keyContext,
170 PaintParamsKeyBuilder*
builder,
171 PipelineDataGatherer* gatherer,
172 int desiredCombination)
const override {
175 const int desiredDstCombination = desiredCombination % fNumDstCombos;
176 int remainingCombinations = desiredCombination / fNumDstCombos;
178 const int desiredSrcCombination = remainingCombinations % fNumSrcCombos;
179 remainingCombinations /= fNumSrcCombos;
181 int desiredBlendCombination = remainingCombinations;
182 SkASSERT(desiredBlendCombination < fNumBlenderCombos);
184 if (desiredBlendCombination == fPorterDuffIndex ||
185 desiredBlendCombination == fSeparableModeIndex) {
194 SkASSERT(desiredBlendCombination >= fBlenderIndex);
195 desiredBlendCombination -= fBlenderIndex;
198 AddToKey<PrecompileShader>(keyContext,
builder, gatherer, fSrcOptions,
199 desiredSrcCombination);
200 AddToKey<PrecompileShader>(keyContext,
builder, gatherer, fDstOptions,
201 desiredDstCombination);
203 if (desiredBlendCombination == fPorterDuffIndex) {
205 { 0.0f, 0.0f, 0.0f, 0.0f });
206 }
else if (desiredBlendCombination == fSeparableModeIndex) {
210 AddToKey<PrecompileBlender>(keyContext,
builder, gatherer, fRuntimeBlendEffects,
211 desiredBlendCombination);
217 std::vector<sk_sp<PrecompileBlender>> fRuntimeBlendEffects;
218 std::vector<sk_sp<PrecompileShader>> fDstOptions;
219 std::vector<sk_sp<PrecompileShader>> fSrcOptions;
221 int fNumBlenderCombos;
225 int fPorterDuffIndex = -1;
226 int fSeparableModeIndex = -1;
227 int fBlenderIndex = -1;
234 std::vector<sk_sp<PrecompileBlender>> tmp;
235 tmp.reserve(blenders.size());
237 bool needsPorterDuffBased =
false;
238 bool needsBlendModeBased =
false;
240 for (
const auto&
b : blenders) {
242 needsPorterDuffBased =
true;
243 }
else if (
b->priv().asBlendMode().has_value()) {
248 needsPorterDuffBased =
true;
250 needsBlendModeBased =
true;
257 if (!needsPorterDuffBased && !needsBlendModeBased && tmp.empty()) {
258 needsPorterDuffBased =
true;
263 needsPorterDuffBased, needsBlendModeBased);
271 bool needsPorterDuffBased =
false;
272 bool needsBlendModeBased =
false;
276 if (!porterDuffConstants.
empty()) {
277 needsPorterDuffBased =
true;
279 needsBlendModeBased =
true;
283 if (!needsPorterDuffBased && !needsBlendModeBased) {
284 needsPorterDuffBased =
true;
289 needsPorterDuffBased, needsBlendModeBased);
296 : fShaders(shaders.
begin(), shaders.
end()) {
297 fNumShaderCombos = 0;
298 for (
const auto&
s : fShaders) {
299 fNumShaderCombos +=
s->priv().numCombinations();
304 int numChildCombinations()
const override {
305 return fNumShaderCombos;
308 void addToKey(
const KeyContext& keyContext,
309 PaintParamsKeyBuilder*
builder,
310 PipelineDataGatherer* gatherer,
311 int desiredCombination)
const override {
312 SkASSERT(desiredCombination < fNumShaderCombos);
314 constexpr SkRect kIgnored { 0, 0, 256, 256 };
317 CoordClampShaderBlock::CoordClampData
data(kIgnored);
320 AddToKey<PrecompileShader>(keyContext,
builder, gatherer, fShaders, desiredCombination);
324 std::vector<sk_sp<PrecompileShader>> fShaders;
325 int fNumShaderCombos;
329 return sk_make_sp<PrecompileCoordClampShader>(input);
341 inline static constexpr int kNumSamplingTilingCombos = 3;
342 inline static constexpr int kCubicSampled = 2;
343 inline static constexpr int kHWTiled = 1;
344 inline static constexpr int kShaderTiled = 0;
347 inline static constexpr int kNumAlphaCombinations = 2;
348 inline static constexpr int kAlphaOnly = 1;
349 inline static constexpr int kNonAlphaOnly = 0;
351 int numIntrinsicCombinations()
const override {
352 int numSamplingTilingCombos =
357 return numSamplingTilingCombos;
359 return numSamplingTilingCombos * kNumAlphaCombinations;
362 void addToKey(
const KeyContext& keyContext,
363 PaintParamsKeyBuilder*
builder,
364 PipelineDataGatherer* gatherer,
365 int desiredCombination)
const override {
366 SkASSERT(desiredCombination < this->numIntrinsicCombinations());
368 int desiredAlphaCombo, desiredSamplingTilingCombo;
371 desiredAlphaCombo = kNonAlphaOnly;
372 desiredSamplingTilingCombo = desiredCombination;
374 desiredAlphaCombo = desiredCombination % kNumAlphaCombinations;
375 desiredSamplingTilingCombo = desiredCombination / kNumAlphaCombinations;
379 SkASSERT(desiredSamplingTilingCombo < numSamplingTilingCombos);
392 ImageShaderBlock::ImageData imgData(
393 desiredSamplingTilingCombo == kCubicSampled ? kDefaultCubicSampling
396 desiredSamplingTilingCombo == kHWTiled ? kHWTileableSize : kShaderTileableSize,
397 kSubset, kIgnoredSwizzle);
399 if (desiredAlphaCombo == kAlphaOnly) {
440 { sk_make_sp<PrecompileImageShader>(
flags |
453 int desiredCombination)
const override {
467 return sk_make_sp<PrecompilePerlinNoiseShader>();
471 return sk_make_sp<PrecompilePerlinNoiseShader>();
483 inline static constexpr int kNumStopVariants = 3;
484 inline static constexpr int kStopVariants[kNumStopVariants] =
487 int numIntrinsicCombinations()
const override {
488 return kNumStopVariants;
491 void addToKey(
const KeyContext& keyContext,
492 PaintParamsKeyBuilder*
builder,
493 PipelineDataGatherer* gatherer,
494 int desiredCombination)
const override {
497 SkASSERT(intrinsicCombination < kNumStopVariants);
500 bool useStorageBuffer = keyContext.caps()->storageBufferSupport() &&
501 keyContext.caps()->storageBufferPreferred();
503 GradientShaderBlocks::GradientData gradData(fType,
504 kStopVariants[intrinsicCombination],
508 ColorSpaceTransformBlock::ColorSpaceTransformData csData(
sk_srgb_singleton(), kAlphaType,
531 sk_make_sp<PrecompileGradientShader>(SkShaderBase::GradientType::kRadial);
537 sk_make_sp<PrecompileGradientShader>(SkShaderBase::GradientType::kSweep);
543 sk_make_sp<PrecompileGradientShader>(SkShaderBase::GradientType::kConical);
574 kIncludeWithOutVariant,
581 fNumWrappedCombos = 0;
582 for (
const auto&
s : fWrapped) {
583 fNumWrappedCombos +=
s->priv().numCombinations();
594 int desiredWrappedCombination = desiredCombination / kNumIntrinsicCombinations;
595 SkASSERT(desiredWrappedCombination < fNumWrappedCombos);
597 std::pair<sk_sp<PrecompileShader>,
int>
wrapped =
608 inline static constexpr int kNumIntrinsicCombinations = 2;
609 inline static constexpr int kWithLocalMatrix = 1;
610 inline static constexpr int kWithoutLocalMatrix = 0;
612 bool isALocalMatrixShader()
const override {
return true; }
614 int numIntrinsicCombinations()
const override {
618 return kNumIntrinsicCombinations;
621 int numChildCombinations()
const override {
return fNumWrappedCombos; }
623 void addToKey(
const KeyContext& keyContext,
624 PaintParamsKeyBuilder*
builder,
625 PipelineDataGatherer* gatherer,
626 int desiredCombination)
const override {
629 int desiredLMCombination, desiredWrappedCombination;
632 desiredLMCombination = kWithLocalMatrix;
633 desiredWrappedCombination = desiredCombination;
635 desiredLMCombination = desiredCombination % kNumIntrinsicCombinations;
636 desiredWrappedCombination = desiredCombination / kNumIntrinsicCombinations;
638 SkASSERT(desiredWrappedCombination < fNumWrappedCombos);
640 if (desiredLMCombination == kWithLocalMatrix) {
641 LocalMatrixShaderBlock::LMShaderData kIgnoredLMShaderData(
SkMatrix::I());
646 AddToKey<PrecompileShader>(keyContext,
builder, gatherer, fWrapped,
647 desiredWrappedCombination);
649 if (desiredLMCombination == kWithLocalMatrix) {
654 std::vector<sk_sp<PrecompileShader>> fWrapped;
655 int fNumWrappedCombos;
661 return sk_make_sp<PrecompileLocalMatrixShader>(std::move(
wrapped));
666 return sk_make_sp<PrecompileLocalMatrixShader>(
676 : fShaders(shaders.
begin(), shaders.
end())
677 , fColorFilters(colorFilters.
begin(), colorFilters.
end()) {
678 fNumShaderCombos = 0;
679 for (
const auto&
s : fShaders) {
680 fNumShaderCombos +=
s->priv().numCombinations();
682 fNumColorFilterCombos = 0;
683 for (
const auto& cf : fColorFilters) {
684 fNumColorFilterCombos += cf->priv().numCombinations();
689 int numChildCombinations()
const override {
return fNumShaderCombos * fNumColorFilterCombos; }
691 void addToKey(
const KeyContext& keyContext,
692 PaintParamsKeyBuilder*
builder,
693 PipelineDataGatherer* gatherer,
694 int desiredCombination)
const override {
697 int desiredShaderCombination = desiredCombination % fNumShaderCombos;
698 int desiredColorFilterCombination = desiredCombination / fNumShaderCombos;
699 SkASSERT(desiredColorFilterCombination < fNumColorFilterCombos);
703 AddToKey<PrecompileShader>(keyContext,
builder, gatherer, fShaders,
704 desiredShaderCombination);
707 AddToKey<PrecompileColorFilter>(keyContext,
builder, gatherer, fColorFilters,
708 desiredColorFilterCombination);
712 std::vector<sk_sp<PrecompileShader>> fShaders;
713 std::vector<sk_sp<PrecompileColorFilter>> fColorFilters;
714 int fNumShaderCombos;
715 int fNumColorFilterCombos;
721 return sk_make_sp<PrecompileColorFilterShader>(std::move(shaders), std::move(colorFilters));
729 : fShaders(shaders.
begin(), shaders.
end())
730 , fColorSpaces(colorSpaces.
begin(), colorSpaces.
end()) {
731 fNumShaderCombos = 0;
732 for (
const auto&
s : fShaders) {
733 fNumShaderCombos +=
s->priv().numCombinations();
738 int numChildCombinations()
const override {
return fNumShaderCombos * fColorSpaces.size(); }
740 void addToKey(
const KeyContext& keyContext,
741 PaintParamsKeyBuilder*
builder,
742 PipelineDataGatherer* gatherer,
743 int desiredCombination)
const override {
746 int desiredShaderCombination = desiredCombination % fNumShaderCombos;
747 int desiredColorSpaceCombination = desiredCombination / fNumShaderCombos;
748 SkASSERT(desiredColorSpaceCombination < (
int) fColorSpaces.size());
750 const SkColorInfo& dstInfo = keyContext.dstColorInfo();
759 KeyContextWithColorInfo workingContext(keyContext, workingInfo);
763 AddToKey<PrecompileShader>(keyContext,
builder, gatherer, fShaders,
764 desiredShaderCombination);
767 ColorSpaceTransformBlock::ColorSpaceTransformData
data(
768 workingCS.
get(), dstAT, dstCS.
get(), dstAT);
773 std::vector<sk_sp<PrecompileShader>> fShaders;
774 std::vector<sk_sp<SkColorSpace>> fColorSpaces;
775 int fNumShaderCombos;
781 return sk_make_sp<PrecompileWorkingColorSpaceShader>(std::move(shaders),
782 std::move(colorSpaces));
791 fNumWrappedCombos = 0;
792 for (
const auto&
s : fWrapped) {
793 fNumWrappedCombos +=
s->priv().numCombinations();
798 SkASSERT(desiredCombination < fNumWrappedCombos);
800 std::pair<sk_sp<PrecompileShader>,
int>
wrapped =
810 int numChildCombinations()
const override {
return fNumWrappedCombos; }
812 void addToKey(
const KeyContext& keyContext,
813 PaintParamsKeyBuilder*
builder,
814 PipelineDataGatherer* gatherer,
815 int desiredCombination)
const override {
816 SkASSERT(desiredCombination < fNumWrappedCombos);
818 LocalMatrixShaderBlock::LMShaderData kIgnoredLMShaderData(
SkMatrix::I());
822 AddToKey<PrecompileShader>(keyContext,
builder, gatherer, fWrapped, desiredCombination);
827 std::vector<sk_sp<PrecompileShader>> fWrapped;
828 int fNumWrappedCombos;
832 return sk_make_sp<PrecompileCTMShader>(std::move(
wrapped));
840 fNumWrappedCombos = fWrapped->priv().numCombinations();
845 inline static constexpr int kNumIntrinsicCombinations = 12;
847 int numIntrinsicCombinations()
const override {
return kNumIntrinsicCombinations; }
849 int numChildCombinations()
const override {
return fNumWrappedCombos; }
851 void addToKey(
const KeyContext& keyContext,
852 PaintParamsKeyBuilder*
builder,
853 PipelineDataGatherer* gatherer,
854 int desiredCombination)
const override {
859 int desiredBlurCombination = desiredCombination % kNumIntrinsicCombinations;
860 int desiredWrappedCombination = desiredCombination / kNumIntrinsicCombinations;
861 SkASSERT(desiredWrappedCombination < fNumWrappedCombos);
863 static const StableKey kIDs[kNumIntrinsicCombinations] = {
864 StableKey::k1DBlur4, StableKey::k1DBlur8, StableKey::k1DBlur12,
865 StableKey::k1DBlur16, StableKey::k1DBlur20, StableKey::k1DBlur28,
867 StableKey::k2DBlur4, StableKey::k2DBlur8, StableKey::k2DBlur12,
868 StableKey::k2DBlur16, StableKey::k2DBlur20, StableKey::k2DBlur28,
876 fWrapped->priv().addToKey(childContext,
builder, gatherer, desiredWrappedCombination);
881 int fNumWrappedCombos;
885 return sk_make_sp<PrecompileBlurShader>(std::move(
wrapped));
893 fNumWrappedCombos = fWrapped->priv().numCombinations();
902 fNumRawImageShaderCombos = fRawImageShader->priv().numCombinations();
906 int numIntrinsicCombinations()
const override {
909 return 1 + 2 * fNumRawImageShaderCombos;
912 int numChildCombinations()
const override {
return fNumWrappedCombos; }
914 void addToKey(
const KeyContext& keyContext,
915 PaintParamsKeyBuilder*
builder,
916 PipelineDataGatherer* gatherer,
917 int desiredCombination)
const override {
919 int desiredTextureCombination = 0;
921 const int desiredWrappedCombination = desiredCombination % fNumWrappedCombos;
922 int remainingCombinations = desiredCombination / fNumWrappedCombos;
925 if (remainingCombinations == 0) {
926 stableKey = SkKnownRuntimeEffects::StableKey::kMatrixConvUniforms;
929 SkKnownRuntimeEffects::StableKey::kMatrixConvTexSm,
930 SkKnownRuntimeEffects::StableKey::kMatrixConvTexLg,
933 --remainingCombinations;
934 stableKey = kTextureBasedStableKeys[remainingCombinations % 2];
935 desiredTextureCombination = remainingCombinations / 2;
936 SkASSERT(desiredTextureCombination < fNumRawImageShaderCombos);
944 fWrapped->priv().addToKey(childContext,
builder, gatherer, desiredWrappedCombination);
945 if (stableKey != SkKnownRuntimeEffects::StableKey::kMatrixConvUniforms) {
946 fRawImageShader->priv().addToKey(childContext,
builder, gatherer,
947 desiredTextureCombination);
953 int fNumWrappedCombos;
955 int fNumRawImageShaderCombos;
960 return sk_make_sp<PrecompileMatrixConvolutionShader>(std::move(
wrapped));
969 , fStableKey(stableKey) {
970 fNumWrappedCombos = fWrapped->priv().numCombinations();
971 SkASSERT(stableKey == SkKnownRuntimeEffects::StableKey::kLinearMorphology ||
972 stableKey == SkKnownRuntimeEffects::StableKey::kSparseMorphology);
976 int numChildCombinations()
const override {
return fNumWrappedCombos; }
978 void addToKey(
const KeyContext& keyContext,
979 PaintParamsKeyBuilder*
builder,
980 PipelineDataGatherer* gatherer,
981 int desiredCombination)
const override {
982 SkASSERT(desiredCombination < fNumWrappedCombos);
989 fWrapped->priv().addToKey(childContext,
builder, gatherer, desiredCombination);
994 int fNumWrappedCombos;
999 return sk_make_sp<PrecompileMorphologyShader>(
1001 SkKnownRuntimeEffects::StableKey::kLinearMorphology);
1005 return sk_make_sp<PrecompileMorphologyShader>(
1007 SkKnownRuntimeEffects::StableKey::kSparseMorphology);
1015 : fDisplacement(
std::move(displacement))
1017 fNumDisplacementCombos = fDisplacement->priv().numCombinations();
1018 fNumColorCombos = fColor->priv().numCombinations();
1022 int numChildCombinations()
const override {
return fNumDisplacementCombos * fNumColorCombos; }
1024 void addToKey(
const KeyContext& keyContext,
1025 PaintParamsKeyBuilder*
builder,
1026 PipelineDataGatherer* gatherer,
1027 int desiredCombination)
const override {
1028 SkASSERT(desiredCombination < this->numChildCombinations());
1030 const int desiredDisplacementCombination = desiredCombination % fNumDisplacementCombos;
1031 const int desiredColorCombination = desiredCombination / fNumDisplacementCombos;
1032 SkASSERT(desiredColorCombination < fNumColorCombos);
1040 fDisplacement->priv().addToKey(childContext,
builder, gatherer,
1041 desiredDisplacementCombination);
1042 fColor->priv().addToKey(childContext,
builder, gatherer,
1043 desiredColorCombination);
1048 int fNumDisplacementCombos;
1050 int fNumColorCombos;
1056 return sk_make_sp<PrecompileDisplacementShader>(std::move(displacement), std::move(
color));
1064 fNumWrappedCombos = fWrapped->priv().numCombinations();
1068 int numChildCombinations()
const override {
return fNumWrappedCombos; }
1070 void addToKey(
const KeyContext& keyContext,
1071 PaintParamsKeyBuilder*
builder,
1072 PipelineDataGatherer* gatherer,
1073 int desiredCombination)
const override {
1074 SkASSERT(desiredCombination < fNumWrappedCombos);
1087 fWrapped->priv().addToKey(childContext,
builder, gatherer, desiredCombination);
1093 int fNumWrappedCombos;
1097 return sk_make_sp<PrecompileLightingShader>(std::move(
wrapped));
static const char * srcs[2]
@ kPremul_SkAlphaType
pixel components are premultiplied by alpha
@ kOverlay
multiply or screen, depending on destination
constexpr SkPMColor4f SK_PMColor4fWHITE
SkColorSpace * sk_srgb_singleton()
sk_sp< T > sk_ref_sp(T *obj)
SkSpan(Container &&) -> SkSpan< std::remove_pointer_t< decltype(std::data(std::declval< Container >()))> >
SkDEBUGCODE(SK_SPI) SkThreadID SkGetThreadID()
static sk_sp< GrTextureProxy > wrapped(skiatest::Reporter *reporter, GrRecordingContext *rContext, GrProxyProvider *proxyProvider, SkBackingFit fit)
GrSurfaceProxyPriv priv()
SkAlphaType alphaType() const
sk_sp< SkColorSpace > refColorSpace() const
SkColorType colorType() const
static sk_sp< SkColorSpace > MakeSRGB()
static const SkMatrix & I()
constexpr bool empty() const
int numCombinations() const
virtual int numChildCombinations() const
static std::pair< sk_sp< T >, int > SelectOption(SkSpan< const sk_sp< T > > options, int desiredOption)
PrecompileBlendShader(SkSpan< const sk_sp< PrecompileBlender > > runtimeBlendEffects, SkSpan< const sk_sp< PrecompileShader > > dsts, SkSpan< const sk_sp< PrecompileShader > > srcs, bool needsPorterDuffBased, bool needsSeparableMode)
PrecompileBlurShader(sk_sp< PrecompileShader > wrapped)
bool isConstant(int desiredCombination) const override
PrecompileCTMShader(SkSpan< const sk_sp< PrecompileShader > > wrapped)
PrecompileColorFilterShader(SkSpan< const sk_sp< PrecompileShader > > shaders, SkSpan< const sk_sp< PrecompileColorFilter > > colorFilters)
PrecompileCoordClampShader(SkSpan< const sk_sp< PrecompileShader > > shaders)
PrecompileDisplacementShader(sk_sp< PrecompileShader > displacement, sk_sp< PrecompileShader > color)
PrecompileGradientShader(SkShaderBase::GradientType type)
PrecompileImageShader(SkEnumBitMask< PrecompileImageShaderFlags > flags)
PrecompileLightingShader(sk_sp< PrecompileShader > wrapped)
PrecompileLocalMatrixShader(SkSpan< const sk_sp< PrecompileShader > > wrapped, Flags flags=Flags::kNone)
bool isConstant(int desiredCombination) const override
PrecompileMatrixConvolutionShader(sk_sp< PrecompileShader > wrapped)
PrecompileMorphologyShader(sk_sp< PrecompileShader > wrapped, SkKnownRuntimeEffects::StableKey stableKey)
PrecompilePerlinNoiseShader()
~PrecompileShader() override
virtual bool isALocalMatrixShader() const
sk_sp< PrecompileShader > makeWithColorFilter(sk_sp< PrecompileColorFilter >)
sk_sp< PrecompileShader > makeWithWorkingColorSpace(sk_sp< SkColorSpace >)
PrecompileShaderPriv priv()
sk_sp< PrecompileShader > makeWithLocalMatrix()
PrecompileWorkingColorSpaceShader(SkSpan< const sk_sp< PrecompileShader > > shaders, SkSpan< const sk_sp< SkColorSpace > > colorSpaces)
static const char * begin(const StringSlice &s)
@ kNormal
Default priority level.
VULKAN_HPP_DEFAULT_DISPATCH_LOADER_DYNAMIC_STORAGE auto & d
FlutterSemanticsFlag flags
const SkRuntimeEffect * GetKnownRuntimeEffect(StableKey stableKey)
static constexpr skcms_TransferFunction kLinear
sk_sp< PrecompileShader > Lighting(sk_sp< PrecompileShader > wrapped)
sk_sp< PrecompileShader > Image(SkEnumBitMask< PrecompileImageShaderFlags >)
sk_sp< PrecompileShader > CTM(SkSpan< const sk_sp< PrecompileShader > > wrapped)
sk_sp< PrecompileShader > LocalMatrixBothVariants(SkSpan< const sk_sp< PrecompileShader > > wrapped)
sk_sp< PrecompileShader > Displacement(sk_sp< PrecompileShader > displacement, sk_sp< PrecompileShader > color)
sk_sp< PrecompileShader > LinearMorphology(sk_sp< PrecompileShader > wrapped)
sk_sp< PrecompileShader > Picture(bool withLM)
sk_sp< PrecompileShader > RawImage(SkEnumBitMask< PrecompileImageShaderFlags >)
sk_sp< PrecompileShader > MatrixConvolution(sk_sp< PrecompileShader > wrapped)
sk_sp< PrecompileShader > SparseMorphology(sk_sp< PrecompileShader > wrapped)
sk_sp< PrecompileShader > Blur(sk_sp< PrecompileShader > wrapped)
SK_API sk_sp< PrecompileShader > ColorFilter(SkSpan< const sk_sp< PrecompileShader > > shaders, SkSpan< const sk_sp< PrecompileColorFilter > > colorFilters)
SK_API sk_sp< PrecompileShader > LocalMatrix(SkSpan< const sk_sp< PrecompileShader > > wrapped)
SK_API sk_sp< PrecompileShader > WorkingColorSpace(SkSpan< const sk_sp< PrecompileShader > > shaders, SkSpan< const sk_sp< SkColorSpace > > colorSpaces)
SK_API sk_sp< PrecompileShader > LinearGradient()
SK_API sk_sp< PrecompileShader > RadialGradient()
SK_API sk_sp< PrecompileShader > Picture()
SK_API sk_sp< PrecompileShader > CoordClamp(SkSpan< const sk_sp< PrecompileShader > >)
SK_API sk_sp< PrecompileShader > MakeTurbulence()
SK_API sk_sp< PrecompileShader > Image()
SK_API sk_sp< PrecompileShader > Empty()
SK_API sk_sp< PrecompileShader > Blend(SkSpan< const SkBlendMode > blendModes, SkSpan< const sk_sp< PrecompileShader > > dsts, SkSpan< const sk_sp< PrecompileShader > > srcs)
SK_API sk_sp< PrecompileShader > MakeFractalNoise()
SK_API sk_sp< PrecompileShader > SweepGradient()
SK_API sk_sp< PrecompileShader > RawImage()
SK_API sk_sp< PrecompileShader > Color()
SK_API sk_sp< PrecompileShader > TwoPointConicalGradient()
void AddKnownModeBlend(const KeyContext &keyContext, PaintParamsKeyBuilder *builder, PipelineDataGatherer *gatherer, SkBlendMode bm)
void Compose(const KeyContext &keyContext, PaintParamsKeyBuilder *keyBuilder, PipelineDataGatherer *gatherer, AddToKeyFn addInnerToKey, AddToKeyFn addOuterToKey)
void Blend(const KeyContext &keyContext, PaintParamsKeyBuilder *keyBuilder, PipelineDataGatherer *gatherer, AddToKeyFn addBlendToKey, AddToKeyFn addSrcToKey, AddToKeyFn addDstToKey)
SkSpan< const float > GetPorterDuffBlendConstants(SkBlendMode mode)
static constexpr SkCubicResampler Mitchell()
static constexpr SkISize Make(int32_t w, int32_t h)
static constexpr SkRect MakeWH(float w, float h)
static void AddBlock(const KeyContext &, PaintParamsKeyBuilder *, PipelineDataGatherer *, SkBlendMode)
static void BeginBlock(const KeyContext &, PaintParamsKeyBuilder *, PipelineDataGatherer *)
static void AddBlock(const KeyContext &, PaintParamsKeyBuilder *, PipelineDataGatherer *, SkSpan< const float > coeffs)
static void BeginBlock(const KeyContext &, PaintParamsKeyBuilder *, PipelineDataGatherer *, const CoordClampData &)
static constexpr int kNumInternalStorageStops
static void AddBlock(const KeyContext &, PaintParamsKeyBuilder *, PipelineDataGatherer *, const GradientData &)
static void AddBlock(const KeyContext &, PaintParamsKeyBuilder *, PipelineDataGatherer *, const ImageData &)
static void BeginBlock(const KeyContext &, PaintParamsKeyBuilder *, PipelineDataGatherer *, const LMShaderData &)
static void AddBlock(const KeyContext &, PaintParamsKeyBuilder *, PipelineDataGatherer *, const PerlinNoiseData &)
static void AddBlock(const KeyContext &, PaintParamsKeyBuilder *, PipelineDataGatherer *)
static void BeginBlock(const KeyContext &, PaintParamsKeyBuilder *, PipelineDataGatherer *, const ShaderData &)
static void AddBlock(const KeyContext &, PaintParamsKeyBuilder *, PipelineDataGatherer *, const SkPMColor4f &)
std::shared_ptr< const fml::Mapping > data