Implement Vulkan GrBackendObject for textures.

BUG=skia:5043
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1808263002

Review URL: https://codereview.chromium.org/1808263002
diff --git a/src/gpu/vk/GrVkTexture.cpp b/src/gpu/vk/GrVkTexture.cpp
index 5c4c3bd..a6a89df 100644
--- a/src/gpu/vk/GrVkTexture.cpp
+++ b/src/gpu/vk/GrVkTexture.cpp
@@ -10,6 +10,8 @@
 #include "GrVkImageView.h"
 #include "GrVkUtil.h"
 
+#include "vk/GrVkTypes.h"
+
 #define VK_CALL(GPU, X) GR_VK_CALL(GPU->vkInterface(), X)
 
 // Because this class is virtually derived from GrSurface we must explicitly call its constructor.
@@ -75,12 +77,29 @@
 GrVkTexture* GrVkTexture::CreateWrappedTexture(GrVkGpu* gpu, const GrSurfaceDesc& desc,
                                                GrGpuResource::LifeCycle lifeCycle,
                                                VkFormat format, 
-                                               const GrVkImage::Resource* imageResource) {
-    SkASSERT(imageResource);
+                                               const GrVkTextureInfo* info) {
+    SkASSERT(info);
+    // Wrapped textures require both image and allocation (because they can be mapped)
+    SkASSERT(VK_NULL_HANDLE != info->fImage && VK_NULL_HANDLE != info->fAlloc);
 
-    // Note: we assume the caller will unref the imageResource
-    // Create() will increment the refCount, and we'll unref when we're done with it
-    return Create(gpu, desc, lifeCycle, format, imageResource);
+    GrVkImage::Resource::Flags flags = (VK_IMAGE_TILING_LINEAR == info->fImageTiling)
+                                     ? Resource::kLinearTiling_Flag : Resource::kNo_Flags;
+
+    const GrVkImage::Resource* imageResource = new GrVkImage::Resource(info->fImage,
+                                                                       info->fAlloc,
+                                                                       flags);
+    if (!imageResource) {
+        return nullptr;
+    }
+
+    GrVkTexture* texture = Create(gpu, desc, lifeCycle, format, imageResource);
+    if (texture) {
+        texture->fCurrentLayout = info->fImageLayout;
+    }
+    // Create() will increment the refCount of the image resource if it succeeds
+    imageResource->unref(gpu);
+
+    return texture;
 }
 
 GrVkTexture::~GrVkTexture() {