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