Recommit r5350 with fix for image failures (which affected GLs that don't support ARB_texture_swizzle).
git-svn-id: http://skia.googlecode.com/svn/trunk@5353 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/src/gpu/gl/GrGLSL.cpp b/src/gpu/gl/GrGLSL.cpp
index c995a34..079c082 100644
--- a/src/gpu/gl/GrGLSL.cpp
+++ b/src/gpu/gl/GrGLSL.cpp
@@ -115,6 +115,7 @@
outAppend->append(GrGLSLZerosVecf(4));
return kZeros_GrSLConstantVec;
} else {
+ // both inputs are ones vectors
outAppend->append(GrGLSLOnesVecf(4));
return kOnes_GrSLConstantVec;
}
@@ -142,6 +143,43 @@
}
}
+namespace {
+void append_tabs(SkString* outAppend, int tabCnt) {
+ static const char kTabs[] = "\t\t\t\t\t\t\t\t";
+ while (tabCnt) {
+ int cnt = GrMin((int)GR_ARRAY_COUNT(kTabs), tabCnt);
+ outAppend->append(kTabs, cnt);
+ tabCnt -= cnt;
+ }
+}
+}
+
+GrSLConstantVec GrGLSLMulVarBy4f(SkString* outAppend,
+ int tabCnt,
+ const char* vec4VarName,
+ const char* mulFactor,
+ GrSLConstantVec mulFactorDefault) {
+ bool haveFactor = NULL != mulFactor && '\0' != *mulFactor;
+
+ GrAssert(NULL != outAppend);
+ GrAssert(NULL != vec4VarName);
+ GrAssert(kNone_GrSLConstantVec != mulFactorDefault || haveFactor);
+
+ if (!haveFactor) {
+ if (kOnes_GrSLConstantVec == mulFactorDefault) {
+ return kNone_GrSLConstantVec;
+ } else {
+ GrAssert(kZeros_GrSLConstantVec == mulFactorDefault);
+ append_tabs(outAppend, tabCnt);
+ outAppend->appendf("%s = vec4(0, 0, 0, 0);\n", vec4VarName);
+ return kZeros_GrSLConstantVec;
+ }
+ }
+ append_tabs(outAppend, tabCnt);
+ outAppend->appendf("%s *= %s;\n", vec4VarName, mulFactor);
+ return kNone_GrSLConstantVec;
+}
+
GrSLConstantVec GrGLSLAdd4f(SkString* outAppend,
const char* in0,
const char* in1,