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: