Remove GrPixelConfig from GrColorSpaceInfo.

Replace GrColorInfo with GrColorSpaceInfo.

Change-Id: I7abe28203dd7f22162d68c4eee41293f483bb1aa
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/225036
Commit-Queue: Brian Salomon <bsalomon@google.com>
Reviewed-by: Robert Phillips <robertphillips@google.com>
diff --git a/src/atlastext/SkAtlasTextTarget.cpp b/src/atlastext/SkAtlasTextTarget.cpp
index 468a44f..1adae89 100644
--- a/src/atlastext/SkAtlasTextTarget.cpp
+++ b/src/atlastext/SkAtlasTextTarget.cpp
@@ -73,8 +73,8 @@
 
 //////////////////////////////////////////////////////////////////////////////
 
-static const GrColorSpaceInfo kColorSpaceInfo(GrColorType::kRGBA_8888, kPremul_SkAlphaType, nullptr,
-                                              kRGBA_8888_GrPixelConfig);
+static const GrColorSpaceInfo kColorSpaceInfo(GrColorType::kRGBA_8888, kPremul_SkAlphaType,
+                                              nullptr);
 static const SkSurfaceProps kProps(
         SkSurfaceProps::kUseDistanceFieldFonts_Flag, kUnknown_SkPixelGeometry);
 
diff --git a/src/effects/SkTableColorFilter.cpp b/src/effects/SkTableColorFilter.cpp
index 6fdbcf1..304babd 100644
--- a/src/effects/SkTableColorFilter.cpp
+++ b/src/effects/SkTableColorFilter.cpp
@@ -400,7 +400,7 @@
     sk_sp<SkColorSpace> colorSpace = GrTest::TestColorSpace(d->fRandom);
     auto fp = filter->asFragmentProcessor(
             d->context(), GrColorSpaceInfo(GrColorType::kRGBA_8888, kUnknown_SkAlphaType,
-                                           std::move(colorSpace), kRGBA_8888_GrPixelConfig));
+                                           std::move(colorSpace)));
     SkASSERT(fp);
     return fp;
 }
diff --git a/src/gpu/GrBitmapTextureMaker.cpp b/src/gpu/GrBitmapTextureMaker.cpp
index b114b7c..016b907 100644
--- a/src/gpu/GrBitmapTextureMaker.cpp
+++ b/src/gpu/GrBitmapTextureMaker.cpp
@@ -19,7 +19,7 @@
 
 static GrColorSpaceInfo make_info(const SkBitmap& bm) {
     return GrColorSpaceInfo(SkColorTypeToGrColorType(bm.colorType()), bm.alphaType(),
-                            bm.refColorSpace(), SkImageInfo2GrPixelConfig(bm.info()));
+                            bm.refColorSpace());
 }
 
 GrBitmapTextureMaker::GrBitmapTextureMaker(GrRecordingContext* context, const SkBitmap& bitmap,
diff --git a/src/gpu/GrColorSpaceInfo.cpp b/src/gpu/GrColorSpaceInfo.cpp
index a560ffd..179e754 100644
--- a/src/gpu/GrColorSpaceInfo.cpp
+++ b/src/gpu/GrColorSpaceInfo.cpp
@@ -10,13 +10,8 @@
 
 GrColorSpaceInfo::GrColorSpaceInfo(GrColorType colorType,
                                    SkAlphaType alphaType,
-                                   sk_sp<SkColorSpace> colorSpace,
-                                   GrPixelConfig config)
-        : fColorSpace(std::move(colorSpace))
-        , fColorType(colorType)
-        , fAlphaType(alphaType)
-        , fConfig(config)
-        , fInitializedColorSpaceXformFromSRGB(false) {}
+                                   sk_sp<SkColorSpace> colorSpace)
+        : fColorSpace(std::move(colorSpace)), fColorType(colorType), fAlphaType(alphaType) {}
 
 GrColorSpaceXform* GrColorSpaceInfo::colorSpaceXformFromSRGB() const {
     // TODO: Make this atomic if we start accessing this on multiple threads.
diff --git a/src/gpu/GrColorSpaceInfo.h b/src/gpu/GrColorSpaceInfo.h
index 039d108..672430a 100644
--- a/src/gpu/GrColorSpaceInfo.h
+++ b/src/gpu/GrColorSpaceInfo.h
@@ -16,7 +16,8 @@
 /** Describes the color space properties of a surface context. */
 class GrColorSpaceInfo {
 public:
-    GrColorSpaceInfo(GrColorType, SkAlphaType, sk_sp<SkColorSpace>, GrPixelConfig);
+    GrColorSpaceInfo() = default;
+    GrColorSpaceInfo(GrColorType, SkAlphaType, sk_sp<SkColorSpace>);
 
     bool isLinearlyBlended() const { return fColorSpace && fColorSpace->gammaIsLinear(); }
 
@@ -31,16 +32,16 @@
     GrColorType colorType() const { return fColorType; }
     SkAlphaType alphaType() const { return fAlphaType; }
 
-    // TODO: Remove.
-    GrPixelConfig config() const { return fConfig; }
+    bool isValid() const {
+        return fColorType != GrColorType::kUnknown && fAlphaType != kUnknown_SkAlphaType;
+    }
 
 private:
     sk_sp<SkColorSpace> fColorSpace;
     mutable sk_sp<GrColorSpaceXform> fColorXformFromSRGB;
-    GrColorType fColorType;
-    SkAlphaType fAlphaType;
-    GrPixelConfig fConfig;
-    mutable bool fInitializedColorSpaceXformFromSRGB;
+    GrColorType fColorType = GrColorType::kUnknown;
+    SkAlphaType fAlphaType = kUnknown_SkAlphaType;
+    mutable bool fInitializedColorSpaceXformFromSRGB = false;
 };
 
 #endif
diff --git a/src/gpu/GrDataUtils.h b/src/gpu/GrDataUtils.h
index 2b8b691..a1f4eeb 100644
--- a/src/gpu/GrDataUtils.h
+++ b/src/gpu/GrDataUtils.h
@@ -10,6 +10,7 @@
 
 #include "include/core/SkColor.h"
 #include "include/private/GrTypesPriv.h"
+#include "src/gpu/GrColorSpaceInfo.h"
 #include "src/gpu/GrSwizzle.h"
 
 size_t GrCompressedDataSize(SkImage::CompressionType, int w, int h);
@@ -25,38 +26,6 @@
 
 void GrFillInCompressedData(SkImage::CompressionType, int width, int height, char* dest,
                             const SkColor4f& color);
-
-// TODO: Replace with GrColorSpaceInfo once GrPixelConfig is excised from that type.
-class GrColorInfo {
-public:
-    GrColorInfo() = default;
-
-    GrColorInfo(GrColorType ct, SkAlphaType at, sk_sp<SkColorSpace> cs)
-            : fColorSpace(std::move(cs)), fColorType(ct), fAlphaType(at) {}
-
-    GrColorInfo(const GrColorInfo&) = default;
-    GrColorInfo(GrColorInfo&&) = default;
-    GrColorInfo& operator=(const GrColorInfo&) = default;
-    GrColorInfo& operator=(GrColorInfo&&) = default;
-
-    GrColorType colorType() const { return fColorType; }
-
-    SkAlphaType alphaType() const { return fAlphaType; }
-
-    SkColorSpace* colorSpace() const { return fColorSpace.get(); }
-
-    sk_sp<SkColorSpace> refColorSpace() const { return fColorSpace; }
-
-    bool isValid() const {
-        return fColorType != GrColorType::kUnknown && fAlphaType != kUnknown_SkAlphaType;
-    }
-
-private:
-    sk_sp<SkColorSpace> fColorSpace;
-    GrColorType fColorType = GrColorType::kUnknown;
-    SkAlphaType fAlphaType = kUnknown_SkAlphaType;
-};
-
 class GrPixelInfo {
 public:
     GrPixelInfo() = default;
@@ -126,7 +95,7 @@
     bool isValid() const { return fColorInfo.isValid() && fWidth > 0 && fHeight > 0; }
 
 private:
-    GrColorInfo fColorInfo = {};
+    GrColorSpaceInfo fColorInfo = {};
     int fWidth = 0;
     int fHeight = 0;
 };
diff --git a/src/gpu/GrImageTextureMaker.cpp b/src/gpu/GrImageTextureMaker.cpp
index 0752e48..9378b9c 100644
--- a/src/gpu/GrImageTextureMaker.cpp
+++ b/src/gpu/GrImageTextureMaker.cpp
@@ -16,8 +16,7 @@
 static GrColorSpaceInfo make_info(const SkImage*& image) {
     return GrColorSpaceInfo(SkColorTypeToGrColorType(image->colorType()),
                             image->alphaType(),
-                            image->refColorSpace(),
-                            SkImageInfo2GrPixelConfig(image->imageInfo()));
+                            image->refColorSpace());
 }
 
 GrImageTextureMaker::GrImageTextureMaker(GrRecordingContext* context, const SkImage* client,
diff --git a/src/gpu/GrRenderTargetContext.cpp b/src/gpu/GrRenderTargetContext.cpp
index fb9bd38..cf5b6f9 100644
--- a/src/gpu/GrRenderTargetContext.cpp
+++ b/src/gpu/GrRenderTargetContext.cpp
@@ -147,8 +147,7 @@
                                              sk_sp<SkColorSpace> colorSpace,
                                              const SkSurfaceProps* surfaceProps,
                                              bool managedOpList)
-        : GrSurfaceContext(context, colorType, kPremul_SkAlphaType, std::move(colorSpace),
-                           rtp->config())
+        : GrSurfaceContext(context, colorType, kPremul_SkAlphaType, std::move(colorSpace))
         , fRenderTargetProxy(std::move(rtp))
         , fOpList(sk_ref_sp(fRenderTargetProxy->getLastRenderTargetOpList()))
         , fSurfaceProps(SkSurfacePropsCopyOrDefault(surfaceProps))
@@ -833,7 +832,7 @@
         // mixed samples.
         SkASSERT(fRenderTargetProxy->canUseMixedSamples(*this->caps()));
         numRequiredSamples = this->caps()->internalMultisampleCount(
-                this->colorSpaceInfo().config());
+                this->asSurfaceProxy()->config());
     }
     SkASSERT(numRequiredSamples > 0);
 
@@ -2615,7 +2614,7 @@
 
     SkASSERT((!usesStencil && !appliedClip.hasStencilClip()) || (fNumStencilSamples > 0));
 
-    GrClampType clampType = GrPixelConfigClampType(this->colorSpaceInfo().config());
+    GrClampType clampType = GrColorTypeClampType(this->colorSpaceInfo().colorType());
     // MIXED SAMPLES TODO: If we start using mixed samples for clips we will need to check the clip
     // here as well.
     bool hasMixedSampledCoverage = (usesHWAA && this->numSamples() <= 1);
diff --git a/src/gpu/GrSurfaceContext.cpp b/src/gpu/GrSurfaceContext.cpp
index 82498dd..395772b 100644
--- a/src/gpu/GrSurfaceContext.cpp
+++ b/src/gpu/GrSurfaceContext.cpp
@@ -34,9 +34,8 @@
 GrSurfaceContext::GrSurfaceContext(GrRecordingContext* context,
                                    GrColorType colorType,
                                    SkAlphaType alphaType,
-                                   sk_sp<SkColorSpace> colorSpace,
-                                   GrPixelConfig config)
-        : fContext(context), fColorSpaceInfo(colorType, alphaType, std::move(colorSpace), config) {}
+                                   sk_sp<SkColorSpace> colorSpace)
+        : fContext(context), fColorSpaceInfo(colorType, alphaType, std::move(colorSpace)) {}
 
 GrAuditTrail* GrSurfaceContext::auditTrail() {
     return fContext->priv().auditTrail();
diff --git a/src/gpu/GrSurfaceContext.h b/src/gpu/GrSurfaceContext.h
index 5bac870..8ef1450 100644
--- a/src/gpu/GrSurfaceContext.h
+++ b/src/gpu/GrSurfaceContext.h
@@ -99,11 +99,7 @@
 protected:
     friend class GrSurfaceContextPriv;
 
-    GrSurfaceContext(GrRecordingContext*,
-                     GrColorType,
-                     SkAlphaType,
-                     sk_sp<SkColorSpace>,
-                     GrPixelConfig);
+    GrSurfaceContext(GrRecordingContext*, GrColorType, SkAlphaType, sk_sp<SkColorSpace>);
 
     GrDrawingManager* drawingManager();
     const GrDrawingManager* drawingManager() const;
diff --git a/src/gpu/GrTestUtils.cpp b/src/gpu/GrTestUtils.cpp
index 0c15e6b..c6e95a3 100644
--- a/src/gpu/GrTestUtils.cpp
+++ b/src/gpu/GrTestUtils.cpp
@@ -339,8 +339,7 @@
 TestAsFPArgs::TestAsFPArgs(GrProcessorTestData* d)
         : fViewMatrixStorage(TestMatrix(d->fRandom))
         , fColorSpaceInfoStorage(skstd::make_unique<GrColorSpaceInfo>(
-                  GrColorType::kRGBA_8888, kPremul_SkAlphaType, TestColorSpace(d->fRandom),
-                  kRGBA_8888_GrPixelConfig))
+                  GrColorType::kRGBA_8888, kPremul_SkAlphaType, TestColorSpace(d->fRandom)))
         , fArgs(d->context(), &fViewMatrixStorage, kNone_SkFilterQuality,
                 fColorSpaceInfoStorage.get()) {}
 
diff --git a/src/gpu/GrTextureAdjuster.cpp b/src/gpu/GrTextureAdjuster.cpp
index c299fed..05f8396 100644
--- a/src/gpu/GrTextureAdjuster.cpp
+++ b/src/gpu/GrTextureAdjuster.cpp
@@ -21,11 +21,7 @@
                                      SkColorSpace* cs,
                                      bool useDecal)
         : INHERITED(context, original->width(), original->height(),
-                    GrColorSpaceInfo(colorType,
-                                     alphaType,
-                                     sk_ref_sp(cs),
-                                     original->config()),
-                                     useDecal)
+                    GrColorSpaceInfo(colorType, alphaType, sk_ref_sp(cs)), useDecal)
         , fOriginal(std::move(original))
         , fUniqueID(uniqueID) {}
 
diff --git a/src/gpu/GrTextureContext.cpp b/src/gpu/GrTextureContext.cpp
index c9e5fa5..1ba1243 100644
--- a/src/gpu/GrTextureContext.cpp
+++ b/src/gpu/GrTextureContext.cpp
@@ -21,11 +21,7 @@
                                    GrColorType colorType,
                                    SkAlphaType alphaType,
                                    sk_sp<SkColorSpace> colorSpace)
-        : GrSurfaceContext(context,
-                           colorType,
-                           alphaType,
-                           std::move(colorSpace),
-                           textureProxy->config())
+        : GrSurfaceContext(context, colorType, alphaType, std::move(colorSpace))
         , fTextureProxy(std::move(textureProxy))
         , fOpList(sk_ref_sp(fTextureProxy->getLastTextureOpList())) {
     SkDEBUGCODE(this->validate();)
diff --git a/src/gpu/GrTextureProducer.h b/src/gpu/GrTextureProducer.h
index d73ed25..806ddad 100644
--- a/src/gpu/GrTextureProducer.h
+++ b/src/gpu/GrTextureProducer.h
@@ -107,7 +107,7 @@
     GrColorType colorType() const { return fColorSpaceInfo.colorType(); }
     SkAlphaType alphaType() const { return fColorSpaceInfo.alphaType(); }
     SkColorSpace* colorSpace() const { return fColorSpaceInfo.colorSpace(); }
-    bool isAlphaOnly() const { return GrPixelConfigIsAlphaOnly(fColorSpaceInfo.config()); }
+    bool isAlphaOnly() const { return GrColorTypeIsAlphaOnly(fColorSpaceInfo.colorType()); }
     bool domainNeedsDecal() const { return fDomainNeedsDecal; }
     // If the "texture" samples multiple images that have different resolutions (e.g. YUV420)
     virtual bool hasMixedResolutions() const { return false; }
diff --git a/src/gpu/SkGpuDevice.cpp b/src/gpu/SkGpuDevice.cpp
index e9e3d7a..39b0ca9 100644
--- a/src/gpu/SkGpuDevice.cpp
+++ b/src/gpu/SkGpuDevice.cpp
@@ -116,10 +116,7 @@
 }
 
 static SkImageInfo make_info(GrRenderTargetContext* context, int w, int h, bool opaque) {
-    SkColorType colorType;
-    if (!GrPixelConfigToColorType(context->colorSpaceInfo().config(), &colorType)) {
-        colorType = kUnknown_SkColorType;
-    }
+    SkColorType colorType = GrColorTypeToSkColorType(context->colorSpaceInfo().colorType());
     return SkImageInfo::Make(w, h, colorType, opaque ? kOpaque_SkAlphaType : kPremul_SkAlphaType,
                              context->colorSpaceInfo().refColorSpace());
 }
@@ -183,9 +180,10 @@
     matrix.postTranslate(SkIntToScalar(-left), SkIntToScalar(-top));
     const SkIRect clipBounds = this->devClipBounds().makeOffset(-left, -top);
     sk_sp<SkImageFilterCache> cache(this->getImageFilterCache());
-    SkColorType colorType;
-    if (!GrPixelConfigToColorType(fRenderTargetContext->colorSpaceInfo().config(), &colorType)) {
-        colorType = kN32_SkColorType;
+    SkColorType colorType =
+            GrColorTypeToSkColorType(fRenderTargetContext->colorSpaceInfo().colorType());
+    if (colorType == kUnknown_SkColorType) {
+        colorType = kRGBA_8888_SkColorType;
     }
     SkImageFilter::OutputProperties outputProperties(
             colorType, fRenderTargetContext->colorSpaceInfo().colorSpace());
@@ -1666,20 +1664,21 @@
     SkBackingFit fit = kNever_TileUsage == cinfo.fTileUsage ? SkBackingFit::kApprox
                                                             : SkBackingFit::kExact;
 
-    GrPixelConfig config = fRenderTargetContext->colorSpaceInfo().config();
+    GrColorType colorType = fRenderTargetContext->colorSpaceInfo().colorType();
     const GrBackendFormat& origFormat = fRenderTargetContext->asSurfaceProxy()->backendFormat();
     GrBackendFormat format = origFormat.makeTexture2D();
     if (!format.isValid()) {
         return nullptr;
     }
-    if (kRGBA_1010102_GrPixelConfig == config) {
+    if (colorType == GrColorType::kRGBA_1010102) {
         // If the original device is 1010102, fall back to 8888 so that we have a usable alpha
         // channel in the layer.
-        config = kRGBA_8888_GrPixelConfig;
-        format =
-            fContext->priv().caps()->getBackendFormatFromColorType(kRGBA_8888_SkColorType);
+        colorType = GrColorType::kRGBA_8888;
+        format = fContext->priv().caps()->getBackendFormatFromColorType(kRGBA_8888_SkColorType);
     }
 
+    auto config = fContext->priv().caps()->getConfigFromBackendFormat(
+            format, GrColorTypeToSkColorType(colorType));
     sk_sp<GrRenderTargetContext> rtc(fContext->priv().makeDeferredRenderTargetContext(
             format,
             fit,
diff --git a/src/gpu/SkGr.cpp b/src/gpu/SkGr.cpp
index fcc12ba..0709ca3 100644
--- a/src/gpu/SkGr.cpp
+++ b/src/gpu/SkGr.cpp
@@ -285,43 +285,34 @@
 }
 
 #ifndef SK_IGNORE_GPU_DITHER
-static inline int32_t dither_range_type_for_config(GrPixelConfig dstConfig) {
-    switch (dstConfig) {
-        case kGray_8_GrPixelConfig:
-        case kGray_8_as_Lum_GrPixelConfig:
-        case kGray_8_as_Red_GrPixelConfig:
-        case kRGBA_8888_GrPixelConfig:
-        case kRGB_888_GrPixelConfig:
-        case kRGB_888X_GrPixelConfig:
-        case kRG_88_GrPixelConfig:
-        case kBGRA_8888_GrPixelConfig:
-        case kR_16_GrPixelConfig:
-        case kRG_1616_GrPixelConfig:
+static inline int32_t dither_range_type_for_config(GrColorType dstColorType) {
+    switch (dstColorType) {
+        case GrColorType::kGray_8:
+        case GrColorType::kRGBA_8888:
+        case GrColorType::kRGB_888x:
+        case GrColorType::kRG_88:
+        case GrColorType::kBGRA_8888:
+        case GrColorType::kR_16:
+        case GrColorType::kRG_1616:
         // Experimental (for Y416 and mutant P016/P010)
-        case kRGBA_16161616_GrPixelConfig:
-        case kRG_half_GrPixelConfig:
+        case GrColorType::kRGBA_16161616:
+        case GrColorType::kRG_F16:
             return 0;
-        case kRGB_565_GrPixelConfig:
+        case GrColorType::kBGR_565:
             return 1;
-        case kRGBA_4444_GrPixelConfig:
+        case GrColorType::kABGR_4444:
             return 2;
-        case kUnknown_GrPixelConfig:
-        case kSRGBA_8888_GrPixelConfig:
-        case kRGBA_1010102_GrPixelConfig:
-        case kAlpha_half_GrPixelConfig:
-        case kAlpha_half_as_Red_GrPixelConfig:
-        case kRGBA_float_GrPixelConfig:
-        case kRG_float_GrPixelConfig:
-        case kRGBA_half_GrPixelConfig:
-        case kRGBA_half_Clamped_GrPixelConfig:
-        case kRGB_ETC1_GrPixelConfig:
-        case kAlpha_8_GrPixelConfig:
-        case kAlpha_8_as_Alpha_GrPixelConfig:
-        case kAlpha_8_as_Red_GrPixelConfig:
+        case GrColorType::kUnknown:
+        case GrColorType::kRGBA_1010102:
+        case GrColorType::kAlpha_F16:
+        case GrColorType::kRGBA_F32:
+        case GrColorType::kRG_F32:
+        case GrColorType::kRGBA_F16:
+        case GrColorType::kRGBA_F16_Clamped:
+        case GrColorType::kAlpha_8:
             return -1;
     }
-    SkASSERT(false);
-    return 0;
+    SkUNREACHABLE;
 }
 #endif
 
@@ -454,10 +445,10 @@
 
 #ifndef SK_IGNORE_GPU_DITHER
     // Conservative default, in case GrPixelConfigToColorType() fails.
-    SkColorType ct = SkColorType::kRGB_565_SkColorType;
-    GrPixelConfigToColorType(colorSpaceInfo.config(), &ct);
-    if (SkPaintPriv::ShouldDither(skPaint, ct) && grPaint->numColorFragmentProcessors() > 0) {
-        int32_t ditherRange = dither_range_type_for_config(colorSpaceInfo.config());
+    GrColorType ct = colorSpaceInfo.colorType();
+    if (SkPaintPriv::ShouldDither(skPaint, GrColorTypeToSkColorType(ct)) &&
+        grPaint->numColorFragmentProcessors() > 0) {
+        int32_t ditherRange = dither_range_type_for_config(ct);
         if (ditherRange >= 0) {
             static int ditherIndex = GrSkSLFP::NewIndex();
             auto ditherFP = GrSkSLFP::Make(context, ditherIndex, "Dither", SKSL_DITHER_SRC,
diff --git a/src/gpu/gradients/GrGradientShader.cpp b/src/gpu/gradients/GrGradientShader.cpp
index 9571a8f..03649c8 100644
--- a/src/gpu/gradients/GrGradientShader.cpp
+++ b/src/gpu/gradients/GrGradientShader.cpp
@@ -45,7 +45,7 @@
     // Use 8888 or F16, depending on the destination config.
     // TODO: Use 1010102 for opaque gradients, at least if destination is 1010102?
     SkColorType colorType = kRGBA_8888_SkColorType;
-    if (kLow_GrSLPrecision != GrSLSamplerPrecision(args.fDstColorSpaceInfo->config()) &&
+    if (GrColorTypeIsWiderThan(args.fDstColorSpaceInfo->colorType(), 8) &&
         args.fContext->priv().caps()->isConfigTexturable(kRGBA_half_GrPixelConfig)) {
         colorType = kRGBA_F16_SkColorType;
     }
diff --git a/src/gpu/vk/GrVkSecondaryCBDrawContext.cpp b/src/gpu/vk/GrVkSecondaryCBDrawContext.cpp
index c526848..3772292 100644
--- a/src/gpu/vk/GrVkSecondaryCBDrawContext.cpp
+++ b/src/gpu/vk/GrVkSecondaryCBDrawContext.cpp
@@ -88,18 +88,17 @@
     // We current don't support textured GrVkSecondaryCBDrawContexts.
     SkASSERT(!rtc->asTextureProxy());
 
-    // TODO: the addition of colorType to the surfaceContext should remove this calculation
-    SkColorType ct;
-    if (!GrPixelConfigToColorType(rtc->colorSpaceInfo().config(), &ct)) {
+    SkColorType ct = GrColorTypeToSkColorType(rtc->colorSpaceInfo().colorType());
+    if (ct == kUnknown_SkColorType) {
         return false;
     }
 
     SkImageInfo ii = SkImageInfo::Make(rtc->width(), rtc->height(), ct, kPremul_SkAlphaType,
                                        rtc->colorSpaceInfo().refColorSpace());
 
-    characterization->set(ctx->threadSafeProxy(), maxResourceBytes, ii, rtc->origin(),
-                          rtc->colorSpaceInfo().config(), rtc->numSamples(),
-                          SkSurfaceCharacterization::Textureable(false),
+    GrPixelConfig config = rtc->asSurfaceProxy()->config();
+    characterization->set(ctx->threadSafeProxy(), maxResourceBytes, ii, rtc->origin(), config,
+                          rtc->numSamples(), SkSurfaceCharacterization::Textureable(false),
                           SkSurfaceCharacterization::MipMapped(false),
                           SkSurfaceCharacterization::UsesGLFBO0(false),
                           SkSurfaceCharacterization::VulkanSecondaryCBCompatible(true),
@@ -137,19 +136,19 @@
         return false;
     }
 
-    // TODO: the addition of colorType to the surfaceContext should remove this calculation
-    SkColorType rtcColorType;
-    if (!GrPixelConfigToColorType(rtc->colorSpaceInfo().config(), &rtcColorType)) {
+    SkColorType rtColorType = GrColorTypeToSkColorType(rtc->colorSpaceInfo().colorType());
+    if (rtColorType == kUnknown_SkColorType) {
         return false;
     }
 
+    GrPixelConfig config = rtc->asSurfaceProxy()->config();
     return characterization.contextInfo() && characterization.contextInfo()->priv().matches(ctx) &&
            characterization.cacheMaxResourceBytes() <= maxResourceBytes &&
            characterization.origin() == rtc->origin() &&
-           characterization.config() == rtc->colorSpaceInfo().config() &&
+           characterization.config() == config &&
            characterization.width() == rtc->width() &&
            characterization.height() == rtc->height() &&
-           characterization.colorType() == rtcColorType &&
+           characterization.colorType() == rtColorType &&
            characterization.sampleCount() == rtc->numSamples() &&
            SkColorSpace::Equals(characterization.colorSpace(),
                                 rtc->colorSpaceInfo().colorSpace()) &&
diff --git a/src/image/SkSurface_Gpu.cpp b/src/image/SkSurface_Gpu.cpp
index 5a6e388..19b08e8 100644
--- a/src/image/SkSurface_Gpu.cpp
+++ b/src/image/SkSurface_Gpu.cpp
@@ -195,9 +195,8 @@
     bool mipmapped = rtc->asTextureProxy() ? GrMipMapped::kYes == rtc->asTextureProxy()->mipMapped()
                                            : false;
 
-    // TODO: the addition of colorType to the surfaceContext should remove this calculation
-    SkColorType ct;
-    if (!GrPixelConfigToColorType(rtc->colorSpaceInfo().config(), &ct)) {
+    SkColorType ct = GrColorTypeToSkColorType(rtc->colorSpaceInfo().colorType());
+    if (ct == kUnknown_SkColorType) {
         return false;
     }
 
@@ -209,13 +208,13 @@
     SkImageInfo ii = SkImageInfo::Make(rtc->width(), rtc->height(), ct, kPremul_SkAlphaType,
                                        rtc->colorSpaceInfo().refColorSpace());
 
-    characterization->set(ctx->threadSafeProxy(), maxResourceBytes, ii, rtc->origin(),
-                          rtc->colorSpaceInfo().config(), rtc->numSamples(),
-                          SkSurfaceCharacterization::Textureable(SkToBool(rtc->asTextureProxy())),
-                          SkSurfaceCharacterization::MipMapped(mipmapped),
-                          SkSurfaceCharacterization::UsesGLFBO0(usesGLFBO0),
-                          SkSurfaceCharacterization::VulkanSecondaryCBCompatible(false),
-                          this->props());
+    GrPixelConfig config = rtc->asSurfaceProxy()->config();
+    characterization->set(
+            ctx->threadSafeProxy(), maxResourceBytes, ii, rtc->origin(), config, rtc->numSamples(),
+            SkSurfaceCharacterization::Textureable(SkToBool(rtc->asTextureProxy())),
+            SkSurfaceCharacterization::MipMapped(mipmapped),
+            SkSurfaceCharacterization::UsesGLFBO0(usesGLFBO0),
+            SkSurfaceCharacterization::VulkanSecondaryCBCompatible(false), this->props());
 
     return true;
 }
@@ -295,16 +294,16 @@
         return false;
     }
 
-    // TODO: the addition of colorType to the surfaceContext should remove this calculation
-    SkColorType rtcColorType;
-    if (!GrPixelConfigToColorType(rtc->colorSpaceInfo().config(), &rtcColorType)) {
+    SkColorType rtcColorType = GrColorTypeToSkColorType(rtc->colorSpaceInfo().colorType());
+    if (rtcColorType == kUnknown_SkColorType) {
         return false;
     }
 
+    GrPixelConfig config = rtc->asSurfaceProxy()->config();
     return characterization.contextInfo() && characterization.contextInfo()->priv().matches(ctx) &&
            characterization.cacheMaxResourceBytes() <= maxResourceBytes &&
            characterization.origin() == rtc->origin() &&
-           characterization.config() == rtc->colorSpaceInfo().config() &&
+           characterization.config() == config &&
            characterization.width() == rtc->width() &&
            characterization.height() == rtc->height() &&
            characterization.colorType() == rtcColorType &&
diff --git a/src/shaders/SkPictureShader.cpp b/src/shaders/SkPictureShader.cpp
index 16ae398..568c5ff 100644
--- a/src/shaders/SkPictureShader.cpp
+++ b/src/shaders/SkPictureShader.cpp
@@ -345,8 +345,10 @@
     }
 
     auto lm = this->totalLocalMatrix(args.fPreLocalMatrix, args.fPostLocalMatrix);
-    SkColorType dstColorType = kN32_SkColorType;
-    GrPixelConfigToColorType(args.fDstColorSpaceInfo->config(), &dstColorType);
+    SkColorType dstColorType = GrColorTypeToSkColorType(args.fDstColorSpaceInfo->colorType());
+    if (dstColorType == kUnknown_SkColorType) {
+        dstColorType = kRGBA_8888_SkColorType;
+    }
     sk_sp<SkShader> bitmapShader(this->refBitmapShader(*args.fViewMatrix, &lm, dstColorType,
                                                        args.fDstColorSpaceInfo->colorSpace(),
                                                        maxTextureSize));