From 4421a4c90df48931758cdb747d5be80edb56cd12 Mon Sep 17 00:00:00 2001 From: joshualitt Date: Mon, 13 Jul 2015 09:36:41 -0700 Subject: 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 --- src/gpu/GrPipelineBuilder.h | 69 ++++++++++++--------------------------------- 1 file changed, 18 insertions(+), 51 deletions(-) (limited to 'src/gpu/GrPipelineBuilder.h') 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(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. -- cgit v1.2.3