| Index: src/gpu/GrDrawTarget.cpp
|
| diff --git a/src/gpu/GrDrawTarget.cpp b/src/gpu/GrDrawTarget.cpp
|
| index 6bbcc74b3d35c8da777e3236615f383925fcd43a..ac0c766704bbeba9678e654c6549af8718222bde 100644
|
| --- a/src/gpu/GrDrawTarget.cpp
|
| +++ b/src/gpu/GrDrawTarget.cpp
|
| @@ -130,6 +130,7 @@ void GrDrawTarget::dump() const {
|
| #endif
|
|
|
| bool GrDrawTarget::setupDstReadIfNecessary(const GrPipelineBuilder& pipelineBuilder,
|
| + GrRenderTarget* rt,
|
| const GrClip& clip,
|
| const GrPipelineOptimizations& optimizations,
|
| GrXferProcessor::DstTexture* dstTexture,
|
| @@ -141,8 +142,6 @@ bool GrDrawTarget::setupDstReadIfNecessary(const GrPipelineBuilder& pipelineBuil
|
| return true;
|
| }
|
|
|
| - GrRenderTarget* rt = pipelineBuilder.getRenderTarget();
|
| -
|
| if (this->caps()->textureBarrierSupport()) {
|
| if (GrTexture* rtTex = rt->asTexture()) {
|
| // The render target is a texture, so we can read from it directly in the shader. The XP
|
| @@ -244,6 +243,7 @@ void GrDrawTarget::drawBatch(const GrPipelineBuilder& pipelineBuilder,
|
| return;
|
| }
|
|
|
| + // TODO: this is the only remaining usage of the AutoRestoreFragmentProcessorState - remove it
|
| GrPipelineBuilder::AutoRestoreFragmentProcessorState arfps;
|
| if (appliedClip.clipCoverageFragmentProcessor()) {
|
| arfps.set(&pipelineBuilder);
|
| @@ -252,11 +252,12 @@ void GrDrawTarget::drawBatch(const GrPipelineBuilder& pipelineBuilder,
|
|
|
| GrPipeline::CreateArgs args;
|
| args.fPipelineBuilder = &pipelineBuilder;
|
| + args.fDrawContext = drawContext;
|
| args.fCaps = this->caps();
|
| args.fScissor = &appliedClip.scissorState();
|
| args.fHasStencilClip = appliedClip.hasStencilClip();
|
| if (pipelineBuilder.hasUserStencilSettings() || appliedClip.hasStencilClip()) {
|
| - if (!fResourceProvider->attachStencilAttachment(pipelineBuilder.getRenderTarget())) {
|
| + if (!fResourceProvider->attachStencilAttachment(drawContext->accessRenderTarget())) {
|
| SkDebugf("ERROR creating stencil attachment. Draw skipped.\n");
|
| return;
|
| }
|
| @@ -264,12 +265,11 @@ void GrDrawTarget::drawBatch(const GrPipelineBuilder& pipelineBuilder,
|
| batch->getPipelineOptimizations(&args.fOpts);
|
| GrScissorState finalScissor;
|
| if (args.fOpts.fOverrides.fUsePLSDstRead || fClipBatchToBounds) {
|
| - GrRenderTarget* rt = pipelineBuilder.getRenderTarget();
|
| GrGLIRect viewport;
|
| viewport.fLeft = 0;
|
| viewport.fBottom = 0;
|
| - viewport.fWidth = rt->width();
|
| - viewport.fHeight = rt->height();
|
| + viewport.fWidth = drawContext->width();
|
| + viewport.fHeight = drawContext->height();
|
| SkIRect ibounds;
|
| ibounds.fLeft = SkTPin(SkScalarFloorToInt(batch->bounds().fLeft), viewport.fLeft,
|
| viewport.fWidth);
|
| @@ -293,8 +293,9 @@ void GrDrawTarget::drawBatch(const GrPipelineBuilder& pipelineBuilder,
|
| args.fOpts.fCoveragePOI.completeCalculations(
|
| pipelineBuilder.fCoverageFragmentProcessors.begin(),
|
| pipelineBuilder.numCoverageFragmentProcessors());
|
| - if (!this->setupDstReadIfNecessary(pipelineBuilder, clip, args.fOpts, &args.fDstTexture,
|
| - batch->bounds())) {
|
| + if (!this->setupDstReadIfNecessary(pipelineBuilder, drawContext->accessRenderTarget(),
|
| + clip, args.fOpts,
|
| + &args.fDstTexture, batch->bounds())) {
|
| return;
|
| }
|
|
|
| @@ -331,8 +332,8 @@ void GrDrawTarget::stencilPath(const GrPipelineBuilder& pipelineBuilder,
|
| // attempt this in a situation that would require coverage AA.
|
| SkASSERT(!appliedClip.clipCoverageFragmentProcessor());
|
|
|
| - GrRenderTarget* rt = pipelineBuilder.getRenderTarget();
|
| - GrStencilAttachment* stencilAttachment = fResourceProvider->attachStencilAttachment(rt);
|
| + GrStencilAttachment* stencilAttachment = fResourceProvider->attachStencilAttachment(
|
| + drawContext->accessRenderTarget());
|
| if (!stencilAttachment) {
|
| SkDebugf("ERROR creating stencil attachment. Draw skipped.\n");
|
| return;
|
| @@ -344,7 +345,7 @@ void GrDrawTarget::stencilPath(const GrPipelineBuilder& pipelineBuilder,
|
| appliedClip.hasStencilClip(),
|
| stencilAttachment->bits(),
|
| appliedClip.scissorState(),
|
| - pipelineBuilder.getRenderTarget(),
|
| + drawContext->accessRenderTarget(),
|
| path);
|
| this->recordBatch(batch);
|
| batch->unref();
|
| @@ -376,10 +377,10 @@ void GrDrawTarget::clear(const SkIRect* rect,
|
| drawContext->discard();
|
| }
|
|
|
| + // TODO: flip this into real draw!
|
| GrPipelineBuilder pipelineBuilder;
|
| pipelineBuilder.setXPFactory(
|
| GrPorterDuffXPFactory::Create(SkXfermode::kSrc_Mode))->unref();
|
| - pipelineBuilder.setRenderTarget(drawContext->accessRenderTarget());
|
|
|
| SkRect scalarRect = SkRect::Make(*rect);
|
| SkAutoTUnref<GrDrawBatch> batch(
|
|
|