diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/gpu/GrPipeline.cpp | 10 | ||||
-rw-r--r-- | src/gpu/GrPipeline.h | 2 | ||||
-rw-r--r-- | src/gpu/GrRenderTargetOpList.cpp | 7 |
3 files changed, 10 insertions, 9 deletions
diff --git a/src/gpu/GrPipeline.cpp b/src/gpu/GrPipeline.cpp index 4121549a7b..6de106c8dd 100644 --- a/src/gpu/GrPipeline.cpp +++ b/src/gpu/GrPipeline.cpp @@ -22,14 +22,10 @@ GrPipeline* GrPipeline::CreateAt(void* memory, const CreateArgs& args, GrPipelineOptimizations* optimizations) { SkASSERT(args.fAnalysis); - GrRenderTarget* rt = args.fRenderTargetContext->accessRenderTarget(); - if (!rt) { - return nullptr; - } + SkASSERT(args.fRenderTarget); GrPipeline* pipeline = new (memory) GrPipeline; - pipeline->fRenderTarget.reset(rt); - SkASSERT(pipeline->fRenderTarget); + pipeline->fRenderTarget.reset(args.fRenderTarget); pipeline->fScissorState = args.fAppliedClip->scissorState(); pipeline->fWindowRectsState = args.fAppliedClip->windowRectsState(); pipeline->fUserStencilSettings = args.fUserStencil; @@ -55,7 +51,7 @@ GrPipeline* GrPipeline::CreateAt(void* memory, const CreateArgs& args, bool isHWAA = kHWAntialias_Flag & args.fFlags; // Create XferProcessor from DS's XPFactory - bool hasMixedSamples = args.fRenderTargetContext->hasMixedSamples() && + bool hasMixedSamples = args.fRenderTarget->isMixedSampled() && (isHWAA || pipeline->isStencilEnabled()); const GrXPFactory* xpFactory = args.fProcessors->xpFactory(); sk_sp<GrXferProcessor> xferProcessor; diff --git a/src/gpu/GrPipeline.h b/src/gpu/GrPipeline.h index 8fca37e6fa..a9d34aea9c 100644 --- a/src/gpu/GrPipeline.h +++ b/src/gpu/GrPipeline.h @@ -62,7 +62,7 @@ public: const GrProcessorSet::FragmentProcessorAnalysis* fAnalysis; const GrUserStencilSettings* fUserStencil = &GrUserStencilSettings::kUnused; GrAppliedClip* fAppliedClip = nullptr; - GrRenderTargetContext* fRenderTargetContext = nullptr; + GrRenderTarget* fRenderTarget = nullptr; const GrCaps* fCaps = nullptr; GrXferProcessor::DstTexture fDstTexture; }; diff --git a/src/gpu/GrRenderTargetOpList.cpp b/src/gpu/GrRenderTargetOpList.cpp index cd22541b93..eb80cbc819 100644 --- a/src/gpu/GrRenderTargetOpList.cpp +++ b/src/gpu/GrRenderTargetOpList.cpp @@ -292,7 +292,12 @@ void GrRenderTargetOpList::addDrawOp(const GrPipelineBuilder& pipelineBuilder, GrPipeline::CreateArgs args; pipelineBuilder.initPipelineCreateArgs(&args); args.fAppliedClip = &appliedClip; - args.fRenderTargetContext = renderTargetContext; + // This forces instantiation of the render target. Pipeline creation is moving to flush time + // by which point instantiation must have occurred anyway. + args.fRenderTarget = renderTargetContext->accessRenderTarget(); + if (!args.fRenderTarget) { + return; + } args.fCaps = this->caps(); args.fAnalysis = &analysis; if (analysis.usesPLSDstRead() || fClipOpToBounds) { |