[tint] Add chromium_experimental_subgroups
Add support for parsing the extension name.
Bug: tint:2000
Change-Id: Iac46faceb00e770b7d870b46cfadb08613e51d4c
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/143832
Commit-Queue: Ben Clayton <bclayton@google.com>
Kokoro: Kokoro <noreply+kokoro@google.com>
Reviewed-by: Ben Clayton <bclayton@google.com>
Reviewed-by: David Neto <dneto@google.com>
diff --git a/src/tint/intrinsics.def b/src/tint/intrinsics.def
index 6b756db..4e9b03a 100644
--- a/src/tint/intrinsics.def
+++ b/src/tint/intrinsics.def
@@ -74,6 +74,8 @@
// A Chromium-specific extension that enables passing of uniform, storage and workgroup
// address-spaced pointers as parameters, as well as pointers into sub-objects.
chromium_experimental_full_ptr_parameters
+ // A Chromium-specific extension that adds basic subgroup functionality.
+ chromium_experimental_subgroups
// A Chromium-specific extension that relaxes memory layout requirements for uniform storage.
chromium_internal_relaxed_uniform_layout
// A Chromium-specific extension that enables dual source blending.
diff --git a/src/tint/lang/core/builtin/extension.cc b/src/tint/lang/core/builtin/extension.cc
index 5ee7e10..360e317 100644
--- a/src/tint/lang/core/builtin/extension.cc
+++ b/src/tint/lang/core/builtin/extension.cc
@@ -40,6 +40,9 @@
if (str == "chromium_experimental_push_constant") {
return Extension::kChromiumExperimentalPushConstant;
}
+ if (str == "chromium_experimental_subgroups") {
+ return Extension::kChromiumExperimentalSubgroups;
+ }
if (str == "chromium_internal_dual_source_blending") {
return Extension::kChromiumInternalDualSourceBlending;
}
@@ -64,6 +67,8 @@
return "chromium_experimental_full_ptr_parameters";
case Extension::kChromiumExperimentalPushConstant:
return "chromium_experimental_push_constant";
+ case Extension::kChromiumExperimentalSubgroups:
+ return "chromium_experimental_subgroups";
case Extension::kChromiumInternalDualSourceBlending:
return "chromium_internal_dual_source_blending";
case Extension::kChromiumInternalRelaxedUniformLayout:
diff --git a/src/tint/lang/core/builtin/extension.h b/src/tint/lang/core/builtin/extension.h
index a2640ed..09ccd209 100644
--- a/src/tint/lang/core/builtin/extension.h
+++ b/src/tint/lang/core/builtin/extension.h
@@ -36,6 +36,7 @@
kChromiumExperimentalDp4A,
kChromiumExperimentalFullPtrParameters,
kChromiumExperimentalPushConstant,
+ kChromiumExperimentalSubgroups,
kChromiumInternalDualSourceBlending,
kChromiumInternalRelaxedUniformLayout,
kF16,
@@ -59,13 +60,10 @@
Extension ParseExtension(std::string_view str);
constexpr const char* kExtensionStrings[] = {
- "chromium_disable_uniformity_analysis",
- "chromium_experimental_dp4a",
- "chromium_experimental_full_ptr_parameters",
- "chromium_experimental_push_constant",
- "chromium_internal_dual_source_blending",
- "chromium_internal_relaxed_uniform_layout",
- "f16",
+ "chromium_disable_uniformity_analysis", "chromium_experimental_dp4a",
+ "chromium_experimental_full_ptr_parameters", "chromium_experimental_push_constant",
+ "chromium_experimental_subgroups", "chromium_internal_dual_source_blending",
+ "chromium_internal_relaxed_uniform_layout", "f16",
};
// A unique vector of extensions
diff --git a/src/tint/lang/core/builtin/extension_bench.cc b/src/tint/lang/core/builtin/extension_bench.cc
index 0b21919..d0d564b 100644
--- a/src/tint/lang/core/builtin/extension_bench.cc
+++ b/src/tint/lang/core/builtin/extension_bench.cc
@@ -59,27 +59,34 @@
"chromium_exp9rimFntal_ush_constant",
"chrmium_experimental_push_constant",
"cOOromium_experiVeHtal_puh_conRRtant",
- "chromium_internay_dual_sorce_blending",
- "chrnnmium_internal_duGrr_source_bllend77ng",
- "chromiu4_inter00al_dual_source_blending",
+ "chromium_eperimental_sybgroups",
+ "chrorri77mGexperimllntal_subgrnnups",
+ "chromium_exp4rimen00al_subgroups",
+ "chromium_experimental_subgroups",
+ "chromium_exprimenal_ubgrouoos",
+ "chrmiumexperimenzzal_subgroups",
+ "chrmi11m_experppmeiita_subgroups",
+ "chromium_internal_dual_sourcXX_blending",
+ "chromium_internal_dual_99ou5IInce_blending",
+ "crrroSSium_internYlaadual_source_bHHending",
"chromium_internal_dual_source_blending",
- "chromium_intoornal_dua_sorce_bleding",
- "cromium_nternal_dual_sourcezzblending",
- "chiiomiu_internal_dppal_source11blendig",
- "XXhromium_internal_relaxed_uniform_layout",
- "chromium_99nternal_reIInaxed_un55form_layout",
- "chromYuaaSSinternrrl_rHHlaxed_uniform_layout",
+ "chromium_internakk_ualsourc_blendHng",
+ "chromium_inRRrnal_dujl_sourceblgnding",
+ "chromiuminternal_duab_source_blendin",
+ "chromium_internal_relaxed_uniform_lajout",
+ "chromium_internal_relxed_uniform_layout",
+ "chroium_inqernal_rlaxed_uniform_layout",
"chromium_internal_relaxed_uniform_layout",
- "chroiHm_internal_rkklaxd_uniform_layou",
- "chromium_internl_relaxedguniRRorm_lajou",
- "chromium_inernal_relaxedbuniorm_layout",
+ "chromium_internNNl_relaxed_uniform_layou",
+ "chromium_internal_relaxvvd_unifom_laout",
+ "chromium_internalrelaxed_uniQQorm_layout",
+ "ff",
"fj6",
- "f6",
- "q",
+ "wNN2",
"f16",
- "fNN",
- "fv",
- "Q16",
+ "f6",
+ "rr16",
+ "fG6",
};
for (auto _ : state) {
for (auto* str : kStrings) {
diff --git a/src/tint/lang/core/builtin/extension_test.cc b/src/tint/lang/core/builtin/extension_test.cc
index 5d70f13..6059949 100644
--- a/src/tint/lang/core/builtin/extension_test.cc
+++ b/src/tint/lang/core/builtin/extension_test.cc
@@ -48,6 +48,7 @@
{"chromium_experimental_full_ptr_parameters",
Extension::kChromiumExperimentalFullPtrParameters},
{"chromium_experimental_push_constant", Extension::kChromiumExperimentalPushConstant},
+ {"chromium_experimental_subgroups", Extension::kChromiumExperimentalSubgroups},
{"chromium_internal_dual_source_blending", Extension::kChromiumInternalDualSourceBlending},
{"chromium_internal_relaxed_uniform_layout", Extension::kChromiumInternalRelaxedUniformLayout},
{"f16", Extension::kF16},
@@ -66,15 +67,18 @@
{"chvomium_experimental_push_constiint", Extension::kUndefined},
{"chromiu8WWexperimental_push_constant", Extension::kUndefined},
{"chromium_experiMental_push_costanxx", Extension::kUndefined},
- {"Xhromium_ggnternal_dual_sourceblending", Extension::kUndefined},
- {"chromium_internludual_sorce_bVenXing", Extension::kUndefined},
- {"chromium_internal_dual_source_b3ending", Extension::kUndefined},
- {"chromium_internal_rElaxed_uniform_layout", Extension::kUndefined},
- {"chromium_internalPPrTTlaed_uniform_layout", Extension::kUndefined},
- {"chroddium_internxxl_relaxed_unform_layout", Extension::kUndefined},
- {"4416", Extension::kUndefined},
- {"fSVV6", Extension::kUndefined},
- {"RR2", Extension::kUndefined},
+ {"chromiuX_experimentl_sugggroups", Extension::kUndefined},
+ {"chromiu_exuerimntal_XVbgroups", Extension::kUndefined},
+ {"chromium_experimen3al_subgroups", Extension::kUndefined},
+ {"chromium_internal_dual_soErce_blending", Extension::kUndefined},
+ {"chromiuPP_internal_dual_sourceblenTTing", Extension::kUndefined},
+ {"chromim_internadd_dual_sxxurce_blending", Extension::kUndefined},
+ {"chromium_interna44_relaxed_uniform_layout", Extension::kUndefined},
+ {"chromium_internal_relaxed_uniformSSlayouVV", Extension::kUndefined},
+ {"chromiumRnteRnal_re22axed_uniform_layout", Extension::kUndefined},
+ {"96", Extension::kUndefined},
+ {"f1", Extension::kUndefined},
+ {"VOR6", 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 d406496..538c618 100644
--- a/src/tint/lang/wgsl/reader/parser/enable_directive_test.cc
+++ b/src/tint/lang/wgsl/reader/parser/enable_directive_test.cc
@@ -164,7 +164,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_dp4a', 'chromium_experimental_full_ptr_parameters', 'chromium_experimental_push_constant', 'chromium_internal_dual_source_blending', 'chromium_internal_relaxed_uniform_layout', 'f16')");
+Possible values: 'chromium_disable_uniformity_analysis', 'chromium_experimental_dp4a', 'chromium_experimental_full_ptr_parameters', 'chromium_experimental_push_constant', 'chromium_experimental_subgroups', 'chromium_internal_dual_source_blending', 'chromium_internal_relaxed_uniform_layout', 'f16')");
auto program = p->program();
auto& ast = program.AST();
EXPECT_EQ(ast.Enables().Length(), 0u);
@@ -178,7 +178,7 @@
EXPECT_TRUE(p->has_error());
EXPECT_EQ(p->error(), R"(1:8: expected extension
Did you mean 'f16'?
-Possible values: 'chromium_disable_uniformity_analysis', 'chromium_experimental_dp4a', 'chromium_experimental_full_ptr_parameters', 'chromium_experimental_push_constant', 'chromium_internal_dual_source_blending', 'chromium_internal_relaxed_uniform_layout', 'f16')");
+Possible values: 'chromium_disable_uniformity_analysis', 'chromium_experimental_dp4a', 'chromium_experimental_full_ptr_parameters', 'chromium_experimental_push_constant', 'chromium_experimental_subgroups', 'chromium_internal_dual_source_blending', 'chromium_internal_relaxed_uniform_layout', 'f16')");
auto program = p->program();
auto& ast = program.AST();
EXPECT_EQ(ast.Enables().Length(), 0u);
@@ -226,7 +226,7 @@
p->translation_unit();
EXPECT_TRUE(p->has_error());
EXPECT_EQ(p->error(), R"(1:8: expected extension
-Possible values: 'chromium_disable_uniformity_analysis', 'chromium_experimental_dp4a', 'chromium_experimental_full_ptr_parameters', 'chromium_experimental_push_constant', 'chromium_internal_dual_source_blending', 'chromium_internal_relaxed_uniform_layout', 'f16')");
+Possible values: 'chromium_disable_uniformity_analysis', 'chromium_experimental_dp4a', 'chromium_experimental_full_ptr_parameters', 'chromium_experimental_push_constant', 'chromium_experimental_subgroups', 'chromium_internal_dual_source_blending', 'chromium_internal_relaxed_uniform_layout', 'f16')");
auto program = p->program();
auto& ast = program.AST();
EXPECT_EQ(ast.Enables().Length(), 0u);
@@ -237,7 +237,7 @@
p->translation_unit();
EXPECT_TRUE(p->has_error());
EXPECT_EQ(p->error(), R"(1:8: expected extension
-Possible values: 'chromium_disable_uniformity_analysis', 'chromium_experimental_dp4a', 'chromium_experimental_full_ptr_parameters', 'chromium_experimental_push_constant', 'chromium_internal_dual_source_blending', 'chromium_internal_relaxed_uniform_layout', 'f16')");
+Possible values: 'chromium_disable_uniformity_analysis', 'chromium_experimental_dp4a', 'chromium_experimental_full_ptr_parameters', 'chromium_experimental_push_constant', 'chromium_experimental_subgroups', 'chromium_internal_dual_source_blending', 'chromium_internal_relaxed_uniform_layout', 'f16')");
auto program = p->program();
auto& ast = program.AST();
EXPECT_EQ(ast.Enables().Length(), 0u);
@@ -249,7 +249,7 @@
EXPECT_TRUE(p->has_error());
EXPECT_EQ(p->error(), R"(1:8: expected extension
Did you mean 'f16'?
-Possible values: 'chromium_disable_uniformity_analysis', 'chromium_experimental_dp4a', 'chromium_experimental_full_ptr_parameters', 'chromium_experimental_push_constant', 'chromium_internal_dual_source_blending', 'chromium_internal_relaxed_uniform_layout', 'f16')");
+Possible values: 'chromium_disable_uniformity_analysis', 'chromium_experimental_dp4a', 'chromium_experimental_full_ptr_parameters', 'chromium_experimental_push_constant', 'chromium_experimental_subgroups', 'chromium_internal_dual_source_blending', 'chromium_internal_relaxed_uniform_layout', 'f16')");
auto program = p->program();
auto& ast = program.AST();
EXPECT_EQ(ast.Enables().Length(), 0u);