[msl] Make printer type tests produce valid MSL
Use parameters for types that cannot be declared at function scope,
and make the address spaces valid for the target types.
Bug: 42251016
Change-Id: I675bd3e4f0f253425b2977f2ae63894548849be7
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/187743
Reviewed-by: Ben Clayton <bclayton@google.com>
Commit-Queue: James Price <jrprice@google.com>
Reviewed-by: dan sinclair <dsinclair@chromium.org>
diff --git a/src/tint/lang/msl/writer/printer/type_test.cc b/src/tint/lang/msl/writer/printer/type_test.cc
index 13d6b06..0af7e7d 100644
--- a/src/tint/lang/msl/writer/printer/type_test.cc
+++ b/src/tint/lang/msl/writer/printer/type_test.cc
@@ -211,30 +211,30 @@
TEST_F(MslPrinterTest, EmitType_Atomic_U32) {
auto* func = b.Function("foo", ty.void_());
- b.Append(func->Block(), [&] {
- b.Var("a", ty.ptr(core::AddressSpace::kWorkgroup, ty.atomic<u32>()));
+ auto* param = b.FunctionParam("a", ty.ptr(core::AddressSpace::kWorkgroup, ty.atomic<u32>()));
+ func->SetParams({param});
+ b.Append(func->Block(), [&] { //
b.Return(func);
});
ASSERT_TRUE(Generate()) << err_ << output_;
EXPECT_EQ(output_, MetalHeader() + R"(
-void foo() {
- threadgroup atomic_uint a;
+void foo(threadgroup atomic_uint* const a) {
}
)");
}
TEST_F(MslPrinterTest, EmitType_Atomic_I32) {
auto* func = b.Function("foo", ty.void_());
- b.Append(func->Block(), [&] {
- b.Var("a", ty.ptr(core::AddressSpace::kWorkgroup, ty.atomic<i32>()));
+ auto* param = b.FunctionParam("a", ty.ptr(core::AddressSpace::kWorkgroup, ty.atomic<i32>()));
+ func->SetParams({param});
+ b.Append(func->Block(), [&] { //
b.Return(func);
});
ASSERT_TRUE(Generate()) << err_ << output_;
EXPECT_EQ(output_, MetalHeader() + R"(
-void foo() {
- threadgroup atomic_int a;
+void foo(threadgroup atomic_int* const a) {
}
)");
}
@@ -257,29 +257,28 @@
TEST_F(MslPrinterTest, EmitType_VectorPacked) {
auto* func = b.Function("foo", ty.void_());
b.Append(func->Block(), [&] {
- b.Var("a", ty.ptr(core::AddressSpace::kWorkgroup, ty.packed_vec(ty.f32(), 3)));
+ b.Var("a", ty.ptr(core::AddressSpace::kFunction, ty.packed_vec(ty.f32(), 3)));
b.Return(func);
});
ASSERT_TRUE(Generate()) << err_ << output_;
EXPECT_EQ(output_, MetalHeader() + R"(
void foo() {
- threadgroup packed_float3 a;
+ packed_float3 a = 0.0f;
}
)");
}
TEST_F(MslPrinterTest, EmitType_Void) {
+ // Tested via the function return type.
auto* func = b.Function("foo", ty.void_());
- b.Append(func->Block(), [&] {
- b.Var("a", ty.ptr(core::AddressSpace::kWorkgroup, ty.void_()));
+ b.Append(func->Block(), [&] { //
b.Return(func);
});
ASSERT_TRUE(Generate()) << err_ << output_;
EXPECT_EQ(output_, MetalHeader() + R"(
void foo() {
- threadgroup void a;
}
)");
}
@@ -912,30 +911,30 @@
TEST_F(MslPrinterTest, EmitType_Sampler) {
auto* func = b.Function("foo", ty.void_());
- b.Append(func->Block(), [&] {
- b.Var("a", ty.ptr(core::AddressSpace::kWorkgroup, ty.sampler()));
+ auto* param = b.FunctionParam("a", ty.sampler());
+ func->SetParams({param});
+ b.Append(func->Block(), [&] { //
b.Return(func);
});
ASSERT_TRUE(Generate()) << err_ << output_;
EXPECT_EQ(output_, MetalHeader() + R"(
-void foo() {
- threadgroup sampler a;
+void foo(sampler a) {
}
)");
}
TEST_F(MslPrinterTest, EmitType_SamplerComparison) {
auto* func = b.Function("foo", ty.void_());
- b.Append(func->Block(), [&] {
- b.Var("a", ty.ptr(core::AddressSpace::kWorkgroup, ty.comparison_sampler()));
+ auto* param = b.FunctionParam("a", ty.comparison_sampler());
+ func->SetParams({param});
+ b.Append(func->Block(), [&] { //
b.Return(func);
});
ASSERT_TRUE(Generate()) << err_ << output_;
EXPECT_EQ(output_, MetalHeader() + R"(
-void foo() {
- threadgroup sampler a;
+void foo(sampler a) {
}
)");
}
@@ -956,16 +955,16 @@
auto* t = ty.Get<core::type::DepthTexture>(params.dim);
auto* func = b.Function("foo", ty.void_());
- b.Append(func->Block(), [&] {
- b.Var("a", ty.ptr(core::AddressSpace::kWorkgroup, t));
+ auto* param = b.FunctionParam("a", t);
+ func->SetParams({param});
+ b.Append(func->Block(), [&] { //
b.Return(func);
});
ASSERT_TRUE(Generate()) << err_ << output_;
EXPECT_EQ(output_, MetalHeader() + R"(
-void foo() {
- threadgroup )" + params.result +
- R"( a;
+void foo()" + params.result +
+ R"( a) {
}
)");
}
@@ -981,18 +980,18 @@
MslDepthTextureData{core::type::TextureDimension::kCubeArray,
"depthcube_array<float, access::sample>"}));
-TEST_F(MslPrinterTest, EmiType_DepthMultisampledTexture) {
+TEST_F(MslPrinterTest, EmitType_DepthMultisampledTexture) {
auto* t = ty.Get<core::type::DepthMultisampledTexture>(core::type::TextureDimension::k2d);
auto* func = b.Function("foo", ty.void_());
- b.Append(func->Block(), [&] {
- b.Var("a", ty.ptr(core::AddressSpace::kWorkgroup, t));
+ auto* param = b.FunctionParam("a", t);
+ func->SetParams({param});
+ b.Append(func->Block(), [&] { //
b.Return(func);
});
ASSERT_TRUE(Generate()) << err_ << output_;
EXPECT_EQ(output_, MetalHeader() + R"(
-void foo() {
- threadgroup depth2d_ms<float, access::read> a;
+void foo(depth2d_ms<float, access::read> a) {
}
)");
}
@@ -1013,16 +1012,16 @@
auto* t = ty.Get<core::type::SampledTexture>(params.dim, ty.f32());
auto* func = b.Function("foo", ty.void_());
- b.Append(func->Block(), [&] {
- b.Var("a", ty.ptr(core::AddressSpace::kWorkgroup, t));
+ auto* param = b.FunctionParam("a", t);
+ func->SetParams({param});
+ b.Append(func->Block(), [&] { //
b.Return(func);
});
ASSERT_TRUE(Generate()) << err_ << output_;
EXPECT_EQ(output_, MetalHeader() + R"(
-void foo() {
- threadgroup )" + params.result +
- R"( a;
+void foo()" + params.result +
+ R"( a) {
}
)");
}
@@ -1039,18 +1038,18 @@
MslTextureData{core::type::TextureDimension::kCubeArray,
"texturecube_array<float, access::sample>"}));
-TEST_F(MslPrinterTest, Emit_TypeMultisampledTexture) {
+TEST_F(MslPrinterTest, EmitType_MultisampledTexture) {
auto* ms = ty.Get<core::type::MultisampledTexture>(core::type::TextureDimension::k2d, ty.u32());
auto* func = b.Function("foo", ty.void_());
- b.Append(func->Block(), [&] {
- b.Var("a", ty.ptr(core::AddressSpace::kWorkgroup, ms));
+ auto* param = b.FunctionParam("a", ms);
+ func->SetParams({param});
+ b.Append(func->Block(), [&] { //
b.Return(func);
});
ASSERT_TRUE(Generate()) << err_ << output_;
EXPECT_EQ(output_, MetalHeader() + R"(
-void foo() {
- threadgroup texture2d_ms<uint, access::read> a;
+void foo(texture2d_ms<uint, access::read> a) {
}
)");
}
@@ -1072,16 +1071,16 @@
auto s = ty.Get<core::type::StorageTexture>(params.dim, core::TexelFormat::kR32Float,
core::Access::kWrite, f32);
auto* func = b.Function("foo", ty.void_());
- b.Append(func->Block(), [&] {
- b.Var("a", ty.ptr(core::AddressSpace::kWorkgroup, s));
+ auto* param = b.FunctionParam("a", s);
+ func->SetParams({param});
+ b.Append(func->Block(), [&] { //
b.Return(func);
});
ASSERT_TRUE(Generate()) << err_ << output_;
EXPECT_EQ(output_, MetalHeader() + R"(
-void foo() {
- threadgroup )" + params.result +
- R"( a;
+void foo()" + params.result +
+ R"( a) {
}
)");
}