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; }