GPU clear values: just 4 floats

We previously represented these as SkPMColor4f. However, upcoming
changes will add limited support for clearing/drawing to unpremul
dst. Just store the clear values as four floats without assigned
interpretation.

Also, noticed a bug by code inspection: we weren't accounting for
write view swizzle in GrRTC. Fixed and added gm to test.

Bug: skia:11019
Change-Id: I1bce1f6c97a156c0377ebad1b166eb641362b67a
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/340098
Reviewed-by: Michael Ludwig <michaelludwig@google.com>
Commit-Queue: Brian Salomon <bsalomon@google.com>
diff --git a/src/gpu/ops/GrClearOp.cpp b/src/gpu/ops/GrClearOp.cpp
index 8637b8f..946ae31 100644
--- a/src/gpu/ops/GrClearOp.cpp
+++ b/src/gpu/ops/GrClearOp.cpp
@@ -20,18 +20,24 @@
 
 GrOp::Owner GrClearOp::MakeColor(GrRecordingContext* context,
                                  const GrScissorState& scissor,
-                                 const SkPMColor4f& color) {
+                                 std::array<float, 4> color) {
     return GrOp::Make<GrClearOp>(context, Buffer::kColor, scissor, color, false);
 }
 
 GrOp::Owner GrClearOp::MakeStencilClip(GrRecordingContext* context,
                                        const GrScissorState& scissor,
                                        bool insideMask) {
-    return GrOp::Make<GrClearOp>(context, Buffer::kStencilClip, scissor, SkPMColor4f(), insideMask);
+    return GrOp::Make<GrClearOp>(context,
+                                 Buffer::kStencilClip,
+                                 scissor,
+                                 std::array<float, 4>(),
+                                 insideMask);
 }
 
-GrClearOp::GrClearOp(Buffer buffer, const GrScissorState& scissor,
-                     const SkPMColor4f& color, bool insideMask)
+GrClearOp::GrClearOp(Buffer buffer,
+                     const GrScissorState& scissor,
+                     std::array<float, 4> color,
+                     bool insideMask)
         : INHERITED(ClassID())
         , fScissor(scissor)
         , fColor(color)
diff --git a/src/gpu/ops/GrClearOp.h b/src/gpu/ops/GrClearOp.h
index 61ae9fe..5856e8a 100644
--- a/src/gpu/ops/GrClearOp.h
+++ b/src/gpu/ops/GrClearOp.h
@@ -22,7 +22,7 @@
     // A fullscreen or scissored clear, depending on the clip and proxy dimensions
     static GrOp::Owner MakeColor(GrRecordingContext* context,
                                  const GrScissorState& scissor,
-                                 const SkPMColor4f& color);
+                                 std::array<float, 4> color);
 
     static GrOp::Owner MakeStencilClip(GrRecordingContext* context,
                                        const GrScissorState& scissor,
@@ -41,7 +41,10 @@
     };
     GR_DECL_BITFIELD_CLASS_OPS_FRIENDS(Buffer);
 
-    GrClearOp(Buffer buffer, const GrScissorState& scissor, const SkPMColor4f& color, bool stencil);
+    GrClearOp(Buffer buffer,
+              const GrScissorState& scissor,
+              std::array<float, 4> color,
+              bool stencil);
 
     CombineResult onCombineIfPossible(GrOp* t, SkArenaAlloc*, const GrCaps& caps) override;
 
@@ -61,15 +64,15 @@
         } else {
             string.append("disabled");
         }
-        string.appendf("], Color: 0x%08x\n", fColor.toBytes_RGBA());
+        string.appendf("], Color: {%g, %g, %g, %g}\n", fColor[0], fColor[1], fColor[2], fColor[3]);
         return string;
     }
 #endif
 
-    GrScissorState fScissor;
-    SkPMColor4f    fColor;
-    bool           fStencilInsideMask;
-    Buffer         fBuffer;
+    GrScissorState       fScissor;
+    std::array<float, 4> fColor;
+    bool                 fStencilInsideMask;
+    Buffer               fBuffer;
 
     using INHERITED = GrOp;
 };