| 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));
|
|
|