SkSL 'key' variables can now be controlled by 'when' expressions
Bug: skia:8880
Change-Id: I075ef57035b37250196d85bc6767eb877e445aa2
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/206698
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
diff --git a/src/gpu/gradients/GrClampedGradientEffect.cpp b/src/gpu/gradients/GrClampedGradientEffect.cpp
index 034ee1d..c0718ec 100644
--- a/src/gpu/gradients/GrClampedGradientEffect.cpp
+++ b/src/gpu/gradients/GrClampedGradientEffect.cpp
@@ -22,35 +22,35 @@
GrGLSLFPFragmentBuilder* fragBuilder = args.fFragBuilder;
const GrClampedGradientEffect& _outer = args.fFp.cast<GrClampedGradientEffect>();
(void)_outer;
- auto leftBorderColor = _outer.leftBorderColor();
+ auto leftBorderColor = _outer.leftBorderColor;
(void)leftBorderColor;
- auto rightBorderColor = _outer.rightBorderColor();
+ auto rightBorderColor = _outer.rightBorderColor;
(void)rightBorderColor;
- auto makePremul = _outer.makePremul();
+ auto makePremul = _outer.makePremul;
(void)makePremul;
- auto colorsAreOpaque = _outer.colorsAreOpaque();
+ auto colorsAreOpaque = _outer.colorsAreOpaque;
(void)colorsAreOpaque;
- fLeftBorderColorVar = args.fUniformHandler->addUniform(kFragment_GrShaderFlag,
- kHalf4_GrSLType, "leftBorderColor");
- fRightBorderColorVar = args.fUniformHandler->addUniform(
- kFragment_GrShaderFlag, kHalf4_GrSLType, "rightBorderColor");
+ leftBorderColorVar = args.fUniformHandler->addUniform(kFragment_GrShaderFlag,
+ kHalf4_GrSLType, "leftBorderColor");
+ rightBorderColorVar = args.fUniformHandler->addUniform(kFragment_GrShaderFlag,
+ kHalf4_GrSLType, "rightBorderColor");
SkString _child1("_child1");
- this->emitChild(_outer.gradLayout_index(), &_child1, args);
+ this->emitChild(_outer.gradLayout_index, &_child1, args);
fragBuilder->codeAppendf(
"half4 t = %s;\nif (!%s && t.y < 0.0) {\n %s = half4(0.0);\n} else if (t.x < "
"0.0) {\n %s = %s;\n} else if (t.x > 1.0) {\n %s = %s;\n} else {",
_child1.c_str(),
- (_outer.childProcessor(_outer.gradLayout_index()).preservesOpaqueInput() ? "true"
- : "false"),
+ (_outer.childProcessor(_outer.gradLayout_index).preservesOpaqueInput() ? "true"
+ : "false"),
args.fOutputColor, args.fOutputColor,
- args.fUniformHandler->getUniformCStr(fLeftBorderColorVar), args.fOutputColor,
- args.fUniformHandler->getUniformCStr(fRightBorderColorVar));
+ args.fUniformHandler->getUniformCStr(leftBorderColorVar), args.fOutputColor,
+ args.fUniformHandler->getUniformCStr(rightBorderColorVar));
SkString _input0("t");
SkString _child0("_child0");
- this->emitChild(_outer.colorizer_index(), _input0.c_str(), &_child0, args);
+ this->emitChild(_outer.colorizer_index, _input0.c_str(), &_child0, args);
fragBuilder->codeAppendf("\n %s = %s;\n}\n@if (%s) {\n %s.xyz *= %s.w;\n}\n",
args.fOutputColor, _child0.c_str(),
- (_outer.makePremul() ? "true" : "false"), args.fOutputColor,
+ (_outer.makePremul ? "true" : "false"), args.fOutputColor,
args.fOutputColor);
}
@@ -59,49 +59,49 @@
const GrFragmentProcessor& _proc) override {
const GrClampedGradientEffect& _outer = _proc.cast<GrClampedGradientEffect>();
{
- const SkPMColor4f& leftBorderColorValue = _outer.leftBorderColor();
- if (fLeftBorderColorPrev != leftBorderColorValue) {
- fLeftBorderColorPrev = leftBorderColorValue;
- pdman.set4fv(fLeftBorderColorVar, 1, leftBorderColorValue.vec());
+ const SkPMColor4f& leftBorderColorValue = _outer.leftBorderColor;
+ if (leftBorderColorPrev != leftBorderColorValue) {
+ leftBorderColorPrev = leftBorderColorValue;
+ pdman.set4fv(leftBorderColorVar, 1, leftBorderColorValue.vec());
}
- const SkPMColor4f& rightBorderColorValue = _outer.rightBorderColor();
- if (fRightBorderColorPrev != rightBorderColorValue) {
- fRightBorderColorPrev = rightBorderColorValue;
- pdman.set4fv(fRightBorderColorVar, 1, rightBorderColorValue.vec());
+ const SkPMColor4f& rightBorderColorValue = _outer.rightBorderColor;
+ if (rightBorderColorPrev != rightBorderColorValue) {
+ rightBorderColorPrev = rightBorderColorValue;
+ pdman.set4fv(rightBorderColorVar, 1, rightBorderColorValue.vec());
}
}
}
- SkPMColor4f fLeftBorderColorPrev = {SK_FloatNaN, SK_FloatNaN, SK_FloatNaN, SK_FloatNaN};
- SkPMColor4f fRightBorderColorPrev = {SK_FloatNaN, SK_FloatNaN, SK_FloatNaN, SK_FloatNaN};
- UniformHandle fLeftBorderColorVar;
- UniformHandle fRightBorderColorVar;
+ SkPMColor4f leftBorderColorPrev = {SK_FloatNaN, SK_FloatNaN, SK_FloatNaN, SK_FloatNaN};
+ SkPMColor4f rightBorderColorPrev = {SK_FloatNaN, SK_FloatNaN, SK_FloatNaN, SK_FloatNaN};
+ UniformHandle leftBorderColorVar;
+ UniformHandle rightBorderColorVar;
};
GrGLSLFragmentProcessor* GrClampedGradientEffect::onCreateGLSLInstance() const {
return new GrGLSLClampedGradientEffect();
}
void GrClampedGradientEffect::onGetGLSLProcessorKey(const GrShaderCaps& caps,
GrProcessorKeyBuilder* b) const {
- b->add32((int32_t)fMakePremul);
+ b->add32((int32_t)makePremul);
}
bool GrClampedGradientEffect::onIsEqual(const GrFragmentProcessor& other) const {
const GrClampedGradientEffect& that = other.cast<GrClampedGradientEffect>();
(void)that;
- if (fLeftBorderColor != that.fLeftBorderColor) return false;
- if (fRightBorderColor != that.fRightBorderColor) return false;
- if (fMakePremul != that.fMakePremul) return false;
- if (fColorsAreOpaque != that.fColorsAreOpaque) return false;
+ if (leftBorderColor != that.leftBorderColor) return false;
+ if (rightBorderColor != that.rightBorderColor) return false;
+ if (makePremul != that.makePremul) return false;
+ if (colorsAreOpaque != that.colorsAreOpaque) return false;
return true;
}
GrClampedGradientEffect::GrClampedGradientEffect(const GrClampedGradientEffect& src)
: INHERITED(kGrClampedGradientEffect_ClassID, src.optimizationFlags())
- , fColorizer_index(src.fColorizer_index)
- , fGradLayout_index(src.fGradLayout_index)
- , fLeftBorderColor(src.fLeftBorderColor)
- , fRightBorderColor(src.fRightBorderColor)
- , fMakePremul(src.fMakePremul)
- , fColorsAreOpaque(src.fColorsAreOpaque) {
- this->registerChildProcessor(src.childProcessor(fColorizer_index).clone());
- this->registerChildProcessor(src.childProcessor(fGradLayout_index).clone());
+ , colorizer_index(src.colorizer_index)
+ , gradLayout_index(src.gradLayout_index)
+ , leftBorderColor(src.leftBorderColor)
+ , rightBorderColor(src.rightBorderColor)
+ , makePremul(src.makePremul)
+ , colorsAreOpaque(src.colorsAreOpaque) {
+ this->registerChildProcessor(src.childProcessor(colorizer_index).clone());
+ this->registerChildProcessor(src.childProcessor(gradLayout_index).clone());
}
std::unique_ptr<GrFragmentProcessor> GrClampedGradientEffect::clone() const {
return std::unique_ptr<GrFragmentProcessor>(new GrClampedGradientEffect(*this));