Import Tint changes from Dawn
Manual fixes:
* Add build_with_angle to build_overrides
Changes:
- d32858a3045a89e8c5ff919107ee76c8b103afdf Use Chromium's abseil build files when building in ANGLE by Geoff Lang <geofflang@chromium.org>
- 81f462abd508c64f57bae402547e41aee79eb682 [msl] Make printer type tests produce valid MSL by James Price <jrprice@google.com>
- 08f33fe5c6daea5cede4c1a5ac891fd3bf975c31 [tint][ast] Fix ClampFragDepth fuzzer by Ben Clayton <bclayton@google.com>
GitOrigin-RevId: d32858a3045a89e8c5ff919107ee76c8b103afdf
Change-Id: I8dce8a336e4dffe52f8d19f411e3bb3bf190f357
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/187880
Kokoro: Kokoro <noreply+kokoro@google.com>
Reviewed-by: David Neto <dneto@google.com>
Commit-Queue: David Neto <dneto@google.com>
diff --git a/build_overrides/dawn.gni b/build_overrides/dawn.gni
index b34d77f..dbf5451 100644
--- a/build_overrides/dawn.gni
+++ b/build_overrides/dawn.gni
@@ -23,6 +23,9 @@
# True if Dawn can access build/, testing/ and other Chrome folders.
dawn_has_build = true
+# True if building within an ANGLE checkout
+build_with_angle = false
+
# Defaults for these are set again in dawn_overrides_with_defaults.gni so that
# users of Dawn don't have to set dirs if they happen to use the same as Dawn.
diff --git a/src/tint/BUILD.gn b/src/tint/BUILD.gn
index 30d21d4..f17d0f3 100644
--- a/src/tint/BUILD.gn
+++ b/src/tint/BUILD.gn
@@ -242,10 +242,10 @@
}
group("abseil") {
- # When build_with_chromium=true we need to include "//third_party/abseil-cpp:absl" while
+ # When building within Chromium or ANGLE we need to include "//third_party/abseil-cpp:absl" while
# it's beneficial to be more specific with standalone Dawn, especially when it comes to
# including it as a dependency in other projects (such as Skia).
- if (build_with_chromium) {
+ if (build_with_chromium || build_with_angle) {
public_deps = [ "$dawn_abseil_dir:absl" ]
} else {
public_deps = [ "${dawn_root}/third_party/gn/abseil-cpp:strings" ]
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) {
}
)");
}
diff --git a/src/tint/lang/wgsl/ast/transform/clamp_frag_depth_fuzz.cc b/src/tint/lang/wgsl/ast/transform/clamp_frag_depth_fuzz.cc
index 6de6553..7b75d69 100644
--- a/src/tint/lang/wgsl/ast/transform/clamp_frag_depth_fuzz.cc
+++ b/src/tint/lang/wgsl/ast/transform/clamp_frag_depth_fuzz.cc
@@ -33,8 +33,13 @@
namespace {
bool CanRun(const ClampFragDepth::Config& config) {
- if (config.offsets && config.offsets->min >= config.offsets->max) {
- return false; // member offset collision / non-ascending
+ if (config.offsets) {
+ if (config.offsets->min >= config.offsets->max) {
+ return false; // member offset collision / non-ascending
+ }
+ if ((config.offsets->min & 3) != 0 || (config.offsets->max & 3) != 0) {
+ return false; // Offsets need 4-byte alignment.
+ }
}
return true;
}