Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(156)

Unified Diff: src/gpu/GrDrawTarget.cpp

Issue 1988923002: Remove GrRenderTarget from GrPipelineBuilder (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: update to ToT Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/gpu/GrDrawTarget.h ('k') | src/gpu/GrPipeline.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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(
« no previous file with comments | « src/gpu/GrDrawTarget.h ('k') | src/gpu/GrPipeline.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698