Some GrGLShaderBuilder cleanup
Review URL: https://codereview.appspot.com/6500043/
git-svn-id: http://skia.googlecode.com/svn/trunk@5322 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/src/gpu/gl/GrGLProgram.cpp b/src/gpu/gl/GrGLProgram.cpp
index a82e527..9613697 100644
--- a/src/gpu/gl/GrGLProgram.cpp
+++ b/src/gpu/gl/GrGLProgram.cpp
@@ -1000,6 +1000,7 @@
const GrGLProgram::StageDesc& desc = fDesc.fStages[stageNum];
StageUniforms& uniforms = fUniforms.fStages[stageNum];
GrGLProgramStage* customStage = fProgramStage[stageNum];
+ GrAssert(NULL != customStage);
GrAssert((desc.fInConfigFlags & StageDesc::kInConfigBitMask) == desc.fInConfigFlags);
@@ -1010,25 +1011,29 @@
// decide whether we need a matrix to transform texture coords and whether the varying needs a
// perspective coord.
const char* matName = NULL;
+ GrSLType texCoordVaryingType;
if (desc.fOptFlags & StageDesc::kIdentityMatrix_OptFlagBit) {
- builder->fVaryingDims = builder->fCoordDims;
+ texCoordVaryingType = kVec2f_GrSLType;
} else {
uniforms.fTextureMatrixUni = builder->addUniform(GrGLShaderBuilder::kVertex_ShaderType,
kMat33f_GrSLType, "TexM", &matName);
const GrGLShaderVar& mat = builder->getUniformVariable(uniforms.fTextureMatrixUni);
if (desc.fOptFlags & StageDesc::kNoPerspective_OptFlagBit) {
- builder->fVaryingDims = builder->fCoordDims;
+ texCoordVaryingType = kVec2f_GrSLType;
} else {
- builder->fVaryingDims = builder->fCoordDims + 1;
+ texCoordVaryingType = kVec3f_GrSLType;
}
}
- GrAssert(builder->fVaryingDims > 0);
+ const char *varyingVSName, *varyingFSName;
+ builder->addVarying(texCoordVaryingType,
+ "Stage",
+ &varyingVSName,
+ &varyingFSName);
+ builder->setupTextureAccess(varyingFSName, texCoordVaryingType);
- // Must setup variables after computing segments->fVaryingDims
- if (NULL != customStage) {
- customStage->setupVariables(builder);
- }
+ // Must setup variables after calling setupTextureAccess
+ customStage->setupVariables(builder);
const char* samplerName;
uniforms.fSamplerUniforms.push_back(builder->addUniform(GrGLShaderBuilder::kFragment_ShaderType,
@@ -1036,45 +1041,29 @@
"Sampler",
&samplerName));
- const char *varyingVSName, *varyingFSName;
- builder->addVarying(GrSLFloatVectorType(builder->fVaryingDims),
- "Stage",
- &varyingVSName,
- &varyingFSName);
-
if (!matName) {
- GrAssert(builder->fVaryingDims == builder->fCoordDims);
+ GrAssert(kVec2f_GrSLType == texCoordVaryingType);
builder->fVSCode.appendf("\t%s = %s;\n", varyingVSName, vsInCoord);
} else {
// varying = texMatrix * texCoord
builder->fVSCode.appendf("\t%s = (%s * vec3(%s, 1))%s;\n",
varyingVSName, matName, vsInCoord,
- vector_all_coords(builder->fVaryingDims));
+ vector_all_coords(GrSLTypeToVecLength(texCoordVaryingType)));
}
- if (NULL != customStage) {
- builder->fVSCode.appendf("\t{ // stage %d %s\n",
- stageNum, customStage->name());
- customStage->emitVS(builder, varyingVSName);
- builder->fVSCode.appendf("\t}\n");
- }
-
- /// Fragment Shader Stuff
-
- builder->fSampleCoords = varyingFSName;
-
- builder->setupTextureAccess(stageNum);
+ builder->fVSCode.appendf("\t{ // stage %d %s\n",
+ stageNum, customStage->name());
+ customStage->emitVS(builder, varyingVSName);
+ builder->fVSCode.appendf("\t}\n");
builder->computeSwizzle(desc.fInConfigFlags);
builder->computeModulate(fsInColor);
- if (NULL != customStage) {
- // Enclose custom code in a block to avoid namespace conflicts
- builder->fFSCode.appendf("\t{ // stage %d %s \n",
- stageNum, customStage->name());
- customStage->emitFS(builder, fsOutColor, fsInColor,
- samplerName);
- builder->fFSCode.appendf("\t}\n");
- }
+ // Enclose custom code in a block to avoid namespace conflicts
+ builder->fFSCode.appendf("\t{ // stage %d %s \n",
+ stageNum, customStage->name());
+ customStage->emitFS(builder, fsOutColor, fsInColor,
+ samplerName);
+ builder->fFSCode.appendf("\t}\n");
builder->setNonStage();
}