Chromium Code Reviews| Index: include/gpu/GrProcessor.h |
| diff --git a/include/gpu/GrProcessor.h b/include/gpu/GrProcessor.h |
| index bbcc919caa525ec545e1b4337a4030df5848bcf9..5f541262d1cca6584ae157ebe9755664a6981501 100644 |
| --- a/include/gpu/GrProcessor.h |
| +++ b/include/gpu/GrProcessor.h |
| @@ -39,7 +39,7 @@ public: |
| struct InvariantOutput{ |
| InvariantOutput() : fColor(0), fValidFlags(0), fIsSingleComponent(false), |
| - fInputIsOnlyModulated(true) {} |
| + fInputIsOnlyModulated(true), fWillUseInputColor(true) {} |
| void mulByUnknownOpaqueColor() { |
| if (this->isOpaque()) { |
| @@ -91,6 +91,16 @@ public: |
| fInputIsOnlyModulated = false; |
| } |
| + /** |
| + * If the effect will generate a result that does not depend on the input color value then |
| + * it must call this function from its onComputeInvariantOutput(). Otherwise, when its |
| + * generated backend-specific code might fail during variable binding due to unused |
| + * variables. |
| + */ |
| + void setWillNotUseInputColor() { |
|
bsalomon
2014/10/13 20:54:42
Instead of a new setter can we make it be a requir
egdaniel
2014/10/14 17:49:57
Done.
|
| + fWillUseInputColor = false; |
| + } |
| + |
| bool isOpaque() const { |
| return ((fValidFlags & kA_GrColorComponentFlag) && 0xFF == GrColorUnpackA(fColor)); |
| } |
| @@ -136,11 +146,13 @@ public: |
| friend class GrDrawState; |
| friend class GrOptDrawState; |
| friend class GrPaint; |
| + friend class GrProcessor; |
| GrColor fColor; |
| uint32_t fValidFlags; |
| bool fIsSingleComponent; |
| bool fInputIsOnlyModulated; |
| + bool fWillUseInputColor; |
| }; |
| /** |
| @@ -152,6 +164,7 @@ public: |
| * meaning if the corresponding bit in validFlags is set. |
| */ |
| void computeInvariantOutput(InvariantOutput* inout) const { |
| + inout->fWillUseInputColor = true; |
| this->onComputeInvariantOutput(inout); |
| #ifdef SK_DEBUG |
| inout->validate(); |
| @@ -287,17 +300,13 @@ class GrFragmentProcessor : public GrProcessor { |
| public: |
| GrFragmentProcessor() |
| : INHERITED() |
| - , fWillReadDstColor(false) |
| - , fWillUseInputColor(true) {} |
| + , fWillReadDstColor(false) {} |
| virtual const GrBackendFragmentProcessorFactory& getFactory() const = 0; |
| /** Will this effect read the destination pixel value? */ |
| bool willReadDstColor() const { return fWillReadDstColor; } |
| - /** Will this effect read the source color value? */ |
| - bool willUseInputColor() const { return fWillUseInputColor; } |
| - |
| protected: |
| /** |
| * If the effect subclass will read the destination pixel value then it must call this function |
| @@ -306,16 +315,8 @@ protected: |
| */ |
| void setWillReadDstColor() { fWillReadDstColor = true; } |
| - /** |
| - * If the effect will generate a result that does not depend on the input color value then it |
| - * must call this function from its constructor. Otherwise, when its generated backend-specific |
| - * code might fail during variable binding due to unused variables. |
| - */ |
| - void setWillNotUseInputColor() { fWillUseInputColor = false; } |
| - |
| private: |
| bool fWillReadDstColor; |
| - bool fWillUseInputColor; |
| typedef GrProcessor INHERITED; |
| }; |