diff --git a/src/gpu/GrResourceProvider.cpp b/src/gpu/GrResourceProvider.cpp
index 92b5fca..38738a5 100644
--- a/src/gpu/GrResourceProvider.cpp
+++ b/src/gpu/GrResourceProvider.cpp
@@ -548,6 +548,42 @@
              stencil->numSamples() == num_stencil_samples(rt, useMSAASurface, *this->caps()));
     return stencil != nullptr;
 }
+sk_sp<GrAttachment> GrResourceProvider::getDiscardableMSAAAttachment(SkISize dimensions,
+                                                                     const GrBackendFormat& format,
+                                                                     int sampleCnt,
+                                                                     GrProtected isProtected) {
+    ASSERT_SINGLE_OWNER
+
+    SkASSERT(sampleCnt > 1);
+
+    if (this->isAbandoned()) {
+        return nullptr;
+    }
+
+    if (!fCaps->validateSurfaceParams(
+                dimensions, format, GrRenderable::kYes, sampleCnt, GrMipmapped::kNo)) {
+        return nullptr;
+    }
+
+    GrUniqueKey key;
+    GrAttachment::ComputeSharedAttachmentUniqueKey(*this->caps(),
+                                                   format,
+                                                   dimensions,
+                                                   GrAttachment::UsageFlags::kColorAttachment,
+                                                   sampleCnt,
+                                                   GrMipmapped::kNo,
+                                                   isProtected,
+                                                   &key);
+    auto msaaAttachment = this->findByUniqueKey<GrAttachment>(key);
+    if (msaaAttachment) {
+        return msaaAttachment;
+    }
+    msaaAttachment = this->makeMSAAAttachment(dimensions, format, sampleCnt, isProtected);
+    if (msaaAttachment) {
+        this->assignUniqueKeyToResource(key, msaaAttachment.get());
+    }
+    return msaaAttachment;
+}
 
 sk_sp<GrAttachment> GrResourceProvider::makeMSAAAttachment(SkISize dimensions,
                                                            const GrBackendFormat& format,
diff --git a/src/gpu/GrResourceProvider.h b/src/gpu/GrResourceProvider.h
index ff88dfe..aa79dd6 100644
--- a/src/gpu/GrResourceProvider.h
+++ b/src/gpu/GrResourceProvider.h
@@ -278,6 +278,17 @@
                                            GrProtected isProtected);
 
     /**
+     * Gets a GrAttachment that can be used for MSAA rendering. This attachment may be shared by
+     * other users. Thus any renderpass that uses the attachment should not assume any specific
+     * data at the start and should not try to save written data at the end. Ideally the render pass
+     * should discard the data at the end.
+     */
+    sk_sp<GrAttachment> getDiscardableMSAAAttachment(SkISize dimensions,
+                                                     const GrBackendFormat& format,
+                                                     int sampleCnt,
+                                                     GrProtected isProtected);
+
+    /**
      * Assigns a unique key to a resource. If the key is associated with another resource that
      * association is removed and replaced by this resource.
      */
diff --git a/src/gpu/gl/GrGLRenderTarget.cpp b/src/gpu/gl/GrGLRenderTarget.cpp
index 98657b4..c5d6a3e 100644
--- a/src/gpu/gl/GrGLRenderTarget.cpp
+++ b/src/gpu/gl/GrGLRenderTarget.cpp
@@ -206,9 +206,10 @@
         }
     }
 
-    fDynamicMSAAAttachment.reset(static_cast<GrGLAttachment*>(resourceProvider->makeMSAAAttachment(
-            this->dimensions(), this->backendFormat(), internalSampleCount,
-            GrProtected(this->isProtected())).release()));
+    fDynamicMSAAAttachment.reset(
+            static_cast<GrGLAttachment*>(resourceProvider->getDiscardableMSAAAttachment(
+                    this->dimensions(), this->backendFormat(), internalSampleCount,
+                    GrProtected(this->isProtected())).release()));
     if (!fDynamicMSAAAttachment) {
         return false;
     }
diff --git a/src/gpu/vk/GrVkRenderTarget.cpp b/src/gpu/vk/GrVkRenderTarget.cpp
index cf09035..c5f9e97 100644
--- a/src/gpu/vk/GrVkRenderTarget.cpp
+++ b/src/gpu/vk/GrVkRenderTarget.cpp
@@ -210,10 +210,10 @@
     const GrBackendFormat& format = nonMSAAColorAttachment->backendFormat();
 
     sk_sp<GrAttachment> msaaAttachment =
-            rp->makeMSAAAttachment(nonMSAAColorAttachment->dimensions(),
-                                   format,
-                                   gpu->caps()->internalMultisampleCount(format),
-                                   GrProtected(nonMSAAColorAttachment->isProtected()));
+            rp->getDiscardableMSAAAttachment(nonMSAAColorAttachment->dimensions(),
+                                             format,
+                                             gpu->caps()->internalMultisampleCount(format),
+                                             GrProtected(nonMSAAColorAttachment->isProtected()));
     if (!msaaAttachment) {
         return nullptr;
     }
