Revert "Plumb the full dst color info through color filters in SkVM"

This reverts commit 61c7888dfad8c1b9ddc127ac932d3d0199b2c10a.

Reason for revert: Unexpected gm diffs

Original change's description:
> Plumb the full dst color info through color filters in SkVM
>
> Used in https://skia-review.googlesource.com/c/skia/+/406296
> to evaluate shaders (as children of color filters) correctly.
>
> Change-Id: I2337b062da3fded9e61efe21c6cf74ef08a56753
> Reviewed-on: https://skia-review.googlesource.com/c/skia/+/416998
> Reviewed-by: Mike Reed <reed@google.com>
> Reviewed-by: Michael Ludwig <michaelludwig@google.com>
> Reviewed-by: Mike Klein <mtklein@google.com>
> Commit-Queue: Brian Osman <brianosman@google.com>

TBR=mtklein@google.com,brianosman@google.com,reed@google.com,michaelludwig@google.com

Change-Id: I234282de535017db64c46aba905e54f532596de9
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/417198
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
diff --git a/src/core/SkColorFilter.cpp b/src/core/SkColorFilter.cpp
index c76f42a..87f4f27 100644
--- a/src/core/SkColorFilter.cpp
+++ b/src/core/SkColorFilter.cpp
@@ -64,10 +64,10 @@
 }
 
 skvm::Color SkColorFilterBase::program(skvm::Builder* p, skvm::Color c,
-                                       const SkColorInfo& dst,
+                                       SkColorSpace* dstCS,
                                        skvm::Uniforms* uniforms, SkArenaAlloc* alloc) const {
     skvm::F32 original = c.a;
-    if ((c = this->onProgram(p,c, dst, uniforms,alloc))) {
+    if ((c = this->onProgram(p,c, dstCS, uniforms,alloc))) {
         if (this->isAlphaUnchanged()) {
             c.a = original;
         }
@@ -116,9 +116,8 @@
     skvm::Builder b;
     skvm::Uniforms uni(b.uniform(), 4);
     SkColor4f uniColor = {color.fR, color.fG, color.fB, color.fA};
-    SkColorInfo dstInfo = {kRGBA_F32_SkColorType, kPremul_SkAlphaType, sk_ref_sp(dstCS)};
     if (skvm::Color filtered =
-            as_CFB(this)->program(&b, b.uniformColor(uniColor, &uni), dstInfo, &uni, &alloc)) {
+            as_CFB(this)->program(&b, b.uniformColor(uniColor, &uni), dstCS, &uni, &alloc)) {
 
         b.store({skvm::PixelFormat::FLOAT, 32,32,32,32, 0,32,64,96},
                 b.varying<SkColor4f>(), filtered);
@@ -151,10 +150,10 @@
     }
 
     skvm::Color onProgram(skvm::Builder* p, skvm::Color c,
-                          const SkColorInfo& dst,
+                          SkColorSpace* dstCS,
                           skvm::Uniforms* uniforms, SkArenaAlloc* alloc) const override {
-               c = fInner->program(p, c, dst, uniforms, alloc);
-        return c ? fOuter->program(p, c, dst, uniforms, alloc) : skvm::Color{};
+               c = fInner->program(p, c, dstCS, uniforms, alloc);
+        return c ? fOuter->program(p, c, dstCS, uniforms, alloc) : skvm::Color{};
     }
 
 #if SK_SUPPORT_GPU
@@ -272,7 +271,7 @@
         return true;
     }
 
-    skvm::Color onProgram(skvm::Builder* p, skvm::Color c, const SkColorInfo& dst,
+    skvm::Color onProgram(skvm::Builder* p, skvm::Color c, SkColorSpace* dstCS,
                           skvm::Uniforms* uniforms, SkArenaAlloc* alloc) const override {
         return premul(fSteps.program(p, uniforms, unpremul(c)));
     }
@@ -365,19 +364,19 @@
 
     bool onAppendStages(const SkStageRec&, bool) const override { return false; }
 
-    skvm::Color onProgram(skvm::Builder* p, skvm::Color c, const SkColorInfo& rawDst,
+    skvm::Color onProgram(skvm::Builder* p, skvm::Color c, SkColorSpace* rawDstCS,
                           skvm::Uniforms* uniforms, SkArenaAlloc* alloc) const override {
-        sk_sp<SkColorSpace> dstCS = rawDst.refColorSpace();
+        sk_sp<SkColorSpace> dstCS = sk_ref_sp(rawDstCS);
         if (!dstCS) { dstCS = SkColorSpace::MakeSRGB(); }
 
         SkAlphaType workingAT;
         sk_sp<SkColorSpace> workingCS = this->workingFormat(dstCS, &workingAT);
 
-        SkColorInfo dst = {rawDst.colorType(), rawDst.alphaType(), dstCS},
-                working = {rawDst.colorType(), workingAT, workingCS};
+        SkColorInfo dst = {kUnknown_SkColorType, kPremul_SkAlphaType, dstCS},
+                working = {kUnknown_SkColorType, workingAT, workingCS};
 
         c = SkColorSpaceXformSteps{dst,working}.program(p, uniforms, c);
-        c = as_CFB(fChild)->program(p, c, working, uniforms, alloc);
+        c = as_CFB(fChild)->program(p, c, working.colorSpace(), uniforms, alloc);
         return c ? SkColorSpaceXformSteps{working,dst}.program(p, uniforms, c)
                  : c;
     }
diff --git a/src/core/SkColorFilterBase.h b/src/core/SkColorFilterBase.h
index 54916df..8257427 100644
--- a/src/core/SkColorFilterBase.h
+++ b/src/core/SkColorFilterBase.h
@@ -28,7 +28,7 @@
 
     SK_WARN_UNUSED_RESULT
     skvm::Color program(skvm::Builder*, skvm::Color,
-                        const SkColorInfo& dst, skvm::Uniforms*, SkArenaAlloc*) const;
+                        SkColorSpace* dstCS, skvm::Uniforms*, SkArenaAlloc*) const;
 
     /** Returns the flags for this filter. Override in subclasses to return custom flags.
     */
@@ -82,7 +82,7 @@
     virtual bool onAppendStages(const SkStageRec& rec, bool shaderIsOpaque) const = 0;
 
     virtual skvm::Color onProgram(skvm::Builder*, skvm::Color,
-                                  const SkColorInfo& dst, skvm::Uniforms*, SkArenaAlloc*) const = 0;
+                                  SkColorSpace* dstCS, skvm::Uniforms*, SkArenaAlloc*) const = 0;
 
     friend class SkColorFilter;
 
diff --git a/src/core/SkColorFilter_Matrix.cpp b/src/core/SkColorFilter_Matrix.cpp
index 53ec044..1f2d168 100644
--- a/src/core/SkColorFilter_Matrix.cpp
+++ b/src/core/SkColorFilter_Matrix.cpp
@@ -79,7 +79,7 @@
 
 
 skvm::Color SkColorFilter_Matrix::onProgram(skvm::Builder* p, skvm::Color c,
-                                            const SkColorInfo& /*dst*/,
+                                            SkColorSpace* /*dstCS*/,
                                             skvm::Uniforms* uniforms, SkArenaAlloc*) const {
     auto apply_matrix = [&](auto xyzw) {
         auto dot = [&](int j) {
diff --git a/src/core/SkColorFilter_Matrix.h b/src/core/SkColorFilter_Matrix.h
index 8f94503..762bf12 100644
--- a/src/core/SkColorFilter_Matrix.h
+++ b/src/core/SkColorFilter_Matrix.h
@@ -33,7 +33,7 @@
 
     bool onAppendStages(const SkStageRec& rec, bool shaderIsOpaque) const override;
     skvm::Color onProgram(skvm::Builder*, skvm::Color,
-                          const SkColorInfo& dst,
+                          SkColorSpace* dstCS,
                           skvm::Uniforms* uniforms, SkArenaAlloc*) const override;
 
     float   fMatrix[20];
diff --git a/src/core/SkModeColorFilter.cpp b/src/core/SkModeColorFilter.cpp
index f844e0a..5240984 100644
--- a/src/core/SkModeColorFilter.cpp
+++ b/src/core/SkModeColorFilter.cpp
@@ -71,11 +71,11 @@
 }
 
 skvm::Color SkModeColorFilter::onProgram(skvm::Builder* p, skvm::Color c,
-                                         const SkColorInfo& dstInfo,
+                                         SkColorSpace* dstCS,
                                          skvm::Uniforms* uniforms, SkArenaAlloc*) const {
     SkColor4f color = SkColor4f::FromColor(fColor);
-    SkColorSpaceXformSteps( sk_srgb_singleton(), kUnpremul_SkAlphaType,
-                           dstInfo.colorSpace(), kPremul_SkAlphaType).apply(color.vec());
+    SkColorSpaceXformSteps(sk_srgb_singleton(), kUnpremul_SkAlphaType,
+                                         dstCS,   kPremul_SkAlphaType).apply(color.vec());
     skvm::Color dst = c,
                 src = p->uniformColor(color, uniforms);
     return p->blend(fMode, src,dst);
diff --git a/src/core/SkModeColorFilter.h b/src/core/SkModeColorFilter.h
index c66f0b4..39acefb 100644
--- a/src/core/SkModeColorFilter.h
+++ b/src/core/SkModeColorFilter.h
@@ -33,7 +33,7 @@
 
     bool onAppendStages(const SkStageRec& rec, bool shaderIsOpaque) const override;
     skvm::Color onProgram(skvm::Builder*, skvm::Color,
-                          const SkColorInfo&, skvm::Uniforms*, SkArenaAlloc*) const override;
+                          SkColorSpace*, skvm::Uniforms*, SkArenaAlloc*) const override;
 
 private:
     SkColor     fColor;
diff --git a/src/core/SkRuntimeEffect.cpp b/src/core/SkRuntimeEffect.cpp
index 4f62435..3442a30 100644
--- a/src/core/SkRuntimeEffect.cpp
+++ b/src/core/SkRuntimeEffect.cpp
@@ -649,9 +649,9 @@
     }
 
     skvm::Color onProgram(skvm::Builder* p, skvm::Color c,
-                          const SkColorInfo& dst,
+                          SkColorSpace* dstCS,
                           skvm::Uniforms* uniforms, SkArenaAlloc* alloc) const override {
-        sk_sp<SkData> inputs = get_xformed_uniforms(fEffect.get(), fUniforms, dst.colorSpace());
+        sk_sp<SkData> inputs = get_xformed_uniforms(fEffect.get(), fUniforms, dstCS);
         SkASSERT(inputs);
 
         // There should be no way for the color filter to use device coords, but we need to supply
@@ -660,7 +660,7 @@
 
         auto sampleChild = [&](int ix, skvm::Coord /*coord*/, skvm::Color color) {
             if (fChildren[ix]) {
-                return as_CFB(fChildren[ix])->program(p, color, dst, uniforms, alloc);
+                return as_CFB(fChildren[ix])->program(p, color, dstCS, uniforms, alloc);
             } else {
                 return color;
             }
diff --git a/src/core/SkVMBlitter.cpp b/src/core/SkVMBlitter.cpp
index c7e5968..debec7c 100644
--- a/src/core/SkVMBlitter.cpp
+++ b/src/core/SkVMBlitter.cpp
@@ -324,7 +324,7 @@
 
     struct NoopColorFilter : public SkColorFilterBase {
         skvm::Color onProgram(skvm::Builder*, skvm::Color c,
-                              const SkColorInfo&, skvm::Uniforms*, SkArenaAlloc*) const override {
+                              SkColorSpace*, skvm::Uniforms*, SkArenaAlloc*) const override {
             return c;
         }
 
diff --git a/src/effects/SkTableColorFilter.cpp b/src/effects/SkTableColorFilter.cpp
index b222373..7fc5728 100644
--- a/src/effects/SkTableColorFilter.cpp
+++ b/src/effects/SkTableColorFilter.cpp
@@ -63,7 +63,7 @@
     }
 
     skvm::Color onProgram(skvm::Builder* p, skvm::Color c,
-                          const SkColorInfo& dst,
+                          SkColorSpace* dstCS,
                           skvm::Uniforms* uniforms, SkArenaAlloc*) const override {
 
         auto apply_table_to_component = [&](skvm::F32 c, const uint8_t* bytePtr) -> skvm::F32 {
diff --git a/src/shaders/SkColorFilterShader.cpp b/src/shaders/SkColorFilterShader.cpp
index 93e39c6..3ac83b25 100644
--- a/src/shaders/SkColorFilterShader.cpp
+++ b/src/shaders/SkColorFilterShader.cpp
@@ -84,7 +84,7 @@
     }
 
     // Finally run that through the color filter.
-    return fFilter->program(p,c, dst, uniforms,alloc);
+    return fFilter->program(p,c, dst.colorSpace(), uniforms,alloc);
 }
 
 #if SK_SUPPORT_GPU
diff --git a/src/utils/SkShadowUtils.cpp b/src/utils/SkShadowUtils.cpp
index 8593b0d..9e7aa70 100644
--- a/src/utils/SkShadowUtils.cpp
+++ b/src/utils/SkShadowUtils.cpp
@@ -59,7 +59,7 @@
         return true;
     }
 
-    skvm::Color onProgram(skvm::Builder* p, skvm::Color c, const SkColorInfo& dst, skvm::Uniforms*,
+    skvm::Color onProgram(skvm::Builder* p, skvm::Color c, SkColorSpace* dstCS, skvm::Uniforms*,
                           SkArenaAlloc*) const override {
         // x = 1 - x;
         // exp(-x * x * 4) - 0.018f;