Index: src/gpu/gl/GrGLProgramDesc.cpp |
diff --git a/src/gpu/gl/GrGLProgramDesc.cpp b/src/gpu/gl/GrGLProgramDesc.cpp |
index cff4a2bab6f46ab886fa4889d5c62e396b8239f8..ecd48e014810eb4158a452a256418bad0aaba159 100644 |
--- a/src/gpu/gl/GrGLProgramDesc.cpp |
+++ b/src/gpu/gl/GrGLProgramDesc.cpp |
@@ -89,6 +89,11 @@ |
bool requiresLocalCoordAttrib = !(skipCoverage && skipColor) && |
drawState.hasLocalCoordAttribute(); |
+ bool colorIsTransBlack = SkToBool(blendOpts & GrDrawState::kEmitTransBlack_BlendOptFlag); |
+ bool colorIsSolidWhite = (blendOpts & GrDrawState::kEmitCoverage_BlendOptFlag) || |
+ (!requiresColorAttrib && 0xffffffff == drawState.getColor()) || |
+ (!inputColorIsUsed); |
+ |
int numEffects = (skipColor ? 0 : (drawState.numColorStages() - firstEffectiveColorStage)) + |
(skipCoverage ? 0 : (drawState.numCoverageStages() - firstEffectiveCoverageStage)); |
@@ -143,7 +148,11 @@ |
#endif |
bool defaultToUniformInputs = GR_GL_NO_CONSTANT_ATTRIBUTES || gpu->caps()->pathRenderingSupport(); |
- if (defaultToUniformInputs && !requiresColorAttrib) { |
+ if (colorIsTransBlack) { |
+ header->fColorInput = kTransBlack_ColorInput; |
+ } else if (colorIsSolidWhite) { |
+ header->fColorInput = kSolidWhite_ColorInput; |
+ } else if (defaultToUniformInputs && !requiresColorAttrib) { |
header->fColorInput = kUniform_ColorInput; |
} else { |
header->fColorInput = kAttribute_ColorInput; |
@@ -152,7 +161,9 @@ |
bool covIsSolidWhite = !requiresCoverageAttrib && 0xffffffff == drawState.getCoverageColor(); |
- if (covIsSolidWhite || !inputCoverageIsUsed) { |
+ if (skipCoverage) { |
+ header->fCoverageInput = kTransBlack_ColorInput; |
+ } else if (covIsSolidWhite || !inputCoverageIsUsed) { |
header->fCoverageInput = kSolidWhite_ColorInput; |
} else if (defaultToUniformInputs && !requiresCoverageAttrib) { |
header->fCoverageInput = kUniform_ColorInput; |