Revert "Revert "Create GrXferProcessor while doing GrProcessorSet analysis.""
This reverts commit 5dac9b3b5bf7e9c06c207cb92e257535c7d9ec95.
Bug: skia:
Change-Id: I3db2ec6776eb10c1f863b3992a2c8048c54b130f
Reviewed-on: https://skia-review.googlesource.com/12620
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Brian Salomon <bsalomon@google.com>
diff --git a/src/gpu/GrRenderTargetContext.cpp b/src/gpu/GrRenderTargetContext.cpp
index a4b7731..b0a1b6d 100644
--- a/src/gpu/GrRenderTargetContext.cpp
+++ b/src/gpu/GrRenderTargetContext.cpp
@@ -1688,30 +1688,33 @@
}
GrResourceProvider* resourceProvider = fContext->resourceProvider();
- if (pipelineBuilder.hasUserStencilSettings() || appliedClip.hasStencilClip()) {
+ bool usesStencil = pipelineBuilder.hasUserStencilSettings() || appliedClip.hasStencilClip();
+ if (usesStencil) {
if (!resourceProvider->attachStencilAttachment(this->accessRenderTarget())) {
SkDebugf("ERROR creating stencil attachment. Draw skipped.\n");
return SK_InvalidUniqueID;
}
}
- GrProcessorSet::Analysis analysis;
- op->analyzeProcessors(&analysis, &pipelineBuilder, &appliedClip, *this->caps());
+ bool isMixedSamples = fRenderTargetProxy->isMixedSampled() &&
+ (pipelineBuilder.isHWAntialias() || usesStencil);
+
+ GrColor overrideColor;
+ GrProcessorSet::Analysis analysis = op->analyzeUpdateAndRecordProcessors(
+ &pipelineBuilder, &appliedClip, isMixedSamples, *this->caps(), &overrideColor);
GrPipeline::InitArgs args;
pipelineBuilder.getPipelineInitArgs(&args);
args.fAppliedClip = &appliedClip;
args.fRenderTarget = rt;
args.fCaps = this->caps();
- args.fXPInputColor = analysis.outputColor();
- args.fXPInputCoverage = analysis.outputCoverage();
if (analysis.requiresDstTexture()) {
if (!this->setupDstTexture(fRenderTargetProxy.get(), clip, bounds, &args.fDstTexture)) {
return SK_InvalidUniqueID;
}
}
- op->initPipeline(args, analysis);
+ op->initPipeline(args, analysis, overrideColor);
// TODO: We need to add pipeline dependencies on textures, etc before recording this op.
op->setClippedBounds(bounds);
return this->getOpList()->addOp(std::move(op), this);