Index: src/gpu/GrClipMaskManager.cpp |
diff --git a/src/gpu/GrClipMaskManager.cpp b/src/gpu/GrClipMaskManager.cpp |
index fa9c30edccc99c343b87c947c4d588b73d331039..208581e6ff706dbdaaad3a63a1117fd2f756586a 100644 |
--- a/src/gpu/GrClipMaskManager.cpp |
+++ b/src/gpu/GrClipMaskManager.cpp |
@@ -30,12 +30,14 @@ typedef SkClipStack::Element Element; |
namespace { |
// set up the draw state to enable the aa clipping mask. Besides setting up the |
// stage matrix this also alters the vertex layout |
-void setup_drawstate_aaclip(GrPipelineBuilder* pipelineBuilder, |
+void setup_drawstate_aaclip(const GrPipelineBuilder& pipelineBuilder, |
GrTexture* result, |
GrPipelineBuilder::AutoRestoreFragmentProcessors* arfp, |
+ GrPipelineBuilder::AutoRestoreProcessorDataManager* arpdm, |
const SkIRect &devBound) { |
- SkASSERT(pipelineBuilder && arfp); |
- arfp->set(pipelineBuilder); |
+ SkASSERT(arfp && arpdm); |
+ arfp->set(&pipelineBuilder); |
+ arpdm->set(&pipelineBuilder); |
SkMatrix mat; |
// We use device coords to compute the texture coordinates. We set our matrix to be a |
@@ -46,8 +48,8 @@ void setup_drawstate_aaclip(GrPipelineBuilder* pipelineBuilder, |
SkIRect domainTexels = SkIRect::MakeWH(devBound.width(), devBound.height()); |
// This could be a long-lived effect that is cached with the alpha-mask. |
- pipelineBuilder->addCoverageProcessor( |
- GrTextureDomainEffect::Create(pipelineBuilder->getProcessorDataManager(), |
+ arfp->addCoverageProcessor( |
+ GrTextureDomainEffect::Create(arpdm->getProcessorDataManager(), |
result, |
mat, |
GrTextureDomain::MakeTexelDomain(result, domainTexels), |
@@ -58,7 +60,7 @@ void setup_drawstate_aaclip(GrPipelineBuilder* pipelineBuilder, |
bool path_needs_SW_renderer(GrContext* context, |
const GrDrawTarget* gpu, |
- const GrPipelineBuilder* pipelineBuilder, |
+ const GrPipelineBuilder& pipelineBuilder, |
const SkMatrix& viewMatrix, |
const SkPath& origPath, |
const GrStrokeInfo& stroke, |
@@ -73,7 +75,7 @@ bool path_needs_SW_renderer(GrContext* context, |
GrPathRendererChain::kColorAntiAlias_DrawType : |
GrPathRendererChain::kColor_DrawType; |
- return NULL == context->getPathRenderer(gpu, pipelineBuilder, viewMatrix, *path, stroke, |
+ return NULL == context->getPathRenderer(gpu, &pipelineBuilder, viewMatrix, *path, stroke, |
false, type); |
} |
} |
@@ -92,7 +94,7 @@ GrContext* GrClipMaskManager::getContext() { return fClipTarget->getContext(); } |
* will be used on any element. If so, it returns true to indicate that the |
* entire clip should be rendered in SW and then uploaded en masse to the gpu. |
*/ |
-bool GrClipMaskManager::useSWOnlyPath(const GrPipelineBuilder* pipelineBuilder, |
+bool GrClipMaskManager::useSWOnlyPath(const GrPipelineBuilder& pipelineBuilder, |
const SkVector& clipToMaskOffset, |
const GrReducedClip::ElementList& elements) { |
// TODO: generalize this function so that when |
@@ -121,7 +123,7 @@ bool GrClipMaskManager::useSWOnlyPath(const GrPipelineBuilder* pipelineBuilder, |
return false; |
} |
-bool GrClipMaskManager::installClipEffects(GrPipelineBuilder* pipelineBuilder, |
+bool GrClipMaskManager::installClipEffects(const GrPipelineBuilder& pipelineBuilder, |
GrPipelineBuilder::AutoRestoreFragmentProcessors* arfp, |
const GrReducedClip::ElementList& elements, |
const SkVector& clipToRTOffset, |
@@ -132,8 +134,8 @@ bool GrClipMaskManager::installClipEffects(GrPipelineBuilder* pipelineBuilder, |
boundsInClipSpace.offset(-clipToRTOffset.fX, -clipToRTOffset.fY); |
} |
- arfp->set(pipelineBuilder); |
- GrRenderTarget* rt = pipelineBuilder->getRenderTarget(); |
+ arfp->set(&pipelineBuilder); |
+ GrRenderTarget* rt = pipelineBuilder.getRenderTarget(); |
GrReducedClip::ElementList::Iter iter(elements); |
bool failed = false; |
while (iter.get()) { |
@@ -174,8 +176,8 @@ bool GrClipMaskManager::installClipEffects(GrPipelineBuilder* pipelineBuilder, |
edgeType = |
invert ? kInverseFillAA_GrProcessorEdgeType : kFillAA_GrProcessorEdgeType; |
} else { |
- edgeType = |
-invert ? kInverseFillBW_GrProcessorEdgeType : kFillBW_GrProcessorEdgeType; |
+ edgeType = invert ? kInverseFillBW_GrProcessorEdgeType : |
+ kFillBW_GrProcessorEdgeType; |
} |
SkAutoTUnref<GrFragmentProcessor> fp; |
switch (iter.get()->getType()) { |
@@ -199,7 +201,7 @@ invert ? kInverseFillBW_GrProcessorEdgeType : kFillBW_GrProcessorEdgeType; |
break; |
} |
if (fp) { |
- pipelineBuilder->addCoverageProcessor(fp); |
+ arfp->addCoverageProcessor(fp); |
} else { |
failed = true; |
break; |
@@ -217,9 +219,10 @@ invert ? kInverseFillBW_GrProcessorEdgeType : kFillBW_GrProcessorEdgeType; |
//////////////////////////////////////////////////////////////////////////////// |
// sort out what kind of clip mask needs to be created: alpha, stencil, |
// scissor, or entirely software |
-bool GrClipMaskManager::setupClipping(GrPipelineBuilder* pipelineBuilder, |
+bool GrClipMaskManager::setupClipping(const GrPipelineBuilder& pipelineBuilder, |
GrPipelineBuilder::AutoRestoreFragmentProcessors* arfp, |
GrPipelineBuilder::AutoRestoreStencil* ars, |
+ GrPipelineBuilder::AutoRestoreProcessorDataManager* arpdm, |
GrScissorState* scissorState, |
const SkRect* devBounds) { |
fCurrClipMaskType = kNone_ClipMaskType; |
@@ -232,13 +235,13 @@ bool GrClipMaskManager::setupClipping(GrPipelineBuilder* pipelineBuilder, |
GrReducedClip::InitialState initialState = GrReducedClip::kAllIn_InitialState; |
SkIRect clipSpaceIBounds; |
bool requiresAA = false; |
- GrRenderTarget* rt = pipelineBuilder->getRenderTarget(); |
+ GrRenderTarget* rt = pipelineBuilder.getRenderTarget(); |
// GrDrawTarget should have filtered this for us |
SkASSERT(rt); |
SkIRect clipSpaceRTIBounds = SkIRect::MakeWH(rt->width(), rt->height()); |
- const GrClip& clip = pipelineBuilder->clip(); |
+ const GrClip& clip = pipelineBuilder.clip(); |
if (clip.isWideOpen(clipSpaceRTIBounds)) { |
this->setPipelineBuilderStencil(pipelineBuilder, ars); |
return true; |
@@ -333,12 +336,12 @@ bool GrClipMaskManager::setupClipping(GrPipelineBuilder* pipelineBuilder, |
} |
if (result) { |
- arfp->set(pipelineBuilder); |
+ arfp->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, rtSpaceMaskBounds); |
+ setup_drawstate_aaclip(pipelineBuilder, result, arfp, arpdm, rtSpaceMaskBounds); |
this->setPipelineBuilderStencil(pipelineBuilder, ars); |
return true; |
} |
@@ -925,7 +928,7 @@ const GrStencilSettings& basic_apply_stencil_clip_settings() { |
} |
} |
-void GrClipMaskManager::setPipelineBuilderStencil(GrPipelineBuilder* pipelineBuilder, |
+void GrClipMaskManager::setPipelineBuilderStencil(const GrPipelineBuilder& pipelineBuilder, |
GrPipelineBuilder::AutoRestoreStencil* ars) { |
// We make two copies of the StencilSettings here (except in the early |
// exit scenario. One copy from draw state to the stack var. Then another |
@@ -938,18 +941,18 @@ void GrClipMaskManager::setPipelineBuilderStencil(GrPipelineBuilder* pipelineBui |
// The GrGpu client may not be using the stencil buffer but we may need to |
// enable it in order to respect a stencil clip. |
- if (pipelineBuilder->getStencil().isDisabled()) { |
+ if (pipelineBuilder.getStencil().isDisabled()) { |
if (GrClipMaskManager::kRespectClip_StencilClipMode == fClipMode) { |
settings = basic_apply_stencil_clip_settings(); |
} else { |
return; |
} |
} else { |
- settings = pipelineBuilder->getStencil(); |
+ settings = pipelineBuilder.getStencil(); |
} |
int stencilBits = 0; |
- GrRenderTarget* rt = pipelineBuilder->getRenderTarget(); |
+ GrRenderTarget* rt = pipelineBuilder.getRenderTarget(); |
GrStencilAttachment* stencilAttachment = rt->renderTargetPriv().attachStencilAttachment(); |
if (stencilAttachment) { |
stencilBits = stencilAttachment->bits(); |
@@ -958,8 +961,8 @@ void GrClipMaskManager::setPipelineBuilderStencil(GrPipelineBuilder* pipelineBui |
SkASSERT(fClipTarget->caps()->stencilWrapOpsSupport() || !settings.usesWrapOp()); |
SkASSERT(fClipTarget->caps()->twoSidedStencilSupport() || !settings.isTwoSided()); |
this->adjustStencilParams(&settings, fClipMode, stencilBits); |
- ars->set(pipelineBuilder); |
- pipelineBuilder->setStencil(settings); |
+ ars->set(&pipelineBuilder); |
+ ars->setStencil(settings); |
} |
void GrClipMaskManager::adjustStencilParams(GrStencilSettings* settings, |