From: bsalomon Date: Fri, 22 May 2015 21:32:10 +0000 (-0700) Subject: Move DstCoordTexture to GrXP, rename and remove the word "copy" from dstcopytexture... X-Git-Tag: accepted/tizen/5.0/unified/20181102.025319~2282 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=bb106b5f6ee18f7453b63f3a95f421b60a957f39;p=platform%2Fupstream%2FlibSkiaSharp.git Move DstCoordTexture to GrXP, rename and remove the word "copy" from dstcopytexture names. Review URL: https://codereview.chromium.org/1132093004 --- diff --git a/include/gpu/GrTexture.h b/include/gpu/GrTexture.h index d565f2f..ddba940 100644 --- a/include/gpu/GrTexture.h +++ b/include/gpu/GrTexture.h @@ -70,43 +70,4 @@ private: typedef GrSurface INHERITED; }; -/** - * Represents a texture that is intended to be accessed in device coords with an offset. - */ -class GrDeviceCoordTexture { -public: - GrDeviceCoordTexture() { fOffset.set(0, 0); } - - GrDeviceCoordTexture(const GrDeviceCoordTexture& other) { - *this = other; - } - - GrDeviceCoordTexture(GrTexture* texture, const SkIPoint& offset) - : fTexture(SkSafeRef(texture)) - , fOffset(offset) { - } - - GrDeviceCoordTexture& operator=(const GrDeviceCoordTexture& other) { - fTexture.reset(SkSafeRef(other.fTexture.get())); - fOffset = other.fOffset; - return *this; - } - - const SkIPoint& offset() const { return fOffset; } - - void setOffset(const SkIPoint& offset) { fOffset = offset; } - void setOffset(int ox, int oy) { fOffset.set(ox, oy); } - - GrTexture* texture() const { return fTexture.get(); } - - GrTexture* setTexture(GrTexture* texture) { - fTexture.reset(SkSafeRef(texture)); - return texture; - } - -private: - SkAutoTUnref fTexture; - SkIPoint fOffset; -}; - #endif diff --git a/include/gpu/GrXferProcessor.h b/include/gpu/GrXferProcessor.h index 85e5aa0..812a9b3 100644 --- a/include/gpu/GrXferProcessor.h +++ b/include/gpu/GrXferProcessor.h @@ -104,6 +104,47 @@ enum GrXferBarrierType { class GrXferProcessor : public GrProcessor { public: /** + * A texture that contains the dst pixel values and an integer coord offset from device space + * to the space of the texture. Depending on GPU capabilities a DstTexture may be used by a + * GrXferProcessor for blending in the fragment shader. + */ + class DstTexture { + public: + DstTexture() { fOffset.set(0, 0); } + + DstTexture(const DstTexture& other) { + *this = other; + } + + DstTexture(GrTexture* texture, const SkIPoint& offset) + : fTexture(SkSafeRef(texture)) + , fOffset(offset) { + } + + DstTexture& operator=(const DstTexture& other) { + fTexture.reset(SkSafeRef(other.fTexture.get())); + fOffset = other.fOffset; + return *this; + } + + const SkIPoint& offset() const { return fOffset; } + + void setOffset(const SkIPoint& offset) { fOffset = offset; } + void setOffset(int ox, int oy) { fOffset.set(ox, oy); } + + GrTexture* texture() const { return fTexture.get(); } + + GrTexture* setTexture(GrTexture* texture) { + fTexture.reset(SkSafeRef(texture)); + return texture; + } + + private: + SkAutoTUnref fTexture; + SkIPoint fOffset; + }; + + /** * Sets a unique key on the GrProcessorKeyBuilder calls onGetGLProcessorKey(...) to get the * specific subclass's key. */ @@ -199,15 +240,15 @@ public: * shader. If the returned texture is NULL then the XP is either not reading the dst or we have * extentions that support framebuffer fetching and thus don't need a copy of the dst texture. */ - const GrTexture* getDstCopyTexture() const { return fDstCopy.getTexture(); } + const GrTexture* getDstTexture() const { return fDstTexture.getTexture(); } /** - * Returns the offset into the DstCopyTexture to use when reading it in the shader. This value - * is only valid if getDstCopyTexture() != NULL. + * Returns the offset in device coords to use when accessing the dst texture to get the dst + * pixel color in the shader. This value is only valid if getDstTexture() != NULL. */ - const SkIPoint& dstCopyTextureOffset() const { - SkASSERT(this->getDstCopyTexture()); - return fDstCopyTextureOffset; + const SkIPoint& dstTextureOffset() const { + SkASSERT(this->getDstTexture()); + return fDstTextureOffset; } /** @@ -238,10 +279,10 @@ public: if (this->fReadsCoverage != that.fReadsCoverage) { return false; } - if (this->fDstCopy.getTexture() != that.fDstCopy.getTexture()) { + if (this->fDstTexture.getTexture() != that.fDstTexture.getTexture()) { return false; } - if (this->fDstCopyTextureOffset != that.fDstCopyTextureOffset) { + if (this->fDstTextureOffset != that.fDstTextureOffset) { return false; } return this->onIsEqual(that); @@ -249,7 +290,7 @@ public: protected: GrXferProcessor(); - GrXferProcessor(const GrDeviceCoordTexture* dstCopy, bool willReadDstColor); + GrXferProcessor(const DstTexture*, bool willReadDstColor); private: virtual OptFlags onGetOptimizations(const GrProcOptInfo& colorPOI, @@ -286,8 +327,8 @@ private: bool fWillReadDstColor; bool fReadsCoverage; - SkIPoint fDstCopyTextureOffset; - GrTextureAccess fDstCopy; + SkIPoint fDstTextureOffset; + GrTextureAccess fDstTexture; typedef GrFragmentProcessor INHERITED; }; @@ -309,9 +350,10 @@ GR_MAKE_BITFIELD_OPS(GrXferProcessor::OptFlags); */ class GrXPFactory : public SkRefCnt { public: + typedef GrXferProcessor::DstTexture DstTexture; GrXferProcessor* createXferProcessor(const GrProcOptInfo& colorPOI, const GrProcOptInfo& coveragePOI, - const GrDeviceCoordTexture* dstCopy, + const DstTexture*, const GrCaps& caps) const; /** @@ -335,8 +377,8 @@ public: virtual void getInvariantOutput(const GrProcOptInfo& colorPOI, const GrProcOptInfo& coveragePOI, InvariantOutput*) const = 0; - bool willNeedDstCopy(const GrCaps& caps, const GrProcOptInfo& colorPOI, - const GrProcOptInfo& coveragePOI) const; + bool willNeedDstTexture(const GrCaps& caps, const GrProcOptInfo& colorPOI, + const GrProcOptInfo& coveragePOI) const; bool isEqual(const GrXPFactory& that) const { if (this->classID() != that.classID()) { @@ -366,7 +408,7 @@ private: virtual GrXferProcessor* onCreateXferProcessor(const GrCaps& caps, const GrProcOptInfo& colorPOI, const GrProcOptInfo& coveragePOI, - const GrDeviceCoordTexture* dstCopy) const = 0; + const DstTexture*) const = 0; /** * Returns true if the XP generated by this factory will explicitly read dst in the fragment * shader. diff --git a/include/gpu/effects/GrCoverageSetOpXP.h b/include/gpu/effects/GrCoverageSetOpXP.h index f4224e1..2f4530c 100644 --- a/include/gpu/effects/GrCoverageSetOpXP.h +++ b/include/gpu/effects/GrCoverageSetOpXP.h @@ -37,7 +37,7 @@ private: GrXferProcessor* onCreateXferProcessor(const GrCaps& caps, const GrProcOptInfo& colorPOI, const GrProcOptInfo& coveragePOI, - const GrDeviceCoordTexture* dstCopy) const override; + const DstTexture*) const override; bool willReadDstColor(const GrCaps& /*caps*/, const GrProcOptInfo& /*colorPOI*/, diff --git a/include/gpu/effects/GrPorterDuffXferProcessor.h b/include/gpu/effects/GrPorterDuffXferProcessor.h index 56ddb37..e4f7220 100644 --- a/include/gpu/effects/GrPorterDuffXferProcessor.h +++ b/include/gpu/effects/GrPorterDuffXferProcessor.h @@ -29,7 +29,7 @@ private: GrXferProcessor* onCreateXferProcessor(const GrCaps& caps, const GrProcOptInfo& colorPOI, const GrProcOptInfo& coveragePOI, - const GrDeviceCoordTexture* dstCopy) const override; + const DstTexture*) const override; bool willReadDstColor(const GrCaps& caps, const GrProcOptInfo& colorPOI, diff --git a/src/effects/SkArithmeticMode_gpu.cpp b/src/effects/SkArithmeticMode_gpu.cpp index ae08397..3b815e5 100644 --- a/src/effects/SkArithmeticMode_gpu.cpp +++ b/src/effects/SkArithmeticMode_gpu.cpp @@ -161,9 +161,8 @@ GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrArithmeticFP); class ArithmeticXP : public GrXferProcessor { public: static GrXferProcessor* Create(float k1, float k2, float k3, float k4, bool enforcePMColor, - const GrDeviceCoordTexture* dstCopy, - bool willReadDstColor) { - return SkNEW_ARGS(ArithmeticXP, (k1, k2, k3, k4, enforcePMColor, dstCopy, + const DstTexture* dstTexture, bool willReadDstColor) { + return SkNEW_ARGS(ArithmeticXP, (k1, k2, k3, k4, enforcePMColor, dstTexture, willReadDstColor)); } @@ -183,7 +182,7 @@ public: private: ArithmeticXP(float k1, float k2, float k3, float k4, bool enforcePMColor, - const GrDeviceCoordTexture* dstCopy, bool willReadDstColor); + const DstTexture*, bool willReadDstColor); GrXferProcessor::OptFlags onGetOptimizations(const GrProcOptInfo& colorPOI, const GrProcOptInfo& coveragePOI, @@ -263,8 +262,8 @@ private: /////////////////////////////////////////////////////////////////////////////// ArithmeticXP::ArithmeticXP(float k1, float k2, float k3, float k4, bool enforcePMColor, - const GrDeviceCoordTexture* dstCopy, bool willReadDstColor) - : INHERITED(dstCopy, willReadDstColor) + const DstTexture* dstTexture, bool willReadDstColor) + : INHERITED(dstTexture, willReadDstColor) , fK1(k1) , fK2(k2) , fK3(k3) @@ -301,8 +300,8 @@ GrXferProcessor* GrArithmeticXPFactory::onCreateXferProcessor(const GrCaps& caps, const GrProcOptInfo& colorPOI, const GrProcOptInfo& coveragePOI, - const GrDeviceCoordTexture* dstCopy) const { - return ArithmeticXP::Create(fK1, fK2, fK3, fK4, fEnforcePMColor, dstCopy, + const DstTexture* dstTexture) const { + return ArithmeticXP::Create(fK1, fK2, fK3, fK4, fEnforcePMColor, dstTexture, this->willReadDstColor(caps, colorPOI, coveragePOI)); } diff --git a/src/effects/SkArithmeticMode_gpu.h b/src/effects/SkArithmeticMode_gpu.h index cbf32ff..0c1e9d7 100644 --- a/src/effects/SkArithmeticMode_gpu.h +++ b/src/effects/SkArithmeticMode_gpu.h @@ -90,7 +90,7 @@ private: GrXferProcessor* onCreateXferProcessor(const GrCaps& caps, const GrProcOptInfo& colorPOI, const GrProcOptInfo& coveragePOI, - const GrDeviceCoordTexture* dstCopy) const override; + const DstTexture*) const override; bool willReadDstColor(const GrCaps& caps, const GrProcOptInfo& colorPOI, diff --git a/src/gpu/GrDrawTarget.cpp b/src/gpu/GrDrawTarget.cpp index e5baaa7..644161f 100644 --- a/src/gpu/GrDrawTarget.cpp +++ b/src/gpu/GrDrawTarget.cpp @@ -43,9 +43,9 @@ GrDrawTarget::GrDrawTarget(GrContext* context) bool GrDrawTarget::setupDstReadIfNecessary(const GrPipelineBuilder& pipelineBuilder, const GrProcOptInfo& colorPOI, const GrProcOptInfo& coveragePOI, - GrDeviceCoordTexture* dstCopy, + GrXferProcessor::DstTexture* dstTexture, const SkRect* drawBounds) { - if (!pipelineBuilder.willXPNeedDstCopy(*this->caps(), colorPOI, coveragePOI)) { + if (!pipelineBuilder.willXPNeedDstTexture(*this->caps(), colorPOI, coveragePOI)) { return true; } @@ -55,8 +55,8 @@ bool GrDrawTarget::setupDstReadIfNecessary(const GrPipelineBuilder& pipelineBuil if (GrTexture* rtTex = rt->asTexture()) { // The render target is a texture, se we can read from it directly in the shader. The XP // will be responsible to detect this situation and request a texture barrier. - dstCopy->setTexture(rtTex); - dstCopy->setOffset(0, 0); + dstTexture->setTexture(rtTex); + dstTexture->setOffset(0, 0); return true; } } @@ -102,8 +102,8 @@ bool GrDrawTarget::setupDstReadIfNecessary(const GrPipelineBuilder& pipelineBuil } SkIPoint dstPoint = {0, 0}; if (this->copySurface(copy, rt, copyRect, dstPoint)) { - dstCopy->setTexture(copy); - dstCopy->setOffset(copyRect.fLeft, copyRect.fTop); + dstTexture->setTexture(copy); + dstTexture->setOffset(copyRect.fLeft, copyRect.fTop); return true; } else { return false; @@ -497,7 +497,7 @@ void GrDrawTarget::setupPipeline(const PipelineInfo& pipelineInfo, pipelineInfo.fCoveragePOI, *this->caps(), *pipelineInfo.fScissor, - &pipelineInfo.fDstCopy)); + &pipelineInfo.fDstTexture)); } /////////////////////////////////////////////////////////////////////////////// @@ -511,7 +511,7 @@ GrDrawTarget::PipelineInfo::PipelineInfo(GrPipelineBuilder* pipelineBuilder, fColorPOI = fPipelineBuilder->colorProcInfo(primProc); fCoveragePOI = fPipelineBuilder->coverageProcInfo(primProc); if (!target->setupDstReadIfNecessary(*fPipelineBuilder, fColorPOI, fCoveragePOI, - &fDstCopy, devBounds)) { + &fDstTexture, devBounds)) { fPipelineBuilder = NULL; } } @@ -526,7 +526,7 @@ GrDrawTarget::PipelineInfo::PipelineInfo(GrPipelineBuilder* pipelineBuilder, fColorPOI = fPipelineBuilder->colorProcInfo(batch); fCoveragePOI = fPipelineBuilder->coverageProcInfo(batch); if (!target->setupDstReadIfNecessary(*fPipelineBuilder, fColorPOI, fCoveragePOI, - &fDstCopy, devBounds)) { + &fDstTexture, devBounds)) { fPipelineBuilder = NULL; } } diff --git a/src/gpu/GrDrawTarget.h b/src/gpu/GrDrawTarget.h index a5e3b8e..9cb91e3 100644 --- a/src/gpu/GrDrawTarget.h +++ b/src/gpu/GrDrawTarget.h @@ -18,6 +18,7 @@ #include "GrPipelineBuilder.h" #include "GrTraceMarker.h" #include "GrVertexBuffer.h" +#include "GrXferProcessor.h" #include "SkClipStack.h" #include "SkMatrix.h" @@ -230,7 +231,7 @@ protected: bool setupDstReadIfNecessary(const GrPipelineBuilder&, const GrProcOptInfo& colorPOI, const GrProcOptInfo& coveragePOI, - GrDeviceCoordTexture* dstCopy, + GrXferProcessor::DstTexture*, const SkRect* drawBounds); struct PipelineInfo { @@ -250,11 +251,11 @@ protected: bool mustSkipDraw() const { return (NULL == fPipelineBuilder); } - GrPipelineBuilder* fPipelineBuilder; - GrScissorState* fScissor; - GrProcOptInfo fColorPOI; - GrProcOptInfo fCoveragePOI; - GrDeviceCoordTexture fDstCopy; + GrPipelineBuilder* fPipelineBuilder; + GrScissorState* fScissor; + GrProcOptInfo fColorPOI; + GrProcOptInfo fCoveragePOI; + GrXferProcessor::DstTexture fDstTexture; }; void setupPipeline(const PipelineInfo& pipelineInfo, GrPipeline* pipeline); diff --git a/src/gpu/GrPipeline.cpp b/src/gpu/GrPipeline.cpp index f17f402..d9d3d94 100644 --- a/src/gpu/GrPipeline.cpp +++ b/src/gpu/GrPipeline.cpp @@ -19,10 +19,11 @@ GrPipeline::GrPipeline(const GrPipelineBuilder& pipelineBuilder, const GrProcOptInfo& coveragePOI, const GrCaps& caps, const GrScissorState& scissorState, - const GrDeviceCoordTexture* dstCopy) { + const GrXferProcessor::DstTexture* dstTexture) { // Create XferProcessor from DS's XPFactory SkAutoTUnref xferProcessor( - pipelineBuilder.getXPFactory()->createXferProcessor(colorPOI, coveragePOI, dstCopy, caps)); + pipelineBuilder.getXPFactory()->createXferProcessor( + colorPOI, coveragePOI, dstTexture, caps)); GrColor overrideColor = GrColor_ILLEGAL; if (colorPOI.firstEffectiveStageIndex() != 0) { diff --git a/src/gpu/GrPipeline.h b/src/gpu/GrPipeline.h index a85ae67..4b979f0 100644 --- a/src/gpu/GrPipeline.h +++ b/src/gpu/GrPipeline.h @@ -34,7 +34,7 @@ public: const GrProcOptInfo& coveragePOI, const GrCaps&, const GrScissorState&, - const GrDeviceCoordTexture* dstCopy); + const GrXferProcessor::DstTexture*); /* * Returns true if these pipelines are equivalent. diff --git a/src/gpu/GrPipelineBuilder.cpp b/src/gpu/GrPipelineBuilder.cpp index 3e9f330..f34476e 100644 --- a/src/gpu/GrPipelineBuilder.cpp +++ b/src/gpu/GrPipelineBuilder.cpp @@ -86,10 +86,10 @@ void GrPipelineBuilder::setFromPaint(const GrPaint& paint, GrRenderTarget* rt, c //////////////////////////////////////////////////////////////////////////////s -bool GrPipelineBuilder::willXPNeedDstCopy(const GrCaps& caps, - const GrProcOptInfo& colorPOI, - const GrProcOptInfo& coveragePOI) const { - return this->getXPFactory()->willNeedDstCopy(caps, colorPOI, coveragePOI); +bool GrPipelineBuilder::willXPNeedDstTexture(const GrCaps& caps, + const GrProcOptInfo& colorPOI, + const GrProcOptInfo& coveragePOI) const { + return this->getXPFactory()->willNeedDstTexture(caps, colorPOI, coveragePOI); } void GrPipelineBuilder::AutoRestoreFragmentProcessors::set(GrPipelineBuilder* pipelineBuilder) { diff --git a/src/gpu/GrPipelineBuilder.h b/src/gpu/GrPipelineBuilder.h index 447a981..09b4f91 100644 --- a/src/gpu/GrPipelineBuilder.h +++ b/src/gpu/GrPipelineBuilder.h @@ -177,10 +177,10 @@ public: } /** - * Checks whether the xp will need a copy of the destination to correctly blend. + * Checks whether the xp will need destination in a texture to correctly blend. */ - bool willXPNeedDstCopy(const GrCaps& caps, const GrProcOptInfo& colorPOI, - const GrProcOptInfo& coveragePOI) const; + bool willXPNeedDstTexture(const GrCaps& caps, const GrProcOptInfo& colorPOI, + const GrProcOptInfo& coveragePOI) const; /// @} diff --git a/src/gpu/GrXferProcessor.cpp b/src/gpu/GrXferProcessor.cpp index 343a05e..e771f64 100644 --- a/src/gpu/GrXferProcessor.cpp +++ b/src/gpu/GrXferProcessor.cpp @@ -9,17 +9,17 @@ #include "gl/GrGLCaps.h" GrXferProcessor::GrXferProcessor() - : fWillReadDstColor(false), fReadsCoverage(true), fDstCopyTextureOffset() { + : fWillReadDstColor(false), fReadsCoverage(true), fDstTextureOffset() { } -GrXferProcessor::GrXferProcessor(const GrDeviceCoordTexture* dstCopy, bool willReadDstColor) +GrXferProcessor::GrXferProcessor(const DstTexture* dstTexture, bool willReadDstColor) : fWillReadDstColor(willReadDstColor) , fReadsCoverage(true) - , fDstCopyTextureOffset() { - if (dstCopy && dstCopy->texture()) { - fDstCopy.reset(dstCopy->texture()); - fDstCopyTextureOffset = dstCopy->offset(); - this->addTextureAccess(&fDstCopy); + , fDstTextureOffset() { + if (dstTexture && dstTexture->texture()) { + fDstTexture.reset(dstTexture->texture()); + fDstTextureOffset = dstTexture->offset(); + this->addTextureAccess(&fDstTexture); this->setWillReadFragmentPosition(); } } @@ -43,8 +43,8 @@ GrXferProcessor::OptFlags GrXferProcessor::getOptimizations(const GrProcOptInfo& void GrXferProcessor::getGLProcessorKey(const GrGLSLCaps& caps, GrProcessorKeyBuilder* b) const { uint32_t key = this->willReadDstColor() ? 0x1 : 0x0; - if (this->getDstCopyTexture() && - kTopLeft_GrSurfaceOrigin == this->getDstCopyTexture()->origin()) { + if (this->getDstTexture() && + kTopLeft_GrSurfaceOrigin == this->getDstTexture()->origin()) { key |= 0x2; } b->add32(key); @@ -54,7 +54,7 @@ void GrXferProcessor::getGLProcessorKey(const GrGLSLCaps& caps, GrProcessorKeyBu bool GrXferProcessor::willNeedXferBarrier(const GrRenderTarget* rt, const GrCaps& caps, GrXferBarrierType* outBarrierType) const { - if (static_cast(rt) == this->getDstCopyTexture()) { + if (static_cast(rt) == this->getDstTexture()) { // Texture barriers are required when a shader reads and renders to the same texture. SkASSERT(rt); SkASSERT(caps.textureBarrierSupport()); @@ -162,25 +162,24 @@ SkString GrXferProcessor::BlendInfo::dump() const { GrXferProcessor* GrXPFactory::createXferProcessor(const GrProcOptInfo& colorPOI, const GrProcOptInfo& coveragePOI, - const GrDeviceCoordTexture* dstCopy, + const DstTexture* dstTexture, const GrCaps& caps) const { #ifdef SK_DEBUG if (this->willReadDstColor(caps, colorPOI, coveragePOI)) { if (!caps.shaderCaps()->dstReadInShaderSupport()) { - SkASSERT(dstCopy && dstCopy->texture()); + SkASSERT(dstTexture && dstTexture->texture()); } else { - SkASSERT(!dstCopy || !dstCopy->texture()); + SkASSERT(!dstTexture || !dstTexture->texture()); } } else { - SkASSERT(!dstCopy || !dstCopy->texture()); + SkASSERT(!dstTexture || !dstTexture->texture()); } #endif - return this->onCreateXferProcessor(caps, colorPOI, coveragePOI, dstCopy); + return this->onCreateXferProcessor(caps, colorPOI, coveragePOI, dstTexture); } -bool GrXPFactory::willNeedDstCopy(const GrCaps& caps, const GrProcOptInfo& colorPOI, - const GrProcOptInfo& coveragePOI) const { +bool GrXPFactory::willNeedDstTexture(const GrCaps& caps, const GrProcOptInfo& colorPOI, + const GrProcOptInfo& coveragePOI) const { return (this->willReadDstColor(caps, colorPOI, coveragePOI) && !caps.shaderCaps()->dstReadInShaderSupport()); } - diff --git a/src/gpu/effects/GrCoverageSetOpXP.cpp b/src/gpu/effects/GrCoverageSetOpXP.cpp index cb7f497..cb6d303 100644 --- a/src/gpu/effects/GrCoverageSetOpXP.cpp +++ b/src/gpu/effects/GrCoverageSetOpXP.cpp @@ -226,7 +226,8 @@ GrXferProcessor* GrCoverageSetOpXPFactory::onCreateXferProcessor(const GrCaps& caps, const GrProcOptInfo& colorPOI, const GrProcOptInfo& covPOI, - const GrDeviceCoordTexture* dstCopy) const { + const DstTexture* dst) const { + SkASSERT(!dst); return CoverageSetOpXP::Create(fRegionOp, fInvertCoverage); } diff --git a/src/gpu/effects/GrCustomXfermode.cpp b/src/gpu/effects/GrCustomXfermode.cpp index e716ea5..be2b343 100644 --- a/src/gpu/effects/GrCustomXfermode.cpp +++ b/src/gpu/effects/GrCustomXfermode.cpp @@ -508,12 +508,12 @@ GrFragmentProcessor* GrCustomXferFP::TestCreate(SkRandom* rand, class CustomXP : public GrXferProcessor { public: - static GrXferProcessor* Create(SkXfermode::Mode mode, const GrDeviceCoordTexture* dstCopy, + static GrXferProcessor* Create(SkXfermode::Mode mode, const DstTexture* dstTexture, bool willReadDstColor) { if (!GrCustomXfermode::IsSupportedMode(mode)) { return NULL; } else { - return SkNEW_ARGS(CustomXP, (mode, dstCopy, willReadDstColor)); + return SkNEW_ARGS(CustomXP, (mode, dstTexture, willReadDstColor)); } } @@ -534,7 +534,7 @@ public: } private: - CustomXP(SkXfermode::Mode mode, const GrDeviceCoordTexture* dstCopy, bool willReadDstColor); + CustomXP(SkXfermode::Mode mode, const DstTexture*, bool willReadDstColor); GrXferProcessor::OptFlags onGetOptimizations(const GrProcOptInfo& colorPOI, const GrProcOptInfo& coveragePOI, @@ -626,9 +626,8 @@ private: /////////////////////////////////////////////////////////////////////////////// -CustomXP::CustomXP(SkXfermode::Mode mode, const GrDeviceCoordTexture* dstCopy, - bool willReadDstColor) - : INHERITED(dstCopy, willReadDstColor), +CustomXP::CustomXP(SkXfermode::Mode mode, const DstTexture* dstTexture, bool willReadDstColor) + : INHERITED(dstTexture, willReadDstColor), fMode(mode), fHWBlendEquation(static_cast(-1)) { this->initClassID(); @@ -790,8 +789,8 @@ GrXferProcessor* GrCustomXPFactory::onCreateXferProcessor(const GrCaps& caps, const GrProcOptInfo& colorPOI, const GrProcOptInfo& coveragePOI, - const GrDeviceCoordTexture* dstCopy) const { - return CustomXP::Create(fMode, dstCopy, this->willReadDstColor(caps, colorPOI, coveragePOI)); + const DstTexture* dstTexture) const { + return CustomXP::Create(fMode, dstTexture, this->willReadDstColor(caps, colorPOI, coveragePOI)); } bool GrCustomXPFactory::willReadDstColor(const GrCaps& caps, diff --git a/src/gpu/effects/GrCustomXfermodePriv.h b/src/gpu/effects/GrCustomXfermodePriv.h index ff4b64c..f7fccca 100644 --- a/src/gpu/effects/GrCustomXfermodePriv.h +++ b/src/gpu/effects/GrCustomXfermodePriv.h @@ -71,7 +71,7 @@ private: GrXferProcessor* onCreateXferProcessor(const GrCaps& caps, const GrProcOptInfo& colorPOI, const GrProcOptInfo& coveragePOI, - const GrDeviceCoordTexture* dstCopy) const override; + const DstTexture*) const override; bool willReadDstColor(const GrCaps& caps, const GrProcOptInfo& colorPOI, diff --git a/src/gpu/effects/GrDisableColorXP.cpp b/src/gpu/effects/GrDisableColorXP.cpp index 38c8f91..d380e89 100644 --- a/src/gpu/effects/GrDisableColorXP.cpp +++ b/src/gpu/effects/GrDisableColorXP.cpp @@ -103,7 +103,8 @@ GrXferProcessor* GrDisableColorXPFactory::onCreateXferProcessor(const GrCaps& caps, const GrProcOptInfo& colorPOI, const GrProcOptInfo& covPOI, - const GrDeviceCoordTexture* dstCopy) const { + const DstTexture* dst) const { + SkASSERT(!dst); return DisableColorXP::Create(); } diff --git a/src/gpu/effects/GrDisableColorXP.h b/src/gpu/effects/GrDisableColorXP.h index c5ed8f0..6289834 100644 --- a/src/gpu/effects/GrDisableColorXP.h +++ b/src/gpu/effects/GrDisableColorXP.h @@ -35,7 +35,7 @@ private: GrXferProcessor* onCreateXferProcessor(const GrCaps& caps, const GrProcOptInfo& colorPOI, const GrProcOptInfo& coveragePOI, - const GrDeviceCoordTexture* dstCopy) const override; + const DstTexture* dstTexture) const override; bool willReadDstColor(const GrCaps& caps, const GrProcOptInfo& colorPOI, diff --git a/src/gpu/effects/GrPorterDuffXferProcessor.cpp b/src/gpu/effects/GrPorterDuffXferProcessor.cpp index bc61f49..3bcaf26 100644 --- a/src/gpu/effects/GrPorterDuffXferProcessor.cpp +++ b/src/gpu/effects/GrPorterDuffXferProcessor.cpp @@ -307,9 +307,9 @@ static BlendFormula get_unoptimized_blend_formula(SkXfermode::Mode xfermode) { class PorterDuffXferProcessor : public GrXferProcessor { public: - static GrXferProcessor* Create(SkXfermode::Mode xfermode, const GrDeviceCoordTexture* dstCopy, + static GrXferProcessor* Create(SkXfermode::Mode xfermode, const DstTexture* dstTexture, bool willReadDstColor) { - return SkNEW_ARGS(PorterDuffXferProcessor, (xfermode, dstCopy, willReadDstColor)); + return SkNEW_ARGS(PorterDuffXferProcessor, (xfermode, dstTexture, willReadDstColor)); } ~PorterDuffXferProcessor() override; @@ -326,8 +326,7 @@ public: BlendFormula getBlendFormula() const { return fBlendFormula; } private: - PorterDuffXferProcessor(SkXfermode::Mode, const GrDeviceCoordTexture* dstCopy, - bool willReadDstColor); + PorterDuffXferProcessor(SkXfermode::Mode, const DstTexture*, bool willReadDstColor); GrXferProcessor::OptFlags onGetOptimizations(const GrProcOptInfo& colorPOI, const GrProcOptInfo& coveragePOI, @@ -506,9 +505,9 @@ private: /////////////////////////////////////////////////////////////////////////////// PorterDuffXferProcessor::PorterDuffXferProcessor(SkXfermode::Mode xfermode, - const GrDeviceCoordTexture* dstCopy, + const DstTexture* dstTexture, bool willReadDstColor) - : INHERITED(dstCopy, willReadDstColor) + : INHERITED(dstTexture, willReadDstColor) , fXfermode(xfermode) , fBlendFormula(get_unoptimized_blend_formula(xfermode)) { this->initClassID(); @@ -723,11 +722,11 @@ GrXferProcessor* GrPorterDuffXPFactory::onCreateXferProcessor(const GrCaps& caps, const GrProcOptInfo& colorPOI, const GrProcOptInfo& covPOI, - const GrDeviceCoordTexture* dstCopy) const { + const DstTexture* dstTexture) const { if (covPOI.isFourChannelOutput()) { return PDLCDXferProcessor::Create(fXfermode, colorPOI); } else { - return PorterDuffXferProcessor::Create(fXfermode, dstCopy, + return PorterDuffXferProcessor::Create(fXfermode, dstTexture, this->willReadDstColor(caps, colorPOI, covPOI)); } } diff --git a/src/gpu/gl/GrGLProgram.cpp b/src/gpu/gl/GrGLProgram.cpp index 8ae581c..da242aa 100644 --- a/src/gpu/gl/GrGLProgram.cpp +++ b/src/gpu/gl/GrGLProgram.cpp @@ -36,7 +36,7 @@ GrGLProgram::GrGLProgram(GrGLGpu* gpu, GrGLInstalledFragProcs* fragmentProcessors) : fColor(GrColor_ILLEGAL) , fCoverage(0) - , fDstCopyTexUnit(-1) + , fDstTextureUnit(-1) , fBuiltinUniformHandles(builtinUniforms) , fProgramID(programID) , fGeometryProcessor(geometryProcessor) diff --git a/src/gpu/gl/GrGLProgram.h b/src/gpu/gl/GrGLProgram.h index 3c97e0f..defbd61 100644 --- a/src/gpu/gl/GrGLProgram.h +++ b/src/gpu/gl/GrGLProgram.h @@ -138,7 +138,7 @@ protected: RenderTargetState fRenderTargetState; GrColor fColor; uint8_t fCoverage; - int fDstCopyTexUnit; + int fDstTextureUnit; BuiltinUniformHandles fBuiltinUniformHandles; GrGLuint fProgramID; diff --git a/src/gpu/gl/GrGLProgramDesc.h b/src/gpu/gl/GrGLProgramDesc.h index a10b0e8..1d53e62 100644 --- a/src/gpu/gl/GrGLProgramDesc.h +++ b/src/gpu/gl/GrGLProgramDesc.h @@ -54,8 +54,6 @@ public: * this optstate. * @param GrGLGpu A GL Gpu, the caps and Gpu object are used to output processor specific * parts of the descriptor. - * @param GrDeviceCoordTexture A dstCopy texture, which may be null if frame buffer fetch is - * supported * @param GrProgramDesc The built and finalized descriptor **/ static bool Build(GrProgramDesc*, diff --git a/src/gpu/gl/GrGLXferProcessor.cpp b/src/gpu/gl/GrGLXferProcessor.cpp index 657da41..b707a3f 100644 --- a/src/gpu/gl/GrGLXferProcessor.cpp +++ b/src/gpu/gl/GrGLXferProcessor.cpp @@ -12,8 +12,8 @@ #include "gl/builders/GrGLProgramBuilder.h" void GrGLXferProcessor::emitCode(const EmitArgs& args) { - if (args.fXP.getDstCopyTexture()) { - bool topDown = kTopLeft_GrSurfaceOrigin == args.fXP.getDstCopyTexture()->origin(); + if (args.fXP.getDstTexture()) { + bool topDown = kTopLeft_GrSurfaceOrigin == args.fXP.getDstTexture()->origin(); GrGLXPFragmentBuilder* fsBuilder = args.fPB->getFragmentShaderBuilder(); @@ -27,24 +27,24 @@ void GrGLXferProcessor::emitCode(const EmitArgs& args) { const char* dstColor = fsBuilder->dstColor(); - const char* dstCopyTopLeftName; - const char* dstCopyCoordScaleName; + const char* dstTopLeftName; + const char* dstCoordScaleName; - fDstCopyTopLeftUni = args.fPB->addUniform(GrGLProgramBuilder::kFragment_Visibility, - kVec2f_GrSLType, - kDefault_GrSLPrecision, - "DstCopyUpperLeft", - &dstCopyTopLeftName); - fDstCopyScaleUni = args.fPB->addUniform(GrGLProgramBuilder::kFragment_Visibility, - kVec2f_GrSLType, - kDefault_GrSLPrecision, - "DstCopyCoordScale", - &dstCopyCoordScaleName); + fDstTopLeftUni = args.fPB->addUniform(GrGLProgramBuilder::kFragment_Visibility, + kVec2f_GrSLType, + kDefault_GrSLPrecision, + "DstTextureUpperLeft", + &dstTopLeftName); + fDstScaleUni = args.fPB->addUniform(GrGLProgramBuilder::kFragment_Visibility, + kVec2f_GrSLType, + kDefault_GrSLPrecision, + "DstTextureCoordScale", + &dstCoordScaleName); const char* fragPos = fsBuilder->fragmentPosition(); fsBuilder->codeAppend("// Read color from copy of the destination.\n"); fsBuilder->codeAppendf("vec2 _dstTexCoord = (%s.xy - %s) * %s;", - fragPos, dstCopyTopLeftName, dstCopyCoordScaleName); + fragPos, dstTopLeftName, dstCoordScaleName); if (!topDown) { fsBuilder->codeAppend("_dstTexCoord.y = 1.0 - _dstTexCoord.y;"); @@ -59,18 +59,18 @@ void GrGLXferProcessor::emitCode(const EmitArgs& args) { } void GrGLXferProcessor::setData(const GrGLProgramDataManager& pdm, const GrXferProcessor& xp) { - if (xp.getDstCopyTexture()) { - if (fDstCopyTopLeftUni.isValid()) { - pdm.set2f(fDstCopyTopLeftUni, static_cast(xp.dstCopyTextureOffset().fX), - static_cast(xp.dstCopyTextureOffset().fY)); - pdm.set2f(fDstCopyScaleUni, 1.f / xp.getDstCopyTexture()->width(), - 1.f / xp.getDstCopyTexture()->height()); + if (xp.getDstTexture()) { + if (fDstTopLeftUni.isValid()) { + pdm.set2f(fDstTopLeftUni, static_cast(xp.dstTextureOffset().fX), + static_cast(xp.dstTextureOffset().fY)); + pdm.set2f(fDstScaleUni, 1.f / xp.getDstTexture()->width(), + 1.f / xp.getDstTexture()->height()); } else { - SkASSERT(!fDstCopyScaleUni.isValid()); + SkASSERT(!fDstScaleUni.isValid()); } } else { - SkASSERT(!fDstCopyTopLeftUni.isValid()); - SkASSERT(!fDstCopyScaleUni.isValid()); + SkASSERT(!fDstTopLeftUni.isValid()); + SkASSERT(!fDstScaleUni.isValid()); } this->onSetData(pdm, xp); } diff --git a/src/gpu/gl/GrGLXferProcessor.h b/src/gpu/gl/GrGLXferProcessor.h index 7f60f32..6b05dcb 100644 --- a/src/gpu/gl/GrGLXferProcessor.h +++ b/src/gpu/gl/GrGLXferProcessor.h @@ -63,8 +63,8 @@ private: virtual void onSetData(const GrGLProgramDataManager&, const GrXferProcessor&) = 0; - GrGLProgramDataManager::UniformHandle fDstCopyTopLeftUni; - GrGLProgramDataManager::UniformHandle fDstCopyScaleUni; + GrGLProgramDataManager::UniformHandle fDstTopLeftUni; + GrGLProgramDataManager::UniformHandle fDstScaleUni; typedef GrGLProcessor INHERITED; }; diff --git a/src/gpu/gl/builders/GrGLFragmentShaderBuilder.cpp b/src/gpu/gl/builders/GrGLFragmentShaderBuilder.cpp index 044752f..ee137c4 100644 --- a/src/gpu/gl/builders/GrGLFragmentShaderBuilder.cpp +++ b/src/gpu/gl/builders/GrGLFragmentShaderBuilder.cpp @@ -12,7 +12,7 @@ #define GL_CALL(X) GR_GL_CALL(fProgramBuilder->gpu()->glInterface(), X) #define GL_CALL_RET(R, X) GR_GL_CALL_RET(fProgramBuilder->gpu()->glInterface(), R, X) -const char* GrGLFragmentShaderBuilder::kDstCopyColorName = "_dstColor"; +const char* GrGLFragmentShaderBuilder::kDstTextureColorName = "_dstColor"; static const char* declared_color_output_name() { return "fsColorOut"; } static const char* dual_source_output_name() { return "dualSourceOut"; } static void append_default_precision_qualifier(GrSLPrecision p, @@ -78,17 +78,17 @@ static const char* specific_layout_qualifier_name(GrBlendEquation equation) { } GrGLFragmentShaderBuilder::DstReadKey -GrGLFragmentShaderBuilder::KeyForDstRead(const GrTexture* dstCopy, const GrGLCaps& caps) { +GrGLFragmentShaderBuilder::KeyForDstRead(const GrTexture* dstTexture, const GrGLCaps& caps) { uint32_t key = kYesDstRead_DstReadKeyBit; if (caps.glslCaps()->fbFetchSupport()) { return key; } - SkASSERT(dstCopy); - if (!caps.textureSwizzleSupport() && GrPixelConfigIsAlphaOnly(dstCopy->config())) { + SkASSERT(dstTexture); + if (!caps.textureSwizzleSupport() && GrPixelConfigIsAlphaOnly(dstTexture->config())) { // The fact that the config is alpha-only must be considered when generating code. key |= kUseAlphaConfig_DstReadKeyBit; } - if (kTopLeft_GrSurfaceOrigin == dstCopy->origin()) { + if (kTopLeft_GrSurfaceOrigin == dstTexture->origin()) { key |= kTopLeftOrigin_DstReadKeyBit; } SkASSERT(static_cast(key) == key); @@ -220,7 +220,7 @@ const char* GrGLFragmentShaderBuilder::dstColor() { } return fbFetchColorName; } else { - return kDstCopyColorName; + return kDstTextureColorName; } } diff --git a/src/gpu/gl/builders/GrGLFragmentShaderBuilder.h b/src/gpu/gl/builders/GrGLFragmentShaderBuilder.h index 1ab7af6..66e5582 100644 --- a/src/gpu/gl/builders/GrGLFragmentShaderBuilder.h +++ b/src/gpu/gl/builders/GrGLFragmentShaderBuilder.h @@ -81,10 +81,10 @@ public: typedef uint8_t DstReadKey; typedef uint8_t FragPosKey; - /** Returns a key for adding code to read the copy-of-dst color in service of effects that + /** Returns a key for adding code to read the dst texture color in service of effects that require reading the dst. It must not return 0 because 0 indicates that there is no dst - copy read at all (in which case this function should not be called). */ - static DstReadKey KeyForDstRead(const GrTexture* dstCopy, const GrGLCaps&); + texture at all (in which case this function should not be called). */ + static DstReadKey KeyForDstRead(const GrTexture* dsttexture, const GrGLCaps&); /** Returns a key for reading the fragment location. This should only be called if there is an effect that will requires the fragment position. If the fragment position is not required, @@ -149,7 +149,7 @@ private: kBottomLeftFragPosRead_FragPosKey = 0x2,// Read frag pos relative to bottom-left. }; - static const char* kDstCopyColorName; + static const char* kDstTextureColorName; bool fHasCustomColorOutput; bool fHasSecondaryOutput; diff --git a/tests/GrPorterDuffTest.cpp b/tests/GrPorterDuffTest.cpp index b01277c..78c2e79 100644 --- a/tests/GrPorterDuffTest.cpp +++ b/tests/GrPorterDuffTest.cpp @@ -76,7 +76,7 @@ public: const GrProcOptInfo& colorPOI, const GrProcOptInfo& covPOI) { SkAutoTUnref xpf(GrPorterDuffXPFactory::Create(xfermode)); SkAutoTUnref xp(xpf->createXferProcessor(colorPOI, covPOI, 0, caps)); - TEST_ASSERT(!xpf->willNeedDstCopy(caps, colorPOI, covPOI)); + TEST_ASSERT(!xpf->willNeedDstTexture(caps, colorPOI, covPOI)); xpf->getInvariantOutput(colorPOI, covPOI, &fInvariantOutput); fOptFlags = xp->getOptimizations(colorPOI, covPOI, false, 0, caps); GetXPOutputTypes(xp, &fPrimaryOutputType, &fSecondaryOutputType); @@ -1311,7 +1311,7 @@ static void test_lcd_coverage(skiatest::Reporter* reporter, const GrCaps& caps) SkASSERT(covPOI.isFourChannelOutput()); SkAutoTUnref xpf(GrPorterDuffXPFactory::Create(SkXfermode::kSrcOver_Mode)); - TEST_ASSERT(!xpf->willNeedDstCopy(caps, colorPOI, covPOI)); + TEST_ASSERT(!xpf->willNeedDstTexture(caps, colorPOI, covPOI)); GrXPFactory::InvariantOutput invariantOutput; xpf->getInvariantOutput(colorPOI, covPOI, &invariantOutput);