[ir][spirv-writer] Handle sign builtin
This maps to FSign or SSign, depending on the type.
Bug: tint:1906
Change-Id: Ibc9d659142f66879a033739782d0bb4560e712c8
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/142280
Reviewed-by: Dan Sinclair <dsinclair@chromium.org>
Kokoro: Kokoro <noreply+kokoro@google.com>
Commit-Queue: James Price <jrprice@google.com>
diff --git a/src/tint/lang/spirv/writer/generator_impl_ir.cc b/src/tint/lang/spirv/writer/generator_impl_ir.cc
index 2d7942b..60b4939 100644
--- a/src/tint/lang/spirv/writer/generator_impl_ir.cc
+++ b/src/tint/lang/spirv/writer/generator_impl_ir.cc
@@ -1316,6 +1316,13 @@
case builtin::Function::kRound:
glsl_ext_inst(GLSLstd450RoundEven);
break;
+ case builtin::Function::kSign:
+ if (result_ty->is_float_scalar_or_vector()) {
+ glsl_ext_inst(GLSLstd450FSign);
+ } else if (result_ty->is_signed_integer_scalar_or_vector()) {
+ glsl_ext_inst(GLSLstd450SSign);
+ }
+ break;
case builtin::Function::kSin:
glsl_ext_inst(GLSLstd450Sin);
break;
diff --git a/src/tint/lang/spirv/writer/generator_impl_ir_builtin_test.cc b/src/tint/lang/spirv/writer/generator_impl_ir_builtin_test.cc
index 561dd2a..a94331f 100644
--- a/src/tint/lang/spirv/writer/generator_impl_ir_builtin_test.cc
+++ b/src/tint/lang/spirv/writer/generator_impl_ir_builtin_test.cc
@@ -113,6 +113,9 @@
BuiltinTestCase{kU32, builtin::Function::kReverseBits, "OpBitReverse"},
BuiltinTestCase{kF32, builtin::Function::kRound, "RoundEven"},
BuiltinTestCase{kF16, builtin::Function::kRound, "RoundEven"},
+ BuiltinTestCase{kF32, builtin::Function::kSign, "FSign"},
+ BuiltinTestCase{kF16, builtin::Function::kSign, "FSign"},
+ BuiltinTestCase{kI32, builtin::Function::kSign, "SSign"},
BuiltinTestCase{kF32, builtin::Function::kSin, "Sin"},
BuiltinTestCase{kF16, builtin::Function::kSin, "Sin"},
BuiltinTestCase{kF32, builtin::Function::kSqrt, "Sqrt"},