diff options
author | Brian Salomon <bsalomon@google.com> | 2017-03-16 19:51:42 +0000 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-03-16 19:51:55 +0000 |
commit | c48af934608bbb65650641f66adb51f2102d4274 (patch) | |
tree | 7853ab4fc62a179b8192a5c25db3472dd5fe6b9a /src/gpu/GrPipeline.cpp | |
parent | a839fc0b63bd68682dcf51abc77078bfea48c1a1 (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.cpp | 36 |
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; } |