diff --git a/src/gpu/GrDrawingManager.cpp b/src/gpu/GrDrawingManager.cpp
index 7002ce1..6b2990d 100644
--- a/src/gpu/GrDrawingManager.cpp
+++ b/src/gpu/GrDrawingManager.cpp
@@ -941,6 +941,10 @@
 
     sk_sp<GrTextureProxy> textureProxy(sk_ref_sp(sProxy->asTextureProxy()));
 
+    GrSurfaceOrigin origin = textureProxy->origin();
+    GrSwizzle texSwizzle = textureProxy->textureSwizzle();
+
     return std::unique_ptr<GrTextureContext>(new GrTextureContext(
-            fContext, std::move(textureProxy), colorType, alphaType, std::move(colorSpace)));
+            fContext, std::move(textureProxy), colorType, alphaType, std::move(colorSpace), origin,
+            texSwizzle));
 }
diff --git a/src/gpu/GrRenderTargetContext.cpp b/src/gpu/GrRenderTargetContext.cpp
index 5f63f9e..911ab7e 100644
--- a/src/gpu/GrRenderTargetContext.cpp
+++ b/src/gpu/GrRenderTargetContext.cpp
@@ -151,10 +151,9 @@
                                              sk_sp<SkColorSpace> colorSpace,
                                              const SkSurfaceProps* surfaceProps,
                                              bool managedOpsTask)
-        : GrSurfaceContext(context, colorType, kPremul_SkAlphaType, std::move(colorSpace))
+        : GrSurfaceContext(context, colorType, kPremul_SkAlphaType, std::move(colorSpace), origin,
+                           texSwizzle)
         , fRenderTargetProxy(std::move(rtp))
-        , fOrigin(origin)
-        , fTextureSwizzle(texSwizzle)
         , fOutputSwizzle(outSwizzle)
         , fOpsTask(sk_ref_sp(fRenderTargetProxy->getLastOpsTask()))
         , fSurfaceProps(SkSurfacePropsCopyOrDefault(surfaceProps))
diff --git a/src/gpu/GrRenderTargetContext.h b/src/gpu/GrRenderTargetContext.h
index d0bd523..286bff5 100644
--- a/src/gpu/GrRenderTargetContext.h
+++ b/src/gpu/GrRenderTargetContext.h
@@ -481,16 +481,12 @@
     int height() const { return fRenderTargetProxy->height(); }
     int numSamples() const { return fRenderTargetProxy->numSamples(); }
     const SkSurfaceProps& surfaceProps() const { return fSurfaceProps; }
-    GrSurfaceOrigin origin() const { return fOrigin; }
     bool wrapsVkSecondaryCB() const { return fRenderTargetProxy->wrapsVkSecondaryCB(); }
     GrMipMapped mipMapped() const;
 
     GrSurfaceProxyView outputSurfaceView() {
         return { fRenderTargetProxy, fOrigin, fOutputSwizzle };
     }
-    GrSurfaceProxyView textureSurfaceView() {
-        return { fRenderTargetProxy, fOrigin, fTextureSwizzle };
-    }
 
     // This entry point should only be called if the backing GPU object is known to be
     // instantiated.
@@ -648,8 +644,6 @@
     std::unique_ptr<GrTextTarget> fTextTarget;
 
     sk_sp<GrRenderTargetProxy> fRenderTargetProxy;
-    GrSurfaceOrigin fOrigin;
-    GrSwizzle fTextureSwizzle;
     GrSwizzle fOutputSwizzle;
 
     // In MDB-mode the GrOpsTask can be closed by some other renderTargetContext that has picked
diff --git a/src/gpu/GrSurfaceContext.cpp b/src/gpu/GrSurfaceContext.cpp
index 4b5e0a8..f427478 100644
--- a/src/gpu/GrSurfaceContext.cpp
+++ b/src/gpu/GrSurfaceContext.cpp
@@ -35,8 +35,13 @@
 GrSurfaceContext::GrSurfaceContext(GrRecordingContext* context,
                                    GrColorType colorType,
                                    SkAlphaType alphaType,
-                                   sk_sp<SkColorSpace> colorSpace)
-        : fContext(context), fColorInfo(colorType, alphaType, std::move(colorSpace)) {}
+                                   sk_sp<SkColorSpace> colorSpace,
+                                   GrSurfaceOrigin origin,
+                                   GrSwizzle texSwizzle)
+        : fContext(context)
+        , fOrigin(origin)
+        , fColorInfo(colorType, alphaType, std::move(colorSpace))
+        , fTextureSwizzle(texSwizzle) {}
 
 const GrCaps* GrSurfaceContext::caps() const { return fContext->priv().caps(); }
 
diff --git a/src/gpu/GrSurfaceContext.h b/src/gpu/GrSurfaceContext.h
index c9de7d0..0bcf6a6 100644
--- a/src/gpu/GrSurfaceContext.h
+++ b/src/gpu/GrSurfaceContext.h
@@ -16,6 +16,7 @@
 #include "src/gpu/GrColorInfo.h"
 #include "src/gpu/GrDataUtils.h"
 #include "src/gpu/GrSurfaceProxy.h"
+#include "src/gpu/GrSurfaceProxyView.h"
 
 class GrAuditTrail;
 class GrDrawingManager;
@@ -38,6 +39,10 @@
     virtual ~GrSurfaceContext() = default;
 
     const GrColorInfo& colorInfo() const { return fColorInfo; }
+    GrSurfaceOrigin origin() const { return fOrigin; }
+    GrSurfaceProxyView textureSurfaceView() {
+        return { this->asSurfaceProxyRef(), fOrigin, fTextureSwizzle };
+    }
 
     // TODO: these two calls would be way cooler if this object had a GrSurfaceProxy pointer
     int width() const { return this->asSurfaceProxy()->width(); }
@@ -104,7 +109,8 @@
 protected:
     friend class GrSurfaceContextPriv;
 
-    GrSurfaceContext(GrRecordingContext*, GrColorType, SkAlphaType, sk_sp<SkColorSpace>);
+    GrSurfaceContext(GrRecordingContext*, GrColorType, SkAlphaType, sk_sp<SkColorSpace>,
+                     GrSurfaceOrigin, GrSwizzle texSwizzle);
 
     GrDrawingManager* drawingManager();
     const GrDrawingManager* drawingManager() const;
@@ -115,6 +121,8 @@
 
     GrRecordingContext* fContext;
 
+    GrSurfaceOrigin fOrigin;
+
     // The rescaling step of asyncRescaleAndReadPixels[YUV420]().
     std::unique_ptr<GrRenderTargetContext> rescale(const SkImageInfo& info, const SkIRect& srcRect,
                                                    SkSurface::RescaleGamma rescaleGamma,
@@ -159,6 +167,7 @@
     }
 
     GrColorInfo fColorInfo;
+    GrSwizzle fTextureSwizzle;
 
     typedef SkRefCnt INHERITED;
 };
diff --git a/src/gpu/GrTextureContext.cpp b/src/gpu/GrTextureContext.cpp
index ccdcc80..6aa7cfa 100644
--- a/src/gpu/GrTextureContext.cpp
+++ b/src/gpu/GrTextureContext.cpp
@@ -20,8 +20,10 @@
                                    sk_sp<GrTextureProxy> textureProxy,
                                    GrColorType colorType,
                                    SkAlphaType alphaType,
-                                   sk_sp<SkColorSpace> colorSpace)
-        : GrSurfaceContext(context, colorType, alphaType, std::move(colorSpace))
+                                   sk_sp<SkColorSpace> colorSpace,
+                                   GrSurfaceOrigin origin,
+                                   GrSwizzle texSwizzle)
+        : GrSurfaceContext(context, colorType, alphaType, std::move(colorSpace), origin, texSwizzle)
         , fTextureProxy(std::move(textureProxy)) {
     SkDEBUGCODE(this->validate();)
 }
diff --git a/src/gpu/GrTextureContext.h b/src/gpu/GrTextureContext.h
index 626c2d3..97bf72a 100644
--- a/src/gpu/GrTextureContext.h
+++ b/src/gpu/GrTextureContext.h
@@ -42,7 +42,9 @@
                      sk_sp<GrTextureProxy>,
                      GrColorType,
                      SkAlphaType,
-                     sk_sp<SkColorSpace>);
+                     sk_sp<SkColorSpace>,
+                     GrSurfaceOrigin origin,
+                     GrSwizzle texSwizzle);
 
     SkDEBUGCODE(void validate() const override;)
 
