| Index: src/effects/SkColorFilters.cpp
|
| diff --git a/src/effects/SkColorFilters.cpp b/src/effects/SkColorFilters.cpp
|
| index d96aadfed78053def9766a882d3edd1653767193..4c6474a9c38aa4e57e670361caa9aa9a1adc3739 100644
|
| --- a/src/effects/SkColorFilters.cpp
|
| +++ b/src/effects/SkColorFilters.cpp
|
| @@ -274,17 +274,7 @@ public:
|
| private:
|
| ModeColorFilterEffect(GrColor color, SkXfermode::Mode mode)
|
| : fMode(mode),
|
| - fColor(color) {
|
| -
|
| - SkXfermode::Coeff dstCoeff;
|
| - SkXfermode::Coeff srcCoeff;
|
| - SkAssertResult(SkXfermode::ModeAsCoeff(fMode, &srcCoeff, &dstCoeff));
|
| - // These could be calculated from the blend equation with template trickery..
|
| - if (SkXfermode::kZero_Coeff == dstCoeff &&
|
| - !GrBlendCoeffRefsDst(sk_blend_to_grblend(srcCoeff))) {
|
| - this->setWillNotUseInputColor();
|
| - }
|
| - }
|
| + fColor(color) {}
|
|
|
| virtual bool onIsEqual(const GrFragmentProcessor& other) const SK_OVERRIDE {
|
| const ModeColorFilterEffect& s = other.cast<ModeColorFilterEffect>();
|
| @@ -392,7 +382,17 @@ void ModeColorFilterEffect::onComputeInvariantOutput(InvariantOutput* inout) con
|
| MaskedColorExpr(filterColor, kRGBA_GrColorComponentFlags),
|
| MaskedColorExpr(inputColor, inout->validFlags()));
|
|
|
| - inout->setToOther(result.getValidComponents(), result.getColor());
|
| + // Check if we will use the input color
|
| + SkXfermode::Coeff dstCoeff;
|
| + SkXfermode::Coeff srcCoeff;
|
| + SkAssertResult(SkXfermode::ModeAsCoeff(fMode, &srcCoeff, &dstCoeff));
|
| + InvariantOutput::ReadInput readInput = InvariantOutput::kWill_ReadInput;
|
| + // These could be calculated from the blend equation with template trickery..
|
| + if (SkXfermode::kZero_Coeff == dstCoeff &&
|
| + !GrBlendCoeffRefsDst(sk_blend_to_grblend(srcCoeff))) {
|
| + readInput = InvariantOutput::kWillNot_ReadInput;
|
| + }
|
| + inout->setToOther(result.getValidComponents(), result.getColor(), readInput);
|
| }
|
|
|
| GR_DEFINE_FRAGMENT_PROCESSOR_TEST(ModeColorFilterEffect);
|
|
|