Reducing number of calls to GLSL mix() from two to one reduces frame render time by 21%
BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2247113003
Review-Url: https://codereview.chromium.org/2247113003
diff --git a/src/effects/gradients/SkGradientShader.cpp b/src/effects/gradients/SkGradientShader.cpp
index 457b89d..6ffe56b 100644
--- a/src/effects/gradients/SkGradientShader.cpp
+++ b/src/effects/gradients/SkGradientShader.cpp
@@ -1116,12 +1116,14 @@
if (SkShader::kClamp_TileMode == ge.fTileMode) {
fragBuilder->codeAppendf("relative_t += step(1.0, %s);", t);
}
- fragBuilder->codeAppendf("vec4 colorTemp = mix(%s[0], %s[1], relative_t);", colors,
- colors);
+
+ fragBuilder->codeAppendf("vec4 start = %s[0];", colors);
+ fragBuilder->codeAppendf("vec4 end = %s[1];", colors);
fragBuilder->codeAppendf("if (clamp_t >= 0.5) {");
- fragBuilder->codeAppendf(" colorTemp = mix(%s[2], %s[3], relative_t);", colors,
- colors);
+ fragBuilder->codeAppendf(" start = %s[2];", colors);
+ fragBuilder->codeAppendf(" end = %s[3];", colors);
fragBuilder->codeAppendf("}");
+ fragBuilder->codeAppendf("vec4 colorTemp = mix(start, end, relative_t);");
if (GrGradientEffect::kAfterInterp_PremulType == ge.getPremulType()) {
fragBuilder->codeAppend("colorTemp.rgb *= colorTemp.a;");