diff options
author | 2014-12-22 07:35:52 -0800 | |
---|---|---|
committer | 2014-12-22 07:35:52 -0800 | |
commit | 080e673b10ac607305f140ddb245e140ccde40c6 (patch) | |
tree | c8e51428edeeb5fff1075c68a3a408e1f2f0110b /include | |
parent | ebc11635e40ccf2a34fb1cdbc9dec635cb3d74d8 (diff) |
Add XP to handle the cases where we disable color write.
BUG=skia:
Review URL: https://codereview.chromium.org/787233003
Diffstat (limited to 'include')
-rw-r--r-- | include/gpu/GrXferProcessor.h | 21 | ||||
-rw-r--r-- | include/gpu/effects/GrPorterDuffXferProcessor.h | 17 |
2 files changed, 22 insertions, 16 deletions
diff --git a/include/gpu/GrXferProcessor.h b/include/gpu/GrXferProcessor.h index 98585c6a53..2c9961fc6b 100644 --- a/include/gpu/GrXferProcessor.h +++ b/include/gpu/GrXferProcessor.h @@ -86,18 +86,19 @@ public: * A caller who calls this function on a XP is required to honor the returned OptFlags * and color values for its draw. */ - // TODO: remove need for colorWriteDisabled once colorWriteDisabled is its own XP. virtual OptFlags getOptimizations(const GrProcOptInfo& colorPOI, const GrProcOptInfo& coveragePOI, - bool colorWriteDisabled, bool doesStencilWrite, GrColor* overrideColor, const GrDrawTargetCaps& caps) = 0; struct BlendInfo { + BlendInfo() : fWriteColor(true) {} + GrBlendCoeff fSrcBlend; GrBlendCoeff fDstBlend; GrColor fBlendConstant; + bool fWriteColor; }; virtual void getBlendInfo(BlendInfo* blendInfo) const = 0; @@ -176,9 +177,8 @@ public: * certain state information (colorWriteDisabled) to determine whether * coverage can be handled correctly. */ - // TODO: remove need for colorWriteDisabled once colorWriteDisabled is its own XP. - virtual bool canApplyCoverage(const GrProcOptInfo& colorPOI, const GrProcOptInfo& coveragePOI, - bool colorWriteDisabled) const = 0; + virtual bool canApplyCoverage(const GrProcOptInfo& colorPOI, + const GrProcOptInfo& coveragePOI) const = 0; struct InvariantOutput { @@ -192,9 +192,8 @@ public: * this xp factory. The invariant color information returned by this function refers to the * final color produced after all blending. */ - // TODO: remove need for colorWriteDisabled once only XP can read dst. virtual void getInvariantOutput(const GrProcOptInfo& colorPOI, const GrProcOptInfo& coveragePOI, - bool colorWriteDisabled, InvariantOutput*) const = 0; + InvariantOutput*) const = 0; /** * Determines whether multiplying the computed per-pixel color by the pixel's fractional @@ -203,6 +202,14 @@ public: */ virtual bool canTweakAlphaForCoverage() const = 0; + /** + * Returns true if the XP generated by this factory will read dst. + */ + // TODO: Currently this function must also check if the color/coverage stages read dst. + // Once only XP's can read dst we can remove the ProcOptInfo's from this function. + virtual bool willReadDst(const GrProcOptInfo& colorPOI, + const GrProcOptInfo& coveragePOI) const = 0; + bool isEqual(const GrXPFactory& that) const { if (this->classID() != that.classID()) { return false; diff --git a/include/gpu/effects/GrPorterDuffXferProcessor.h b/include/gpu/effects/GrPorterDuffXferProcessor.h index fab14c732a..6850cb5646 100644 --- a/include/gpu/effects/GrPorterDuffXferProcessor.h +++ b/include/gpu/effects/GrPorterDuffXferProcessor.h @@ -12,7 +12,6 @@ #include "GrXferProcessor.h" #include "SkXfermode.h" -class GrInvariantOutput; class GrProcOptInfo; class GrPorterDuffXferProcessor : public GrXferProcessor { @@ -22,15 +21,15 @@ public: return SkNEW_ARGS(GrPorterDuffXferProcessor, (srcBlend, dstBlend, constant)); } - virtual ~GrPorterDuffXferProcessor(); + ~GrPorterDuffXferProcessor() SK_OVERRIDE; - virtual const char* name() const SK_OVERRIDE { return "Porter Duff"; } + const char* name() const SK_OVERRIDE { return "Porter Duff"; } void getGLProcessorKey(const GrGLCaps& caps, GrProcessorKeyBuilder* b) const SK_OVERRIDE; GrGLXferProcessor* createGLInstance() const SK_OVERRIDE; - virtual bool hasSecondaryOutput() const SK_OVERRIDE; + bool hasSecondaryOutput() const SK_OVERRIDE; /////////////////////////////////////////////////////////////////////////// /// @name Stage Output Types @@ -68,7 +67,6 @@ public: GrXferProcessor::OptFlags getOptimizations(const GrProcOptInfo& colorPOI, const GrProcOptInfo& coveragePOI, - bool colorWriteDisabled, bool doesStencilWrite, GrColor* overrideColor, const GrDrawTargetCaps& caps) SK_OVERRIDE; @@ -96,7 +94,6 @@ private: GrXferProcessor::OptFlags internalGetOptimizations(const GrProcOptInfo& colorPOI, const GrProcOptInfo& coveragePOI, - bool colorWriteDisabled, bool doesStencilWrite); void calcOutputTypes(GrXferProcessor::OptFlags blendOpts, const GrDrawTargetCaps& caps, @@ -130,15 +127,17 @@ public: bool supportsRGBCoverage(GrColor knownColor, uint32_t knownColorFlags) const SK_OVERRIDE; - bool canApplyCoverage(const GrProcOptInfo& colorPOI, const GrProcOptInfo& coveragePOI, - bool colorWriteDisabled) const SK_OVERRIDE; + bool canApplyCoverage(const GrProcOptInfo& colorPOI, + const GrProcOptInfo& coveragePOI) const SK_OVERRIDE; bool canTweakAlphaForCoverage() const SK_OVERRIDE; void getInvariantOutput(const GrProcOptInfo& colorPOI, const GrProcOptInfo& coveragePOI, - bool colorWriteDisabled, GrXPFactory::InvariantOutput*) const SK_OVERRIDE; + bool willReadDst(const GrProcOptInfo& colorPOI, + const GrProcOptInfo& coveragePOI) const SK_OVERRIDE; + private: GrPorterDuffXPFactory(GrBlendCoeff src, GrBlendCoeff dst); |