| Index: src/gpu/GrDrawTarget.cpp
|
| diff --git a/src/gpu/GrDrawTarget.cpp b/src/gpu/GrDrawTarget.cpp
|
| index 85a9af432a128ec32c1c8013c4a101bdf291835f..6c9c38605b14b59c69f08b947a4e17ae298a22d9 100644
|
| --- a/src/gpu/GrDrawTarget.cpp
|
| +++ b/src/gpu/GrDrawTarget.cpp
|
| @@ -34,15 +34,15 @@
|
|
|
| GrDrawTarget::GrDrawTarget(GrGpu* gpu, GrResourceProvider* resourceProvider)
|
| : fGpu(SkRef(gpu))
|
| - , fCaps(SkRef(gpu->caps()))
|
| , fResourceProvider(resourceProvider)
|
| , fFlushing(false)
|
| , fLastFlushToken(0) {
|
| + // TODO: Stop extracting the context (currently needed by GrClipMaskManager)
|
| + fContext = fGpu->getContext();
|
| }
|
|
|
| GrDrawTarget::~GrDrawTarget() {
|
| fGpu->unref();
|
| - fCaps->unref();
|
| }
|
|
|
| ////////////////////////////////////////////////////////////////////////////////
|
| @@ -78,8 +78,8 @@ bool GrDrawTarget::setupDstReadIfNecessary(const GrPipelineBuilder& pipelineBuil
|
| bounds.roundOut(&drawIBounds);
|
| if (!copyRect.intersect(drawIBounds)) {
|
| #ifdef SK_DEBUG
|
| - GrCapsDebugf(fCaps, "Missed an early reject. "
|
| - "Bailing on draw from setupDstReadIfNecessary.\n");
|
| + GrCapsDebugf(this->caps(), "Missed an early reject. "
|
| + "Bailing on draw from setupDstReadIfNecessary.\n");
|
| #endif
|
| return false;
|
| }
|
| @@ -87,7 +87,7 @@ bool GrDrawTarget::setupDstReadIfNecessary(const GrPipelineBuilder& pipelineBuil
|
| // MSAA consideration: When there is support for reading MSAA samples in the shader we could
|
| // have per-sample dst values by making the copy multisampled.
|
| GrSurfaceDesc desc;
|
| - if (!this->getGpu()->initCopySurfaceDstDesc(rt, &desc)) {
|
| + if (!fGpu->initCopySurfaceDstDesc(rt, &desc)) {
|
| desc.fOrigin = kDefault_GrSurfaceOrigin;
|
| desc.fFlags = kRenderTarget_GrSurfaceFlag;
|
| desc.fConfig = rt->config();
|
| @@ -146,7 +146,8 @@ void GrDrawTarget::drawBatch(const GrPipelineBuilder& pipelineBuilder, GrDrawBat
|
| GrScissorState scissorState;
|
| GrPipelineBuilder::AutoRestoreFragmentProcessorState arfps;
|
| GrPipelineBuilder::AutoRestoreStencil ars;
|
| - if (!this->setupClip(pipelineBuilder, &arfps, &ars, &scissorState, &batch->bounds())) {
|
| + if (!fClipMaskManager->setupClipping(pipelineBuilder, &arfps, &ars, &scissorState,
|
| + &batch->bounds())) {
|
| return;
|
| }
|
|
|
| @@ -190,7 +191,7 @@ void GrDrawTarget::getPathStencilSettingsForFilltype(GrPathRendering::FillType f
|
| *outStencilSettings = even_odd_path_stencil_settings();
|
| break;
|
| }
|
| - this->clipMaskManager()->adjustPathStencilParams(sb, outStencilSettings);
|
| + fClipMaskManager->adjustPathStencilParams(sb, outStencilSettings);
|
| }
|
|
|
| void GrDrawTarget::stencilPath(const GrPipelineBuilder& pipelineBuilder,
|
| @@ -205,7 +206,8 @@ void GrDrawTarget::stencilPath(const GrPipelineBuilder& pipelineBuilder,
|
| GrScissorState scissorState;
|
| GrPipelineBuilder::AutoRestoreFragmentProcessorState arfps;
|
| GrPipelineBuilder::AutoRestoreStencil ars;
|
| - if (!this->setupClip(pipelineBuilder, &arfps, &ars, &scissorState, nullptr)) {
|
| +
|
| + if (!fClipMaskManager->setupClipping(pipelineBuilder, &arfps, &ars, &scissorState, nullptr)) {
|
| return;
|
| }
|
|
|
| @@ -252,13 +254,15 @@ void GrDrawTarget::drawPathBatch(const GrPipelineBuilder& pipelineBuilder,
|
| GrDrawPathBatchBase* batch,
|
| GrPathRendering::FillType fill) {
|
| // This looks like drawBatch() but there is an added wrinkle that stencil settings get inserted
|
| - // after setupClip() but before onDrawBatch(). TODO: Figure out a better model for handling
|
| - // stencil settings WRT interactions between pipeline(builder), clipmaskmanager, and batches.
|
| + // after setting up clipping but before onDrawBatch(). TODO: Figure out a better model for
|
| + // handling stencil settings WRT interactions between pipeline(builder), clipmaskmanager, and
|
| + // batches.
|
|
|
| GrScissorState scissorState;
|
| GrPipelineBuilder::AutoRestoreFragmentProcessorState arfps;
|
| GrPipelineBuilder::AutoRestoreStencil ars;
|
| - if (!this->setupClip(pipelineBuilder, &arfps, &ars, &scissorState, &batch->bounds())) {
|
| + if (!fClipMaskManager->setupClipping(pipelineBuilder, &arfps, &ars, &scissorState,
|
| + &batch->bounds())) {
|
| return;
|
| }
|
|
|
| @@ -335,7 +339,7 @@ void GrDrawTarget::clear(const SkIRect* rect,
|
| rect = &clippedRect;
|
| }
|
|
|
| - if (fCaps->useDrawInsteadOfClear()) {
|
| + if (this->caps()->useDrawInsteadOfClear()) {
|
| // This works around a driver bug with clear by drawing a rect instead.
|
| // The driver will ignore a clear if it is the only thing rendered to a
|
| // target before the target is read.
|
| @@ -455,33 +459,7 @@ bool GrDrawTarget::installPipelineInDrawBatch(const GrPipelineBuilder* pipelineB
|
| return true;
|
| }
|
|
|
| -///////////////////////////////////////////////////////////////////////////////
|
| -GrClipTarget::GrClipTarget(GrContext* context)
|
| - : INHERITED(context->getGpu(), context->resourceProvider())
|
| - , fContext(context) {
|
| - fClipMaskManager.reset(new GrClipMaskManager(this));
|
| -}
|
| -
|
| -
|
| -bool GrClipTarget::setupClip(const GrPipelineBuilder& pipelineBuilder,
|
| - GrPipelineBuilder::AutoRestoreFragmentProcessorState* arfps,
|
| - GrPipelineBuilder::AutoRestoreStencil* ars,
|
| - GrScissorState* scissorState,
|
| - const SkRect* devBounds) {
|
| - return fClipMaskManager->setupClipping(pipelineBuilder,
|
| - arfps,
|
| - ars,
|
| - scissorState,
|
| - devBounds);
|
| -}
|
| -
|
| -void GrClipTarget::purgeResources() {
|
| - // The clip mask manager can rebuild all its clip masks so just
|
| - // get rid of them all.
|
| - fClipMaskManager->purgeResources();
|
| -};
|
| -
|
| -void GrClipTarget::clearStencilClip(const SkIRect& rect, bool insideClip, GrRenderTarget* rt) {
|
| +void GrDrawTarget::clearStencilClip(const SkIRect& rect, bool insideClip, GrRenderTarget* rt) {
|
| GrBatch* batch = new GrClearStencilClipBatch(rect, insideClip, rt);
|
| this->recordBatch(batch);
|
| batch->unref();
|
|
|