diff options
author | joshualitt <joshualitt@chromium.org> | 2015-07-13 09:36:41 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-07-13 09:36:41 -0700 |
commit | 4421a4c90df48931758cdb747d5be80edb56cd12 (patch) | |
tree | fbe260ed2e8052832a8227de1f318e79b612a271 /src | |
parent | 2419b360ead17231c555a9e01747b7ffbbfb70e4 (diff) |
small cleanups after fixing const of GrPipelineBuilder on DrawTarget
Fuse AutoRestoreFragmentProcessors and AutoRestoreProcessorDataManager into new AutoRestoreFragmentProcessorState class
BUG=skia:
Review URL: https://codereview.chromium.org/1228763005
Diffstat (limited to 'src')
-rw-r--r-- | src/gpu/GrClipMaskManager.cpp | 38 | ||||
-rw-r--r-- | src/gpu/GrClipMaskManager.h | 5 | ||||
-rw-r--r-- | src/gpu/GrDrawTarget.cpp | 26 | ||||
-rw-r--r-- | src/gpu/GrDrawTarget.h | 6 | ||||
-rw-r--r-- | src/gpu/GrOvalRenderer.cpp | 12 | ||||
-rw-r--r-- | src/gpu/GrPipelineBuilder.cpp | 4 | ||||
-rw-r--r-- | src/gpu/GrPipelineBuilder.h | 69 | ||||
-rw-r--r-- | src/gpu/GrSWMaskHelper.cpp | 2 |
8 files changed, 60 insertions, 102 deletions
diff --git a/src/gpu/GrClipMaskManager.cpp b/src/gpu/GrClipMaskManager.cpp index d7501c3adf..b15bee9939 100644 --- a/src/gpu/GrClipMaskManager.cpp +++ b/src/gpu/GrClipMaskManager.cpp @@ -32,12 +32,10 @@ namespace { // stage matrix this also alters the vertex layout void setup_drawstate_aaclip(const GrPipelineBuilder& pipelineBuilder, GrTexture* result, - GrPipelineBuilder::AutoRestoreFragmentProcessors* arfp, - GrPipelineBuilder::AutoRestoreProcessorDataManager* arpdm, + GrPipelineBuilder::AutoRestoreFragmentProcessorState* arfps, const SkIRect &devBound) { - SkASSERT(arfp && arpdm); - arfp->set(&pipelineBuilder); - arpdm->set(&pipelineBuilder); + SkASSERT(arfps); + arfps->set(&pipelineBuilder); SkMatrix mat; // We use device coords to compute the texture coordinates. We set our matrix to be a @@ -48,8 +46,8 @@ void setup_drawstate_aaclip(const GrPipelineBuilder& pipelineBuilder, SkIRect domainTexels = SkIRect::MakeWH(devBound.width(), devBound.height()); // This could be a long-lived effect that is cached with the alpha-mask. - arfp->addCoverageProcessor( - GrTextureDomainEffect::Create(arpdm->getProcessorDataManager(), + arfps->addCoverageProcessor( + GrTextureDomainEffect::Create(arfps->getProcessorDataManager(), result, mat, GrTextureDomain::MakeTexelDomain(result, domainTexels), @@ -123,18 +121,19 @@ bool GrClipMaskManager::useSWOnlyPath(const GrPipelineBuilder& pipelineBuilder, return false; } -bool GrClipMaskManager::installClipEffects(const GrPipelineBuilder& pipelineBuilder, - GrPipelineBuilder::AutoRestoreFragmentProcessors* arfp, - const GrReducedClip::ElementList& elements, - const SkVector& clipToRTOffset, - const SkRect* drawBounds) { +bool GrClipMaskManager::installClipEffects( + const GrPipelineBuilder& pipelineBuilder, + GrPipelineBuilder::AutoRestoreFragmentProcessorState* arfps, + const GrReducedClip::ElementList& elements, + const SkVector& clipToRTOffset, + const SkRect* drawBounds) { SkRect boundsInClipSpace; if (drawBounds) { boundsInClipSpace = *drawBounds; boundsInClipSpace.offset(-clipToRTOffset.fX, -clipToRTOffset.fY); } - arfp->set(&pipelineBuilder); + arfps->set(&pipelineBuilder); GrRenderTarget* rt = pipelineBuilder.getRenderTarget(); GrReducedClip::ElementList::Iter iter(elements); bool failed = false; @@ -201,7 +200,7 @@ bool GrClipMaskManager::installClipEffects(const GrPipelineBuilder& pipelineBuil break; } if (fp) { - arfp->addCoverageProcessor(fp); + arfps->addCoverageProcessor(fp); } else { failed = true; break; @@ -211,7 +210,7 @@ bool GrClipMaskManager::installClipEffects(const GrPipelineBuilder& pipelineBuil } if (failed) { - arfp->set(NULL); + arfps->set(NULL); } return !failed; } @@ -220,9 +219,8 @@ bool GrClipMaskManager::installClipEffects(const GrPipelineBuilder& pipelineBuil // sort out what kind of clip mask needs to be created: alpha, stencil, // scissor, or entirely software bool GrClipMaskManager::setupClipping(const GrPipelineBuilder& pipelineBuilder, - GrPipelineBuilder::AutoRestoreFragmentProcessors* arfp, + GrPipelineBuilder::AutoRestoreFragmentProcessorState* arfps, GrPipelineBuilder::AutoRestoreStencil* ars, - GrPipelineBuilder::AutoRestoreProcessorDataManager* arpdm, GrScissorState* scissorState, const SkRect* devBounds) { fCurrClipMaskType = kNone_ClipMaskType; @@ -296,7 +294,7 @@ bool GrClipMaskManager::setupClipping(const GrPipelineBuilder& pipelineBuilder, SkVector clipToRTOffset = { SkIntToScalar(-clip.origin().fX), SkIntToScalar(-clip.origin().fY) }; if (elements.isEmpty() || - (requiresAA && this->installClipEffects(pipelineBuilder, arfp, elements, clipToRTOffset, + (requiresAA && this->installClipEffects(pipelineBuilder, arfps, elements, clipToRTOffset, devBounds))) { SkIRect scissorSpaceIBounds(clipSpaceIBounds); scissorSpaceIBounds.offset(-clip.origin()); @@ -336,12 +334,12 @@ bool GrClipMaskManager::setupClipping(const GrPipelineBuilder& pipelineBuilder, } if (result) { - arfp->set(&pipelineBuilder); + arfps->set(&pipelineBuilder); // The mask's top left coord should be pinned to the rounded-out top left corner of // clipSpace bounds. We determine the mask's position WRT to the render target here. SkIRect rtSpaceMaskBounds = clipSpaceIBounds; rtSpaceMaskBounds.offset(-clip.origin()); - setup_drawstate_aaclip(pipelineBuilder, result, arfp, arpdm, rtSpaceMaskBounds); + setup_drawstate_aaclip(pipelineBuilder, result, arfps, rtSpaceMaskBounds); this->setPipelineBuilderStencil(pipelineBuilder, ars); return true; } diff --git a/src/gpu/GrClipMaskManager.h b/src/gpu/GrClipMaskManager.h index 6dd735b832..1fd3d9648a 100644 --- a/src/gpu/GrClipMaskManager.h +++ b/src/gpu/GrClipMaskManager.h @@ -44,9 +44,8 @@ public: * clip. devBounds is optional but can help optimize clipping. */ bool setupClipping(const GrPipelineBuilder&, - GrPipelineBuilder::AutoRestoreFragmentProcessors*, + GrPipelineBuilder::AutoRestoreFragmentProcessorState*, GrPipelineBuilder::AutoRestoreStencil*, - GrPipelineBuilder::AutoRestoreProcessorDataManager*, GrScissorState*, const SkRect* devBounds); @@ -88,7 +87,7 @@ private: // Attempts to install a series of coverage effects to implement the clip. Return indicates // whether the element list was successfully converted to effects. bool installClipEffects(const GrPipelineBuilder&, - GrPipelineBuilder::AutoRestoreFragmentProcessors*, + GrPipelineBuilder::AutoRestoreFragmentProcessorState*, const GrReducedClip::ElementList&, const SkVector& clipOffset, const SkRect* devBounds); diff --git a/src/gpu/GrDrawTarget.cpp b/src/gpu/GrDrawTarget.cpp index ba06c66e8b..e0dde04b56 100644 --- a/src/gpu/GrDrawTarget.cpp +++ b/src/gpu/GrDrawTarget.cpp @@ -131,10 +131,9 @@ void GrDrawTarget::drawBatch(const GrPipelineBuilder& pipelineBuilder, GrBatch* // Setup clip GrScissorState scissorState; - GrPipelineBuilder::AutoRestoreFragmentProcessors arfp; + GrPipelineBuilder::AutoRestoreFragmentProcessorState arfps; GrPipelineBuilder::AutoRestoreStencil ars; - GrPipelineBuilder::AutoRestoreProcessorDataManager arpdm; - if (!this->setupClip(pipelineBuilder, &arfp, &ars, &arpdm, &scissorState, &batch->bounds())) { + if (!this->setupClip(pipelineBuilder, &arfps, &ars, &scissorState, &batch->bounds())) { return; } @@ -197,10 +196,9 @@ void GrDrawTarget::stencilPath(const GrPipelineBuilder& pipelineBuilder, // Setup clip GrScissorState scissorState; - GrPipelineBuilder::AutoRestoreFragmentProcessors arfp; + GrPipelineBuilder::AutoRestoreFragmentProcessorState arfps; GrPipelineBuilder::AutoRestoreStencil ars; - GrPipelineBuilder::AutoRestoreProcessorDataManager arpdm; - if (!this->setupClip(pipelineBuilder, &arfp, &ars, &arpdm, &scissorState, NULL)) { + if (!this->setupClip(pipelineBuilder, &arfps, &ars, &scissorState, NULL)) { return; } @@ -226,10 +224,9 @@ void GrDrawTarget::drawPath(const GrPipelineBuilder& pipelineBuilder, // Setup clip GrScissorState scissorState; - GrPipelineBuilder::AutoRestoreFragmentProcessors arfp; + GrPipelineBuilder::AutoRestoreFragmentProcessorState arfps; GrPipelineBuilder::AutoRestoreStencil ars; - GrPipelineBuilder::AutoRestoreProcessorDataManager arpdm; - if (!this->setupClip(pipelineBuilder, &arfp, &ars, &arpdm, &scissorState, &devBounds)) { + if (!this->setupClip(pipelineBuilder, &arfps, &ars, &scissorState, &devBounds)) { return; } @@ -265,10 +262,9 @@ void GrDrawTarget::drawPaths(const GrPipelineBuilder& pipelineBuilder, // Setup clip GrScissorState scissorState; - GrPipelineBuilder::AutoRestoreFragmentProcessors arfp; + GrPipelineBuilder::AutoRestoreFragmentProcessorState arfps; GrPipelineBuilder::AutoRestoreStencil ars; - GrPipelineBuilder::AutoRestoreProcessorDataManager arpdm; - if (!this->setupClip(pipelineBuilder, &arfp, &ars, &arpdm, &scissorState, NULL)) { + if (!this->setupClip(pipelineBuilder, &arfps, &ars, &scissorState, NULL)) { return; } @@ -500,15 +496,13 @@ GrClipTarget::GrClipTarget(GrContext* context) bool GrClipTarget::setupClip(const GrPipelineBuilder& pipelineBuilder, - GrPipelineBuilder::AutoRestoreFragmentProcessors* arfp, + GrPipelineBuilder::AutoRestoreFragmentProcessorState* arfps, GrPipelineBuilder::AutoRestoreStencil* ars, - GrPipelineBuilder::AutoRestoreProcessorDataManager* arpdm, GrScissorState* scissorState, const SkRect* devBounds) { return fClipMaskManager->setupClipping(pipelineBuilder, - arfp, + arfps, ars, - arpdm, scissorState, devBounds); } diff --git a/src/gpu/GrDrawTarget.h b/src/gpu/GrDrawTarget.h index 2265f614b1..753ea85881 100644 --- a/src/gpu/GrDrawTarget.h +++ b/src/gpu/GrDrawTarget.h @@ -288,9 +288,8 @@ private: GrStencilSettings*); virtual GrClipMaskManager* clipMaskManager() = 0; virtual bool setupClip(const GrPipelineBuilder&, - GrPipelineBuilder::AutoRestoreFragmentProcessors*, + GrPipelineBuilder::AutoRestoreFragmentProcessorState*, GrPipelineBuilder::AutoRestoreStencil*, - GrPipelineBuilder::AutoRestoreProcessorDataManager*, GrScissorState*, const SkRect* devBounds) = 0; @@ -341,9 +340,8 @@ private: GrClipMaskManager* clipMaskManager() override { return fClipMaskManager; } bool setupClip(const GrPipelineBuilder&, - GrPipelineBuilder::AutoRestoreFragmentProcessors*, + GrPipelineBuilder::AutoRestoreFragmentProcessorState*, GrPipelineBuilder::AutoRestoreStencil*, - GrPipelineBuilder::AutoRestoreProcessorDataManager*, GrScissorState* scissorState, const SkRect* devBounds) override; diff --git a/src/gpu/GrOvalRenderer.cpp b/src/gpu/GrOvalRenderer.cpp index 89f6f5b15d..88b2f3eb77 100644 --- a/src/gpu/GrOvalRenderer.cpp +++ b/src/gpu/GrOvalRenderer.cpp @@ -1390,7 +1390,7 @@ bool GrOvalRenderer::DrawDRRect(GrDrawTarget* target, const SkRRect& origOuter, const SkRRect& origInner) { bool applyAA = useAA && !pipelineBuilder.getRenderTarget()->isUnifiedMultisampled(); - GrPipelineBuilder::AutoRestoreFragmentProcessors arfp; + GrPipelineBuilder::AutoRestoreFragmentProcessorState arfps; if (!origInner.isEmpty()) { SkTCopyOnFirstWrite<SkRRect> inner(origInner); if (!viewMatrix.isIdentity()) { @@ -1406,8 +1406,8 @@ bool GrOvalRenderer::DrawDRRect(GrDrawTarget* target, if (NULL == fp) { return false; } - arfp.set(&pipelineBuilder); - arfp.addCoverageProcessor(fp)->unref(); + arfps.set(&pipelineBuilder); + arfps.addCoverageProcessor(fp)->unref(); } SkStrokeRec fillRec(SkStrokeRec::kFill_InitStyle); @@ -1428,8 +1428,8 @@ bool GrOvalRenderer::DrawDRRect(GrDrawTarget* target, if (NULL == effect) { return false; } - if (!arfp.isSet()) { - arfp.set(&pipelineBuilder); + if (!arfps.isSet()) { + arfps.set(&pipelineBuilder); } SkMatrix invert; @@ -1437,7 +1437,7 @@ bool GrOvalRenderer::DrawDRRect(GrDrawTarget* target, return false; } - arfp.addCoverageProcessor(effect)->unref(); + arfps.addCoverageProcessor(effect)->unref(); SkRect bounds = outer->getBounds(); if (applyAA) { bounds.outset(SK_ScalarHalf, SK_ScalarHalf); diff --git a/src/gpu/GrPipelineBuilder.cpp b/src/gpu/GrPipelineBuilder.cpp index 97e7229af2..1d37963e9c 100644 --- a/src/gpu/GrPipelineBuilder.cpp +++ b/src/gpu/GrPipelineBuilder.cpp @@ -99,7 +99,7 @@ bool GrPipelineBuilder::willXPNeedDstTexture(const GrCaps& caps, this->hasMixedSamples()); } -void GrPipelineBuilder::AutoRestoreFragmentProcessors::set( +void GrPipelineBuilder::AutoRestoreFragmentProcessorState::set( const GrPipelineBuilder* pipelineBuilder) { if (fPipelineBuilder) { int m = fPipelineBuilder->numColorFragmentStages() - fColorEffectCnt; @@ -114,12 +114,14 @@ void GrPipelineBuilder::AutoRestoreFragmentProcessors::set( fPipelineBuilder->fCoverageProcInfoValid = false; } SkDEBUGCODE(--fPipelineBuilder->fBlockEffectRemovalCnt;) + fPipelineBuilder->getProcessorDataManager()->restoreToSaveMarker(/*fSaveMarker*/); } fPipelineBuilder = const_cast<GrPipelineBuilder*>(pipelineBuilder); if (NULL != pipelineBuilder) { fColorEffectCnt = pipelineBuilder->numColorFragmentStages(); fCoverageEffectCnt = pipelineBuilder->numCoverageFragmentStages(); SkDEBUGCODE(++pipelineBuilder->fBlockEffectRemovalCnt;) + fSaveMarker = pipelineBuilder->processorDataManager()->currentSaveMarker(); } } diff --git a/src/gpu/GrPipelineBuilder.h b/src/gpu/GrPipelineBuilder.h index 60fcea86c8..dd3db6e092 100644 --- a/src/gpu/GrPipelineBuilder.h +++ b/src/gpu/GrPipelineBuilder.h @@ -109,30 +109,38 @@ public: /** * When this object is destroyed it will remove any color/coverage FPs from the pipeline builder - * that were added after its constructor. + * and also remove any additions to the GrProcessorDataManager that were added after its + * constructor. * This class can transiently modify its "const" GrPipelineBuilder object but will restore it * when done - so it is notionally "const" correct. */ - class AutoRestoreFragmentProcessors : public ::SkNoncopyable { + class AutoRestoreFragmentProcessorState : public ::SkNoncopyable { public: - AutoRestoreFragmentProcessors() + AutoRestoreFragmentProcessorState() : fPipelineBuilder(NULL) , fColorEffectCnt(0) - , fCoverageEffectCnt(0) {} + , fCoverageEffectCnt(0) + , fSaveMarker(0) {} - AutoRestoreFragmentProcessors(GrPipelineBuilder* ds) + AutoRestoreFragmentProcessorState(const GrPipelineBuilder& ds) : fPipelineBuilder(NULL) , fColorEffectCnt(0) - , fCoverageEffectCnt(0) { - this->set(ds); + , fCoverageEffectCnt(0) + , fSaveMarker(0) { + this->set(&ds); } - ~AutoRestoreFragmentProcessors() { this->set(NULL); } + ~AutoRestoreFragmentProcessorState() { this->set(NULL); } void set(const GrPipelineBuilder* ds); bool isSet() const { return SkToBool(fPipelineBuilder); } + GrProcessorDataManager* getProcessorDataManager() { + SkASSERT(this->isSet()); + return fPipelineBuilder->getProcessorDataManager(); + } + const GrFragmentProcessor* addCoverageProcessor(const GrFragmentProcessor* processor) { SkASSERT(this->isSet()); return fPipelineBuilder->addCoverageProcessor(processor); @@ -143,6 +151,7 @@ public: GrPipelineBuilder* fPipelineBuilder; int fColorEffectCnt; int fCoverageEffectCnt; + uint32_t fSaveMarker; }; /// @} @@ -261,7 +270,7 @@ public: public: AutoRestoreStencil() : fPipelineBuilder(NULL) {} - AutoRestoreStencil(const GrPipelineBuilder* ds) : fPipelineBuilder(NULL) { this->set(ds); } + AutoRestoreStencil(const GrPipelineBuilder& ds) : fPipelineBuilder(NULL) { this->set(&ds); } ~AutoRestoreStencil() { this->set(NULL); } @@ -415,48 +424,6 @@ public: GrProcessorDataManager* getProcessorDataManager() { return fProcDataManager.get(); } const GrProcessorDataManager* processorDataManager() const { return fProcDataManager.get(); } - /** - * When this object is destroyed it will remove any additions to the GrProcessorDataManager - * owned by the GrPipelineBuilder - * This class can transiently modify its "const" GrPipelineBuilder object but will restore it - * when done - so it is notionally "const" correct. - */ - class AutoRestoreProcessorDataManager : public ::SkNoncopyable { - public: - AutoRestoreProcessorDataManager() : fPipelineBuilder(NULL), fSaveMarker(0) {} - - AutoRestoreProcessorDataManager(GrPipelineBuilder* ds) - : fPipelineBuilder(NULL) - , fSaveMarker(0) { - this->set(ds); - } - - ~AutoRestoreProcessorDataManager() { this->set(NULL); } - - void set(const GrPipelineBuilder* ds) { - if (fPipelineBuilder) { - fPipelineBuilder->getProcessorDataManager()->restoreToSaveMarker(/*fSaveMarker*/); - } - fPipelineBuilder = const_cast<GrPipelineBuilder*>(ds); - if (ds) { - fSaveMarker = ds->processorDataManager()->currentSaveMarker(); - } - } - - bool isSet() const { return SkToBool(fPipelineBuilder); } - - GrProcessorDataManager* getProcessorDataManager() { - SkASSERT(this->isSet()); - return fPipelineBuilder->getProcessorDataManager(); - } - - private: - // notionally const (as marginalia) - GrPipelineBuilder* fPipelineBuilder; - uint32_t fSaveMarker; - }; - - private: // Calculating invariant color / coverage information is expensive, so we partially cache the // results. diff --git a/src/gpu/GrSWMaskHelper.cpp b/src/gpu/GrSWMaskHelper.cpp index 0e0a5413d2..4266fcbbd0 100644 --- a/src/gpu/GrSWMaskHelper.cpp +++ b/src/gpu/GrSWMaskHelper.cpp @@ -353,7 +353,7 @@ void GrSWMaskHelper::DrawToTargetWithPathMask(GrTexture* texture, if (!viewMatrix.invert(&invert)) { return; } - GrPipelineBuilder::AutoRestoreFragmentProcessors arfp(pipelineBuilder); + GrPipelineBuilder::AutoRestoreFragmentProcessorState arfps(*pipelineBuilder); SkRect dstRect = SkRect::MakeLTRB(SK_Scalar1 * rect.fLeft, SK_Scalar1 * rect.fTop, |