[wgsl] Move subgroup_id builtin to subgroup_id extension
The builtin is allowed if the `subgroups` extension is enabled and the
`subgroup_id` language extension is allowed.
Fixed: 454674659
Change-Id: Iacd546add38ac570565731a3b0e4acb008ea9a49
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/268575
Reviewed-by: dan sinclair <dsinclair@chromium.org>
Commit-Queue: James Price <jrprice@google.com>
diff --git a/src/tint/lang/wgsl/resolver/subgroups_extension_test.cc b/src/tint/lang/wgsl/resolver/subgroups_extension_test.cc
index c4d893f..17de108 100644
--- a/src/tint/lang/wgsl/resolver/subgroups_extension_test.cc
+++ b/src/tint/lang/wgsl/resolver/subgroups_extension_test.cc
@@ -209,11 +209,26 @@
EXPECT_FALSE(r()->Resolve());
EXPECT_EQ(
r()->error(),
- R"(error: use of '@builtin(subgroup_id)' attribute requires enabling extension 'chromium_experimental_subgroup_matrix')");
+ R"(error: use of '@builtin(subgroup_id)' attribute requires enabling extension 'subgroups')");
+}
+
+TEST_F(ResolverSubgroupsExtensionTest, UseSubgroupIdAttribWithoutLanguageExtension) {
+ Enable(wgsl::Extension::kSubgroups);
+ Structure("Inputs", Vector{
+ Member("a", ty.u32(), Vector{Builtin(core::BuiltinValue::kSubgroupId)}),
+ });
+
+ wgsl::AllowedFeatures allowed_features{};
+ allowed_features.extensions.insert(wgsl::Extension::kSubgroups);
+ Resolver resolver{this, allowed_features};
+ EXPECT_FALSE(resolver.Resolve());
+ EXPECT_EQ(
+ resolver.error(),
+ R"(error: use of '@builtin(subgroup_id)' attribute requires the 'subgroup_id' language feature)");
}
TEST_F(ResolverSubgroupsExtensionTest, UseSubgroupIdAttribWithExtension) {
- Enable(wgsl::Extension::kChromiumExperimentalSubgroupMatrix);
+ Enable(wgsl::Extension::kSubgroups);
Structure("Inputs", Vector{
Member("a", ty.u32(), Vector{Builtin(core::BuiltinValue::kSubgroupId)}),
});
@@ -222,7 +237,7 @@
}
TEST_F(ResolverSubgroupsExtensionTest, SubgroupIdI32Error) {
- Enable(wgsl::Extension::kChromiumExperimentalSubgroupMatrix);
+ Enable(wgsl::Extension::kSubgroups);
Structure("Inputs", Vector{
Member("a", ty.i32(), Vector{Builtin(core::BuiltinValue::kSubgroupId)}),
});
@@ -232,7 +247,7 @@
}
TEST_F(ResolverSubgroupsExtensionTest, SubgroupIdFragmentShader) {
- Enable(wgsl::Extension::kChromiumExperimentalSubgroupMatrix);
+ Enable(wgsl::Extension::kSubgroups);
Func("main", Vector{Param("size", ty.u32(), Vector{Builtin(core::BuiltinValue::kSubgroupId)})},
ty.void_(), Empty, Vector{Stage(ast::PipelineStage::kFragment)});
@@ -242,7 +257,7 @@
}
TEST_F(ResolverSubgroupsExtensionTest, SubgroupIdComputeShaderOutput) {
- Enable(wgsl::Extension::kChromiumExperimentalSubgroupMatrix);
+ Enable(wgsl::Extension::kSubgroups);
Func("main", tint::Empty, ty.u32(),
Vector{
diff --git a/src/tint/lang/wgsl/resolver/validator.cc b/src/tint/lang/wgsl/resolver/validator.cc
index caca5d1..b574b29 100644
--- a/src/tint/lang/wgsl/resolver/validator.cc
+++ b/src/tint/lang/wgsl/resolver/validator.cc
@@ -1098,13 +1098,19 @@
}
break;
case core::BuiltinValue::kSubgroupId:
- // TODO(crbug.com/416555787): Move this to the `subgroups` extension.
- if (!enabled_extensions_.Contains(
- wgsl::Extension::kChromiumExperimentalSubgroupMatrix)) {
- AddError(attr->source) << "use of " << style::Attribute("@builtin")
- << style::Code("(", style::Enum(builtin), ")")
- << " attribute requires enabling extension "
- << style::Code("chromium_experimental_subgroup_matrix");
+ if (!enabled_extensions_.Contains(wgsl::Extension::kSubgroups)) {
+ AddError(attr->source)
+ << "use of " << style::Attribute("@builtin")
+ << style::Code("(", style::Enum(builtin), ")")
+ << " attribute requires enabling extension " << style::Code("subgroups");
+ return false;
+ }
+ // TODO(crbug.com/454654105): Remove this check.
+ if (!allowed_features_.features.contains(wgsl::LanguageFeature::kSubgroupId)) {
+ AddError(attr->source)
+ << "use of " << style::Attribute("@builtin")
+ << style::Code("(", style::Enum(builtin), ")") << " attribute requires the "
+ << style::Code("subgroup_id") << " language feature";
return false;
}
if (!type->Is<core::type::U32>()) {