split apart uniformPremul()

It's doing two or three separate things, and I think it's clearer to do
the color conversions and premul up front, leaving just uniformColor().

Change-Id: I65a2f5eac86129924bf30f00a879ae01a1e737a5
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/319764
Reviewed-by: Mike Klein <mtklein@google.com>
Commit-Queue: Mike Klein <mtklein@google.com>
diff --git a/src/core/SkModeColorFilter.cpp b/src/core/SkModeColorFilter.cpp
index 79ffeda..02f9c47 100644
--- a/src/core/SkModeColorFilter.cpp
+++ b/src/core/SkModeColorFilter.cpp
@@ -75,9 +75,11 @@
 skvm::Color SkModeColorFilter::onProgram(skvm::Builder* p, skvm::Color c,
                                          SkColorSpace* dstCS,
                                          skvm::Uniforms* uniforms, SkArenaAlloc*) const {
+    SkColor4f color = SkColor4f::FromColor(fColor);
+    SkColorSpaceXformSteps(sk_srgb_singleton(), kUnpremul_SkAlphaType,
+                                         dstCS,   kPremul_SkAlphaType).apply(color.vec());
     skvm::Color dst = c,
-                src = p->uniformPremul(SkColor4f::FromColor(fColor), sk_srgb_singleton(),
-                                       uniforms, dstCS);
+                src = p->uniformColor(color, uniforms);
     return p->blend(fMode, src,dst);
 }
 
diff --git a/src/core/SkVM.cpp b/src/core/SkVM.cpp
index 28ecec1..a602b20 100644
--- a/src/core/SkVM.cpp
+++ b/src/core/SkVM.cpp
@@ -1473,15 +1473,13 @@
         *b *= a;
     }
 
-    Color Builder::uniformPremul(SkColor4f color,    SkColorSpace* src,
-                                 Uniforms* uniforms, SkColorSpace* dst) {
-        SkColorSpaceXformSteps(src, kUnpremul_SkAlphaType,
-                               dst,   kPremul_SkAlphaType).apply(color.vec());
+    Color Builder::uniformColor(SkColor4f color, Uniforms* uniforms) {
+        auto [r,g,b,a] = color;
         return {
-            uniformF(uniforms->pushF(color.fR)),
-            uniformF(uniforms->pushF(color.fG)),
-            uniformF(uniforms->pushF(color.fB)),
-            uniformF(uniforms->pushF(color.fA)),
+            uniformF(uniforms->pushF(r)),
+            uniformF(uniforms->pushF(g)),
+            uniformF(uniforms->pushF(b)),
+            uniformF(uniforms->pushF(a)),
         };
     }
 
diff --git a/src/core/SkVM.h b/src/core/SkVM.h
index b036462..ad53d46 100644
--- a/src/core/SkVM.h
+++ b/src/core/SkVM.h
@@ -646,9 +646,8 @@
         I32 uniform32(Arg ptr, int offset);
         F32 uniformF (Arg ptr, int offset) { return this->bit_cast(this->uniform32(ptr,offset)); }
 
-        // Load this color as a uniform, premultiplied and converted to dst SkColorSpace.
-        Color uniformPremul(SkColor4f, SkColorSpace* src,
-                            Uniforms*, SkColorSpace* dst);
+        // Push and load this color as a uniform.
+        Color uniformColor(SkColor4f, Uniforms*);
 
         // Gather u8,u16,i32 with varying element-count index from *(ptr + byte-count offset).
         I32 gather8 (Arg ptr, int offset, I32 index);
diff --git a/src/shaders/SkColorShader.cpp b/src/shaders/SkColorShader.cpp
index 169f9b8..53c0d43 100644
--- a/src/shaders/SkColorShader.cpp
+++ b/src/shaders/SkColorShader.cpp
@@ -97,8 +97,10 @@
                                      const SkMatrixProvider&, const SkMatrix* /*localM*/,
                                      SkFilterQuality /*quality*/, const SkColorInfo& dst,
                                      skvm::Uniforms* uniforms, SkArenaAlloc*) const {
-    return p->uniformPremul(SkColor4f::FromColor(fColor), sk_srgb_singleton(),
-                            uniforms, dst.colorSpace());
+    SkColor4f color = SkColor4f::FromColor(fColor);
+    SkColorSpaceXformSteps(sk_srgb_singleton(), kUnpremul_SkAlphaType,
+                              dst.colorSpace(),   kPremul_SkAlphaType).apply(color.vec());
+    return p->uniformColor(color, uniforms);
 }
 skvm::Color SkColor4Shader::onProgram(skvm::Builder* p,
                                       skvm::Coord /*device*/, skvm::Coord /*local*/,
@@ -106,8 +108,10 @@
                                       const SkMatrixProvider&, const SkMatrix* /*localM*/,
                                       SkFilterQuality /*quality*/, const SkColorInfo& dst,
                                       skvm::Uniforms* uniforms, SkArenaAlloc*) const {
-    return p->uniformPremul(fColor, fColorSpace.get(),
-                            uniforms, dst.colorSpace());
+    SkColor4f color = fColor;
+    SkColorSpaceXformSteps(fColorSpace.get(), kUnpremul_SkAlphaType,
+                            dst.colorSpace(),   kPremul_SkAlphaType).apply(color.vec());
+    return p->uniformColor(color, uniforms);
 }
 
 #if SK_SUPPORT_GPU