| Index: src/gpu/GrRODrawState.cpp | 
| diff --git a/src/gpu/GrRODrawState.cpp b/src/gpu/GrRODrawState.cpp | 
| index e522008cae4ab7c256b602d75330dde1bc0b6ac5..f7e486f925983522c936d5dc6f96bdf3245dd69f 100644 | 
| --- a/src/gpu/GrRODrawState.cpp | 
| +++ b/src/gpu/GrRODrawState.cpp | 
| @@ -184,6 +184,26 @@ | 
| dstCoeff = &bogusDstCoeff; | 
| } | 
|  | 
| +    if (forceCoverage) { | 
| +        return this->calcBlendOpts(true, srcCoeff, dstCoeff); | 
| +    } | 
| + | 
| +    if (0 == (fBlendOptFlags & kInvalid_BlendOptFlag)) { | 
| +        *srcCoeff = fOptSrcBlend; | 
| +        *dstCoeff = fOptDstBlend; | 
| +        return fBlendOptFlags; | 
| +    } | 
| + | 
| +    fBlendOptFlags = this->calcBlendOpts(forceCoverage, srcCoeff, dstCoeff); | 
| +    fOptSrcBlend = *srcCoeff; | 
| +    fOptDstBlend = *dstCoeff; | 
| + | 
| +    return fBlendOptFlags; | 
| +} | 
| + | 
| +GrRODrawState::BlendOptFlags GrRODrawState::calcBlendOpts(bool forceCoverage, | 
| +                                                          GrBlendCoeff* srcCoeff, | 
| +                                                          GrBlendCoeff* dstCoeff) const { | 
| *srcCoeff = this->getSrcBlendCoeff(); | 
| *dstCoeff = this->getDstBlendCoeff(); | 
|  | 
| @@ -352,3 +372,13 @@ | 
| return (kA_GrColorComponentFlag & validComponentFlags) && 0xFF == GrColorUnpackA(color); | 
| } | 
|  | 
| +//////////////////////////////////////////////////////////////////////////////// | 
| + | 
| +bool GrRODrawState::canIgnoreColorAttribute() const { | 
| +    if (fBlendOptFlags & kInvalid_BlendOptFlag) { | 
| +        this->getBlendOpts(); | 
| +    } | 
| +    return SkToBool(fBlendOptFlags & (GrRODrawState::kEmitTransBlack_BlendOptFlag | | 
| +                                      GrRODrawState::kEmitCoverage_BlendOptFlag)); | 
| +} | 
| + | 
|  |