Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(149)

Unified Diff: src/core/SkXfermode.cpp

Issue 14535004: Remove inout params from saturation helper func in XferEffect. (Closed) Base URL: http://skia.googlecode.com/svn/trunk/
Patch Set: Created 7 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/core/SkXfermode.cpp
===================================================================
--- src/core/SkXfermode.cpp (revision 8905)
+++ src/core/SkXfermode.cpp (working copy)
@@ -1287,7 +1287,10 @@
getSatBody.c_str(),
&getFunction);
- // Emit a helper that sets the saturation given sorted input channels
+ // Emit a helper that sets the saturation given sorted input channels. This used
+ // to use inout params for min, mid, and max components but that seems to cause
+ // problems on PowerVR drivers. So instead it returns a vec3 where r, g ,b are the
+ // adjusted min, mid, and max inputs, respectively.
SkString helperFunction;
GrGLShaderVar helperArgs[] = {
GrGLShaderVar("minComp", kFloat_GrSLType),
@@ -1295,22 +1298,20 @@
GrGLShaderVar("maxComp", kFloat_GrSLType),
GrGLShaderVar("sat", kFloat_GrSLType),
};
- helperArgs[0].setTypeModifier(GrGLShaderVar::kInOut_TypeModifier);
- helperArgs[1].setTypeModifier(GrGLShaderVar::kInOut_TypeModifier);
- helperArgs[2].setTypeModifier(GrGLShaderVar::kInOut_TypeModifier);
- SkString helperBody;
- helperBody.append("\tif (minComp < maxComp) {\n"
- "\t\tmidComp = sat * (midComp - minComp) / (maxComp - minComp);\n"
- "\t\tmaxComp = sat;\n"
- "\t} else {\n"
- "\t\tmidComp = maxComp = 0.0;\n"
- "\t}\n"
- "\tminComp = 0.0;\n");
+ static const char kHelperBody[] = "\tif (minComp < maxComp) {\n"
+ "\t\tvec3 result;\n"
+ "\t\tresult.r = 0.0;\n"
+ "\t\tresult.g = sat * (midComp - minComp) / (maxComp - minComp);\n"
+ "\t\tresult.b = sat;\n"
+ "\t\treturn result;\n"
+ "\t} else {\n"
+ "\t\treturn vec3(0, 0, 0);\n"
+ "\t}\n";
builder->emitFunction(GrGLShaderBuilder::kFragment_ShaderType,
- kVoid_GrSLType,
+ kVec3f_GrSLType,
"set_saturation_helper",
SK_ARRAY_COUNT(helperArgs), helperArgs,
- helperBody.c_str(),
+ kHelperBody,
&helperFunction);
GrGLShaderVar setSatArgs[] = {
@@ -1322,20 +1323,20 @@
setSatBody.appendf("\tfloat sat = %s(satColor);\n"
"\tif (hueLumColor.r <= hueLumColor.g) {\n"
"\t\tif (hueLumColor.g <= hueLumColor.b) {\n"
- "\t\t\t%s(hueLumColor.r, hueLumColor.g, hueLumColor.b, sat);\n"
+ "\t\t\thueLumColor.rgb = %s(hueLumColor.r, hueLumColor.g, hueLumColor.b, sat);\n"
"\t\t} else if (hueLumColor.r <= hueLumColor.b) {\n"
- "\t\t\t%s(hueLumColor.r, hueLumColor.b, hueLumColor.g, sat);\n"
+ "\t\t\thueLumColor.rbg = %s(hueLumColor.r, hueLumColor.b, hueLumColor.g, sat);\n"
"\t\t} else {\n"
- "\t\t\t%s(hueLumColor.b, hueLumColor.r, hueLumColor.g, sat);\n"
+ "\t\t\thueLumColor.brg = %s(hueLumColor.b, hueLumColor.r, hueLumColor.g, sat);\n"
"\t\t}\n"
"\t} else if (hueLumColor.r <= hueLumColor.b) {\n"
- "\t\t%s(hueLumColor.g, hueLumColor.r, hueLumColor.b, sat);\n"
+ "\t\thueLumColor.grb = %s(hueLumColor.g, hueLumColor.r, hueLumColor.b, sat);\n"
"\t} else if (hueLumColor.g <= hueLumColor.b) {\n"
- "\t\t%s(hueLumColor.g, hueLumColor.b, hueLumColor.r, sat);\n"
+ "\t\thueLumColor.gbr = %s(hueLumColor.g, hueLumColor.b, hueLumColor.r, sat);\n"
"\t} else {\n"
- "\t\t%s(hueLumColor.b, hueLumColor.g, hueLumColor.r, sat);\n"
+ "\t\thueLumColor.bgr = %s(hueLumColor.b, hueLumColor.g, hueLumColor.r, sat);\n"
"\t}\n"
- "\treturn hueLumColor;",
+ "\treturn hueLumColor;\n",
getFunction.c_str(), helpFunc, helpFunc, helpFunc, helpFunc,
helpFunc, helpFunc);
builder->emitFunction(GrGLShaderBuilder::kFragment_ShaderType,
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698