Add experimental enables for subgroup matrix.

This CL adds a `chromium_experimental_subgroup_matrix` enable.

Bug: 348702031
Change-Id: I60eb4eb6ba75182bd48e914c1967b9d2847f55e9
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/201594
Commit-Queue: dan sinclair <dsinclair@chromium.org>
Reviewed-by: James Price <jrprice@google.com>
diff --git a/src/tint/cmd/fuzz/wgsl/dictionary.txt b/src/tint/cmd/fuzz/wgsl/dictionary.txt
index cb40247..c8f3aed 100644
--- a/src/tint/cmd/fuzz/wgsl/dictionary.txt
+++ b/src/tint/cmd/fuzz/wgsl/dictionary.txt
@@ -159,6 +159,7 @@
 "chromium_experimental_framebuffer_fetch"
 "chromium_experimental_pixel_local"
 "chromium_experimental_push_constant"
+"chromium_experimental_subgroup_matrix"
 "chromium_experimental_subgroups"
 "chromium_internal_graphite"
 "chromium_internal_input_attachments"
diff --git a/src/tint/lang/wgsl/extension.cc b/src/tint/lang/wgsl/extension.cc
index 4ea3cbe..118d908 100644
--- a/src/tint/lang/wgsl/extension.cc
+++ b/src/tint/lang/wgsl/extension.cc
@@ -54,6 +54,9 @@
     if (str == "chromium_experimental_push_constant") {
         return Extension::kChromiumExperimentalPushConstant;
     }
+    if (str == "chromium_experimental_subgroup_matrix") {
+        return Extension::kChromiumExperimentalSubgroupMatrix;
+    }
     if (str == "chromium_experimental_subgroups") {
         return Extension::kChromiumExperimentalSubgroups;
     }
@@ -96,6 +99,8 @@
             return "chromium_experimental_pixel_local";
         case Extension::kChromiumExperimentalPushConstant:
             return "chromium_experimental_push_constant";
+        case Extension::kChromiumExperimentalSubgroupMatrix:
+            return "chromium_experimental_subgroup_matrix";
         case Extension::kChromiumExperimentalSubgroups:
             return "chromium_experimental_subgroups";
         case Extension::kChromiumInternalGraphite:
diff --git a/src/tint/lang/wgsl/extension.h b/src/tint/lang/wgsl/extension.h
index 794bd16..9c11792 100644
--- a/src/tint/lang/wgsl/extension.h
+++ b/src/tint/lang/wgsl/extension.h
@@ -50,6 +50,7 @@
     kChromiumExperimentalFramebufferFetch,
     kChromiumExperimentalPixelLocal,
     kChromiumExperimentalPushConstant,
+    kChromiumExperimentalSubgroupMatrix,
     kChromiumExperimentalSubgroups,
     kChromiumInternalGraphite,
     kChromiumInternalInputAttachments,
@@ -83,6 +84,7 @@
     "chromium_experimental_framebuffer_fetch",
     "chromium_experimental_pixel_local",
     "chromium_experimental_push_constant",
+    "chromium_experimental_subgroup_matrix",
     "chromium_experimental_subgroups",
     "chromium_internal_graphite",
     "chromium_internal_input_attachments",
@@ -100,6 +102,7 @@
     Extension::kChromiumExperimentalFramebufferFetch,
     Extension::kChromiumExperimentalPixelLocal,
     Extension::kChromiumExperimentalPushConstant,
+    Extension::kChromiumExperimentalSubgroupMatrix,
     Extension::kChromiumExperimentalSubgroups,
     Extension::kChromiumInternalGraphite,
     Extension::kChromiumInternalInputAttachments,
diff --git a/src/tint/lang/wgsl/extension_bench.cc b/src/tint/lang/wgsl/extension_bench.cc
index cfda480..8883e4d 100644
--- a/src/tint/lang/wgsl/extension_bench.cc
+++ b/src/tint/lang/wgsl/extension_bench.cc
@@ -73,69 +73,76 @@
         "chromium_exp9rimFntal_ush_constant",
         "chrmium_experimental_push_constant",
         "cOOromium_experiVeHtal_puh_conRRtant",
-        "chromium_eperimental_sybgroups",
-        "chrorri77mGexperimllntal_subgrnnups",
-        "chromium_exp4rimen00al_subgroups",
+        "chromium_eyperimental_subgoup_matrix",
+        "Ghromium_experrim77nllal_subgnnoup_matrix",
+        "ch4omium_experimental00subgroup_matrix",
+        "chromium_experimental_subgroup_matrix",
+        "chromium_exeimoontal_subgroup_atrix",
+        "chromium_experimnal_subgroup_mazzrix",
+        "chro11ium_experienial_subgrppup_matrix",
+        "chromium_experimental_subgroXXps",
+        "chromium55eIIperimental_subgnno99ps",
+        "chraamiuSS_experimentaHHr_subgrouYs",
         "chromium_experimental_subgroups",
-        "chromium_exprimenal_ubgrouoos",
-        "chrmiumexperimenzzal_subgroups",
-        "chrmi11m_experppmeiita_subgroups",
-        "chXXomium_internal_graphite",
-        "chromi55m_internnal_gra99hiIIe",
-        "chSSomiuY_internal_aarHHphrrte",
+        "chkkomium_eperimntal_subgroup",
+        "jhromium_experRmental_subgogps",
+        "chromiubexperiental_subgroups",
+        "chromiumjinternal_graphite",
+        "chromium_inernal_graphite",
+        "cromiu_internaq_graphite",
         "chromium_internal_graphite",
-        "kkhromium_nternal_rahHte",
-        "chromium_nRegnaj_graphite",
-        "chromium_ntebnal_gaphite",
-        "chromium_internal_input_atjachments",
-        "chromium_internal_inpt_attachments",
-        "chromium_nteral_iqput_attachments",
+        "chromium_intenalNNgraphite",
+        "chromiuminternal_gvaphite",
+        "chromium_internal_grphitQQ",
+        "chromirm_ffnternalinpt_attachments",
+        "chromium_internal_input_attachmenjs",
+        "chwwomiu2_interNNal_inpu_att8chments",
         "chromium_internal_input_attachments",
-        "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_internalinput_attachments",
+        "crrromium_internal_input_attachments",
+        "Ghromium_internal_input_attachments",
+        "chromium_internalFFrelaxed_uniform_layout",
+        "chromEum_internal_relaxed_unifrmlyout",
+        "chromium_internalrrrelaxd_uniform_layout",
         "chromium_internal_relaxed_uniform_layout",
-        "chromium_internal_relaxed_uniform_layut",
-        "chromium_internal_relaxed_rrniform_layout",
-        "chromium_internal_relaxedGuniform_layout",
-        "clip_distanceFF",
-        "cEipdtances",
-        "cli_rristances",
+        "chromiuminternal_relaxed_uniform_layut",
+        "cXroDium_internal_rJJlaed_uniform_layout",
+        "chromium_int8nal_relaed_uniform_layut",
+        "clip_ksa11ce",
+        "cli_distances",
+        "Jlp_distances",
         "clip_distances",
-        "lip_distanes",
-        "DXp_diJJtances",
-        "cl8pdistane",
-        "dul_okrc_blen11ing",
-        "dua_source_blending",
-        "duJl_source_blendig",
+        "clipcdistances",
+        "clip_dOstances",
+        "clip_disKK__vvttes",
+        "d5l_so8rce_blendxxng",
+        "dual_so__Fcebleqqing",
+        "dual_source_bqqnding",
         "dual_source_blending",
-        "dual_source_clending",
-        "dual_sOurce_blending",
-        "dualKKs__urce_blttvnding",
-        "xx8",
-        "__F",
-        "f1q",
+        "dual_so6633ce_blnding",
+        "d9al_soource_bl6Qttding",
+        "dual_source66blendin",
+        "zzO6",
+        "fyy6",
+        "HZ",
         "f16",
-        "331O",
-        "ftt6QQ",
-        "666",
-        "zzxbO6rops",
-        "subgyyoups",
-        "HHugroZs",
+        "4qW6",
+        "fOO",
+        "oY",
+        "ubgrou",
+        "subgrupF",
+        "subgrwps",
         "subgroups",
-        "sWW44roupq",
-        "sOObgoups",
-        "sbgroYps",
-        "subroups_f",
-        "suFgoups_f16",
-        "subgowps_f16",
+        "GbrKupff",
+        "KKuqgroups",
+        "subgmmou3s",
+        "subgroupsf16",
+        "subgroupsf1q",
+        "sbgroupsbbf16",
         "subgroups_f16",
-        "suffgKups_f6",
-        "KKubgroqps_f16",
-        "subFroup3mmf16",
+        "sbiiroups_f1",
+        "sbgroqOps_f16",
+        "TTubgroups_fvv6",
     };
     for (auto _ : state) {
         for (auto* str : kStrings) {
diff --git a/src/tint/lang/wgsl/extension_test.cc b/src/tint/lang/wgsl/extension_test.cc
index 1f4f81a..a8e92b2 100644
--- a/src/tint/lang/wgsl/extension_test.cc
+++ b/src/tint/lang/wgsl/extension_test.cc
@@ -61,6 +61,7 @@
     {"chromium_experimental_framebuffer_fetch", Extension::kChromiumExperimentalFramebufferFetch},
     {"chromium_experimental_pixel_local", Extension::kChromiumExperimentalPixelLocal},
     {"chromium_experimental_push_constant", Extension::kChromiumExperimentalPushConstant},
+    {"chromium_experimental_subgroup_matrix", Extension::kChromiumExperimentalSubgroupMatrix},
     {"chromium_experimental_subgroups", Extension::kChromiumExperimentalSubgroups},
     {"chromium_internal_graphite", Extension::kChromiumInternalGraphite},
     {"chromium_internal_input_attachments", Extension::kChromiumInternalInputAttachments},
@@ -85,33 +86,36 @@
     {"chvomium_experimental_push_constiint", Extension::kUndefined},
     {"chromiu8WWexperimental_push_constant", Extension::kUndefined},
     {"chromium_experiMental_push_costanxx", Extension::kUndefined},
-    {"chromiuX_experimentl_sugggroups", Extension::kUndefined},
-    {"chromiu_exuerimntal_XVbgroups", Extension::kUndefined},
-    {"chromium_experimen3al_subgroups", Extension::kUndefined},
-    {"chromium_internal_graphitE", Extension::kUndefined},
-    {"chromium_nternal_gTTPaphite", Extension::kUndefined},
-    {"chxxdomium_interal_graphite", Extension::kUndefined},
-    {"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},
-    {"subgroupj_f16", Extension::kUndefined},
-    {"subgroups_f6", Extension::kUndefined},
-    {"sgroupq_f16", Extension::kUndefined},
+    {"cXromium_experimeggtal_subgrup_matrix", Extension::kUndefined},
+    {"chrXmiuu_expeimVtal_subgroup_matrix", Extension::kUndefined},
+    {"chromium_e3perimental_subgroup_matrix", Extension::kUndefined},
+    {"cEromium_experimental_subgroups", Extension::kUndefined},
+    {"TThromium_experiPPental_sugroups", Extension::kUndefined},
+    {"chddomium_experimental_subgroxxs", Extension::kUndefined},
+    {"chromi44m_internal_graphite", Extension::kUndefined},
+    {"chromSSuVV_internal_graphite", Extension::kUndefined},
+    {"cRromium_nternR22_graphite", Extension::kUndefined},
+    {"chromium_int9rnaF_inpu_attachments", Extension::kUndefined},
+    {"chrmium_internal_input_attachments", Extension::kUndefined},
+    {"cOOromium_internVlHinput_ttachRRents", Extension::kUndefined},
+    {"chromium_internl_relaxyd_uniform_layout", Extension::kUndefined},
+    {"chromnnum_internrr77_Gelaxell_uniform_layout", Extension::kUndefined},
+    {"chromium_intern4l_relaxe00_uniform_layout", Extension::kUndefined},
+    {"cli_iootanes", Extension::kUndefined},
+    {"czip_dstances", Extension::kUndefined},
+    {"lipp_distan11es", Extension::kUndefined},
+    {"XXual_source_blending", Extension::kUndefined},
+    {"dual_sou5IIcennblend99ng", Extension::kUndefined},
+    {"aSSual_soYrce_blerrdinHH", Extension::kUndefined},
+    {"U", Extension::kUndefined},
+    {"jV3", Extension::kUndefined},
+    {"", Extension::kUndefined},
+    {"uGGSrops", Extension::kUndefined},
+    {"subgous", Extension::kUndefined},
+    {"bgrups", Extension::kUndefined},
+    {"subgrokp_jj6", Extension::kUndefined},
+    {"ubgroupsffr6", Extension::kUndefined},
+    {"subgroujs_f16", 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 b883ffb..60290b4 100644
--- a/src/tint/lang/wgsl/reader/parser/enable_directive_test.cc
+++ b/src/tint/lang/wgsl/reader/parser/enable_directive_test.cc
@@ -205,7 +205,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_subgroups', 'chromium_internal_graphite', 'chromium_internal_input_attachments', 'chromium_internal_relaxed_uniform_layout', 'clip_distances', 'dual_source_blending', 'f16', 'subgroups', 'subgroups_f16')");
+Possible values: 'chromium_disable_uniformity_analysis', 'chromium_experimental_framebuffer_fetch', 'chromium_experimental_pixel_local', 'chromium_experimental_push_constant', 'chromium_experimental_subgroup_matrix', 'chromium_experimental_subgroups', 'chromium_internal_graphite', 'chromium_internal_input_attachments', 'chromium_internal_relaxed_uniform_layout', 'clip_distances', 'dual_source_blending', 'f16', 'subgroups', 'subgroups_f16')");
     auto program = p->program();
     auto& ast = program.AST();
     EXPECT_EQ(ast.Enables().Length(), 0u);
diff --git a/src/tint/lang/wgsl/wgsl.def b/src/tint/lang/wgsl/wgsl.def
index c163965..a45f881 100644
--- a/src/tint/lang/wgsl/wgsl.def
+++ b/src/tint/lang/wgsl/wgsl.def
@@ -98,6 +98,8 @@
   // A Chromium-specific extension that enables framebuffer fetching.
   // Cannot be used with chromium_experimental_pixel_local
   chromium_experimental_framebuffer_fetch
+  // A Chromium-specific extension for subgroup matrix support
+  chromium_experimental_subgroup_matrix
 }
 
 // https://gpuweb.github.io/gpuweb/wgsl/#language-extensions-sec