Add Metal support for degrees() and radians() intrinsics.
Change-Id: I4a483c455c9a12c92b717a0c2713d32ab44dcd6f
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/343099
Commit-Queue: John Stiles <johnstiles@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
diff --git a/src/sksl/SkSLMetalCodeGenerator.cpp b/src/sksl/SkSLMetalCodeGenerator.cpp
index 8bf4587..9a79e76 100644
--- a/src/sksl/SkSLMetalCodeGenerator.cpp
+++ b/src/sksl/SkSLMetalCodeGenerator.cpp
@@ -45,11 +45,13 @@
fIntrinsicMap[String("floatBitsToUint")] = SPECIAL(Bitcast);
fIntrinsicMap[String("intBitsToFloat")] = SPECIAL(Bitcast);
fIntrinsicMap[String("uintBitsToFloat")] = SPECIAL(Bitcast);
+ fIntrinsicMap[String("degrees")] = SPECIAL(Degrees);
fIntrinsicMap[String("distance")] = SPECIAL(Distance);
fIntrinsicMap[String("dot")] = SPECIAL(Dot);
fIntrinsicMap[String("length")] = SPECIAL(Length);
fIntrinsicMap[String("mod")] = SPECIAL(Mod);
fIntrinsicMap[String("normalize")] = SPECIAL(Normalize);
+ fIntrinsicMap[String("radians")] = SPECIAL(Radians);
fIntrinsicMap[String("sample")] = SPECIAL(Texture);
fIntrinsicMap[String("equal")] = METAL(Equal);
fIntrinsicMap[String("notEqual")] = METAL(NotEqual);
@@ -636,6 +638,18 @@
this->write(")");
break;
}
+ case kDegrees_SpecialIntrinsic: {
+ this->write("((");
+ this->writeExpression(*arguments[0], kSequence_Precedence);
+ this->write(") * 57.2957795)");
+ break;
+ }
+ case kRadians_SpecialIntrinsic: {
+ this->write("((");
+ this->writeExpression(*arguments[0], kSequence_Precedence);
+ this->write(") * 0.0174532925)");
+ break;
+ }
default:
ABORT("unsupported special intrinsic kind");
}