Index: src/gpu/gl/builders/GrGLProgramBuilder.cpp |
diff --git a/src/gpu/gl/builders/GrGLProgramBuilder.cpp b/src/gpu/gl/builders/GrGLProgramBuilder.cpp |
index daa0b6ba064205fccc2f89605d07f35bb6828841..c26e52231c6063e7ff7900a4ccbcae9cc48600f2 100644 |
--- a/src/gpu/gl/builders/GrGLProgramBuilder.cpp |
+++ b/src/gpu/gl/builders/GrGLProgramBuilder.cpp |
@@ -45,7 +45,11 @@ GrGLProgram* GrGLProgramBuilder::CreateProgram(const GrOptDrawState& optState, G |
// get the initial color and coverage to feed into the first effect in each effect chain |
GrGLSLExpr4 inputColor; |
GrGLSLExpr1 inputCoverage; |
- pb->setupUniformColorAndCoverageIfNeeded(&inputColor, &inputCoverage); |
+ |
+ // TODO do this in the path processor |
+ if (header.fUseNvpr) { |
+ pb->setupUniformColorAndCoverageIfNeeded(&inputColor, &inputCoverage); |
+ } |
// TODO: Once all stages can handle taking a float or vec4 and correctly handling them we can |
// remove this cast to a vec4. |
@@ -65,8 +69,6 @@ GrGLProgramBuilder* GrGLProgramBuilder::CreateProgramBuilder(const GrOptDrawStat |
const GrProgramDesc& desc = optState.programDesc(); |
if (GrGLProgramDescBuilder::GetHeader(desc).fUseNvpr) { |
SkASSERT(gpu->glCaps().pathRenderingSupport()); |
- SkASSERT(GrProgramDesc::kAttribute_ColorInput != desc.header().fColorInput); |
- SkASSERT(GrProgramDesc::kAttribute_ColorInput != desc.header().fCoverageInput); |
SkASSERT(!hasGeometryProcessor); |
if (gpu->glPathRendering()->texturingMode() == |
GrGLPathRendering::FixedFunction_TexturingMode) { |
@@ -187,34 +189,19 @@ const GrGLContextInfo& GrGLProgramBuilder::ctxInfo() const { |
void GrGLProgramBuilder::setupUniformColorAndCoverageIfNeeded(GrGLSLExpr4* inputColor, |
GrGLSLExpr1* inputCoverage) { |
- const GrProgramDesc::KeyHeader& header = this->header(); |
- if (GrProgramDesc::kUniform_ColorInput == header.fColorInput) { |
- const char* name; |
- fUniformHandles.fColorUni = |
- this->addUniform(GrGLProgramBuilder::kFragment_Visibility, |
- kVec4f_GrSLType, kDefault_GrSLPrecision, |
- "Color", &name); |
- *inputColor = GrGLSLExpr4(name); |
- } else if (GrProgramDesc::kAllOnes_ColorInput == header.fColorInput) { |
- *inputColor = GrGLSLExpr4(1); |
- } |
- if (GrProgramDesc::kUniform_ColorInput == header.fCoverageInput) { |
- const char* name; |
- fUniformHandles.fCoverageUni = |
- this->addUniform(GrGLProgramBuilder::kFragment_Visibility, |
- kFloat_GrSLType, kDefault_GrSLPrecision, |
- "Coverage",&name); |
- *inputCoverage = GrGLSLExpr1(name); |
- } else if (GrProgramDesc::kAllOnes_ColorInput == header.fCoverageInput) { |
- *inputCoverage = GrGLSLExpr1(1); |
- } |
+ const char* name; |
+ fUniformHandles.fColorUni = |
+ this->addUniform(GrGLProgramBuilder::kFragment_Visibility, |
+ kVec4f_GrSLType, kDefault_GrSLPrecision, |
+ "Color", &name); |
+ *inputColor = GrGLSLExpr4(name); |
+ *inputCoverage = GrGLSLExpr1(1); |
} |
void GrGLProgramBuilder::emitAndInstallProcs(GrGLSLExpr4* inputColor, GrGLSLExpr4* inputCoverage) { |
if (fOptState.hasGeometryProcessor()) { |
fVS.setupUniformViewMatrix(); |
- const GrProgramDesc::KeyHeader& header = this->header(); |
fVS.codeAppend("gl_PointSize = 1.0;"); |
// Setup position |
@@ -227,23 +214,7 @@ void GrGLProgramBuilder::emitAndInstallProcs(GrGLSLExpr4* inputColor, GrGLSLExpr |
const GrGeometryProcessor& gp = *fOptState.getGeometryProcessor(); |
fVS.emitAttributes(gp); |
- GrGLSLExpr4 outputColor; |
- GrGLSLExpr4 outputCoverage; |
- this->emitAndInstallProc(gp, &outputColor, &outputCoverage); |
- |
- // We may override color and coverage here if we have unform color or coverage. This is |
- // obviously not ideal. |
- // TODO lets the GP itself do the override |
- if (GrProgramDesc::kAttribute_ColorInput == header.fColorInput) { |
- *inputColor = outputColor; |
- } |
- |
- // We may have uniform coverage, if so we need to multiply the GPs output by the uniform |
- // coverage |
- if (GrProgramDesc::kUniform_ColorInput == header.fCoverageInput) { |
- fFS.codeAppendf("%s *= %s;", outputCoverage.c_str(), inputCoverage->c_str()); |
- } |
- *inputCoverage = outputCoverage; |
+ this->emitAndInstallProc(gp, inputColor, inputCoverage); |
} |
fFragmentProcessors.reset(SkNEW(GrGLInstalledFragProcs)); |