[spirv-reader][ir] Add support for `OpAny`.
Converts an `OpAny` instruction to an WGSL `any`.
Bug: 391485882
Change-Id: Ic328b5bbbffcb3887899d836927f4b207c6b8f62
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/225836
Reviewed-by: James Price <jrprice@google.com>
Commit-Queue: dan sinclair <dsinclair@chromium.org>
diff --git a/src/tint/lang/spirv/reader/parser/builtin_test.cc b/src/tint/lang/spirv/reader/parser/builtin_test.cc
index f3f38cd..588eed3 100644
--- a/src/tint/lang/spirv/reader/parser/builtin_test.cc
+++ b/src/tint/lang/spirv/reader/parser/builtin_test.cc
@@ -1293,5 +1293,34 @@
)");
}
+TEST_F(SpirvParserTest, Any) {
+ EXPECT_IR(R"(
+ OpCapability Shader
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %main "main"
+ OpExecutionMode %main LocalSize 1 1 1
+ %void = OpTypeVoid
+ %bool = OpTypeBool
+ %v2bool = OpTypeVector %bool 2
+ %true = OpConstantTrue %bool
+ %false = OpConstantFalse %bool
+ %v2bool_true_false = OpConstantComposite %v2bool %true %false
+ %ep_type = OpTypeFunction %void
+ %main = OpFunction %void None %ep_type
+ %entry = OpLabel
+ %1 = OpAny %bool %v2bool_true_false
+ OpReturn
+ OpFunctionEnd
+)",
+ R"(
+%main = @compute @workgroup_size(1u, 1u, 1u) func():void {
+ $B1: {
+ %2:bool = any vec2<bool>(true, false)
+ ret
+ }
+}
+)");
+}
+
} // namespace
} // namespace tint::spirv::reader
diff --git a/src/tint/lang/spirv/reader/parser/parser.cc b/src/tint/lang/spirv/reader/parser/parser.cc
index 13b4813..5151fbd 100644
--- a/src/tint/lang/spirv/reader/parser/parser.cc
+++ b/src/tint/lang/spirv/reader/parser/parser.cc
@@ -643,6 +643,9 @@
case spv::Op::OpAll:
EmitBuiltinCall(inst, core::BuiltinFn::kAll);
break;
+ case spv::Op::OpAny:
+ EmitBuiltinCall(inst, core::BuiltinFn::kAny);
+ break;
default:
TINT_UNIMPLEMENTED()
<< "unhandled SPIR-V instruction: " << static_cast<uint32_t>(inst.opcode());