[tint] Remove relaxed uniform layout extension
This was an internal extension used by the old MSL backend to avoid
some WGSL validation rules.
Change-Id: I9926e3851e754540d6161e3bd5ffbace74a0a632
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/236079
Reviewed-by: dan sinclair <dsinclair@chromium.org>
diff --git a/src/tint/cmd/bench/extension_bench.cc b/src/tint/cmd/bench/extension_bench.cc
index e6d1256..ed317c7 100644
--- a/src/tint/cmd/bench/extension_bench.cc
+++ b/src/tint/cmd/bench/extension_bench.cc
@@ -94,41 +94,34 @@
"chromium_internal_input_aNNtachents",
"chromium_internalinpt_attavvhments",
"chromium_internal_inut_attacQQments",
- "chromirm_intenal_rfflaxed_unifrm_layout",
- "chromium_internal_jelaxed_uniform_layout",
- "chromium_interna_relNNxed_uwwiform_lay82t",
- "chromium_internal_relaxed_uniform_layout",
- "chromium_internal_relaxed_uniform_layut",
- "chromium_internal_relaxed_rrniform_layout",
- "chromium_internal_relaxedGuniform_layout",
- "clip_distanceFF",
- "cEipdtances",
- "cli_rristances",
+ "clip_drstffcs",
+ "clip_distancjs",
+ "clip_istNNwnce8",
"clip_distances",
- "lip_distanes",
- "DXp_diJJtances",
- "cl8pdistane",
- "dul_okrc_blen11ing",
- "dua_source_blending",
- "duJl_source_blendig",
+ "cli_distances",
+ "clip_disrrances",
+ "clip_diGtances",
+ "dual_source_blendFFng",
+ "dEl_surce_bending",
+ "drra_source_blending",
"dual_source_blending",
- "dual_source_clending",
- "dual_sOurce_blending",
- "dualKKs__urce_blttvnding",
- "xx8",
- "__F",
- "f1q",
+ "dual_suce_blending",
+ "dul_DoXrcJJ_blending",
+ "dul_source_lening",
+ "k",
+ "16",
+ "J1",
"f16",
- "331O",
- "ftt6QQ",
- "666",
- "zzxbO6rops",
- "subgyyoups",
- "HHugroZs",
+ "c16",
+ "fO6",
+ "_KKttvv",
+ "xubgro5p8",
+ "suFq__ups",
+ "sqqgroups",
"subgroups",
- "sWW44roupq",
- "sOObgoups",
- "sbgroYps",
+ "subgr6u33O",
+ "s96grQttupoo",
+ "sugro66ps",
};
for (auto _ : state) {
for (auto* str : kStrings) {
diff --git a/src/tint/cmd/fuzz/wgsl/dictionary.txt b/src/tint/cmd/fuzz/wgsl/dictionary.txt
index 52dc5c8..85d3eef 100644
--- a/src/tint/cmd/fuzz/wgsl/dictionary.txt
+++ b/src/tint/cmd/fuzz/wgsl/dictionary.txt
@@ -166,7 +166,6 @@
"chromium_experimental_subgroup_matrix"
"chromium_internal_graphite"
"chromium_internal_input_attachments"
-"chromium_internal_relaxed_uniform_layout"
"chromium_testing_experimental"
"chromium_testing_shipped"
"chromium_testing_shipped_with_killswitch"
diff --git a/src/tint/lang/hlsl/writer/ast_printer/ast_printer_test.cc b/src/tint/lang/hlsl/writer/ast_printer/ast_printer_test.cc
index 5cdda5b..faa95bf 100644
--- a/src/tint/lang/hlsl/writer/ast_printer/ast_printer_test.cc
+++ b/src/tint/lang/hlsl/writer/ast_printer/ast_printer_test.cc
@@ -45,14 +45,14 @@
}
TEST_F(HlslASTPrinterTest, UnsupportedExtension) {
- Enable(Source{{12, 34}}, wgsl::Extension::kChromiumInternalRelaxedUniformLayout);
+ Enable(Source{{12, 34}}, wgsl::Extension::kChromiumExperimentalFramebufferFetch);
ASTPrinter& gen = Build();
ASSERT_FALSE(gen.Generate());
EXPECT_EQ(
gen.Diagnostics().Str(),
- R"(12:34 error: HLSL backend does not support extension 'chromium_internal_relaxed_uniform_layout')");
+ R"(12:34 error: HLSL backend does not support extension 'chromium_experimental_framebuffer_fetch')");
}
TEST_F(HlslASTPrinterTest, RequiresDirective) {
diff --git a/src/tint/lang/wgsl/extension.cc b/src/tint/lang/wgsl/extension.cc
index 5be4fff..06c9696 100644
--- a/src/tint/lang/wgsl/extension.cc
+++ b/src/tint/lang/wgsl/extension.cc
@@ -63,9 +63,6 @@
if (str == "chromium_internal_input_attachments") {
return Extension::kChromiumInternalInputAttachments;
}
- if (str == "chromium_internal_relaxed_uniform_layout") {
- return Extension::kChromiumInternalRelaxedUniformLayout;
- }
if (str == "clip_distances") {
return Extension::kClipDistances;
}
@@ -99,8 +96,6 @@
return "chromium_internal_graphite";
case Extension::kChromiumInternalInputAttachments:
return "chromium_internal_input_attachments";
- case Extension::kChromiumInternalRelaxedUniformLayout:
- return "chromium_internal_relaxed_uniform_layout";
case Extension::kClipDistances:
return "clip_distances";
case Extension::kDualSourceBlending:
diff --git a/src/tint/lang/wgsl/extension.h b/src/tint/lang/wgsl/extension.h
index 34c0d26..46f6d3c 100644
--- a/src/tint/lang/wgsl/extension.h
+++ b/src/tint/lang/wgsl/extension.h
@@ -53,7 +53,6 @@
kChromiumExperimentalSubgroupMatrix,
kChromiumInternalGraphite,
kChromiumInternalInputAttachments,
- kChromiumInternalRelaxedUniformLayout,
kClipDistances,
kDualSourceBlending,
kF16,
@@ -85,7 +84,6 @@
"chromium_experimental_subgroup_matrix",
"chromium_internal_graphite",
"chromium_internal_input_attachments",
- "chromium_internal_relaxed_uniform_layout",
"clip_distances",
"dual_source_blending",
"f16",
@@ -101,7 +99,6 @@
Extension::kChromiumExperimentalSubgroupMatrix,
Extension::kChromiumInternalGraphite,
Extension::kChromiumInternalInputAttachments,
- Extension::kChromiumInternalRelaxedUniformLayout,
Extension::kClipDistances,
Extension::kDualSourceBlending,
Extension::kF16,
diff --git a/src/tint/lang/wgsl/extension_test.cc b/src/tint/lang/wgsl/extension_test.cc
index 3a8ff30..9434d4f 100644
--- a/src/tint/lang/wgsl/extension_test.cc
+++ b/src/tint/lang/wgsl/extension_test.cc
@@ -64,7 +64,6 @@
{"chromium_experimental_subgroup_matrix", Extension::kChromiumExperimentalSubgroupMatrix},
{"chromium_internal_graphite", Extension::kChromiumInternalGraphite},
{"chromium_internal_input_attachments", Extension::kChromiumInternalInputAttachments},
- {"chromium_internal_relaxed_uniform_layout", Extension::kChromiumInternalRelaxedUniformLayout},
{"clip_distances", Extension::kClipDistances},
{"dual_source_blending", Extension::kDualSourceBlending},
{"f16", Extension::kF16},
@@ -93,21 +92,18 @@
{"c44romium_internal_input_attachments", Extension::kUndefined},
{"chromium_internal_inputSSaVVtachments", Extension::kUndefined},
{"chrom22Rm_internal_input_atRchments", Extension::kUndefined},
- {"chromium_int9rnal_relaxed_Fnifor_layout", Extension::kUndefined},
- {"chrmium_internal_relaxed_uniform_layout", Extension::kUndefined},
- {"VRhHomium_internal_relaxd_uniform_OOayout", Extension::kUndefined},
- {"clip_distyces", Extension::kUndefined},
- {"clipGlr77inntances", Extension::kUndefined},
- {"clip_d04stances", Extension::kUndefined},
- {"dua_ource_bledoong", Extension::kUndefined},
- {"dualsorce_blendzzng", Extension::kUndefined},
- {"ua_sopiirce_bl11nding", Extension::kUndefined},
- {"f1XX", Extension::kUndefined},
- {"55199II", Extension::kUndefined},
- {"frSSHHa", Extension::kUndefined},
- {"kkbHups", Extension::kUndefined},
- {"jggoupRR", Extension::kUndefined},
- {"sugoupb", Extension::kUndefined},
+ {"clFp_disanc9s", Extension::kUndefined},
+ {"cli_distances", Extension::kUndefined},
+ {"clRR_diVtOOHces", Extension::kUndefined},
+ {"dual_souyce_bleding", Extension::kUndefined},
+ {"dualrrllnource_blendiG77", Extension::kUndefined},
+ {"dual00source_ble4ding", Extension::kUndefined},
+ {"5", Extension::kUndefined},
+ {"u16", Extension::kUndefined},
+ {"f", Extension::kUndefined},
+ {"skkkgroups", Extension::kUndefined},
+ {"siibgrop", Extension::kUndefined},
+ {"subgroupXX", Extension::kUndefined},
};
using ExtensionParseTest = testing::TestWithParam<Case>;
diff --git a/src/tint/lang/wgsl/reader/parser/enable_directive_test.cc b/src/tint/lang/wgsl/reader/parser/enable_directive_test.cc
index 8d6709a..5c72205 100644
--- a/src/tint/lang/wgsl/reader/parser/enable_directive_test.cc
+++ b/src/tint/lang/wgsl/reader/parser/enable_directive_test.cc
@@ -203,7 +203,7 @@
// Error when unknown extension found
EXPECT_TRUE(p->has_error());
EXPECT_EQ(p->error(), R"(1:8: expected extension
-Possible values: 'chromium_disable_uniformity_analysis', 'chromium_experimental_framebuffer_fetch', 'chromium_experimental_pixel_local', 'chromium_experimental_push_constant', 'chromium_experimental_subgroup_matrix', 'chromium_internal_graphite', 'chromium_internal_input_attachments', 'chromium_internal_relaxed_uniform_layout', 'clip_distances', 'dual_source_blending', 'f16', 'subgroups')");
+Possible values: 'chromium_disable_uniformity_analysis', 'chromium_experimental_framebuffer_fetch', 'chromium_experimental_pixel_local', 'chromium_experimental_push_constant', 'chromium_experimental_subgroup_matrix', 'chromium_internal_graphite', 'chromium_internal_input_attachments', 'clip_distances', 'dual_source_blending', 'f16', 'subgroups')");
auto program = p->program();
auto& ast = program.AST();
EXPECT_EQ(ast.Enables().Length(), 0u);
diff --git a/src/tint/lang/wgsl/reader/reader.cc b/src/tint/lang/wgsl/reader/reader.cc
index 0d2e72b..df8c363 100644
--- a/src/tint/lang/wgsl/reader/reader.cc
+++ b/src/tint/lang/wgsl/reader/reader.cc
@@ -72,7 +72,6 @@
for (auto ext : enable->extensions) {
switch (ext->name) {
case tint::wgsl::Extension::kChromiumExperimentalFramebufferFetch:
- case tint::wgsl::Extension::kChromiumInternalRelaxedUniformLayout:
return true;
default:
break;
diff --git a/src/tint/lang/wgsl/resolver/address_space_layout_validation_test.cc b/src/tint/lang/wgsl/resolver/address_space_layout_validation_test.cc
index 6ef150c..ccd1116 100644
--- a/src/tint/lang/wgsl/resolver/address_space_layout_validation_test.cc
+++ b/src/tint/lang/wgsl/resolver/address_space_layout_validation_test.cc
@@ -597,139 +597,6 @@
ASSERT_TRUE(r()->Resolve()) << r()->error();
}
-TEST_F(ResolverAddressSpaceLayoutValidationTest, RelaxedUniformLayout_StructMemberOffset_Struct) {
- // enable chromium_internal_relaxed_uniform_layout;
- //
- // struct Inner {
- // scalar : i32;
- // };
- //
- // struct Outer {
- // scalar : f32;
- // inner : Inner;
- // };
- //
- // @group(0) @binding(0)
- // var<uniform> a : Outer;
-
- Enable(wgsl::Extension::kChromiumInternalRelaxedUniformLayout);
-
- Structure("Inner", Vector{
- Member("scalar", ty.i32()),
- });
-
- Structure("Outer", Vector{
- Member("scalar", ty.f32()),
- Member("inner", ty("Inner")),
- });
-
- GlobalVar("a", ty("Outer"), core::AddressSpace::kUniform, Group(0_a), Binding(0_a));
-
- EXPECT_TRUE(r()->Resolve()) << r()->error();
-}
-
-TEST_F(ResolverAddressSpaceLayoutValidationTest, RelaxedUniformLayout_StructMemberOffset_Array) {
- // enable chromium_internal_relaxed_uniform_layout;
- //
- // type Inner = @stride(16) array<f32, 10u>;
- //
- // struct Outer {
- // scalar : f32;
- // inner : Inner;
- // };
- //
- // @group(0) @binding(0)
- // var<uniform> a : Outer;
-
- Enable(wgsl::Extension::kChromiumInternalRelaxedUniformLayout);
-
- Alias("Inner", ty.array<f32, 10>(Vector{Stride(16)}));
-
- Structure("Outer", Vector{
- Member("scalar", ty.f32()),
- Member("inner", ty("Inner")),
- });
-
- GlobalVar("a", ty("Outer"), core::AddressSpace::kUniform, Group(0_a), Binding(0_a));
-
- EXPECT_TRUE(r()->Resolve()) << r()->error();
-}
-
-TEST_F(ResolverAddressSpaceLayoutValidationTest, RelaxedUniformLayout_MemberOffsetNotMutipleOf16) {
- // enable chromium_internal_relaxed_uniform_layout;
- //
- // struct Inner {
- // @align(4) @size(5) scalar : i32;
- // };
- //
- // struct Outer {
- // inner : Inner;
- // scalar : i32;
- // };
- //
- // @group(0) @binding(0)
- // var<uniform> a : Outer;
-
- Enable(wgsl::Extension::kChromiumInternalRelaxedUniformLayout);
-
- Structure("Inner", Vector{
- Member("scalar", ty.i32(), Vector{MemberAlign(4_i), MemberSize(5_a)}),
- });
-
- Structure("Outer", Vector{
- Member("inner", ty("Inner")),
- Member("scalar", ty.i32()),
- });
-
- GlobalVar("a", ty("Outer"), core::AddressSpace::kUniform, Group(0_a), Binding(0_a));
-
- EXPECT_TRUE(r()->Resolve()) << r()->error();
-}
-
-TEST_F(ResolverAddressSpaceLayoutValidationTest, RelaxedUniformLayout_ArrayStride_Scalar) {
- // enable chromium_internal_relaxed_uniform_layout;
- //
- // struct Outer {
- // arr : array<f32, 10u>;
- // };
- //
- // @group(0) @binding(0)
- // var<uniform> a : Outer;
-
- Enable(wgsl::Extension::kChromiumInternalRelaxedUniformLayout);
-
- Structure("Outer", Vector{
- Member("arr", ty.array<f32, 10>()),
- });
-
- GlobalVar("a", ty("Outer"), core::AddressSpace::kUniform, Group(0_a), Binding(0_a));
-
- EXPECT_TRUE(r()->Resolve()) << r()->error();
-}
-
-TEST_F(ResolverAddressSpaceLayoutValidationTest, RelaxedUniformLayout_ArrayStride_Vech) {
- // enable f16;
- // enable chromium_internal_relaxed_uniform_layout;
- //
- // struct Outer {
- // arr : array<vec3<f16>, 10u>;
- // };
- //
- // @group(0) @binding(0)
- // var<uniform> a : Outer;
-
- Enable(wgsl::Extension::kF16);
- Enable(wgsl::Extension::kChromiumInternalRelaxedUniformLayout);
-
- Structure("Outer", Vector{
- Member("arr", ty.array<vec3<f16>, 10>()),
- });
-
- GlobalVar("a", ty("Outer"), core::AddressSpace::kUniform, Group(0_a), Binding(0_a));
-
- EXPECT_TRUE(r()->Resolve()) << r()->error();
-}
-
TEST_F(ResolverAddressSpaceLayoutValidationTest, AlignAttributeTooSmall_Storage) {
// struct S {
// @align(4) vector : vec4u;
diff --git a/src/tint/lang/wgsl/resolver/validator.cc b/src/tint/lang/wgsl/resolver/validator.cc
index 693ed59..48934d3 100644
--- a/src/tint/lang/wgsl/resolver/validator.cc
+++ b/src/tint/lang/wgsl/resolver/validator.cc
@@ -568,9 +568,7 @@
}
// Validate that member is at a valid byte offset
- if (m->Offset() % required_align != 0 &&
- !enabled_extensions_.Contains(
- wgsl::Extension::kChromiumInternalRelaxedUniformLayout)) {
+ if (m->Offset() % required_align != 0) {
AddError(m->Declaration()->source)
<< "the offset of a struct member of type "
<< style::Type(m->Type()->UnwrapRef()->FriendlyName()) << " in address space "
@@ -597,9 +595,7 @@
auto* const prev_member = (i == 0) ? nullptr : str->Members()[i - 1];
if (prev_member && is_uniform_struct(prev_member->Type())) {
const uint32_t prev_to_curr_offset = m->Offset() - prev_member->Offset();
- if (prev_to_curr_offset % 16 != 0 &&
- !enabled_extensions_.Contains(
- wgsl::Extension::kChromiumInternalRelaxedUniformLayout)) {
+ if (prev_to_curr_offset % 16 != 0) {
AddError(m->Declaration()->source)
<< style::Enum("uniform")
<< " storage requires that the number of bytes between the start of the "
@@ -625,9 +621,7 @@
// alignment requirement of the address space.
auto* align_attr =
ast::GetAttribute<ast::StructMemberAlignAttribute>(m->Declaration()->attributes);
- if ((align_attr != nullptr) &&
- !enabled_extensions_.Contains(
- wgsl::Extension::kChromiumInternalRelaxedUniformLayout)) {
+ if (align_attr != nullptr) {
auto align = sem_.GetVal(align_attr->expr)->ConstantValue()->ValueAs<uint32_t>();
if (align % required_align != 0) {
AddError(align_attr->expr->source)
@@ -650,8 +644,7 @@
return false;
}
- if (address_space == core::AddressSpace::kUniform &&
- !enabled_extensions_.Contains(wgsl::Extension::kChromiumInternalRelaxedUniformLayout)) {
+ if (address_space == core::AddressSpace::kUniform) {
// We already validated that this array member is itself aligned to 16 bytes above, so
// we only need to validate that stride is a multiple of 16 bytes.
if (arr->Stride() % 16 != 0) {
diff --git a/src/tint/lang/wgsl/wgsl.def b/src/tint/lang/wgsl/wgsl.def
index d40f1fd..2bd1e29 100644
--- a/src/tint/lang/wgsl/wgsl.def
+++ b/src/tint/lang/wgsl/wgsl.def
@@ -89,8 +89,6 @@
// A Chromium-specific extension that enables features for input
// attachments
chromium_internal_input_attachments
- // A Chromium-specific extension that relaxes memory layout requirements for uniform storage.
- chromium_internal_relaxed_uniform_layout
// A Chromium-specific extension that enables pixel local storage.
// Cannot be used with chromium_experimental_framebuffer_fetch
chromium_experimental_pixel_local