diff --git a/src/gpu/GrCaps.h b/src/gpu/GrCaps.h
index 8d0e7cd..ac353f5 100644
--- a/src/gpu/GrCaps.h
+++ b/src/gpu/GrCaps.h
@@ -158,7 +158,7 @@
 
     virtual bool isFormatSRGB(const GrBackendFormat&) const = 0;
 
-    virtual bool isFormatTexturable(SkColorType, const GrBackendFormat&) const = 0;
+    virtual bool isFormatTexturable(GrColorType, const GrBackendFormat&) const = 0;
     virtual bool isConfigTexturable(GrPixelConfig) const = 0;
 
     // Returns whether a texture of the given config can be copied to a texture of the same config.
diff --git a/src/gpu/GrContextThreadSafeProxy.cpp b/src/gpu/GrContextThreadSafeProxy.cpp
index e8ac761..920d6fb 100644
--- a/src/gpu/GrContextThreadSafeProxy.cpp
+++ b/src/gpu/GrContextThreadSafeProxy.cpp
@@ -53,6 +53,7 @@
         return SkSurfaceCharacterization(); // return an invalid characterization
     }
 
+    GrColorType grColorType = SkColorTypeToGrColorType(ii.colorType());
 
     if (!this->caps()->areColorTypeAndFormatCompatible(ii.colorType(), backendFormat)) {
         return SkSurfaceCharacterization(); // return an invalid characterization
@@ -67,7 +68,7 @@
         return SkSurfaceCharacterization(); // return an invalid characterization
     }
 
-    if (isTextureable && !this->caps()->isFormatTexturable(ii.colorType(), backendFormat)) {
+    if (isTextureable && !this->caps()->isFormatTexturable(grColorType, backendFormat)) {
         // Skia doesn't agree that this is textureable.
         return SkSurfaceCharacterization(); // return an invalid characterization
     }
diff --git a/src/gpu/GrProxyProvider.cpp b/src/gpu/GrProxyProvider.cpp
index d71cf7a..24bcb0a 100644
--- a/src/gpu/GrProxyProvider.cpp
+++ b/src/gpu/GrProxyProvider.cpp
@@ -211,13 +211,14 @@
 
     const SkImageInfo& info = srcImage->imageInfo();
     SkColorType ct = info.colorType();
+    GrColorType grCT = SkColorTypeToGrColorType(ct);
 
     GrBackendFormat format = this->caps()->getBackendFormatFromColorType(ct);
     if (!format.isValid()) {
         return nullptr;
     }
 
-    if (!this->caps()->isFormatTexturable(ct, format)) {
+    if (!this->caps()->isFormatTexturable(grCT, format)) {
         SkBitmap copy8888;
         if (!copy8888.tryAllocPixels(info.makeColorType(kRGBA_8888_SkColorType)) ||
             !srcImage->readPixels(copy8888.pixmap(), 0, 0)) {
@@ -331,13 +332,14 @@
     }
 
     SkColorType colorType = bitmap.info().colorType();
+    GrColorType grColorType = SkColorTypeToGrColorType(colorType);
     GrBackendFormat format = this->caps()->getBackendFormatFromColorType(colorType);
     if (!format.isValid()) {
         return nullptr;
     }
     GrSurfaceDesc desc = GrImageInfoToSurfaceDesc(bitmap.info());
 
-    if (!this->caps()->isFormatTexturable(colorType, format)) {
+    if (!this->caps()->isFormatTexturable(grColorType, format)) {
         SkBitmap copy8888;
         if (!copy8888.tryAllocPixels(bitmap.info().makeColorType(kRGBA_8888_SkColorType)) ||
             !bitmap.readPixels(copy8888.pixmap())) {
diff --git a/src/gpu/gl/GrGLCaps.cpp b/src/gpu/gl/GrGLCaps.cpp
index 6fc75c0..f28ad2a 100644
--- a/src/gpu/gl/GrGLCaps.cpp
+++ b/src/gpu/gl/GrGLCaps.cpp
@@ -3612,13 +3612,12 @@
            SkToBool(info.colorTypeFlags(ct) & ColorTypeInfo::kUploadData_Flag);
 }
 
-bool GrGLCaps::isFormatTexturable(SkColorType ct, const GrBackendFormat& format) const {
+bool GrGLCaps::isFormatTexturable(GrColorType ct, const GrBackendFormat& format) const {
     const GrGLenum* glFormat = format.getGLFormat();
     if (!glFormat) {
         return false;
     }
-    GrColorType grCT = SkColorTypeToGrColorType(ct);
-    return this->isGLFormatTexturable(grCT, *glFormat);
+    return this->isGLFormatTexturable(ct, *glFormat);
 }
 
 int GrGLCaps::getRenderTargetSampleCount(int requestedCount, SkColorType skCT,
diff --git a/src/gpu/gl/GrGLCaps.h b/src/gpu/gl/GrGLCaps.h
index f83b6a1..c6fc099 100644
--- a/src/gpu/gl/GrGLCaps.h
+++ b/src/gpu/gl/GrGLCaps.h
@@ -108,7 +108,7 @@
 
     bool isFormatSRGB(const GrBackendFormat& format) const override;
 
-    bool isFormatTexturable(SkColorType, const GrBackendFormat&) const override;
+    bool isFormatTexturable(GrColorType, const GrBackendFormat&) const override;
 
     bool isConfigTexturable(GrPixelConfig config) const override {
         GrGLenum glFormat = this->configSizedInternalFormat(config);
diff --git a/src/gpu/mock/GrMockCaps.h b/src/gpu/mock/GrMockCaps.h
index 6e88296..91116ab 100644
--- a/src/gpu/mock/GrMockCaps.h
+++ b/src/gpu/mock/GrMockCaps.h
@@ -44,7 +44,7 @@
         return kSRGBA_8888_GrPixelConfig == *format.getMockFormat();
     }
 
-    bool isFormatTexturable(SkColorType, const GrBackendFormat& format) const override {
+    bool isFormatTexturable(GrColorType, const GrBackendFormat& format) const override {
         if (!format.getMockFormat()) {
             return false;
         }
diff --git a/src/gpu/mtl/GrMtlCaps.h b/src/gpu/mtl/GrMtlCaps.h
index 9472416..38b9701 100644
--- a/src/gpu/mtl/GrMtlCaps.h
+++ b/src/gpu/mtl/GrMtlCaps.h
@@ -28,7 +28,7 @@
 
     bool isFormatSRGB(const GrBackendFormat& format) const override;
 
-    bool isFormatTexturable(SkColorType, const GrBackendFormat&) const override;
+    bool isFormatTexturable(GrColorType, const GrBackendFormat&) const override;
 
     bool isConfigTexturable(GrPixelConfig config) const override {
         return SkToBool(fConfigTable[config].fFlags & ConfigInfo::kTextureable_Flag);
diff --git a/src/gpu/mtl/GrMtlCaps.mm b/src/gpu/mtl/GrMtlCaps.mm
index ee21e98..8703117 100644
--- a/src/gpu/mtl/GrMtlCaps.mm
+++ b/src/gpu/mtl/GrMtlCaps.mm
@@ -253,8 +253,7 @@
     return format_is_srgb(static_cast<MTLPixelFormat>(*format.getMtlFormat()));
 }
 
-bool GrMtlCaps::isFormatTexturable(SkColorType skCT, const GrBackendFormat& format) const {
-    GrColorType grCT = SkColorTypeToGrColorType(skCT);
+bool GrMtlCaps::isFormatTexturable(GrColorType grCT, const GrBackendFormat& format) const {
     if (GrColorType::kUnknown == grCT) {
         return false;
     }
diff --git a/src/gpu/vk/GrVkCaps.cpp b/src/gpu/vk/GrVkCaps.cpp
index dd868b6..c2df040 100644
--- a/src/gpu/vk/GrVkCaps.cpp
+++ b/src/gpu/vk/GrVkCaps.cpp
@@ -795,15 +795,15 @@
     return format_is_srgb(*format.getVkFormat());
 }
 
-bool GrVkCaps::isFormatTexturable(SkColorType, const GrBackendFormat& format) const {
+bool GrVkCaps::isFormatTexturable(GrColorType, const GrBackendFormat& format) const {
     if (!format.getVkFormat()) {
         return false;
     }
 
-    return this->isFormatTexturable(*format.getVkFormat());
+    return this->isVkFormatTexturable(*format.getVkFormat());
 }
 
-bool GrVkCaps::isFormatTexturable(VkFormat format) const {
+bool GrVkCaps::isVkFormatTexturable(VkFormat format) const {
     if (!GrVkFormatIsSupported(format)) {
         return false;
     }
@@ -817,7 +817,7 @@
     if (!GrPixelConfigToVkFormat(config, &format)) {
         return false;
     }
-    return this->isFormatTexturable(format);
+    return this->isVkFormatTexturable(format);
 }
 
 bool GrVkCaps::isFormatRenderable(VkFormat format) const {
diff --git a/src/gpu/vk/GrVkCaps.h b/src/gpu/vk/GrVkCaps.h
index d3873c0..8cb75f4 100644
--- a/src/gpu/vk/GrVkCaps.h
+++ b/src/gpu/vk/GrVkCaps.h
@@ -34,8 +34,8 @@
 
     bool isFormatSRGB(const GrBackendFormat& format) const override;
 
-    bool isFormatTexturable(SkColorType, const GrBackendFormat&) const override;
-    bool isFormatTexturable(VkFormat) const;
+    bool isFormatTexturable(GrColorType, const GrBackendFormat&) const override;
+    bool isVkFormatTexturable(VkFormat) const;
     bool isConfigTexturable(GrPixelConfig config) const override;
 
     bool isFormatCopyable(SkColorType, const GrBackendFormat&) const override { return true; }
@@ -54,7 +54,7 @@
 
     SurfaceReadPixelsSupport surfaceSupportsReadPixels(const GrSurface*) const override;
 
-    bool isFormatTexturableLinearly(VkFormat format) const {
+    bool isVkFormatTexturableLinearly(VkFormat format) const {
         return SkToBool(FormatInfo::kTextureable_Flag & this->getFormatInfo(format).fLinearFlags);
     }
 
diff --git a/src/gpu/vk/GrVkGpu.cpp b/src/gpu/vk/GrVkGpu.cpp
index c30490b..3533b39 100644
--- a/src/gpu/vk/GrVkGpu.cpp
+++ b/src/gpu/vk/GrVkGpu.cpp
@@ -725,7 +725,7 @@
         mipLevelCount = 1;
     }
 
-    SkASSERT(this->vkCaps().isFormatTexturable(tex->imageFormat()));
+    SkASSERT(this->vkCaps().isVkFormatTexturable(tex->imageFormat()));
     int bpp = GrColorTypeBytesPerPixel(dataColorType);
 
     // texels is const.
@@ -905,7 +905,7 @@
         return false;
     }
 
-    SkASSERT(this->vkCaps().isFormatTexturable(tex->imageFormat()));
+    SkASSERT(this->vkCaps().isVkFormatTexturable(tex->imageFormat()));
 
     size_t dataSize = GrCompressedDataSize(compressionType, width, height);
 
@@ -1137,12 +1137,12 @@
 
 static bool check_tex_image_info(const GrVkCaps& caps, const GrVkImageInfo& info) {
     if (info.fImageTiling == VK_IMAGE_TILING_OPTIMAL) {
-        if (!caps.isFormatTexturable(info.fFormat)) {
+        if (!caps.isVkFormatTexturable(info.fFormat)) {
             return false;
         }
     } else {
         SkASSERT(info.fImageTiling == VK_IMAGE_TILING_LINEAR);
-        if (!caps.isFormatTexturableLinearly(info.fFormat)) {
+        if (!caps.isVkFormatTexturableLinearly(info.fFormat)) {
             return false;
         }
     }
@@ -1566,7 +1566,7 @@
         return false;
     }
 
-    if (texturable && !fVkCaps->isFormatTexturable(vkFormat)) {
+    if (texturable && !fVkCaps->isVkFormatTexturable(vkFormat)) {
         return false;
     }
 
@@ -1922,7 +1922,7 @@
         return GrBackendTexture();
     }
 
-    if (!caps.isFormatTexturable(*vkFormat)) {
+    if (!caps.isVkFormatTexturable(*vkFormat)) {
         SkDebugf("Config is not texturable\n");
         return GrBackendTexture();
     }
diff --git a/src/image/SkSurface_Gpu.cpp b/src/image/SkSurface_Gpu.cpp
index 9fdc4ae..36c0871 100644
--- a/src/image/SkSurface_Gpu.cpp
+++ b/src/image/SkSurface_Gpu.cpp
@@ -407,6 +407,8 @@
 static bool validate_backend_texture(GrContext* ctx, const GrBackendTexture& tex,
                                      GrPixelConfig* config, int sampleCnt, SkColorType ct,
                                      bool texturable) {
+    GrColorType grCT = SkColorTypeToGrColorType(ct);
+
     if (!tex.isValid()) {
         return false;
     }
@@ -426,7 +428,7 @@
         return false;
     }
 
-    if (texturable && !ctx->priv().caps()->isFormatTexturable(ct, backendFormat)) {
+    if (texturable && !ctx->priv().caps()->isFormatTexturable(grCT, backendFormat)) {
         return false;
     }
     return true;
diff --git a/tests/BackendAllocationTest.cpp b/tests/BackendAllocationTest.cpp
index b9b6ae1..33a78a1 100644
--- a/tests/BackendAllocationTest.cpp
+++ b/tests/BackendAllocationTest.cpp
@@ -593,7 +593,7 @@
             // We current disallow uninitialized ETC1 textures in the GL backend
             continue;
         }
-        if (!glCaps->isFormatTexturable(combo.fColorType, format)) {
+        if (!glCaps->isFormatTexturable(SkColorTypeToGrColorType(combo.fColorType), format)) {
             continue;
         }
 
@@ -725,7 +725,7 @@
     };
 
     for (auto combo : combinations) {
-        if (!vkCaps->isFormatTexturable(combo.fFormat)) {
+        if (!vkCaps->isVkFormatTexturable(combo.fFormat)) {
             continue;
         }
 
