Reducing number of calls to GLSL mix() from two to one reduces frame render time...
authorfmenozzi <fmenozzi@google.com>
Tue, 16 Aug 2016 16:24:52 +0000 (09:24 -0700)
committerCommit bot <commit-bot@chromium.org>
Tue, 16 Aug 2016 16:24:52 +0000 (09:24 -0700)
BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2247113003

Review-Url: https://codereview.chromium.org/2247113003

src/effects/gradients/SkGradientShader.cpp

index 457b89dcf5858a7ae53476df08cbcd488fec4863..6ffe56b9d4299d7c80a1312b5a8c0d6c2514e728 100644 (file)
@@ -1116,12 +1116,14 @@ void GrGradientEffect::GLSLProcessor::emitColor(GrGLSLFPFragmentBuilder* fragBui
             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;");