| Index: src/gpu/GrDrawState.cpp
|
| diff --git a/src/gpu/GrDrawState.cpp b/src/gpu/GrDrawState.cpp
|
| index 1b40642251e87219f321d6a3e6aeeb836db6e84c..02c7920f5d07c778870ae7ef972b733316c61c73 100644
|
| --- a/src/gpu/GrDrawState.cpp
|
| +++ b/src/gpu/GrDrawState.cpp
|
| @@ -339,7 +339,8 @@
|
| // (0,1). The same applies when coverage is known to be 0.
|
| if ((kZero_GrBlendCoeff == *srcCoeff && dstCoeffIsOne) || covIsZero) {
|
| if (this->getStencil().doesWrite()) {
|
| - return kEmitCoverage_BlendOptFlag;
|
| + return kDisableBlend_BlendOptFlag |
|
| + kEmitCoverage_BlendOptFlag;
|
| } else {
|
| return kSkipDraw_BlendOptFlag;
|
| }
|
| @@ -358,14 +359,13 @@
|
| if (kOne_GrBlendCoeff == *srcCoeff) {
|
| // if there is no coverage and coeffs are (1,0) then we
|
| // won't need to read the dst at all, it gets replaced by src
|
| - *dstCoeff = kZero_GrBlendCoeff;
|
| - return kNone_BlendOpt;
|
| + return kDisableBlend_BlendOptFlag;
|
| } else if (kZero_GrBlendCoeff == *srcCoeff) {
|
| // if the op is "clear" then we don't need to emit a color
|
| // or blend, just write transparent black into the dst.
|
| *srcCoeff = kOne_GrBlendCoeff;
|
| *dstCoeff = kZero_GrBlendCoeff;
|
| - return kEmitTransBlack_BlendOptFlag;
|
| + return kDisableBlend_BlendOptFlag | kEmitTransBlack_BlendOptFlag;
|
| }
|
| }
|
| } else if (this->isCoverageDrawing()) {
|
| @@ -399,7 +399,13 @@
|
| return kCoverageAsAlpha_BlendOptFlag;
|
| }
|
| }
|
| -
|
| + if (kOne_GrBlendCoeff == *srcCoeff &&
|
| + kZero_GrBlendCoeff == *dstCoeff &&
|
| + this->willEffectReadDstColor()) {
|
| + // In this case the shader will fully resolve the color, coverage, and dst and we don't
|
| + // need blending.
|
| + return kDisableBlend_BlendOptFlag;
|
| + }
|
| return kNone_BlendOpt;
|
| }
|
|
|
|
|