Add SkPMColor4f support to SkSL

Convert GrConstColorProcessor to store SkPMColor4f

Bug: skia:
Change-Id: I6c505856653a02e576ae11fca59dc307545437f7
Reviewed-on: https://skia-review.googlesource.com/c/159152
Reviewed-by: Mike Klein <mtklein@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
diff --git a/src/sksl/SkSLCPPCodeGenerator.cpp b/src/sksl/SkSLCPPCodeGenerator.cpp
index 1a14cba..5882104 100644
--- a/src/sksl/SkSLCPPCodeGenerator.cpp
+++ b/src/sksl/SkSLCPPCodeGenerator.cpp
@@ -134,6 +134,8 @@
 static String default_value(const Variable& var) {
     if (var.fModifiers.fLayout.fCType == SkSL::Layout::CType::kGrColor4f) {
         return "GrColor4f::kIllegalConstructor";
+    } else if (var.fModifiers.fLayout.fCType == SkSL::Layout::CType::kSkPMColor4f) {
+        return "{SK_FloatNaN, SK_FloatNaN, SK_FloatNaN, SK_FloatNaN}";
     }
     return default_value(var.fType);
 }
@@ -181,6 +183,12 @@
                 fFormatArgs.push_back(cppCode + ".fRGBA[2]");
                 fFormatArgs.push_back(cppCode + ".fRGBA[3]");
                 break;
+            case Layout::CType::kSkPMColor4f:
+                fFormatArgs.push_back(cppCode + ".fR");
+                fFormatArgs.push_back(cppCode + ".fG");
+                fFormatArgs.push_back(cppCode + ".fB");
+                fFormatArgs.push_back(cppCode + ".fA");
+                break;
             case Layout::CType::kSkRect: // fall through
             case Layout::CType::kDefault:
                 fFormatArgs.push_back(cppCode + ".left()");
diff --git a/src/sksl/SkSLCPPUniformCTypes.cpp b/src/sksl/SkSLCPPUniformCTypes.cpp
index f48b9f9..0ff556c 100644
--- a/src/sksl/SkSLCPPUniformCTypes.cpp
+++ b/src/sksl/SkSLCPPUniformCTypes.cpp
@@ -161,6 +161,10 @@
         "${pdman}.set4fv(${uniform}, 1, ${var}.fRGBA)",                            // to gpu
         "GrColor4f::kIllegalConstructor"),                                         // default value
 
+    REGISTER(Layout::CType::kSkPMColor4f, { "half4", "float4", "double4" },
+        "${pdman}.set4fv(${uniform}, 1, ${var}.vec())",                            // to gpu
+        "{SK_FloatNaN, SK_FloatNaN, SK_FloatNaN, SK_FloatNaN}"),                   // default value
+
     REGISTER(Layout::CType::kSkPoint, { "half2", "float2", "double2" } ,
         "${pdman}.set2f(${uniform}, ${var}.fX, ${var}.fY)",                        // to gpu
         "SkPoint::Make(SK_FloatNaN, SK_FloatNaN)"),                                // default value
diff --git a/src/sksl/SkSLParser.cpp b/src/sksl/SkSLParser.cpp
index 412a09e..91f2168 100644
--- a/src/sksl/SkSLParser.cpp
+++ b/src/sksl/SkSLParser.cpp
@@ -122,6 +122,7 @@
     TOKEN(TRACKED,                      "tracked");
     TOKEN(CTYPE,                        "ctype");
     TOKEN(GRCOLOR4F,                    "GrColor4f");
+    TOKEN(SKPMCOLOR4F,                  "SkPMColor4f");
     TOKEN(SKRECT,                       "SkRect");
     TOKEN(SKIRECT,                      "SkIRect");
     TOKEN(SKPMCOLOR,                    "SkPMColor");
@@ -730,6 +731,8 @@
             switch (found->second) {
                 case LayoutToken::GRCOLOR4F:
                     return Layout::CType::kGrColor4f;
+                case LayoutToken::SKPMCOLOR4F:
+                    return Layout::CType::kSkPMColor4f;
                 case LayoutToken::SKRECT:
                     return Layout::CType::kSkRect;
                 case LayoutToken::SKIRECT:
diff --git a/src/sksl/SkSLParser.h b/src/sksl/SkSLParser.h
index febc6bb..33bc10f 100644
--- a/src/sksl/SkSLParser.h
+++ b/src/sksl/SkSLParser.h
@@ -92,6 +92,7 @@
         TRACKED,
         CTYPE,
         GRCOLOR4F,
+        SKPMCOLOR4F,
         SKRECT,
         SKIRECT,
         SKPMCOLOR,
diff --git a/src/sksl/ir/SkSLLayout.h b/src/sksl/ir/SkSLLayout.h
index 38295ce..29024e7 100644
--- a/src/sksl/ir/SkSLLayout.h
+++ b/src/sksl/ir/SkSLLayout.h
@@ -83,6 +83,7 @@
         kSkRect,
         kSkIRect,
         kGrColor4f,
+        kSkPMColor4f,
         kSkPMColor,
         kSkPoint,
         kSkIPoint,
@@ -150,6 +151,8 @@
                 return "SkIRect";
             case CType::kGrColor4f:
                 return "GrColor4f";
+            case CType::kSkPMColor4f:
+                return "SkPMColor4f";
             case CType::kSkPMColor:
                 return "SkPMColor";
             case CType::kSkPoint: