Index: src/gpu/effects/GrCustomXfermode.cpp |
diff --git a/src/gpu/effects/GrCustomXfermode.cpp b/src/gpu/effects/GrCustomXfermode.cpp |
index b15e2c2b9a133ad47bae7cd672a65bec36a2fbee..0a525b4d9279933a4334b1fe19c7ac89a5cc020a 100644 |
--- a/src/gpu/effects/GrCustomXfermode.cpp |
+++ b/src/gpu/effects/GrCustomXfermode.cpp |
@@ -525,14 +525,7 @@ public: |
bool hasSecondaryOutput() const override { return false; } |
- GrXferProcessor::OptFlags getOptimizations(const GrProcOptInfo& colorPOI, |
- const GrProcOptInfo& coveragePOI, |
- bool doesStencilWrite, |
- GrColor* overrideColor, |
- const GrDrawTargetCaps& caps) override; |
- |
SkXfermode::Mode mode() const { return fMode; } |
- bool hasCoverage() const { return fHasCoverage; } |
bool hasHWBlendEquation() const { return kInvalid_GrBlendEquation != fHWBlendEquation; } |
GrBlendEquation hwBlendEquation() const { |
@@ -543,6 +536,12 @@ public: |
private: |
CustomXP(SkXfermode::Mode mode, const GrDeviceCoordTexture* dstCopy, bool willReadDstColor); |
+ GrXferProcessor::OptFlags onGetOptimizations(const GrProcOptInfo& colorPOI, |
+ const GrProcOptInfo& coveragePOI, |
+ bool doesStencilWrite, |
+ GrColor* overrideColor, |
+ const GrDrawTargetCaps& caps) override; |
+ |
void onGetGLProcessorKey(const GrGLSLCaps& caps, GrProcessorKeyBuilder* b) const override; |
bool onWillNeedXferBarrier(const GrRenderTarget* rt, |
@@ -554,7 +553,6 @@ private: |
bool onIsEqual(const GrXferProcessor& xpBase) const override; |
SkXfermode::Mode fMode; |
- bool fHasCoverage; |
GrBlendEquation fHWBlendEquation; |
typedef GrXferProcessor INHERITED; |
@@ -581,7 +579,7 @@ public: |
const CustomXP& xp = p.cast<CustomXP>(); |
uint32_t key = xp.numTextures(); |
SkASSERT(key <= 1); |
- key |= xp.hasCoverage() << 1; |
+ key |= xp.readsCoverage() << 1; |
if (xp.hasHWBlendEquation()) { |
SkASSERT(caps.advBlendEqInteraction() > 0); // 0 will mean !xp.hasHWBlendEquation(). |
key |= caps.advBlendEqInteraction() << 2; |
@@ -601,7 +599,7 @@ private: |
if (xp.hasHWBlendEquation()) { |
// The blend mode will be implemented in hardware; only output the src color. |
fsBuilder->enableAdvancedBlendEquationIfNeeded(xp.hwBlendEquation()); |
- if (xp.hasCoverage()) { |
+ if (xp.readsCoverage()) { |
// Do coverage modulation by multiplying it into the src color before blending. |
// (See getOptimizations()) |
fsBuilder->codeAppendf("%s = %s * %s;", |
@@ -613,7 +611,7 @@ private: |
const char* dstColor = fsBuilder->dstColor(); |
emit_custom_xfermode_code(xp.mode(), fsBuilder, args.fOutputPrimary, args.fInputColor, |
dstColor); |
- if (xp.hasCoverage()) { |
+ if (xp.readsCoverage()) { |
fsBuilder->codeAppendf("%s = %s * %s + (vec4(1.0) - %s) * %s;", |
args.fOutputPrimary, args.fOutputPrimary, |
args.fInputCoverage, args.fInputCoverage, dstColor); |
@@ -632,7 +630,6 @@ CustomXP::CustomXP(SkXfermode::Mode mode, const GrDeviceCoordTexture* dstCopy, |
bool willReadDstColor) |
: INHERITED(dstCopy, willReadDstColor), |
fMode(mode), |
- fHasCoverage(true), |
fHWBlendEquation(kInvalid_GrBlendEquation) { |
this->initClassID<CustomXP>(); |
} |
@@ -648,12 +645,10 @@ GrGLXferProcessor* CustomXP::createGLInstance() const { |
bool CustomXP::onIsEqual(const GrXferProcessor& other) const { |
const CustomXP& s = other.cast<CustomXP>(); |
- return fMode == s.fMode && |
- fHasCoverage == s.fHasCoverage && |
- fHWBlendEquation == s.fHWBlendEquation; |
+ return fMode == s.fMode && fHWBlendEquation == s.fHWBlendEquation; |
} |
-GrXferProcessor::OptFlags CustomXP::getOptimizations(const GrProcOptInfo& colorPOI, |
+GrXferProcessor::OptFlags CustomXP::onGetOptimizations(const GrProcOptInfo& colorPOI, |
const GrProcOptInfo& coveragePOI, |
bool doesStencilWrite, |
GrColor* overrideColor, |
@@ -760,7 +755,6 @@ GrXferProcessor::OptFlags CustomXP::getOptimizations(const GrProcOptInfo& colorP |
} |
if (coveragePOI.isSolidWhite()) { |
flags = flags | kIgnoreCoverage_OptFlag; |
- fHasCoverage = false; |
} |
if (caps.advancedBlendEquationSupport() && !coveragePOI.isFourChannelOutput()) { |
// This blend mode can be implemented in hardware. |