diff --git a/debugger/QT/SkGLWidget.cpp b/debugger/QT/SkGLWidget.cpp
index 98874d2..0c65be0 100644
--- a/debugger/QT/SkGLWidget.cpp
+++ b/debugger/QT/SkGLWidget.cpp
@@ -55,10 +55,11 @@
     glClearStencil(0);
     glClear(GL_STENCIL_BUFFER_BIT);
     fCurContext->resetContext();
-    GrBackendRenderTarget backendRenderTarget = this->getBackendRenderTarget();
-    fGpuSurface = SkSurface::MakeFromBackendRenderTarget(fCurContext.get(), backendRenderTarget,
-                                                         kBottomLeft_GrSurfaceOrigin,
-                                                         nullptr, nullptr);
+
+    GrBackendRenderTargetDesc desc = this->getDesc(this->width(), this->height());
+    desc.fOrigin = kBottomLeft_GrSurfaceOrigin;
+
+    fGpuSurface = SkSurface::MakeFromBackendRenderTarget(fCurContext.get(), desc, nullptr);
     fCanvas = fGpuSurface->getCanvas();
 }
 
@@ -77,19 +78,18 @@
     }
 }
 
-GrBackendRenderTarget SkGLWidget::getBackendRenderTarget() {
-    GrGLFramebufferInfo info;
-    int stencilBits;
-    int sampleCnt;
-    GR_GL_GetIntegerv(fCurIntf.get(), GR_GL_FRAMEBUFFER_BINDING, &info.fFBOID);
-    GR_GL_GetIntegerv(fCurIntf.get(), GR_GL_SAMPLES, &sampleCnt);
-    GR_GL_GetIntegerv(fCurIntf.get(), GR_GL_STENCIL_BITS, &stencilBits);
-    return GrBackendRenderTarget(SkScalarRoundToInt(this->width()),
-                                 SkScalarRoundToInt(this->height()),
-                                 sampleCnt,
-                                 stencilBits,
-                                 kSkia8888_GrPixelConfig,
-                                 info);
+GrBackendRenderTargetDesc SkGLWidget::getDesc(int w, int h) {
+    GrBackendRenderTargetDesc desc;
+    desc.fWidth = SkScalarRoundToInt(this->width());
+    desc.fHeight = SkScalarRoundToInt(this->height());
+    desc.fConfig = kSkia8888_GrPixelConfig;
+    GR_GL_GetIntegerv(fCurIntf.get(), GR_GL_SAMPLES, &desc.fSampleCnt);
+    GR_GL_GetIntegerv(fCurIntf.get(), GR_GL_STENCIL_BITS, &desc.fStencilBits);
+    GrGLint buffer;
+    GR_GL_GetIntegerv(fCurIntf.get(), GR_GL_FRAMEBUFFER_BINDING, &buffer);
+    desc.fRenderTargetHandle = buffer;
+
+    return desc;
 }
 
 #endif
diff --git a/debugger/QT/SkGLWidget.h b/debugger/QT/SkGLWidget.h
index d590ffb..e7493a5 100644
--- a/debugger/QT/SkGLWidget.h
+++ b/debugger/QT/SkGLWidget.h
@@ -16,7 +16,6 @@
 #include "SkDebugCanvas.h"
 #include "SkDebugger.h"
 #include "SkGpuDevice.h"
-#include "GrBackendSurface.h"
 #include "GrContext.h"
 #include "gl/GrGLInterface.h"
 #include "gl/GrGLUtil.h"
@@ -52,7 +51,7 @@
     SkCanvas*        fCanvas;
 
     SkDebugger* fDebugger;
-    GrBackendRenderTarget getBackendRenderTarget();
+    GrBackendRenderTargetDesc getDesc(int w, int h);
 };
 
 #endif /* SK_SUPPORT_GPU */
diff --git a/experimental/GLFWTest/glfw_main.cpp b/experimental/GLFWTest/glfw_main.cpp
index f0e3297..6b8412c 100644
--- a/experimental/GLFWTest/glfw_main.cpp
+++ b/experimental/GLFWTest/glfw_main.cpp
@@ -5,11 +5,12 @@
  * found in the LICENSE file.
  */
 
+#include "GLFW/glfw3.h"
 #include <stdlib.h>
 #include <stdio.h>
-#include "GLFW/glfw3.h"
-#include "GrBackendSurface.h"
+
 #include "GrContext.h"
+
 #include "SkCanvas.h"
 #include "SkImage.h"
 #include "SkRSXform.h"
@@ -32,17 +33,16 @@
 static void init_skia(int w, int h) {
     sContext = GrContext::MakeGL(nullptr).release();
 
-    GrGLFramebufferInfo framebufferInfo;
-    framebufferInfo.fFBOID = 0;  // assume default framebuffer
-    GrBackendRenderTarget backendRenderTarget(w, h,
-                                              0, // sample count
-                                              0, // stencil bits
-                                              kSkia8888_GrPixelConfig,
-                                              framebufferInfo);
-
-    sSurface = SkSurface::MakeFromBackendRenderTarget(sContext, backendRenderTarget,
-                                                      kBottomLeft_GrSurfaceOrigin,
-                                                      nullptr, nullptr).release();
+    GrBackendRenderTargetDesc desc;
+    desc.fWidth = w;
+    desc.fHeight = h;
+    desc.fConfig = kSkia8888_GrPixelConfig;
+    desc.fOrigin = kBottomLeft_GrSurfaceOrigin;
+    desc.fSampleCnt = 1;
+    desc.fStencilBits = 0;
+    desc.fRenderTargetHandle = 0;  // assume default framebuffer
+ 
+    sSurface = SkSurface::MakeFromBackendRenderTarget(sContext, desc, nullptr, nullptr).release();
 }
 
 static void cleanup_skia() {
diff --git a/experimental/SkV8Example/SkV8Example.cpp b/experimental/SkV8Example/SkV8Example.cpp
index 5cad125..ca63e07 100644
--- a/experimental/SkV8Example/SkV8Example.cpp
+++ b/experimental/SkV8Example/SkV8Example.cpp
@@ -8,12 +8,13 @@
  */
 #include <v8.h>
 #include <include/libplatform/libplatform.h>
+
 #include "SkV8Example.h"
 #include "Global.h"
 #include "JsContext.h"
 #include "Path2D.h"
 #include "Path2DBuilder.h"
-#include "GrBackendSurface.h"
+
 #include "gl/GrGLUtil.h"
 #include "gl/GrGLDefines.h"
 #include "gl/GrGLInterface.h"
@@ -83,17 +84,19 @@
             exit(1);
         }
 
-        GrGLFramebufferInfo framebufferInfo;
-        GR_GL_GetIntegerv(fCurIntf, GR_GL_FRAMEBUFFER_BINDING, &framebufferInfo.fFBOID);
-        GrBackendRenderTarget backendRenderTarget(SkScalarRoundToInt(this->width()),
-                                                  SkScalarRoundToInt(this->height()),
-                                                  attachmentInfo.fSampleCount,
-                                                  attachmentInfo.fStencilBits,
-                                                  kSkia8888_GrPixelConfig,
-                                                  framebufferInfo);
+        GrBackendRenderTargetDesc desc;
+        desc.fWidth = SkScalarRoundToInt(this->width());
+        desc.fHeight = SkScalarRoundToInt(this->height());
+        desc.fConfig = kSkia8888_GrPixelConfig;
+        desc.fOrigin = kBottomLeft_GrSurfaceOrigin;
+        desc.fSampleCnt = attachmentInfo.fSampleCount;
+        desc.fStencilBits = attachmentInfo.fStencilBits;
+        GrGLint buffer;
+        GR_GL_GetIntegerv(fCurIntf, GR_GL_FRAMEBUFFER_BINDING, &buffer);
+        desc.fRenderTargetHandle = buffer;
+
         SkSafeUnref(fCurSurface);
-        fCurSurface = SkSurface::MakeFromBackendRenderTarget(fCurContext, backendRenderTarget,
-                                                             kBottomLeft_GrSurfaceOrigin,
+        fCurSurface = SkSurface::MakeFromBackendRenderTarget(fCurContext, desc,
                                                              nullptr, nullptr).release();
     }
 }
diff --git a/include/core/SkSurface.h b/include/core/SkSurface.h
index 890532f..9769da4 100644
--- a/include/core/SkSurface.h
+++ b/include/core/SkSurface.h
@@ -94,6 +94,16 @@
                                                    GrSurfaceOrigin origin, int sampleCnt,
                                                    sk_sp<SkColorSpace>, const SkSurfaceProps*);
 
+    /**
+     *  Used to wrap a pre-existing 3D API rendering target as a SkSurface. Skia will not assume
+     *  ownership of the render target and the client must ensure the render target is valid for the
+     *  lifetime of the SkSurface.
+     */
+    static sk_sp<SkSurface> MakeFromBackendRenderTarget(GrContext*,
+                                                        const GrBackendRenderTargetDesc&,
+                                                        sk_sp<SkColorSpace>,
+                                                        const SkSurfaceProps*);
+
     static sk_sp<SkSurface> MakeFromBackendRenderTarget(GrContext*,
                                                         const GrBackendRenderTarget&,
                                                         GrSurfaceOrigin origin,
@@ -103,9 +113,10 @@
     /**
      *  Used to wrap a pre-existing 3D API texture as a SkSurface. Skia will treat the texture as
      *  a rendering target only, but unlike NewFromBackendRenderTarget, Skia will manage and own
-     *  the associated render target objects (but not the provided texture). Skia will not assume
-     *  ownership of the texture and the client must ensure the texture is valid for the lifetime
-     *  of the SkSurface.
+     *  the associated render target objects (but not the provided texture). The kRenderTarget flag
+     *  must be set on GrBackendTextureDesc for this to succeed. Skia will not assume ownership
+     *  of the texture and the client must ensure the texture is valid for the lifetime of the
+     *  SkSurface.
      */
     static sk_sp<SkSurface> MakeFromBackendTextureAsRenderTarget(GrContext*,
                                                                  const GrBackendTexture&,
@@ -115,6 +126,17 @@
                                                                  const SkSurfaceProps*);
 
     /**
+     * Legacy version of the above factory, without color space support. This creates a "legacy"
+     * surface that operate without gamma correction or color management.
+     */
+    static sk_sp<SkSurface> MakeFromBackendRenderTarget(GrContext* ctx,
+                                                        const GrBackendRenderTargetDesc& desc,
+                                                        const SkSurfaceProps* props) {
+        return MakeFromBackendRenderTarget(ctx, desc, nullptr, props);
+    }
+
+
+    /**
      *  Return a new surface whose contents will be drawn to an offscreen
      *  render target, allocated by the surface.
      */
diff --git a/include/gpu/GrBackendSurface.h b/include/gpu/GrBackendSurface.h
index 55cec78..c9a9ad0 100644
--- a/include/gpu/GrBackendSurface.h
+++ b/include/gpu/GrBackendSurface.h
@@ -108,6 +108,12 @@
 #endif
 
 private:
+    // Temporary constructor which can be used to convert from a GrBackendRenderTargetDesc.
+    GrBackendRenderTarget(const GrBackendRenderTargetDesc& desc, GrBackend backend);
+
+    // Friending for access to above constructor taking a GrBackendRenderTargetDesc
+    friend class SkSurface;
+
     int fWidth;         //<! width in pixels
     int fHeight;        //<! height in pixels
 
diff --git a/include/gpu/GrTypes.h b/include/gpu/GrTypes.h
index 6ba9ffe..4839e9a 100644
--- a/include/gpu/GrTypes.h
+++ b/include/gpu/GrTypes.h
@@ -642,6 +642,39 @@
 ///////////////////////////////////////////////////////////////////////////////
 
 /**
+ * Gr can wrap an existing render target created by the client in the 3D API
+ * with a GrRenderTarget object. The client is responsible for ensuring that the
+ * underlying 3D API object lives at least as long as the GrRenderTarget object
+ * wrapping it. We require the client to explicitly provide information about
+ * the target, such as width, height, and pixel config rather than querying the
+ * 3D API for these values. We expect these properties to be immutable even if
+ * the 3D API doesn't require this (OpenGL).
+ */
+
+struct GrBackendRenderTargetDesc {
+    GrBackendRenderTargetDesc() { memset(this, 0, sizeof(*this)); }
+    int                             fWidth;         //<! width in pixels
+    int                             fHeight;        //<! height in pixels
+    GrPixelConfig                   fConfig;        //<! color format
+    GrSurfaceOrigin                 fOrigin;        //<! pixel origin
+    /**
+     * The number of samples per pixel. Gr uses this to influence decisions
+     * about applying other forms of anti-aliasing.
+     */
+    int                             fSampleCnt;
+    /**
+     * Number of bits of stencil per-pixel.
+     */
+    int                             fStencilBits;
+    /**
+     * Handle to the 3D API object.
+     * OpenGL: FBO ID
+     * Vulkan: GrVkImageInfo*
+     */
+    GrBackendObject                 fRenderTargetHandle;
+};
+
+/**
  * The GrContext's cache of backend context state can be partially invalidated.
  * These enums are specific to the GL backend and we'd add a new set for an alternative backend.
  */
diff --git a/site/user/sample/color.md b/site/user/sample/color.md
index 3f4d869..28d86d3 100644
--- a/site/user/sample/color.md
+++ b/site/user/sample/color.md
@@ -116,9 +116,11 @@
 	sk_sp<SkImage> MakeFromEncoded(sk_sp<SkData> encoded);
 	
 	// Create an image from a texture in a particular color space
-	sk_sp<SkImage> MakeFromTexture(GrContext*, const GrBackendTexture&,
-                                       GrSurfaceOrigin, SkAlphaType, sk_sp<SkColorSpace>,
-                                       ...);
+	// Caution: There are versions of this constructor that do not take an
+	//          SkColorSpace.  But without an SkColorSpace, Skia does not have
+	//          enough information to draw correctly.
+	sk_sp<SkImage> MakeFromTexture(GrContext*, const GrBackendTextureDesc&,
+	                               SkAlphaType, sk_sp<SkColorSpace>, ...);
 
 **SkBitmap** is another (not preferred) representation for image sources.  Be careful to not forget
 the color space.
@@ -188,5 +190,4 @@
 It is possible to create **an object that is both a source and destination**, if Skia will both
 draw into it and then draw it somewhere else.  The same rules from above still apply, but it is
 subtle that the color space tag could have an effect (or no effect) depending on how the object is
-used.
-
+used.
\ No newline at end of file
diff --git a/site/user/special/vulkan.md b/site/user/special/vulkan.md
index 14f44b8..bba6968 100644
--- a/site/user/special/vulkan.md
+++ b/site/user/special/vulkan.md
@@ -33,16 +33,14 @@
 
     sk_sp<GrContext> context = GrContext::MakeVulkan(vkBackendContext);
 
-When using the Vulkan backend, GrVkImageInfo is used to construct GrBackendTexture
-and GrBackendRenderTarget objects that in turn are used to create SkSurface and SkImage
-objects that refer to VkImages created by the Skia client.
+When using the Vulkan backend the GrBackendObject field in
+GrBackendRenderTargetDesc and GrBackendTextureDesc is interpeted as a pointer
+to a GrVkImageInfo object. GrVkImageInfo specifies a VkImage and associated
+state (tiling, layout, format, etc). This allows the client to import
+externally created Vulkan images as destinations for Skia rendering via
+SkSurface factory functions or for to composite Skia rendered content using
+SkImage::getTextureHandle().
 
-The GrBackendObject returned by SkImage::getTextureHandle(),
-SkSurface::getTextureHandle(), and SkSurface::getRenderTargetHandle() should be
-interpreted as a GrVkImageInfo*. This allows a client to get the backing VkImage
-of a SkImage or SkSurface.
-
-GrVkImageInfo specifies a VkImage and associated state (tiling, layout, format, etc).
 After getting a GrVkImageInfo* via getTextureHandle() or
 getRenderTargetHandle(), the client should check the fImageLayout field to know
 what layout Skia left the VkImage in before using the VkImage. If the client
diff --git a/src/gpu/GrBackendSurface.cpp b/src/gpu/GrBackendSurface.cpp
index 04216b7..d37c73a 100644
--- a/src/gpu/GrBackendSurface.cpp
+++ b/src/gpu/GrBackendSurface.cpp
@@ -97,6 +97,29 @@
         , fBackend(kOpenGL_GrBackend)
         , fGLInfo(glInfo) {}
 
+GrBackendRenderTarget::GrBackendRenderTarget(const GrBackendRenderTargetDesc& desc,
+                                             GrBackend backend)
+        : fWidth(desc.fWidth)
+        , fHeight(desc.fHeight)
+        , fSampleCnt(desc.fSampleCnt)
+        , fStencilBits(desc.fStencilBits)
+        , fConfig(desc.fConfig)
+        , fBackend(backend) {
+    if (kOpenGL_GrBackend == backend) {
+        fGLInfo.fFBOID = static_cast<GrGLuint>(desc.fRenderTargetHandle);
+    } else {
+        SkASSERT(kVulkan_GrBackend == backend);
+#ifdef SK_VULKAN
+        const GrVkImageInfo* vkInfo =
+                reinterpret_cast<const GrVkImageInfo*>(desc.fRenderTargetHandle);
+        fConfig = GrVkFormatToPixelConfig(vkInfo->fFormat);
+        fVkInfo = *vkInfo;
+#else
+        fConfig = kUnknown_GrPixelConfig;
+#endif
+    }
+}
+
 #ifdef SK_VULKAN
 const GrVkImageInfo* GrBackendRenderTarget::getVkImageInfo() const {
     if (kVulkan_GrBackend == fBackend) {
diff --git a/src/image/SkSurface.cpp b/src/image/SkSurface.cpp
index 1de7b60..eba76be 100644
--- a/src/image/SkSurface.cpp
+++ b/src/image/SkSurface.cpp
@@ -259,6 +259,13 @@
 }
 
 sk_sp<SkSurface> SkSurface::MakeFromBackendRenderTarget(GrContext*,
+                                                        const GrBackendRenderTargetDesc&,
+                                                        sk_sp<SkColorSpace>,
+                                                        const SkSurfaceProps*) {
+    return nullptr;
+}
+
+sk_sp<SkSurface> SkSurface::MakeFromBackendRenderTarget(GrContext*,
                                                         const GrBackendRenderTarget&,
                                                         GrSurfaceOrigin origin,
                                                         sk_sp<SkColorSpace>,
diff --git a/src/image/SkSurface_Gpu.cpp b/src/image/SkSurface_Gpu.cpp
index 042fc32..a2bd40b 100644
--- a/src/image/SkSurface_Gpu.cpp
+++ b/src/image/SkSurface_Gpu.cpp
@@ -266,6 +266,20 @@
 }
 
 sk_sp<SkSurface> SkSurface::MakeFromBackendRenderTarget(GrContext* context,
+                                                        const GrBackendRenderTargetDesc& desc,
+                                                        sk_sp<SkColorSpace> colorSpace,
+                                                        const SkSurfaceProps* props) {
+    if (!context) {
+        return nullptr;
+    }
+
+    GrBackendRenderTarget backendRT(desc, context->contextPriv().getBackend());
+    return MakeFromBackendRenderTarget(context, backendRT, desc.fOrigin,
+                                       std::move(colorSpace), props);
+
+}
+
+sk_sp<SkSurface> SkSurface::MakeFromBackendRenderTarget(GrContext* context,
                                                         const GrBackendRenderTarget& backendRT,
                                                         GrSurfaceOrigin origin,
                                                         sk_sp<SkColorSpace> colorSpace,
