Make GrPipeline::CreateAt take GrRenderTarget and not GrRenderTargetContext

This is needed in order to create pipelines at flush time.

Change-Id: I0bcd64d503d45c3383dbb932b048e2d7faa07c67
Reviewed-on: https://skia-review.googlesource.com/8849
Commit-Queue: Brian Salomon <bsalomon@google.com>
Reviewed-by: Robert Phillips <robertphillips@google.com>
diff --git a/src/gpu/GrPipeline.cpp b/src/gpu/GrPipeline.cpp
index 4121549..6de106c 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 @@
     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 8fca37e..a9d34ae 100644
--- a/src/gpu/GrPipeline.h
+++ b/src/gpu/GrPipeline.h
@@ -62,7 +62,7 @@
         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 cd22541..eb80cbc 100644
--- a/src/gpu/GrRenderTargetOpList.cpp
+++ b/src/gpu/GrRenderTargetOpList.cpp
@@ -292,7 +292,12 @@
     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) {