diff --git a/src/core/SkColorSpace.cpp b/src/core/SkColorSpace.cpp
index e667606..9f04de0 100644
--- a/src/core/SkColorSpace.cpp
+++ b/src/core/SkColorSpace.cpp
@@ -19,6 +19,7 @@
     , fGammaNamed(gammaNamed)
     , fGammas(nullptr)
     , fProfileData(nullptr)
+    , fFromXYZD50(SkMatrix44::kUninitialized_Constructor)
 {}
 
 SkColorSpace_Base::SkColorSpace_Base(sk_sp<SkColorLookUpTable> colorLUT, SkGammaNamed gammaNamed,
@@ -29,6 +30,7 @@
     , fGammaNamed(gammaNamed)
     , fGammas(std::move(gammas))
     , fProfileData(std::move(profileData))
+    , fFromXYZD50(SkMatrix44::kUninitialized_Constructor)
 {}
 
 static constexpr float gSRGB_toXYZD50[] {
@@ -182,6 +184,20 @@
     return kLinear_SkGammaNamed == as_CSB(this)->fGammaNamed;
 }
 
+const SkMatrix44& SkColorSpace_Base::fromXYZD50() const {
+    fFromXYZOnce([this] {
+        if (!fToXYZD50.invert(&fFromXYZD50)) {
+            // If a client gives us a dst gamut with a transform that we can't invert, we will
+            // simply give them back a transform to sRGB gamut.
+            SkDEBUGFAIL("Non-invertible XYZ matrix, defaulting to sRGB");
+            SkMatrix44 srgbToxyzD50(SkMatrix44::kUninitialized_Constructor);
+            srgbToxyzD50.set3x3RowMajorf(gSRGB_toXYZD50);
+            srgbToxyzD50.invert(&fFromXYZD50);
+        }
+    });
+    return fFromXYZD50;
+}
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
 enum Version {
diff --git a/src/core/SkColorSpaceXform.cpp b/src/core/SkColorSpaceXform.cpp
index f20886a..136b4da 100644
--- a/src/core/SkColorSpaceXform.cpp
+++ b/src/core/SkColorSpaceXform.cpp
@@ -446,14 +446,10 @@
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-static inline bool compute_gamut_xform(SkMatrix44* srcToDst, const SkMatrix44& srcToXYZ,
-                                       const SkMatrix44& dstToXYZ) {
-    if (!dstToXYZ.invert(srcToDst)) {
-        return false;
-    }
-
-    srcToDst->postConcat(srcToXYZ);
-    return true;
+static inline void compute_gamut_xform(SkMatrix44* srcToDst, const SkColorSpace* src,
+                                       const SkColorSpace* dst) {
+    *srcToDst = as_CSB(dst)->fromXYZD50();
+    srcToDst->postConcat(src->toXYZD50());
 }
 
 static inline bool is_almost_identity(const SkMatrix44& srcToDst) {
@@ -482,11 +478,13 @@
     if (SkColorSpace::Equals(srcSpace.get(), dstSpace.get())) {
         srcToDst.setIdentity();
         csm = kFull_ColorSpaceMatch;
-    } else if (!compute_gamut_xform(&srcToDst, srcSpace->xyz(), dstSpace->xyz())) {
-        return nullptr;
-    } else if (is_almost_identity(srcToDst)) {
-        srcToDst.setIdentity();
-        csm = kGamut_ColorSpaceMatch;
+    } else {
+        compute_gamut_xform(&srcToDst, srcSpace.get(), dstSpace.get());
+
+        if (is_almost_identity(srcToDst)) {
+            srcToDst.setIdentity();
+            csm = kGamut_ColorSpaceMatch;
+        }
     }
 
     switch (csm) {
diff --git a/src/core/SkColorSpace_Base.h b/src/core/SkColorSpace_Base.h
index 31f96dd..9382153 100644
--- a/src/core/SkColorSpace_Base.h
+++ b/src/core/SkColorSpace_Base.h
@@ -10,6 +10,7 @@
 
 #include "SkColorSpace.h"
 #include "SkData.h"
+#include "SkOnce.h"
 #include "SkTemplates.h"
 
 enum SkGammaNamed : uint8_t {
@@ -188,6 +189,8 @@
 
     const SkColorLookUpTable* colorLUT() const { return fColorLUT.get(); }
 
+    const SkMatrix44& fromXYZD50() const;
+
 private:
 
     /**
@@ -211,6 +214,9 @@
     sk_sp<SkGammas>           fGammas;
     sk_sp<SkData>             fProfileData;
 
+    mutable SkMatrix44        fFromXYZD50;
+    mutable SkOnce            fFromXYZOnce;
+
     friend class SkColorSpace;
     friend class ColorSpaceXformTest;
     friend class ColorSpaceTest;
diff --git a/src/gpu/GrColorSpaceXform.cpp b/src/gpu/GrColorSpaceXform.cpp
index 03aa271..8ff6fda 100644
--- a/src/gpu/GrColorSpaceXform.cpp
+++ b/src/gpu/GrColorSpaceXform.cpp
@@ -7,6 +7,7 @@
 
 #include "GrColorSpaceXform.h"
 #include "SkColorSpace.h"
+#include "SkColorSpace_Base.h"
 #include "SkMatrix44.h"
 
 static inline bool sk_float_almost_equals(float x, float y, float tol) {
@@ -51,11 +52,8 @@
         return nullptr;
     }
 
-    SkMatrix44 srcToDst(SkMatrix44::kUninitialized_Constructor);
-    if (!dst->xyz().invert(&srcToDst)) {
-        return nullptr;
-    }
-    srcToDst.postConcat(src->xyz());
+    SkMatrix44 srcToDst = as_CSB(dst)->fromXYZD50();
+    srcToDst.postConcat(src->toXYZD50());
 
     if (matrix_is_almost_identity(srcToDst)) {
         return nullptr;
