[hlsl] Emit `subgroupBallot` in HLSL IR
This CL adds support for the `subgroupBallot` intrinsic to the HLSL IR
backend.
Bug: 42251045
Change-Id: I27421f72dae65e3a62475e1dd4360fd0b9b75339
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/199174
Reviewed-by: James Price <jrprice@google.com>
Commit-Queue: dan sinclair <dsinclair@chromium.org>
diff --git a/src/tint/lang/hlsl/writer/builtin_test.cc b/src/tint/lang/hlsl/writer/builtin_test.cc
index abc1a5a..ffbec7f 100644
--- a/src/tint/lang/hlsl/writer/builtin_test.cc
+++ b/src/tint/lang/hlsl/writer/builtin_test.cc
@@ -1962,5 +1962,24 @@
)");
}
+TEST_F(HlslWriterTest, BuiltinSubgroupBallot) {
+ auto* func = b.Function("foo", ty.void_(), core::ir::Function::PipelineStage::kCompute);
+ func->SetWorkgroupSize(1, 1, 1);
+
+ b.Append(func->Block(), [&] {
+ b.Let("x", b.Call(ty.vec4<u32>(), core::BuiltinFn::kSubgroupBallot, true));
+ b.Return(func);
+ });
+
+ ASSERT_TRUE(Generate()) << err_ << output_.hlsl;
+ EXPECT_EQ(output_.hlsl, R"(
+[numthreads(1, 1, 1)]
+void foo() {
+ uint4 x = WaveActiveBallot(true);
+}
+
+)");
+}
+
} // namespace
} // namespace tint::hlsl::writer
diff --git a/src/tint/lang/hlsl/writer/printer/printer.cc b/src/tint/lang/hlsl/writer/printer/printer.cc
index d960fb5..b87a021 100644
--- a/src/tint/lang/hlsl/writer/printer/printer.cc
+++ b/src/tint/lang/hlsl/writer/printer/printer.cc
@@ -990,6 +990,9 @@
case core::BuiltinFn::kReverseBits: // uint
out << "reversebits";
break;
+ case core::BuiltinFn::kSubgroupBallot:
+ out << "WaveActiveBallot";
+ break;
case core::BuiltinFn::kSubgroupBroadcast:
out << "WaveReadLaneAt";
break;