Remove uniform names from top of GrGLProgram.cpp, builder responsible for "u" and stage num tags.
Also add LF eol-style property to some files in src/gpu/effects.
Review URL: http://codereview.appspot.com/6448049/
git-svn-id: http://skia.googlecode.com/svn/trunk@4770 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/src/gpu/gl/GrGLProgram.cpp b/src/gpu/gl/GrGLProgram.cpp
index 3a39d0c..90ef27a 100644
--- a/src/gpu/gl/GrGLProgram.cpp
+++ b/src/gpu/gl/GrGLProgram.cpp
@@ -25,17 +25,10 @@
typedef GrGLProgram::Desc::StageDesc StageDesc;
-#define VIEW_MATRIX_NAME "uViewM"
-
#define POS_ATTR_NAME "aPosition"
#define COL_ATTR_NAME "aColor"
#define COV_ATTR_NAME "aCoverage"
#define EDGE_ATTR_NAME "aEdge"
-#define COL_UNI_NAME "uColor"
-#define COV_UNI_NAME "uCoverage"
-#define COL_FILTER_UNI_NAME "uColorFilter"
-#define COL_MATRIX_UNI_NAME "uColorMatrix"
-#define COL_MATRIX_VEC_UNI_NAME "uColorMatrixVec"
namespace {
inline void tex_attr_name(int coordIdx, SkString* s) {
@@ -70,15 +63,6 @@
inline const char* declared_color_output_name() { return "fsColorOut"; }
inline const char* dual_source_output_name() { return "dualSourceOut"; }
-inline void tex_matrix_name(int stage, SkString* s) {
- *s = "uTexM";
- s->appendS32(stage);
-}
-
-inline void sampler_name(int stage, SkString* s) {
- *s = "uSampler";
- s->appendS32(stage);
-}
}
GrGLProgram* GrGLProgram::Create(const GrGLContextInfo& gl,
@@ -308,24 +292,14 @@
static void addColorFilter(SkString* fsCode, const char * outputVar,
SkXfermode::Coeff uniformCoeff,
SkXfermode::Coeff colorCoeff,
+ const char* filterColor,
const char* inColor) {
SkString colorStr, constStr;
- blendTermString(&colorStr, colorCoeff, COL_FILTER_UNI_NAME,
- inColor, inColor);
- blendTermString(&constStr, uniformCoeff, COL_FILTER_UNI_NAME,
- inColor, COL_FILTER_UNI_NAME);
+ blendTermString(&colorStr, colorCoeff, filterColor, inColor, inColor);
+ blendTermString(&constStr, uniformCoeff, filterColor, inColor, filterColor);
add_helper(outputVar, colorStr.c_str(), constStr.c_str(), fsCode);
}
-/**
- * Adds code to the fragment shader code which modifies the color by
- * the specified color matrix.
- */
-static void addColorMatrix(SkString* fsCode, const char * outputVar,
- const char* inColor) {
- fsCode->appendf("\t%s = %s * vec4(%s.rgb / %s.a, %s.a) + %s;\n", outputVar, COL_MATRIX_UNI_NAME, inColor, inColor, inColor, COL_MATRIX_VEC_UNI_NAME);
- fsCode->appendf("\t%s.rgb *= %s.a;\n", outputVar, outputVar);
-}
void GrGLProgram::genEdgeCoverage(SkString* coverageVar,
GrGLShaderBuilder* segments) const {
@@ -400,11 +374,13 @@
builder->fVSCode.appendf("\t%s = " COL_ATTR_NAME ";\n", vsName);
*inColor = fsName;
} break;
- case GrGLProgram::Desc::kUniform_ColorInput:
+ case GrGLProgram::Desc::kUniform_ColorInput: {
+ const char* name;
fUniforms.fColorUni = builder->addUniform(GrGLShaderBuilder::kFragment_ShaderType,
- kVec4f_GrSLType, COL_UNI_NAME);
- *inColor = COL_UNI_NAME;
+ kVec4f_GrSLType, "Color", &name);
+ *inColor = name;
break;
+ }
case GrGLProgram::Desc::kTransBlack_ColorInput:
GrAssert(!"needComputedColor should be false.");
break;
@@ -417,14 +393,15 @@
}
void GrGLProgram::genUniformCoverage(GrGLShaderBuilder* builder, SkString* inOutCoverage) {
+ const char* covUniName;
fUniforms.fCoverageUni = builder->addUniform(GrGLShaderBuilder::kFragment_ShaderType,
- kVec4f_GrSLType, COV_UNI_NAME);
+ kVec4f_GrSLType, "Coverage", &covUniName);
if (inOutCoverage->size()) {
builder->fFSCode.appendf("\tvec4 uniCoverage = %s * %s;\n",
- COV_UNI_NAME, inOutCoverage->c_str());
+ covUniName, inOutCoverage->c_str());
*inOutCoverage = "uniCoverage";
} else {
- *inOutCoverage = COV_UNI_NAME;
+ *inOutCoverage = covUniName;
}
}
@@ -655,16 +632,18 @@
builder.fFSOutputs.push_back(colorOutput);
}
+ const char* viewMName;
fUniforms.fViewMatrixUni = builder.addUniform(GrGLShaderBuilder::kVertex_ShaderType,
- kMat33f_GrSLType, VIEW_MATRIX_NAME);
+ kMat33f_GrSLType, "ViewM", &viewMName);
builder.fVSAttrs.push_back().set(kVec2f_GrSLType,
GrGLShaderVar::kAttribute_TypeModifier,
POS_ATTR_NAME);
- builder.fVSCode.append("void main() {\n"
- "\tvec3 pos3 = " VIEW_MATRIX_NAME " * vec3("POS_ATTR_NAME", 1);\n"
- "\tgl_Position = vec4(pos3.xy, 0, pos3.z);\n");
+ builder.fVSCode.appendf("void main() {\n"
+ "\tvec3 pos3 = %s * vec3("POS_ATTR_NAME", 1);\n"
+ "\tgl_Position = vec4(pos3.xy, 0, pos3.z);\n",
+ viewMName);
// incoming color to current stage being processed.
SkString inColor;
@@ -743,9 +722,11 @@
&needColorFilterUniform, &bogus);
}
}
+ const char* colorFilterColorUniName = NULL;
if (needColorFilterUniform) {
fUniforms.fColorFilterUni = builder.addUniform(GrGLShaderBuilder::kFragment_ShaderType,
- kVec4f_GrSLType, COL_FILTER_UNI_NAME);
+ kVec4f_GrSLType, "FilterColor",
+ &colorFilterColorUniName);
}
bool wroteFragColorZero = false;
if (SkXfermode::kZero_Coeff == uniformCoeff &&
@@ -759,17 +740,23 @@
builder.fFSCode.append("\tvec4 filteredColor;\n");
const char* color = adjustInColor(inColor);
addColorFilter(&builder.fFSCode, "filteredColor", uniformCoeff,
- colorCoeff, color);
+ colorCoeff, colorFilterColorUniName, color);
inColor = "filteredColor";
}
if (applyColorMatrix) {
+ const char* colMatrixName;
+ const char* colMatrixVecName;
fUniforms.fColorMatrixUni = builder.addUniform(GrGLShaderBuilder::kFragment_ShaderType,
- kMat44f_GrSLType, COL_MATRIX_UNI_NAME);
+ kMat44f_GrSLType, "ColorMatrix",
+ &colMatrixName);
fUniforms.fColorMatrixVecUni = builder.addUniform(GrGLShaderBuilder::kFragment_ShaderType,
- kVec4f_GrSLType, COL_MATRIX_VEC_UNI_NAME);
- builder.fFSCode.append("\tvec4 matrixedColor;\n");
+ kVec4f_GrSLType, "ColorMatrixVec",
+ &colMatrixVecName);
const char* color = adjustInColor(inColor);
- addColorMatrix(&builder.fFSCode, "matrixedColor", color);
+ builder.fFSCode.appendf("\tvec4 matrixedColor = %s * vec4(%s.rgb / %s.a, %s.a) + %s;\n",
+ colMatrixName, color, color, color, colMatrixVecName);
+ builder.fFSCode.append("\tmatrixedColor.rgb *= matrixedColor.a;\n");
+
inColor = "matrixedColor";
}
@@ -835,6 +822,7 @@
}
}
}
+
if (Desc::kNone_DualSrcOutput != fDesc.fDualSrcOutput) {
builder.fFSOutputs.push_back().set(kVec4f_GrSLType,
GrGLShaderVar::kOut_TypeModifier,
@@ -1004,7 +992,7 @@
const char* fsInColor, // NULL means no incoming color
const char* fsOutColor,
const char* vsInCoord,
- GrGLShaderBuilder* segments) {
+ GrGLShaderBuilder* builder) {
GrAssert(stageNum >= 0 && stageNum <= GrDrawState::kNumStages);
const GrGLProgram::StageDesc& desc = fDesc.fStages[stageNum];
@@ -1013,67 +1001,63 @@
GrAssert((desc.fInConfigFlags & StageDesc::kInConfigBitMask) == desc.fInConfigFlags);
+ builder->setCurrentStage(stageNum);
+
/// Vertex Shader Stuff
// decide whether we need a matrix to transform texture coords and whether the varying needs a
// perspective coord.
const char* matName = NULL;
if (desc.fOptFlags & StageDesc::kIdentityMatrix_OptFlagBit) {
- segments->fVaryingDims = segments->fCoordDims;
+ builder->fVaryingDims = builder->fCoordDims;
} else {
- SkString texMatName;
- tex_matrix_name(stageNum, &texMatName);
- uniforms.fTextureMatrixUni = segments->addUniform(GrGLShaderBuilder::kVertex_ShaderType,
- kMat33f_GrSLType, texMatName.c_str());
- const GrGLShaderVar& mat = segments->getUniformVariable(uniforms.fTextureMatrixUni);
- // Can't use texMatName.c_str() because it's on the stack!
- matName = mat.getName().c_str();
+ uniforms.fTextureMatrixUni = builder->addUniform(GrGLShaderBuilder::kVertex_ShaderType,
+ kMat33f_GrSLType, "TexM", &matName);
+ const GrGLShaderVar& mat = builder->getUniformVariable(uniforms.fTextureMatrixUni);
if (desc.fOptFlags & StageDesc::kNoPerspective_OptFlagBit) {
- segments->fVaryingDims = segments->fCoordDims;
+ builder->fVaryingDims = builder->fCoordDims;
} else {
- segments->fVaryingDims = segments->fCoordDims + 1;
+ builder->fVaryingDims = builder->fCoordDims + 1;
}
}
- GrAssert(segments->fVaryingDims > 0);
+ GrAssert(builder->fVaryingDims > 0);
// Must setup variables after computing segments->fVaryingDims
if (NULL != customStage) {
- customStage->setupVariables(segments, stageNum);
+ customStage->setupVariables(builder);
}
- SkString samplerName;
- sampler_name(stageNum, &samplerName);
- uniforms.fSamplerUni = segments->addUniform(GrGLShaderBuilder::kFragment_ShaderType,
- kSampler2D_GrSLType, samplerName.c_str());
+ const char* samplerName;
+ uniforms.fSamplerUni = builder->addUniform(GrGLShaderBuilder::kFragment_ShaderType,
+ kSampler2D_GrSLType, "Sampler", &samplerName);
const char *varyingVSName, *varyingFSName;
- segments->addVarying(GrSLFloatVectorType(segments->fVaryingDims),
- "Stage",
- stageNum,
- &varyingVSName,
- &varyingFSName);
+ builder->addVarying(GrSLFloatVectorType(builder->fVaryingDims),
+ "Stage",
+ &varyingVSName,
+ &varyingFSName);
if (!matName) {
- GrAssert(segments->fVaryingDims == segments->fCoordDims);
- segments->fVSCode.appendf("\t%s = %s;\n", varyingVSName, vsInCoord);
+ GrAssert(builder->fVaryingDims == builder->fCoordDims);
+ builder->fVSCode.appendf("\t%s = %s;\n", varyingVSName, vsInCoord);
} else {
// varying = texMatrix * texCoord
- segments->fVSCode.appendf("\t%s = (%s * vec3(%s, 1))%s;\n",
+ builder->fVSCode.appendf("\t%s = (%s * vec3(%s, 1))%s;\n",
varyingVSName, matName, vsInCoord,
- vector_all_coords(segments->fVaryingDims));
+ vector_all_coords(builder->fVaryingDims));
}
if (NULL != customStage) {
- segments->fVSCode.appendf("\t{ // stage %d %s\n",
- stageNum, customStage->name());
- customStage->emitVS(segments, varyingVSName);
- segments->fVSCode.appendf("\t}\n");
+ builder->fVSCode.appendf("\t{ // stage %d %s\n",
+ stageNum, customStage->name());
+ customStage->emitVS(builder, varyingVSName);
+ builder->fVSCode.appendf("\t}\n");
}
/// Fragment Shader Stuff
- segments->fSampleCoords = varyingFSName;
+ builder->fSampleCoords = varyingFSName;
GrGLShaderBuilder::SamplerMode sampleMode =
GrGLShaderBuilder::kExplicitDivide_SamplerMode;
@@ -1083,10 +1067,10 @@
} else if (NULL == customStage) {
sampleMode = GrGLShaderBuilder::kProj_SamplerMode;
}
- segments->setupTextureAccess(sampleMode, stageNum);
+ builder->setupTextureAccess(sampleMode, stageNum);
- segments->computeSwizzle(desc.fInConfigFlags);
- segments->computeModulate(fsInColor);
+ builder->computeSwizzle(desc.fInConfigFlags);
+ builder->computeModulate(fsInColor);
static const uint32_t kMulByAlphaMask =
(StageDesc::kMulRGBByAlpha_RoundUp_InConfigFlag |
@@ -1101,33 +1085,34 @@
StageDesc::kSmearAlpha_InConfigFlag));
GrAssert(!(desc.fInConfigFlags &
StageDesc::kSmearRed_InConfigFlag));
- segments->fFSCode.appendf("\t%s = %s(%s, %s)%s;\n",
- fsOutColor,
- segments->fTexFunc.c_str(),
- samplerName.c_str(),
- segments->fSampleCoords.c_str(),
- segments->fSwizzle.c_str());
+ builder->fFSCode.appendf("\t%s = %s(%s, %s)%s;\n",
+ fsOutColor,
+ builder->fTexFunc.c_str(),
+ samplerName,
+ builder->fSampleCoords.c_str(),
+ builder->fSwizzle.c_str());
if (desc.fInConfigFlags &
StageDesc::kMulRGBByAlpha_RoundUp_InConfigFlag) {
- segments->fFSCode.appendf("\t%s = vec4(ceil(%s.rgb*%s.a*255.0)/255.0,%s.a)%s;\n",
- fsOutColor, fsOutColor, fsOutColor,
- fsOutColor, segments->fModulate.c_str());
+ builder->fFSCode.appendf("\t%s = vec4(ceil(%s.rgb*%s.a*255.0)/255.0,%s.a)%s;\n",
+ fsOutColor, fsOutColor, fsOutColor,
+ fsOutColor, builder->fModulate.c_str());
} else {
- segments->fFSCode.appendf("\t%s = vec4(floor(%s.rgb*%s.a*255.0)/255.0,%s.a)%s;\n",
- fsOutColor, fsOutColor, fsOutColor,
- fsOutColor, segments->fModulate.c_str());
+ builder->fFSCode.appendf("\t%s = vec4(floor(%s.rgb*%s.a*255.0)/255.0,%s.a)%s;\n",
+ fsOutColor, fsOutColor, fsOutColor,
+ fsOutColor, builder->fModulate.c_str());
}
} else {
- segments->emitDefaultFetch(fsOutColor, samplerName.c_str());
+ builder->emitDefaultFetch(fsOutColor, samplerName);
}
}
if (NULL != customStage) {
// Enclose custom code in a block to avoid namespace conflicts
- segments->fFSCode.appendf("\t{ // stage %d %s \n",
- stageNum, customStage->name());
- customStage->emitFS(segments, fsOutColor, fsInColor,
- samplerName.c_str());
- segments->fFSCode.appendf("\t}\n");
+ builder->fFSCode.appendf("\t{ // stage %d %s \n",
+ stageNum, customStage->name());
+ customStage->emitFS(builder, fsOutColor, fsInColor,
+ samplerName);
+ builder->fFSCode.appendf("\t}\n");
}
+ builder->setNonStage();
}