Add usesMSAASurface to GrMeshDrawOp::Target

Also switches GrFillRRectOp to call usesMSAASurface.

Bug: skia:11396
Change-Id: I66d0ee2c6dc76819efc0f3283f6e1a0af11f23f7
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/395136
Commit-Queue: Chris Dalton <csmartdalton@google.com>
Reviewed-by: Robert Phillips <robertphillips@google.com>
diff --git a/src/gpu/GrOpFlushState.h b/src/gpu/GrOpFlushState.h
index 29a8989..6ecda64 100644
--- a/src/gpu/GrOpFlushState.h
+++ b/src/gpu/GrOpFlushState.h
@@ -58,12 +58,14 @@
     /** Additional data required on a per-op basis when executing GrOps. */
     struct OpArgs {
         // TODO: why does OpArgs have the op we're going to pass it to as a member? Remove it.
-        explicit OpArgs(GrOp* op, const GrSurfaceProxyView& surfaceView, GrAppliedClip* appliedClip,
+        explicit OpArgs(GrOp* op, const GrSurfaceProxyView& surfaceView, bool usesMSAASurface,
+                        GrAppliedClip* appliedClip,
                         const GrXferProcessor::DstProxyView& dstProxyView,
                         GrXferBarrierFlags renderPassXferBarriers, GrLoadOp colorLoadOp)
                 : fOp(op)
                 , fSurfaceView(surfaceView)
                 , fRenderTargetProxy(surfaceView.asRenderTargetProxy())
+                , fUsesMSAASurface(usesMSAASurface)
                 , fAppliedClip(appliedClip)
                 , fDstProxyView(dstProxyView)
                 , fRenderPassXferBarriers(renderPassXferBarriers)
@@ -74,6 +76,8 @@
         GrOp* op() { return fOp; }
         const GrSurfaceProxyView& writeView() const { return fSurfaceView; }
         GrRenderTargetProxy* rtProxy() const { return fRenderTargetProxy; }
+        // True if the op under consideration belongs to an opsTask that renders to an MSAA buffer.
+        bool usesMSAASurface() const { return fUsesMSAASurface; }
         GrAppliedClip* appliedClip() { return fAppliedClip; }
         const GrAppliedClip* appliedClip() const { return fAppliedClip; }
         const GrXferProcessor::DstProxyView& dstProxyView() const { return fDstProxyView; }
@@ -91,6 +95,7 @@
         GrOp*                         fOp;
         const GrSurfaceProxyView&     fSurfaceView;
         GrRenderTargetProxy*          fRenderTargetProxy;
+        bool                          fUsesMSAASurface;
         GrAppliedClip*                fAppliedClip;
         GrXferProcessor::DstProxyView fDstProxyView;   // TODO: do we still need the dst proxy here?
         GrXferBarrierFlags            fRenderPassXferBarriers;
@@ -151,6 +156,7 @@
     }
     const GrSurfaceProxyView& writeView() const final { return this->drawOpArgs().writeView(); }
     GrRenderTargetProxy* rtProxy() const final { return this->drawOpArgs().rtProxy(); }
+    bool usesMSAASurface() const final { return this->drawOpArgs().usesMSAASurface(); }
     const GrAppliedClip* appliedClip() const final { return this->drawOpArgs().appliedClip(); }
     const GrAppliedHardClip& appliedHardClip() const {
         return (fOpArgs->appliedClip()) ?
diff --git a/src/gpu/GrOpsRenderPass.h b/src/gpu/GrOpsRenderPass.h
index 246cbce..e43b338 100644
--- a/src/gpu/GrOpsRenderPass.h
+++ b/src/gpu/GrOpsRenderPass.h
@@ -141,20 +141,23 @@
 protected:
     GrOpsRenderPass() : fOrigin(kTopLeft_GrSurfaceOrigin), fRenderTarget(nullptr) {}
 
-    GrOpsRenderPass(GrRenderTarget* rt, GrSurfaceOrigin origin)
+    GrOpsRenderPass(GrRenderTarget* rt, bool useMSAASurface, GrSurfaceOrigin origin)
             : fOrigin(origin)
-            , fRenderTarget(rt) {
+            , fRenderTarget(rt)
+            , fUseMSAASurface(useMSAASurface) {
     }
 
-    void set(GrRenderTarget* rt, GrSurfaceOrigin origin) {
+    void set(GrRenderTarget* rt, bool useMSAASurface, GrSurfaceOrigin origin) {
         SkASSERT(!fRenderTarget);
 
         fRenderTarget = rt;
+        fUseMSAASurface = useMSAASurface;
         fOrigin = origin;
     }
 
     GrSurfaceOrigin fOrigin;
     GrRenderTarget* fRenderTarget;
+    bool fUseMSAASurface;
 
     // Backends may defer binding of certain buffers if their draw API requires a buffer, or if
     // their bind methods don't support base values.
diff --git a/src/gpu/GrOpsTask.cpp b/src/gpu/GrOpsTask.cpp
index cb7d05e..f853c8e 100644
--- a/src/gpu/GrOpsTask.cpp
+++ b/src/gpu/GrOpsTask.cpp
@@ -358,6 +358,7 @@
                      GrAuditTrail* auditTrail)
         : GrRenderTask()
         , fAuditTrail(auditTrail)
+        , fUsesMSAASurface(view.asRenderTargetProxy()->numSamples() > 1)
         , fTargetSwizzle(view.swizzle())
         , fTargetOrigin(view.origin())
           SkDEBUGCODE(, fNumClips(0)) {
@@ -479,6 +480,7 @@
 #endif
             GrOpFlushState::OpArgs opArgs(chain.head(),
                                           dstView,
+                                          fUsesMSAASurface,
                                           chain.appliedClip(),
                                           chain.dstProxyView(),
                                           fRenderPassXferBarriers,
@@ -612,7 +614,7 @@
 
     GrOpsRenderPass* renderPass = create_render_pass(flushState->gpu(),
                                                      proxy->peekRenderTarget(),
-                                                     proxy->numSamples() > 1,
+                                                     fUsesMSAASurface,
                                                      stencil,
                                                      fTargetOrigin,
                                                      fClippedContentBounds,
@@ -642,6 +644,7 @@
 
         GrOpFlushState::OpArgs opArgs(chain.head(),
                                       dstView,
+                                      fUsesMSAASurface,
                                       chain.appliedClip(),
                                       chain.dstProxyView(),
                                       fRenderPassXferBarriers,
diff --git a/src/gpu/GrOpsTask.h b/src/gpu/GrOpsTask.h
index 8b29ece..aedcfc2 100644
--- a/src/gpu/GrOpsTask.h
+++ b/src/gpu/GrOpsTask.h
@@ -248,6 +248,7 @@
 
     GrAuditTrail* fAuditTrail;
 
+    bool fUsesMSAASurface;
     GrSwizzle fTargetSwizzle;
     GrSurfaceOrigin fTargetOrigin;
 
diff --git a/src/gpu/d3d/GrD3DGpu.cpp b/src/gpu/d3d/GrD3DGpu.cpp
index 209c30e..ee8a73b 100644
--- a/src/gpu/d3d/GrD3DGpu.cpp
+++ b/src/gpu/d3d/GrD3DGpu.cpp
@@ -126,7 +126,7 @@
 
 GrOpsRenderPass* GrD3DGpu::onGetOpsRenderPass(
         GrRenderTarget* rt,
-        bool /*useMSAASurface*/,
+        bool useMSAASurface,
         GrAttachment*,
         GrSurfaceOrigin origin,
         const SkIRect& bounds,
@@ -138,7 +138,8 @@
         fCachedOpsRenderPass.reset(new GrD3DOpsRenderPass(this));
     }
 
-    if (!fCachedOpsRenderPass->set(rt, origin, bounds, colorInfo, stencilInfo, sampledProxies)) {
+    if (!fCachedOpsRenderPass->set(rt, useMSAASurface, origin, bounds, colorInfo, stencilInfo,
+                                   sampledProxies)) {
         return nullptr;
     }
     return fCachedOpsRenderPass.get();
diff --git a/src/gpu/d3d/GrD3DOpsRenderPass.cpp b/src/gpu/d3d/GrD3DOpsRenderPass.cpp
index a7ea52a..900209c 100644
--- a/src/gpu/d3d/GrD3DOpsRenderPass.cpp
+++ b/src/gpu/d3d/GrD3DOpsRenderPass.cpp
@@ -27,14 +27,14 @@
 
 GrD3DOpsRenderPass::GrD3DOpsRenderPass(GrD3DGpu* gpu) : fGpu(gpu) {}
 
-bool GrD3DOpsRenderPass::set(GrRenderTarget* rt, GrSurfaceOrigin origin, const SkIRect& bounds,
-                             const GrOpsRenderPass::LoadAndStoreInfo& colorInfo,
-                             const GrOpsRenderPass::StencilLoadAndStoreInfo& stencilInfo,
+bool GrD3DOpsRenderPass::set(GrRenderTarget* rt, bool useMSAASurface, GrSurfaceOrigin origin,
+                             const SkIRect& bounds, const GrOpsRenderPass::LoadAndStoreInfo&
+                             colorInfo, const GrOpsRenderPass::StencilLoadAndStoreInfo& stencilInfo,
                              const SkTArray<GrSurfaceProxy*, true>& sampledProxies) {
     SkASSERT(!fRenderTarget);
     SkASSERT(fGpu == rt->getContext()->priv().getGpu());
 
-    this->INHERITED::set(rt, origin);
+    this->INHERITED::set(rt, useMSAASurface, origin);
 
     fBounds = bounds;
 
diff --git a/src/gpu/d3d/GrD3DOpsRenderPass.h b/src/gpu/d3d/GrD3DOpsRenderPass.h
index e301b4d..40a0409 100644
--- a/src/gpu/d3d/GrD3DOpsRenderPass.h
+++ b/src/gpu/d3d/GrD3DOpsRenderPass.h
@@ -26,7 +26,7 @@
 
     void onExecuteDrawable(std::unique_ptr<SkDrawable::GpuDrawHandler>) override {}
 
-    bool set(GrRenderTarget*, GrSurfaceOrigin, const SkIRect& bounds,
+    bool set(GrRenderTarget*, bool useMSAASurface, GrSurfaceOrigin, const SkIRect& bounds,
         const GrOpsRenderPass::LoadAndStoreInfo&,
         const GrOpsRenderPass::StencilLoadAndStoreInfo&,
         const SkTArray<GrSurfaceProxy*, true>& sampledProxies);
diff --git a/src/gpu/dawn/GrDawnGpu.cpp b/src/gpu/dawn/GrDawnGpu.cpp
index 092216c..9411efc 100644
--- a/src/gpu/dawn/GrDawnGpu.cpp
+++ b/src/gpu/dawn/GrDawnGpu.cpp
@@ -158,7 +158,7 @@
 
 GrOpsRenderPass* GrDawnGpu::onGetOpsRenderPass(
         GrRenderTarget* rt,
-        bool /*useMSAASurface*/,
+        bool useMSAASurface,
         GrAttachment*,
         GrSurfaceOrigin origin,
         const SkIRect& bounds,
@@ -166,7 +166,8 @@
         const GrOpsRenderPass::StencilLoadAndStoreInfo& stencilInfo,
         const SkTArray<GrSurfaceProxy*, true>& sampledProxies,
         GrXferBarrierFlags renderPassXferBarriers) {
-    fOpsRenderPass.reset(new GrDawnOpsRenderPass(this, rt, origin, colorInfo, stencilInfo));
+    fOpsRenderPass.reset(new GrDawnOpsRenderPass(this, rt, useMSAASurface, origin, colorInfo,
+                                                 stencilInfo));
     return fOpsRenderPass.get();
 }
 
diff --git a/src/gpu/dawn/GrDawnOpsRenderPass.cpp b/src/gpu/dawn/GrDawnOpsRenderPass.cpp
index 245a831..bed8752 100644
--- a/src/gpu/dawn/GrDawnOpsRenderPass.cpp
+++ b/src/gpu/dawn/GrDawnOpsRenderPass.cpp
@@ -40,10 +40,10 @@
     }
 }
 
-GrDawnOpsRenderPass::GrDawnOpsRenderPass(GrDawnGpu* gpu, GrRenderTarget* rt, GrSurfaceOrigin origin,
-                                         const LoadAndStoreInfo& colorInfo,
+GrDawnOpsRenderPass::GrDawnOpsRenderPass(GrDawnGpu* gpu, GrRenderTarget* rt, bool useMSAASurface,
+                                         GrSurfaceOrigin origin, const LoadAndStoreInfo& colorInfo,
                                          const StencilLoadAndStoreInfo& stencilInfo)
-        : INHERITED(rt, origin)
+        : INHERITED(rt, useMSAASurface, origin)
         , fGpu(gpu)
         , fColorInfo(colorInfo) {
     fEncoder = fGpu->device().CreateCommandEncoder();
diff --git a/src/gpu/dawn/GrDawnOpsRenderPass.h b/src/gpu/dawn/GrDawnOpsRenderPass.h
index 921cf9d..f6b88d9 100644
--- a/src/gpu/dawn/GrDawnOpsRenderPass.h
+++ b/src/gpu/dawn/GrDawnOpsRenderPass.h
@@ -20,7 +20,7 @@
 
 class GrDawnOpsRenderPass : public GrOpsRenderPass {
 public:
-    GrDawnOpsRenderPass(GrDawnGpu*, GrRenderTarget*, GrSurfaceOrigin,
+    GrDawnOpsRenderPass(GrDawnGpu*, GrRenderTarget*, bool useMSAASurface, GrSurfaceOrigin,
                         const LoadAndStoreInfo&, const StencilLoadAndStoreInfo&);
 
     ~GrDawnOpsRenderPass() override;
diff --git a/src/gpu/gl/GrGLOpsRenderPass.cpp b/src/gpu/gl/GrGLOpsRenderPass.cpp
index 7ab5da7..3eca280 100644
--- a/src/gpu/gl/GrGLOpsRenderPass.cpp
+++ b/src/gpu/gl/GrGLOpsRenderPass.cpp
@@ -24,27 +24,26 @@
     SkASSERT(!fRenderTarget);
     SkASSERT(fGpu == rt->getContext()->priv().getGpu());
 
-    this->INHERITED::set(rt, origin);
-    fUseMultisampleFBO = useMSAASurface;
+    this->INHERITED::set(rt, useMSAASurface, origin);
     fContentBounds = contentBounds;
     fColorLoadAndStoreInfo = colorInfo;
     fStencilLoadAndStoreInfo = stencilInfo;
 }
 
 void GrGLOpsRenderPass::onBegin() {
-    fGpu->beginCommandBuffer(fRenderTarget, fUseMultisampleFBO, fContentBounds, fOrigin,
+    fGpu->beginCommandBuffer(fRenderTarget, fUseMSAASurface, fContentBounds, fOrigin,
                              fColorLoadAndStoreInfo, fStencilLoadAndStoreInfo);
 }
 
 void GrGLOpsRenderPass::onEnd() {
-    fGpu->endCommandBuffer(fRenderTarget, fUseMultisampleFBO, fColorLoadAndStoreInfo,
+    fGpu->endCommandBuffer(fRenderTarget, fUseMSAASurface, fColorLoadAndStoreInfo,
                            fStencilLoadAndStoreInfo);
 }
 
 bool GrGLOpsRenderPass::onBindPipeline(const GrProgramInfo& programInfo,
                                        const SkRect& drawBounds) {
     fPrimitiveType = programInfo.primitiveType();
-    return fGpu->flushGLState(fRenderTarget, fUseMultisampleFBO, programInfo);
+    return fGpu->flushGLState(fRenderTarget, fUseMSAASurface, programInfo);
 }
 
 void GrGLOpsRenderPass::onSetScissorRect(const SkIRect& scissor) {
@@ -386,7 +385,7 @@
 }
 
 void GrGLOpsRenderPass::onClear(const GrScissorState& scissor, std::array<float, 4> color) {
-    fGpu->clear(scissor, color, fRenderTarget, fUseMultisampleFBO, fOrigin);
+    fGpu->clear(scissor, color, fRenderTarget, fUseMSAASurface, fOrigin);
 }
 
 void GrGLOpsRenderPass::onClearStencilClip(const GrScissorState& scissor, bool insideStencilMask) {
diff --git a/src/gpu/gl/GrGLOpsRenderPass.h b/src/gpu/gl/GrGLOpsRenderPass.h
index bd67717..353c6f1 100644
--- a/src/gpu/gl/GrGLOpsRenderPass.h
+++ b/src/gpu/gl/GrGLOpsRenderPass.h
@@ -79,7 +79,6 @@
 
     GrGLGpu* const fGpu;
 
-    bool fUseMultisampleFBO;
     SkIRect fContentBounds;
     LoadAndStoreInfo fColorLoadAndStoreInfo;
     StencilLoadAndStoreInfo fStencilLoadAndStoreInfo;
diff --git a/src/gpu/mock/GrMockGpu.cpp b/src/gpu/mock/GrMockGpu.cpp
index 15a76ec..711cf20 100644
--- a/src/gpu/mock/GrMockGpu.cpp
+++ b/src/gpu/mock/GrMockGpu.cpp
@@ -56,7 +56,7 @@
 }
 
 GrOpsRenderPass* GrMockGpu::onGetOpsRenderPass(GrRenderTarget* rt,
-                                               bool /*useMSAASurface*/,
+                                               bool useMSAASurface,
                                                GrAttachment*,
                                                GrSurfaceOrigin origin,
                                                const SkIRect& bounds,
@@ -64,7 +64,7 @@
                                                const GrOpsRenderPass::StencilLoadAndStoreInfo&,
                                                const SkTArray<GrSurfaceProxy*,true>& sampledProxies,
                                                GrXferBarrierFlags renderPassXferBarriers) {
-    return new GrMockOpsRenderPass(this, rt, origin, colorInfo);
+    return new GrMockOpsRenderPass(this, rt, useMSAASurface, origin, colorInfo);
 }
 
 void GrMockGpu::submit(GrOpsRenderPass* renderPass) {
diff --git a/src/gpu/mock/GrMockOpTarget.h b/src/gpu/mock/GrMockOpTarget.h
index e3cb2f1..983b29d 100644
--- a/src/gpu/mock/GrMockOpTarget.h
+++ b/src/gpu/mock/GrMockOpTarget.h
@@ -105,6 +105,7 @@
     UNIMPL(GrRenderTargetProxy* rtProxy() const)
     UNIMPL(const GrSurfaceProxyView& writeView() const)
     UNIMPL(const GrAppliedClip* appliedClip() const)
+    UNIMPL(bool usesMSAASurface() const)
     UNIMPL(GrStrikeCache* strikeCache() const)
     UNIMPL(GrAtlasManager* atlasManager() const)
     UNIMPL(SkTArray<GrSurfaceProxy*, true>* sampledProxyArray())
diff --git a/src/gpu/mock/GrMockOpsRenderPass.h b/src/gpu/mock/GrMockOpsRenderPass.h
index 0067caf..7b812f0 100644
--- a/src/gpu/mock/GrMockOpsRenderPass.h
+++ b/src/gpu/mock/GrMockOpsRenderPass.h
@@ -15,9 +15,9 @@
 
 class GrMockOpsRenderPass : public GrOpsRenderPass {
 public:
-    GrMockOpsRenderPass(GrMockGpu* gpu, GrRenderTarget* rt, GrSurfaceOrigin origin,
-                        LoadAndStoreInfo colorInfo)
-            : INHERITED(rt, origin)
+    GrMockOpsRenderPass(GrMockGpu* gpu, GrRenderTarget* rt, bool useMSAASurface,
+                        GrSurfaceOrigin origin, LoadAndStoreInfo colorInfo)
+            : INHERITED(rt, useMSAASurface, origin)
             , fGpu(gpu)
             , fColorLoadOp(colorInfo.fLoadOp) {
     }
diff --git a/src/gpu/mtl/GrMtlGpu.mm b/src/gpu/mtl/GrMtlGpu.mm
index 3c4fbff..93c042a 100644
--- a/src/gpu/mtl/GrMtlGpu.mm
+++ b/src/gpu/mtl/GrMtlGpu.mm
@@ -204,13 +204,14 @@
 }
 
 GrOpsRenderPass* GrMtlGpu::onGetOpsRenderPass(
-            GrRenderTarget* renderTarget, bool /*useMSAASurface*/, GrAttachment*,
+            GrRenderTarget* renderTarget, bool useMultisampleFBO, GrAttachment*,
             GrSurfaceOrigin origin, const SkIRect& bounds,
             const GrOpsRenderPass::LoadAndStoreInfo& colorInfo,
             const GrOpsRenderPass::StencilLoadAndStoreInfo& stencilInfo,
             const SkTArray<GrSurfaceProxy*, true>& sampledProxies,
             GrXferBarrierFlags renderPassXferBarriers) {
-    return new GrMtlOpsRenderPass(this, renderTarget, origin, colorInfo, stencilInfo);
+    return new GrMtlOpsRenderPass(this, renderTarget, useMultisampleFBO, origin, colorInfo,
+                                  stencilInfo);
 }
 
 GrMtlCommandBuffer* GrMtlGpu::commandBuffer() {
diff --git a/src/gpu/mtl/GrMtlOpsRenderPass.h b/src/gpu/mtl/GrMtlOpsRenderPass.h
index a5ddd64..a369380 100644
--- a/src/gpu/mtl/GrMtlOpsRenderPass.h
+++ b/src/gpu/mtl/GrMtlOpsRenderPass.h
@@ -21,8 +21,8 @@
 
 class GrMtlOpsRenderPass : public GrOpsRenderPass {
 public:
-    GrMtlOpsRenderPass(GrMtlGpu* gpu, GrRenderTarget* rt, GrSurfaceOrigin origin,
-                       const GrOpsRenderPass::LoadAndStoreInfo& colorInfo,
+    GrMtlOpsRenderPass(GrMtlGpu* gpu, GrRenderTarget* rt, bool useMSAASurface,
+                       GrSurfaceOrigin origin, const GrOpsRenderPass::LoadAndStoreInfo& colorInfo,
                        const GrOpsRenderPass::StencilLoadAndStoreInfo& stencilInfo);
 
     ~GrMtlOpsRenderPass() override;
diff --git a/src/gpu/mtl/GrMtlOpsRenderPass.mm b/src/gpu/mtl/GrMtlOpsRenderPass.mm
index 3098f53..b8e6e30 100644
--- a/src/gpu/mtl/GrMtlOpsRenderPass.mm
+++ b/src/gpu/mtl/GrMtlOpsRenderPass.mm
@@ -22,10 +22,11 @@
 
 GR_NORETAIN_BEGIN
 
-GrMtlOpsRenderPass::GrMtlOpsRenderPass(GrMtlGpu* gpu, GrRenderTarget* rt, GrSurfaceOrigin origin,
+GrMtlOpsRenderPass::GrMtlOpsRenderPass(GrMtlGpu* gpu, GrRenderTarget* rt, bool useMultisampleFBO,
+                                       GrSurfaceOrigin origin,
                                        const GrOpsRenderPass::LoadAndStoreInfo& colorInfo,
                                        const GrOpsRenderPass::StencilLoadAndStoreInfo& stencilInfo)
-        : INHERITED(rt, origin)
+        : INHERITED(rt, useMultisampleFBO, origin)
         , fGpu(gpu) {
     this->setupRenderPass(colorInfo, stencilInfo);
 }
diff --git a/src/gpu/ops/GrFillRRectOp.cpp b/src/gpu/ops/GrFillRRectOp.cpp
index 00bb14f..537f149 100644
--- a/src/gpu/ops/GrFillRRectOp.cpp
+++ b/src/gpu/ops/GrFillRRectOp.cpp
@@ -461,7 +461,7 @@
 
 void FillRRectOp::onPrepareDraws(Target* target) {
     // We request no multisample, but some platforms don't support disabling it on MSAA targets.
-    if (target->rtProxy()->numSamples() > 1 && !target->caps().multisampleDisableSupport()) {
+    if (target->usesMSAASurface() && !target->caps().multisampleDisableSupport()) {
         fProcessorFlags |= ProcessorFlags::kMSAAEnabled;
     }
 
diff --git a/src/gpu/ops/GrMeshDrawOp.h b/src/gpu/ops/GrMeshDrawOp.h
index 1cef7eb..1cc8752 100644
--- a/src/gpu/ops/GrMeshDrawOp.h
+++ b/src/gpu/ops/GrMeshDrawOp.h
@@ -230,6 +230,7 @@
     virtual GrAppliedClip detachAppliedClip() = 0;
 
     virtual const GrXferProcessor::DstProxyView& dstProxyView() const = 0;
+    virtual bool usesMSAASurface() const = 0;
 
     virtual GrXferBarrierFlags renderPassBarriers() const = 0;
 
diff --git a/src/gpu/vk/GrVkGpu.cpp b/src/gpu/vk/GrVkGpu.cpp
index 1e5655d..e4ec038 100644
--- a/src/gpu/vk/GrVkGpu.cpp
+++ b/src/gpu/vk/GrVkGpu.cpp
@@ -302,7 +302,7 @@
 
 GrOpsRenderPass* GrVkGpu::onGetOpsRenderPass(
         GrRenderTarget* rt,
-        bool /*useMSAASurface*/,
+        bool useMSAASurface,
         GrAttachment* stencil,
         GrSurfaceOrigin origin,
         const SkIRect& bounds,
@@ -314,8 +314,8 @@
         fCachedOpsRenderPass = std::make_unique<GrVkOpsRenderPass>(this);
     }
 
-    if (!fCachedOpsRenderPass->set(rt, stencil, origin, bounds, colorInfo, stencilInfo,
-                                   sampledProxies, renderPassXferBarriers)) {
+    if (!fCachedOpsRenderPass->set(rt, useMSAASurface, stencil, origin, bounds, colorInfo,
+                                   stencilInfo, sampledProxies, renderPassXferBarriers)) {
         return nullptr;
     }
     return fCachedOpsRenderPass.get();
diff --git a/src/gpu/vk/GrVkOpsRenderPass.cpp b/src/gpu/vk/GrVkOpsRenderPass.cpp
index b082527..ca8dc50 100644
--- a/src/gpu/vk/GrVkOpsRenderPass.cpp
+++ b/src/gpu/vk/GrVkOpsRenderPass.cpp
@@ -356,6 +356,7 @@
 }
 
 bool GrVkOpsRenderPass::set(GrRenderTarget* rt,
+                            bool useMSAASurface,
                             GrAttachment* stencil,
                             GrSurfaceOrigin origin,
                             const SkIRect& bounds,
@@ -377,7 +378,7 @@
         return false;
     }
 
-    this->INHERITED::set(rt, origin);
+    this->INHERITED::set(rt, useMSAASurface, origin);
 
     for (int i = 0; i < sampledProxies.count(); ++i) {
         if (sampledProxies[i]->isInstantiated()) {
diff --git a/src/gpu/vk/GrVkOpsRenderPass.h b/src/gpu/vk/GrVkOpsRenderPass.h
index 6a490dd..eba64d6 100644
--- a/src/gpu/vk/GrVkOpsRenderPass.h
+++ b/src/gpu/vk/GrVkOpsRenderPass.h
@@ -32,6 +32,7 @@
     void onExecuteDrawable(std::unique_ptr<SkDrawable::GpuDrawHandler>) override;
 
     bool set(GrRenderTarget*,
+             bool useMSAASurface,
              GrAttachment*,
              GrSurfaceOrigin,
              const SkIRect& bounds,
diff --git a/tests/DrawOpAtlasTest.cpp b/tests/DrawOpAtlasTest.cpp
index 2e61d24..38245c7 100644
--- a/tests/DrawOpAtlasTest.cpp
+++ b/tests/DrawOpAtlasTest.cpp
@@ -227,6 +227,7 @@
     GrSurfaceProxyView surfaceView = rtc->writeSurfaceView();
     GrOpFlushState::OpArgs opArgs(op.get(),
                                   surfaceView,
+                                  false /*usesMSAASurface*/,
                                   nullptr,
                                   GrXferProcessor::DstProxyView(),
                                   GrXferBarrierFlags::kNone,