[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>()) {