Add SkColorSpace_Base::makeColorSpin

This is a utility that creates a version of an existing XYZ color space
that performs our color spin operation. Assigning this to a source remaps
RGB to GBR. Assigning it to a destination does the opposite (RGB to BRG).

Bug: skia:
Change-Id: I3528698220bd32aa01dcd3db225e60f151a4b5bd
Reviewed-on: https://skia-review.googlesource.com/71280
Commit-Queue: Brian Osman <brianosman@google.com>
Reviewed-by: Mike Klein <mtklein@chromium.org>
diff --git a/gm/color4f.cpp b/gm/color4f.cpp
index 2ebe931..36850a1 100644
--- a/gm/color4f.cpp
+++ b/gm/color4f.cpp
@@ -96,11 +96,7 @@
     canvas->translate(10, 10);
 
     auto srgb = SkColorSpace::MakeSRGB();
-
-    SkMatrix44 mat(SkMatrix44::kUninitialized_Constructor);
-    // red -> blue, green -> red, blue -> green (sRGB)
-    mat.set3x3(0, 0, 1, 1, 0, 0, 0, 1, 0);
-    mat.postConcat(*as_CSB(srgb)->toXYZD50());
+    auto spin = as_CSB(srgb)->makeColorSpin(); // RGB -> GBR
 
     const SkColor4f colors[] {
         { 1, 0, 0, 1 },
@@ -116,8 +112,7 @@
         sk_sp<SkShader> shaders[] {
             SkShader::MakeColorShader(c4, nullptr),
             SkShader::MakeColorShader(c4, srgb),
-            SkShader::MakeColorShader(c4,
-                    SkColorSpace::MakeRGB(SkColorSpace::kLinear_RenderTargetGamma, mat)),
+            SkShader::MakeColorShader(c4, spin),
         };
 
         canvas->save();