aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar joshualitt <joshualitt@chromium.org>2015-07-13 09:36:41 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2015-07-13 09:36:41 -0700
commit4421a4c90df48931758cdb747d5be80edb56cd12 (patch)
treefbe260ed2e8052832a8227de1f318e79b612a271 /src
parent2419b360ead17231c555a9e01747b7ffbbfb70e4 (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.cpp38
-rw-r--r--src/gpu/GrClipMaskManager.h5
-rw-r--r--src/gpu/GrDrawTarget.cpp26
-rw-r--r--src/gpu/GrDrawTarget.h6
-rw-r--r--src/gpu/GrOvalRenderer.cpp12
-rw-r--r--src/gpu/GrPipelineBuilder.cpp4
-rw-r--r--src/gpu/GrPipelineBuilder.h69
-rw-r--r--src/gpu/GrSWMaskHelper.cpp2
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,