aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/gpu/GrPipeline.cpp
diff options
context:
space:
mode:
authorGravatar Brian Salomon <bsalomon@google.com>2017-03-16 19:51:42 +0000
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-03-16 19:51:55 +0000
commitc48af934608bbb65650641f66adb51f2102d4274 (patch)
tree7853ab4fc62a179b8192a5c25db3472dd5fe6b9a /src/gpu/GrPipeline.cpp
parenta839fc0b63bd68682dcf51abc77078bfea48c1a1 (diff)
Revert "Remove GrPipeline from GrDrawOp."
This reverts commit 2bf4b3a97b770811d9e0558dbbfbdb57cfafbdb7. Reason for revert: nanobench assertion Original change's description: > Remove GrPipeline from GrDrawOp. > > GrDrawOp subclasses are now free to construct their pipelines at flush time and now in theory could use multiple GrPipelines for multipass rendering. > > GrProcessorSet may be used to retain the processors from a GrPaint with "pending execution" style refs. > > NVPR and Instanced rendering are updated to create their pipelines at flush time without a GrPipelineBuilder. > > The monolithic pipeline creation/management that was on GrDrawOp is moved to GrMeshDrawOp. However, this is temporary and will be removed in coming changes. > > Change-Id: I124282e3cea5d070970b5460c8a679fcaf7a8eff > Reviewed-on: https://skia-review.googlesource.com/7279 > Commit-Queue: Brian Salomon <bsalomon@google.com> > Reviewed-by: Robert Phillips <robertphillips@google.com> > TBR=bsalomon@google.com,robertphillips@google.com,csmartdalton@google.com,reviews@skia.org NOPRESUBMIT=true NOTREECHECKS=true NOTRY=true Change-Id: I1bc64f6cbbd5f482417637a034342c2b5371dc5c Reviewed-on: https://skia-review.googlesource.com/9817 Reviewed-by: Brian Salomon <bsalomon@google.com> Commit-Queue: Brian Salomon <bsalomon@google.com>
Diffstat (limited to 'src/gpu/GrPipeline.cpp')
-rw-r--r--src/gpu/GrPipeline.cpp36
1 files changed, 17 insertions, 19 deletions
diff --git a/src/gpu/GrPipeline.cpp b/src/gpu/GrPipeline.cpp
index 7ab5cbfac6..845ae4488d 100644
--- a/src/gpu/GrPipeline.cpp
+++ b/src/gpu/GrPipeline.cpp
@@ -24,31 +24,27 @@ GrPipelineOptimizations GrPipeline::init(const InitArgs& args) {
SkASSERT(args.fRenderTarget);
fRenderTarget.reset(args.fRenderTarget);
+ fScissorState = args.fAppliedClip->scissorState();
+ fWindowRectsState = args.fAppliedClip->windowRectsState();
+ fUserStencilSettings = args.fUserStencil;
+ fDrawFace = static_cast<int16_t>(args.fDrawFace);
fFlags = args.fFlags;
- if (args.fAppliedClip) {
- fScissorState = args.fAppliedClip->scissorState();
- if (args.fAppliedClip->hasStencilClip()) {
- fFlags |= kHasStencilClip_Flag;
- }
- fWindowRectsState = args.fAppliedClip->windowRectsState();
- }
if (args.fProcessors->usesDistanceVectorField()) {
fFlags |= kUsesDistanceVectorField_Flag;
}
+ if (args.fAppliedClip->hasStencilClip()) {
+ fFlags |= kHasStencilClip_Flag;
+ }
+ if (!args.fUserStencil->isDisabled(args.fAppliedClip->hasStencilClip())) {
+ fFlags |= kStencilEnabled_Flag;
+ }
if (args.fProcessors->disableOutputConversionToSRGB()) {
fFlags |= kDisableOutputConversionToSRGB_Flag;
}
if (args.fProcessors->allowSRGBInputs()) {
fFlags |= kAllowSRGBInputs_Flag;
}
- if (!args.fUserStencil->isDisabled(fFlags & kHasStencilClip_Flag)) {
- fFlags |= kStencilEnabled_Flag;
- }
-
- fUserStencilSettings = args.fUserStencil;
-
- fDrawFace = static_cast<int16_t>(args.fDrawFace);
bool isHWAA = kHWAntialias_Flag & args.fFlags;
@@ -90,7 +86,7 @@ GrPipelineOptimizations GrPipeline::init(const InitArgs& args) {
fNumColorProcessors = args.fProcessors->numColorFragmentProcessors() - colorFPsToEliminate;
int numTotalProcessors =
fNumColorProcessors + args.fProcessors->numCoverageFragmentProcessors();
- if (args.fAppliedClip && args.fAppliedClip->clipCoverageFragmentProcessor()) {
+ if (args.fAppliedClip->clipCoverageFragmentProcessor()) {
++numTotalProcessors;
}
fFragmentProcessors.reset(numTotalProcessors);
@@ -105,10 +101,8 @@ GrPipelineOptimizations GrPipeline::init(const InitArgs& args) {
const GrFragmentProcessor* fp = args.fProcessors->coverageFragmentProcessor(i);
fFragmentProcessors[currFPIdx].reset(fp);
}
- if (args.fAppliedClip) {
- if (const GrFragmentProcessor* fp = args.fAppliedClip->clipCoverageFragmentProcessor()) {
- fFragmentProcessors[currFPIdx].reset(fp);
- }
+ if (const GrFragmentProcessor* fp = args.fAppliedClip->clipCoverageFragmentProcessor()) {
+ fFragmentProcessors[currFPIdx].reset(fp);
}
// Setup info we need to pass to GrPrimitiveProcessors that are used with this GrPipeline.
@@ -124,6 +118,10 @@ GrPipelineOptimizations GrPipeline::init(const InitArgs& args) {
if (SkToBool(optFlags & GrXferProcessor::kCanTweakAlphaForCoverage_OptFlag)) {
optimizations.fFlags |= GrPipelineOptimizations::kCanTweakAlphaForCoverage_Flag;
}
+
+ if (GrXPFactory::WillReadDst(xpFactory, *args.fAnalysis)) {
+ optimizations.fFlags |= GrPipelineOptimizations::kXPReadsDst_Flag;
+ }
return optimizations;
}