[ir][spirv-writer] Implement cross builtin
Bug: tint:1906
Change-Id: Ic96b584eec97b981975f9eec6c8b921e0c9c41f2
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/139980
Auto-Submit: James Price <jrprice@google.com>
Kokoro: James Price <jrprice@google.com>
Kokoro: Kokoro <noreply+kokoro@google.com>
Reviewed-by: Ben Clayton <bclayton@google.com>
Commit-Queue: James Price <jrprice@google.com>
diff --git a/src/tint/writer/spirv/ir/generator_impl_ir.cc b/src/tint/writer/spirv/ir/generator_impl_ir.cc
index d878ad8..c9ef217 100644
--- a/src/tint/writer/spirv/ir/generator_impl_ir.cc
+++ b/src/tint/writer/spirv/ir/generator_impl_ir.cc
@@ -1124,6 +1124,9 @@
case builtin::Function::kCosh:
glsl_ext_inst(GLSLstd450Cosh);
break;
+ case builtin::Function::kCross:
+ glsl_ext_inst(GLSLstd450Cross);
+ break;
case builtin::Function::kDistance:
glsl_ext_inst(GLSLstd450Distance);
break;
diff --git a/src/tint/writer/spirv/ir/generator_impl_ir_builtin_test.cc b/src/tint/writer/spirv/ir/generator_impl_ir_builtin_test.cc
index 1bbd315..cc72c6e 100644
--- a/src/tint/writer/spirv/ir/generator_impl_ir_builtin_test.cc
+++ b/src/tint/writer/spirv/ir/generator_impl_ir_builtin_test.cc
@@ -190,6 +190,21 @@
BuiltinTestCase{kI32, builtin::Function::kMin, "SMin"},
BuiltinTestCase{kU32, builtin::Function::kMin, "UMin"}));
+TEST_F(SpvGeneratorImplTest, Builtin_Cross_vec3f) {
+ auto* arg1 = b.FunctionParam("arg1", ty.vec3<f32>());
+ auto* arg2 = b.FunctionParam("arg2", ty.vec3<f32>());
+ auto* func = b.Function("foo", ty.vec3<f32>());
+ func->SetParams({arg1, arg2});
+ b.With(func->Block(), [&] {
+ auto* result = b.Call(ty.vec3<f32>(), builtin::Function::kCross, arg1, arg2);
+ b.Return(func, result);
+ mod.SetName(result, "result");
+ });
+
+ ASSERT_TRUE(Generate()) << Error() << output_;
+ EXPECT_INST("%result = OpExtInst %v3float %9 Cross %arg1 %arg2");
+}
+
TEST_F(SpvGeneratorImplTest, Builtin_Distance_vec2f) {
auto* arg1 = b.FunctionParam("arg1", MakeVectorType(kF32));
auto* arg2 = b.FunctionParam("arg2", MakeVectorType(kF32));