diff --git a/src/core/SkDeferredDisplayListRecorder.cpp b/src/core/SkDeferredDisplayListRecorder.cpp
index 58ec233..e22dad7 100644
--- a/src/core/SkDeferredDisplayListRecorder.cpp
+++ b/src/core/SkDeferredDisplayListRecorder.cpp
@@ -56,6 +56,7 @@
 #include "src/gpu/GrRecordingContextPriv.h"
 #include "src/gpu/GrSurfaceDrawContext.h"
 #include "src/gpu/GrTexture.h"
+#include "src/gpu/SkGpuDevice.h"
 #include "src/gpu/SkGr.h"
 #include "src/image/SkImage_Gpu.h"
 #include "src/image/SkImage_GpuYUVA.h"
@@ -157,8 +158,6 @@
         optionalTextureInfo = &kTextureInfo;
     }
 
-    GrSwizzle readSwizzle = caps->getReadSwizzle(fCharacterization.backendFormat(), grColorType);
-
     fTargetProxy = proxyProvider->createLazyRenderTargetProxy(
             [lazyProxyData = fLazyProxyData](GrResourceProvider* resourceProvider,
                                              const GrSurfaceProxy::LazySurfaceDesc&) {
@@ -186,16 +185,19 @@
     }
     fTargetProxy->priv().setIsDDLTarget();
 
-    GrSwizzle writeSwizzle = caps->getWriteSwizzle(fCharacterization.backendFormat(), grColorType);
+    auto sdc = GrSurfaceDrawContext::Make(fContext.get(),
+                                          grColorType,
+                                          fCharacterization.refColorSpace(),
+                                          fTargetProxy,
+                                          fCharacterization.origin(),
+                                          fCharacterization.surfaceProps());
 
-    GrSurfaceProxyView readView(fTargetProxy, fCharacterization.origin(), readSwizzle);
-    GrSurfaceProxyView writeView(fTargetProxy, fCharacterization.origin(), writeSwizzle);
+    auto device = SkGpuDevice::Make(std::move(sdc), SkGpuDevice::kUninit_InitContents);
+    if (!device) {
+        return false;
+    }
 
-    auto rtc = std::make_unique<GrSurfaceDrawContext>(fContext.get(), std::move(readView),
-                                                      std::move(writeView), grColorType,
-                                                      fCharacterization.refColorSpace(),
-                                                      fCharacterization.surfaceProps());
-    fSurface = SkSurface_Gpu::MakeWrappedRenderTarget(fContext.get(), std::move(rtc));
+    fSurface = sk_make_sp<SkSurface_Gpu>(std::move(device));
     return SkToBool(fSurface.get());
 }
 
diff --git a/src/image/SkSurface_Gpu.cpp b/src/image/SkSurface_Gpu.cpp
index df63f87..156807b 100644
--- a/src/image/SkSurface_Gpu.cpp
+++ b/src/image/SkSurface_Gpu.cpp
@@ -487,20 +487,6 @@
     return sk_make_sp<SkSurface_Gpu>(std::move(device));
 }
 
-sk_sp<SkSurface> SkSurface_Gpu::MakeWrappedRenderTarget(GrRecordingContext* context,
-                                                        std::unique_ptr<GrSurfaceDrawContext> sdc) {
-    if (!context) {
-        return nullptr;
-    }
-
-    auto device = SkGpuDevice::Make(std::move(sdc), SkGpuDevice::kUninit_InitContents);
-    if (!device) {
-        return nullptr;
-    }
-
-    return sk_make_sp<SkSurface_Gpu>(std::move(device));
-}
-
 sk_sp<SkSurface> SkSurface::MakeFromBackendTexture(GrRecordingContext* context,
                                                    const GrBackendTexture& tex,
                                                    GrSurfaceOrigin origin, int sampleCnt,
diff --git a/src/image/SkSurface_Gpu.h b/src/image/SkSurface_Gpu.h
index a7f8ec8..b1ba869 100644
--- a/src/image/SkSurface_Gpu.h
+++ b/src/image/SkSurface_Gpu.h
@@ -21,10 +21,6 @@
     SkSurface_Gpu(sk_sp<SkGpuDevice>);
     ~SkSurface_Gpu() override;
 
-    // This is an internal-only factory
-    static sk_sp<SkSurface> MakeWrappedRenderTarget(GrRecordingContext*,
-                                                    std::unique_ptr<GrSurfaceDrawContext>);
-
     GrRecordingContext* onGetRecordingContext() override;
 
     GrBackendTexture onGetBackendTexture(BackendHandleAccess) override;
diff --git a/src/image/SkSurface_GpuMtl.mm b/src/image/SkSurface_GpuMtl.mm
index f95b1ec..48aa35b 100644
--- a/src/image/SkSurface_GpuMtl.mm
+++ b/src/image/SkSurface_GpuMtl.mm
@@ -19,6 +19,7 @@
 #if SK_SUPPORT_GPU
 
 #include "src/gpu/GrSurface.h"
+#include "src/gpu/SkGpuDevice.h"
 #include "src/gpu/mtl/GrMtlTextureRenderTarget.h"
 
 #ifdef SK_METAL
@@ -35,7 +36,6 @@
                                                  const SkSurfaceProps* surfaceProps,
                                                  GrMTLHandle* drawable) {
     GrProxyProvider* proxyProvider = rContext->priv().proxyProvider();
-    const GrCaps* caps = rContext->priv().caps();
 
     CAMetalLayer* metalLayer = (__bridge CAMetalLayer*)layer;
     GrBackendFormat backendFormat = GrBackendFormat::MakeMtl(metalLayer.pixelFormat);
@@ -84,18 +84,19 @@
             false,
             GrSurfaceProxy::UseAllocator::kYes);
 
-    GrSwizzle readSwizzle = caps->getReadSwizzle(backendFormat, grColorType);
-    GrSwizzle writeSwizzle = caps->getWriteSwizzle(backendFormat, grColorType);
+    auto sdc = GrSurfaceDrawContext::Make(rContext,
+                                          grColorType,
+                                          std::move(colorSpace),
+                                          std::move(proxy),
+                                          origin,
+                                          SkSurfacePropsCopyOrDefault(surfaceProps));
 
-    GrSurfaceProxyView readView(proxy, origin, readSwizzle);
-    GrSurfaceProxyView writeView(std::move(proxy), origin, writeSwizzle);
+    auto device = SkGpuDevice::Make(std::move(sdc), SkGpuDevice::kUninit_InitContents);
+    if (!device) {
+        return nullptr;
+    }
 
-    auto rtc = std::make_unique<GrSurfaceDrawContext>(rContext, std::move(readView),
-                                                      std::move(writeView), grColorType, colorSpace,
-                                                      SkSurfacePropsCopyOrDefault(surfaceProps));
-
-    sk_sp<SkSurface> surface = SkSurface_Gpu::MakeWrappedRenderTarget(rContext, std::move(rtc));
-    return surface;
+    return sk_make_sp<SkSurface_Gpu>(std::move(device));
 }
 
 sk_sp<SkSurface> SkSurface::MakeFromMTKView(GrRecordingContext* rContext,
@@ -106,7 +107,6 @@
                                             sk_sp<SkColorSpace> colorSpace,
                                             const SkSurfaceProps* surfaceProps) {
     GrProxyProvider* proxyProvider = rContext->priv().proxyProvider();
-    const GrCaps* caps = rContext->priv().caps();
 
     MTKView* mtkView = (__bridge MTKView*)view;
     GrBackendFormat backendFormat = GrBackendFormat::MakeMtl(mtkView.colorPixelFormat);
@@ -154,18 +154,19 @@
             false,
             GrSurfaceProxy::UseAllocator::kYes);
 
-    GrSwizzle readSwizzle = caps->getReadSwizzle(backendFormat, grColorType);
-    GrSwizzle writeSwizzle = caps->getWriteSwizzle(backendFormat, grColorType);
+    auto sdc = GrSurfaceDrawContext::Make(rContext,
+                                          grColorType,
+                                          std::move(colorSpace),
+                                          std::move(proxy),
+                                          origin,
+                                          SkSurfacePropsCopyOrDefault(surfaceProps));
 
-    GrSurfaceProxyView readView(proxy, origin, readSwizzle);
-    GrSurfaceProxyView writeView(std::move(proxy), origin, writeSwizzle);
+    auto device = SkGpuDevice::Make(std::move(sdc), SkGpuDevice::kUninit_InitContents);
+    if (!device) {
+        return nullptr;
+    }
 
-    auto rtc = std::make_unique<GrSurfaceDrawContext>(rContext, std::move(readView),
-                                                      std::move(writeView), grColorType, colorSpace,
-                                                      SkSurfacePropsCopyOrDefault(surfaceProps));
-
-    sk_sp<SkSurface> surface = SkSurface_Gpu::MakeWrappedRenderTarget(rContext, std::move(rtc));
-    return surface;
+    return sk_make_sp<SkSurface_Gpu>(std::move(device));
 }
 
 #endif
