diff --git a/include/gpu/GrContext.h b/include/gpu/GrContext.h
index db45689..76c8a70 100644
--- a/include/gpu/GrContext.h
+++ b/include/gpu/GrContext.h
@@ -351,7 +351,9 @@
      *
      * The caller should check that the returned format is valid.
      */
-    using GrRecordingContext::defaultBackendFormat;
+    GrBackendFormat defaultBackendFormat(SkColorType ct, GrRenderable renderable) const {
+        return INHERITED::defaultBackendFormat(ct, renderable);
+    }
 
    /*
     * The explicitly allocated backend texture API allows clients to use Skia to create backend
diff --git a/include/gpu/GrContextThreadSafeProxy.h b/include/gpu/GrContextThreadSafeProxy.h
index 8dc68fd..b329da0 100644
--- a/include/gpu/GrContextThreadSafeProxy.h
+++ b/include/gpu/GrContextThreadSafeProxy.h
@@ -65,6 +65,17 @@
                                   bool isTextureable = true,
                                   GrProtected isProtected = GrProtected::kNo);
 
+    /*
+     * Retrieve the default GrBackendFormat for a given SkColorType and renderability.
+     * It is guaranteed that this backend format will be the one used by the following
+     * SkColorType and SkSurfaceCharacterization-based createBackendTexture methods.
+     *
+     * The caller should check that the returned format is valid.
+     */
+    GrBackendFormat defaultBackendFormat(SkColorType ct, GrRenderable renderable) const {
+        return INHERITED::defaultBackendFormat(ct, renderable);
+    }
+
     bool operator==(const GrContextThreadSafeProxy& that) const {
         // Each GrContext should only ever have a single thread-safe proxy.
         SkASSERT((this == &that) == (this->contextID() == that.contextID()));
diff --git a/include/private/GrContext_Base.h b/include/private/GrContext_Base.h
index c66ab85..58fb9bb 100644
--- a/include/private/GrContext_Base.h
+++ b/include/private/GrContext_Base.h
@@ -9,6 +9,7 @@
 #define GrContext_Base_DEFINED
 
 #include "include/core/SkRefCnt.h"
+#include "include/gpu/GrBackendSurface.h"
 #include "include/gpu/GrContextOptions.h"
 #include "include/gpu/GrTypes.h"
 
@@ -28,6 +29,15 @@
      */
     GrBackendApi backend() const { return fBackend; }
 
+    /*
+     * Retrieve the default GrBackendFormat for a given SkColorType and renderability.
+     * It is guaranteed that this backend format will be the one used by the GrContext
+     * SkColorType and SkSurfaceCharacterization-based createBackendTexture methods.
+     *
+     * The caller should check that the returned format is valid.
+     */
+    GrBackendFormat defaultBackendFormat(SkColorType, GrRenderable) const;
+
     // Provides access to functions that aren't part of the public API.
     GrBaseContextPriv priv();
     const GrBaseContextPriv priv() const;
diff --git a/include/private/GrImageContext.h b/include/private/GrImageContext.h
index 04659be..40f6178 100644
--- a/include/private/GrImageContext.h
+++ b/include/private/GrImageContext.h
@@ -18,6 +18,10 @@
 public:
     ~GrImageContext() override;
 
+    GrBackendFormat defaultBackendFormat(SkColorType ct, GrRenderable renderable) const {
+        return INHERITED::defaultBackendFormat(ct, renderable);
+    }
+
     // Provides access to functions that aren't part of the public API.
     GrImageContextPriv priv();
     const GrImageContextPriv priv() const;
diff --git a/include/private/GrRecordingContext.h b/include/private/GrRecordingContext.h
index f48eec9..51c52d9 100644
--- a/include/private/GrRecordingContext.h
+++ b/include/private/GrRecordingContext.h
@@ -27,14 +27,9 @@
 public:
     ~GrRecordingContext() override;
 
-    /*
-     * Retrieve the default GrBackendFormat for a given SkColorType and renderability.
-     * It is guaranteed that this backend format will be the one used by the GrContext
-     * SkColorType and SkSurfaceCharacterization-based createBackendTexture methods.
-     *
-     * The caller should check that the returned format is valid.
-     */
-    GrBackendFormat defaultBackendFormat(SkColorType, GrRenderable) const;
+    GrBackendFormat defaultBackendFormat(SkColorType ct, GrRenderable renderable) const {
+        return INHERITED::defaultBackendFormat(ct, renderable);
+    }
 
     // Provides access to functions that aren't part of the public API.
     GrRecordingContextPriv priv();
diff --git a/src/gpu/GrContext_Base.cpp b/src/gpu/GrContext_Base.cpp
index 31e7ff1..aba1b82 100644
--- a/src/gpu/GrContext_Base.cpp
+++ b/src/gpu/GrContext_Base.cpp
@@ -43,6 +43,24 @@
 
 sk_sp<GrSkSLFPFactoryCache> GrContext_Base::fpFactoryCache() { return fFPFactoryCache; }
 
+GrBackendFormat GrContext_Base::defaultBackendFormat(SkColorType skColorType,
+                                                     GrRenderable renderable) const {
+    const GrCaps* caps = this->caps();
+
+    GrColorType grColorType = SkColorTypeToGrColorType(skColorType);
+
+    GrBackendFormat format = caps->getDefaultBackendFormat(grColorType, renderable);
+    if (!format.isValid()) {
+        return GrBackendFormat();
+    }
+
+    SkASSERT(caps->isFormatTexturable(grColorType, format));
+    SkASSERT(renderable == GrRenderable::kNo ||
+             caps->isFormatAsColorTypeRenderable(grColorType, format));
+
+    return format;
+}
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 sk_sp<const GrCaps> GrBaseContextPriv::refCaps() const {
     return fContext->refCaps();
diff --git a/src/gpu/GrRecordingContext.cpp b/src/gpu/GrRecordingContext.cpp
index 577d03c..01ed9b1 100644
--- a/src/gpu/GrRecordingContext.cpp
+++ b/src/gpu/GrRecordingContext.cpp
@@ -396,27 +396,3 @@
 GrContext* GrRecordingContextPriv::backdoor() {
     return (GrContext*) fContext;
 }
-
-GrBackendFormat GrRecordingContext::defaultBackendFormat(SkColorType skColorType,
-                                                         GrRenderable renderable) const {
-    TRACE_EVENT0("skia.gpu", TRACE_FUNC);
-
-    if (this->abandoned()) {
-        return GrBackendFormat();
-    }
-
-    const GrCaps* caps = this->caps();
-
-    GrColorType grColorType = SkColorTypeToGrColorType(skColorType);
-
-    GrBackendFormat format = caps->getDefaultBackendFormat(grColorType, renderable);
-    if (!format.isValid()) {
-        return GrBackendFormat();
-    }
-
-    SkASSERT(caps->isFormatTexturable(grColorType, format));
-    SkASSERT(renderable == GrRenderable::kNo ||
-             caps->isFormatAsColorTypeRenderable(grColorType, format));
-
-    return format;
-}
