| Index: src/gpu/GrPipeline.cpp
|
| diff --git a/src/gpu/GrPipeline.cpp b/src/gpu/GrPipeline.cpp
|
| index 0781c6fb2798765f85962b725681e2831cf422bb..37618308f022afb1619bfdf978724e071e37e709 100644
|
| --- a/src/gpu/GrPipeline.cpp
|
| +++ b/src/gpu/GrPipeline.cpp
|
| @@ -15,35 +15,31 @@
|
|
|
| #include "batches/GrBatch.h"
|
|
|
| -GrPipeline* GrPipeline::CreateAt(void* memory,
|
| - const GrPipelineBuilder& builder,
|
| - const GrProcOptInfo& colorPOI,
|
| - const GrProcOptInfo& coveragePOI,
|
| - const GrCaps& caps,
|
| - const GrScissorState& scissor,
|
| - const GrXferProcessor::DstTexture* dst,
|
| +GrPipeline* GrPipeline::CreateAt(void* memory, const CreateArgs& args,
|
| GrPipelineOptimizations* opts) {
|
| GrPipeline* pipeline = SkNEW_PLACEMENT(memory, GrPipeline);
|
| + const GrPipelineBuilder& builder = *args.fPipelineBuilder;
|
|
|
| // Create XferProcessor from DS's XPFactory
|
| SkAutoTUnref<GrXferProcessor> xferProcessor(
|
| - builder.getXPFactory()->createXferProcessor(
|
| - colorPOI, coveragePOI, builder.hasMixedSamples(), dst, caps));
|
| + builder.getXPFactory()->createXferProcessor(args.fColorPOI, args.fCoveragePOI,
|
| + builder.hasMixedSamples(), &args.fDstTexture,
|
| + *args.fCaps));
|
|
|
| GrColor overrideColor = GrColor_ILLEGAL;
|
| - if (colorPOI.firstEffectiveStageIndex() != 0) {
|
| - overrideColor = colorPOI.inputColorToEffectiveStage();
|
| + if (args.fColorPOI.firstEffectiveStageIndex() != 0) {
|
| + overrideColor = args.fColorPOI.inputColorToEffectiveStage();
|
| }
|
|
|
| GrXferProcessor::OptFlags optFlags = GrXferProcessor::kNone_OptFlags;
|
| if (xferProcessor) {
|
| pipeline->fXferProcessor.reset(xferProcessor.get());
|
|
|
| - optFlags = xferProcessor->getOptimizations(colorPOI,
|
| - coveragePOI,
|
| + optFlags = xferProcessor->getOptimizations(args.fColorPOI,
|
| + args.fCoveragePOI,
|
| builder.getStencil().doesWrite(),
|
| &overrideColor,
|
| - caps);
|
| + *args.fCaps);
|
| }
|
|
|
| // No need to have an override color if it isn't even going to be used.
|
| @@ -55,16 +51,13 @@ GrPipeline* GrPipeline::CreateAt(void* memory,
|
| // so we must check the draw type. In cases where we will skip drawing we simply return a
|
| // null GrPipeline.
|
| if (!xferProcessor || (GrXferProcessor::kSkipDraw_OptFlag & optFlags)) {
|
| - // Set the fields that don't default init and return. The lack of a render target will
|
| - // indicate that this can be skipped.
|
| - pipeline->fFlags = 0;
|
| - pipeline->fDrawFace = GrPipelineBuilder::kInvalid_DrawFace;
|
| - return pipeline;
|
| + pipeline->~GrPipeline();
|
| + return nullptr;
|
| }
|
|
|
| pipeline->fRenderTarget.reset(builder.fRenderTarget.get());
|
| SkASSERT(pipeline->fRenderTarget);
|
| - pipeline->fScissorState = scissor;
|
| + pipeline->fScissorState = *args.fScissor;
|
| pipeline->fStencilSettings = builder.getStencil();
|
| pipeline->fDrawFace = builder.getDrawFace();
|
|
|
| @@ -79,13 +72,13 @@ GrPipeline* GrPipeline::CreateAt(void* memory,
|
| pipeline->fFlags |= kSnapVertices_Flag;
|
| }
|
|
|
| - int firstColorStageIdx = colorPOI.firstEffectiveStageIndex();
|
| + int firstColorStageIdx = args.fColorPOI.firstEffectiveStageIndex();
|
|
|
| // TODO: Once we can handle single or four channel input into coverage stages then we can use
|
| // GrPipelineBuilder's coverageProcInfo (like color above) to set this initial information.
|
| int firstCoverageStageIdx = 0;
|
|
|
| - pipeline->adjustProgramFromOptimizations(builder, optFlags, colorPOI, coveragePOI,
|
| + pipeline->adjustProgramFromOptimizations(builder, optFlags, args.fColorPOI, args.fCoveragePOI,
|
| &firstColorStageIdx, &firstCoverageStageIdx);
|
|
|
| bool usesLocalCoords = false;
|
|
|