Fix 4f gradient swizzle post http://crrev.com/1774523002

* store interval colors in pm4f-natural/RGBA order
* swizzle to dst order during interval advance

Also remove an unused Interval ctor.

R=reed@google.com
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1770153002

Review URL: https://codereview.chromium.org/1770153002
diff --git a/src/effects/gradients/Sk4fGradientBase.cpp b/src/effects/gradients/Sk4fGradientBase.cpp
index bd3c51a..76fb178 100644
--- a/src/effects/gradients/Sk4fGradientBase.cpp
+++ b/src/effects/gradients/Sk4fGradientBase.cpp
@@ -28,24 +28,14 @@
     , fZeroRamp(c0 == c1) {
     SkASSERT(p0 != p1);
 
-    const Sk4f c4f0 = SkNx_cast<float>(Sk4b::Load(&c0)) * componentScale;
-    const Sk4f c4f1 = SkNx_cast<float>(Sk4b::Load(&c1)) * componentScale;
+    const Sk4f c4f0 = SkPM4f::FromPMColor(c0).to4f() * componentScale;
+    const Sk4f c4f1 = SkPM4f::FromPMColor(c1).to4f() * componentScale;
     const Sk4f dc4f = (c4f1 - c4f0) / (p1 - p0);
 
     c4f0.store(&fC0.fVec);
     dc4f.store(&fDc.fVec);
 }
 
-SkGradientShaderBase::GradientShaderBase4fContext::
-Interval::Interval(const Sk4f& c0, const Sk4f& dc,
-                   SkScalar p0, SkScalar p1)
-    : fP0(p0)
-    , fP1(p1)
-    , fZeroRamp((dc == 0).allTrue()) {
-    c0.store(fC0.fVec);
-    dc.store(fDc.fVec);
-}
-
 bool SkGradientShaderBase::GradientShaderBase4fContext::
 Interval::contains(SkScalar fx) const {
     return in_range(fx, fP0, fP1);
diff --git a/src/effects/gradients/Sk4fGradientBase.h b/src/effects/gradients/Sk4fGradientBase.h
index 1e65308..1fece72 100644
--- a/src/effects/gradients/Sk4fGradientBase.h
+++ b/src/effects/gradients/Sk4fGradientBase.h
@@ -29,8 +29,6 @@
         Interval(SkPMColor c0, SkScalar p0,
                  SkPMColor c1, SkScalar p1,
                  const Sk4f& componentScale);
-        Interval(const Sk4f& c0, const Sk4f& dc,
-                 SkScalar p0, SkScalar p1);
 
         bool isZeroRamp() const { return fZeroRamp; }
 
diff --git a/src/effects/gradients/Sk4fLinearGradient.cpp b/src/effects/gradients/Sk4fLinearGradient.cpp
index 8478cb0..4a20a28 100644
--- a/src/effects/gradients/Sk4fLinearGradient.cpp
+++ b/src/effects/gradients/Sk4fLinearGradient.cpp
@@ -161,6 +161,19 @@
     return 255;
 }
 
+template<typename DstType>
+Sk4f dst_swizzle(const SkPM4f&);
+
+template<>
+Sk4f dst_swizzle<SkPM4f>(const SkPM4f& c) {
+    return c.to4f();
+}
+
+template<>
+Sk4f dst_swizzle<SkPMColor>(const SkPM4f& c) {
+    return c.to4f_pmorder();
+}
+
 SkPMColor pack_color(SkColor c, bool premul) {
     return premul
         ? SkPreMultiplyColor(c)
@@ -304,11 +317,10 @@
     SkASSERT(shader.fColorCount > 1);
     SkASSERT(shader.fOrigColors);
 
-    const float kInv255Float = 1.0f / 255;
-    const float paintAlpha = rec.fPaint->getAlpha() * kInv255Float;
+    const float paintAlpha = rec.fPaint->getAlpha() * (1.0f / 255);
     const Sk4f componentScale = fColorsArePremul
-        ? Sk4f(paintAlpha * kInv255Float)
-        : Sk4f(kInv255Float, kInv255Float, kInv255Float, paintAlpha * kInv255Float);
+        ? Sk4f(paintAlpha)
+        : Sk4f(1.0f, 1.0f, 1.0f, paintAlpha);
     const bool dx_is_pos = fDstToPos.getScaleX() >= 0;
     const int first_index = dx_is_pos ? 0 : shader.fColorCount - 1;
     const int last_index = shader.fColorCount - 1 - first_index;
@@ -562,8 +574,8 @@
 
 private:
     void compute_interval_props(SkScalar t) {
-        fDc   = Sk4f::Load(fInterval->fDc.fVec);
-        fCc   = Sk4f::Load(fInterval->fC0.fVec);
+        fDc   = dst_swizzle<DstType>(fInterval->fDc);
+        fCc   = dst_swizzle<DstType>(fInterval->fC0);
         fCc   = fCc + fDc * Sk4f(t);
         fCc   = fCc * fDstComponentScale;
         fDcDx = fDc * fDstComponentScale * Sk4f(fDx);