Index: src/gpu/effects/GrPorterDuffXferProcessor.cpp |
diff --git a/src/gpu/effects/GrPorterDuffXferProcessor.cpp b/src/gpu/effects/GrPorterDuffXferProcessor.cpp |
index 6255e4a9138773db51495591f9d7244c270f3727..b8259164fdef3870ef67d22259f214f36c361c25 100644 |
--- a/src/gpu/effects/GrPorterDuffXferProcessor.cpp |
+++ b/src/gpu/effects/GrPorterDuffXferProcessor.cpp |
@@ -121,16 +121,28 @@ GrPorterDuffXferProcessor::getOptimizations(const GrProcOptInfo& colorPOI, |
bool isCoverageDrawing, |
bool colorWriteDisabled, |
bool doesStencilWrite, |
- GrColor* color, uint8_t* coverage, |
+ GrColor* overrideColor, |
+ uint8_t* overrideCoverage, |
const GrDrawTargetCaps& caps) { |
- GrXferProcessor::OptFlags optFlags = this->internalGetOptimizations(colorPOI, |
- coveragePOI, |
- isCoverageDrawing, |
- colorWriteDisabled, |
- doesStencilWrite, |
- color, |
- coverage); |
- |
+ GrXferProcessor::OptFlags optFlags; |
+ // Optimizations when doing RGB Coverage |
+ if (coveragePOI.isFourChannelOutput()) { |
+ // We want to force our primary output to be alpha * Coverage, where alpha is the alpha |
+ // value of the blend the constant. We should already have valid blend coeff's if we are at |
+ // a point where we have RGB coverage. We don't need any color stages since the known color |
+ // output is already baked into the blendConstant. |
+ uint8_t alpha = GrColorUnpackA(fBlendConstant); |
+ *overrideColor = GrColorPackRGBA(alpha, alpha, alpha, alpha); |
+ optFlags = GrXferProcessor::kOverrideColor_OptFlag; |
+ } else { |
+ optFlags = this->internalGetOptimizations(colorPOI, |
+ coveragePOI, |
+ isCoverageDrawing, |
+ colorWriteDisabled, |
+ doesStencilWrite, |
+ overrideColor, |
+ overrideCoverage); |
+ } |
this->calcOutputTypes(optFlags, caps, isCoverageDrawing || coveragePOI.isSolidWhite(), |
colorPOI.readsDst() || coveragePOI.readsDst()); |
return optFlags; |
@@ -172,7 +184,8 @@ GrPorterDuffXferProcessor::internalGetOptimizations(const GrProcOptInfo& colorPO |
bool isCoverageDrawing, |
bool colorWriteDisabled, |
bool doesStencilWrite, |
- GrColor* color, uint8_t* coverage) { |
+ GrColor* overrideColor, |
+ uint8_t* overrideCoverage) { |
if (colorWriteDisabled) { |
fSrcBlend = kZero_GrBlendCoeff; |
fDstBlend = kOne_GrBlendCoeff; |
@@ -193,23 +206,12 @@ GrPorterDuffXferProcessor::internalGetOptimizations(const GrProcOptInfo& colorPO |
bool dstCoeffIsZero = kZero_GrBlendCoeff == fDstBlend || |
(kISA_GrBlendCoeff == fDstBlend && srcAIsOne); |
- // Optimizations when doing RGB Coverage |
- if (coveragePOI.isFourChannelOutput()) { |
- // We want to force our primary output to be alpha * Coverage, where alpha is the alpha |
- // value of the blend the constant. We should already have valid blend coeff's if we are at |
- // a point where we have RGB coverage. We don't need any color stages since the known color |
- // output is already baked into the blendConstant. |
- uint8_t alpha = GrColorUnpackA(fBlendConstant); |
- *color = GrColorPackRGBA(alpha, alpha, alpha, alpha); |
- return GrXferProcessor::kClearColorStages_OptFlag; |
- } |
- |
// When coeffs are (0,1) there is no reason to draw at all, unless |
// stenciling is enabled. Having color writes disabled is effectively |
// (0,1). |
if ((kZero_GrBlendCoeff == fSrcBlend && dstCoeffIsOne)) { |
if (doesStencilWrite) { |
- *color = 0xffffffff; |
+ *overrideColor = 0xffffffff; |
return GrXferProcessor::kClearColorStages_OptFlag | |
GrXferProcessor::kSetCoverageDrawing_OptFlag; |
} else { |
@@ -232,8 +234,8 @@ GrPorterDuffXferProcessor::internalGetOptimizations(const GrProcOptInfo& colorPO |
// or blend, just write transparent black into the dst. |
fSrcBlend = kOne_GrBlendCoeff; |
fDstBlend = kZero_GrBlendCoeff; |
- *color = 0; |
- *coverage = 0xff; |
+ *overrideColor = 0; |
+ *overrideCoverage = 0xff; |
return GrXferProcessor::kClearColorStages_OptFlag | |
GrXferProcessor::kClearCoverageStages_OptFlag; |
} |
@@ -253,7 +255,7 @@ GrPorterDuffXferProcessor::internalGetOptimizations(const GrProcOptInfo& colorPO |
// the dst coeff is effectively zero so blend works out to: |
// (c)(0)D + (1-c)D = (1-c)D. |
fDstBlend = kISA_GrBlendCoeff; |
- *color = 0xffffffff; |
+ *overrideColor = 0xffffffff; |
return GrXferProcessor::kClearColorStages_OptFlag | |
GrXferProcessor::kSetCoverageDrawing_OptFlag; |
} else if (srcAIsOne) { |