[tint] Add subgroup_matrix_uniformity diagnostic rule
Set the default severity to "error", but otherwise do nothing with it
for now.
Bug: 348702031
Change-Id: I2e72fa0395f5ddf4b5d2c626b8ebb8564c91c601
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/227655
Commit-Queue: James Price <jrprice@google.com>
Reviewed-by: dan sinclair <dsinclair@chromium.org>
diff --git a/src/tint/cmd/fuzz/wgsl/dictionary.txt b/src/tint/cmd/fuzz/wgsl/dictionary.txt
index 3be88bf..2f83f76 100644
--- a/src/tint/cmd/fuzz/wgsl/dictionary.txt
+++ b/src/tint/cmd/fuzz/wgsl/dictionary.txt
@@ -413,6 +413,7 @@
"subgroup_matrix_left"
"subgroup_matrix_result"
"subgroup_matrix_right"
+"subgroup_matrix_uniformity"
"subgroup_size"
"subgroup_uniformity"
"subgroups"
diff --git a/src/tint/lang/wgsl/diagnostic_rule.cc b/src/tint/lang/wgsl/diagnostic_rule.cc
index dc3e130..45f4286 100644
--- a/src/tint/lang/wgsl/diagnostic_rule.cc
+++ b/src/tint/lang/wgsl/diagnostic_rule.cc
@@ -72,6 +72,9 @@
/// @returns the parsed enum, or ChromiumDiagnosticRule::kUndefined if the string could not be
/// parsed.
ChromiumDiagnosticRule ParseChromiumDiagnosticRule(std::string_view str) {
+ if (str == "subgroup_matrix_uniformity") {
+ return ChromiumDiagnosticRule::kSubgroupMatrixUniformity;
+ }
if (str == "unreachable_code") {
return ChromiumDiagnosticRule::kUnreachableCode;
}
@@ -82,6 +85,8 @@
switch (value) {
case ChromiumDiagnosticRule::kUndefined:
return "undefined";
+ case ChromiumDiagnosticRule::kSubgroupMatrixUniformity:
+ return "subgroup_matrix_uniformity";
case ChromiumDiagnosticRule::kUnreachableCode:
return "unreachable_code";
}
diff --git a/src/tint/lang/wgsl/diagnostic_rule.h b/src/tint/lang/wgsl/diagnostic_rule.h
index c533aea..98e2f55 100644
--- a/src/tint/lang/wgsl/diagnostic_rule.h
+++ b/src/tint/lang/wgsl/diagnostic_rule.h
@@ -76,6 +76,7 @@
/// Chromium-specific diagnostic rules.
enum class ChromiumDiagnosticRule : uint8_t {
kUndefined,
+ kSubgroupMatrixUniformity,
kUnreachableCode,
};
@@ -98,6 +99,7 @@
ChromiumDiagnosticRule ParseChromiumDiagnosticRule(std::string_view str);
constexpr std::string_view kChromiumDiagnosticRuleStrings[] = {
+ "subgroup_matrix_uniformity",
"unreachable_code",
};
diff --git a/src/tint/lang/wgsl/diagnostic_rule_bench.cc b/src/tint/lang/wgsl/diagnostic_rule_bench.cc
index 4b6a8c7..7614d2c 100644
--- a/src/tint/lang/wgsl/diagnostic_rule_bench.cc
+++ b/src/tint/lang/wgsl/diagnostic_rule_bench.cc
@@ -63,8 +63,20 @@
void ChromiumDiagnosticRuleParser(::benchmark::State& state) {
const char* kStrings[] = {
- "unreahaXgge_code", "unreahale_Xodu", "unrea3hable_code", "unreachable_code",
- "unrEachable_code", "uPPrTTacable_code", "uneddchaxxle_code",
+ "sbgroup_ggatrix_uniformXty",
+ "suVroup_matrx_uniforXitu",
+ "subgroup_ma3rix_uniformity",
+ "subgroup_matrix_uniformity",
+ "subgroup_matrix_uniformitE",
+ "subgroup_atrix_uniTTPormity",
+ "suxxdgroup_matri_uniformity",
+ "44nreachable_code",
+ "unreaVVhabSSe_code",
+ "unre22chabR_Rode",
+ "unreachable_code",
+ "nFeachable_9ode",
+ "unrachable_code",
+ "VnreacaRRlH_OOode",
};
for (auto _ : state) {
for (auto* str : kStrings) {
diff --git a/src/tint/lang/wgsl/diagnostic_rule_test.cc b/src/tint/lang/wgsl/diagnostic_rule_test.cc
index eb2f0bb..eb9a59d 100644
--- a/src/tint/lang/wgsl/diagnostic_rule_test.cc
+++ b/src/tint/lang/wgsl/diagnostic_rule_test.cc
@@ -112,13 +112,17 @@
}
static constexpr Case kValidCases[] = {
+ {"subgroup_matrix_uniformity", ChromiumDiagnosticRule::kSubgroupMatrixUniformity},
{"unreachable_code", ChromiumDiagnosticRule::kUnreachableCode},
};
static constexpr Case kInvalidCases[] = {
- {"pqnreachableHHcode", ChromiumDiagnosticRule::kUndefined},
- {"unrechcbe_cov", ChromiumDiagnosticRule::kUndefined},
- {"unreachGblecode", ChromiumDiagnosticRule::kUndefined},
+ {"subgroppHp_matriqq_uiformity", ChromiumDiagnosticRule::kUndefined},
+ {"subroup_matrcx_niformit", ChromiumDiagnosticRule::kUndefined},
+ {"subroupGmatrbx_uniformity", ChromiumDiagnosticRule::kUndefined},
+ {"vnriiachable_code", ChromiumDiagnosticRule::kUndefined},
+ {"unreac8ablWW_code", ChromiumDiagnosticRule::kUndefined},
+ {"unreMchablxxcode", ChromiumDiagnosticRule::kUndefined},
};
using ChromiumDiagnosticRuleParseTest = testing::TestWithParam<Case>;
diff --git a/src/tint/lang/wgsl/resolver/diagnostic_control_test.cc b/src/tint/lang/wgsl/resolver/diagnostic_control_test.cc
index e22593d..f7a9e48 100644
--- a/src/tint/lang/wgsl/resolver/diagnostic_control_test.cc
+++ b/src/tint/lang/wgsl/resolver/diagnostic_control_test.cc
@@ -281,7 +281,7 @@
EXPECT_EQ(r()->error(),
R"(12:34 warning: unrecognized diagnostic rule 'chromium.unreachable_cod'
Did you mean 'chromium.unreachable_code'?
-Possible values: 'chromium.unreachable_code')");
+Possible values: 'chromium.subgroup_matrix_uniformity', 'chromium.unreachable_code')");
}
TEST_F(ResolverDiagnosticControlTest, UnrecognizedChromiumRuleName_Attribute) {
@@ -293,7 +293,7 @@
EXPECT_EQ(r()->error(),
R"(12:34 warning: unrecognized diagnostic rule 'chromium.unreachable_cod'
Did you mean 'chromium.unreachable_code'?
-Possible values: 'chromium.unreachable_code')");
+Possible values: 'chromium.subgroup_matrix_uniformity', 'chromium.unreachable_code')");
}
TEST_F(ResolverDiagnosticControlTest, UnrecognizedOtherRuleName_Directive) {
@@ -340,10 +340,10 @@
EXPECT_EQ(r()->error(),
R"(12:34 warning: unrecognized diagnostic rule 'chromium.unreachable_codes'
Did you mean 'chromium.unreachable_code'?
-Possible values: 'chromium.unreachable_code'
+Possible values: 'chromium.subgroup_matrix_uniformity', 'chromium.unreachable_code'
56:78 warning: unrecognized diagnostic rule 'chromium.unreachable_codes'
Did you mean 'chromium.unreachable_code'?
-Possible values: 'chromium.unreachable_code'
+Possible values: 'chromium.subgroup_matrix_uniformity', 'chromium.unreachable_code'
56:78 error: conflicting diagnostic directive
12:34 note: severity of 'chromium.unreachable_codes' set to 'off' here)");
}
@@ -394,10 +394,10 @@
EXPECT_EQ(r()->error(),
R"(12:34 warning: unrecognized diagnostic rule 'chromium.unreachable_codes'
Did you mean 'chromium.unreachable_code'?
-Possible values: 'chromium.unreachable_code'
+Possible values: 'chromium.subgroup_matrix_uniformity', 'chromium.unreachable_code'
56:78 warning: unrecognized diagnostic rule 'chromium.unreachable_codes'
Did you mean 'chromium.unreachable_code'?
-Possible values: 'chromium.unreachable_code'
+Possible values: 'chromium.subgroup_matrix_uniformity', 'chromium.unreachable_code'
56:78 error: conflicting diagnostic attribute
12:34 note: severity of 'chromium.unreachable_codes' set to 'off' here)");
}
diff --git a/src/tint/lang/wgsl/resolver/subgroup_matrix_test.cc b/src/tint/lang/wgsl/resolver/subgroup_matrix_test.cc
index b8410e6c..95b3410 100644
--- a/src/tint/lang/wgsl/resolver/subgroup_matrix_test.cc
+++ b/src/tint/lang/wgsl/resolver/subgroup_matrix_test.cc
@@ -640,5 +640,11 @@
EXPECT_TRUE(r()->Resolve()) << r()->error();
}
+// Using the subgroup_matrix_uniformity diagnostic rule without the extension should succeed.
+TEST_F(ResolverSubgroupMatrixTest, UseSubgroupUniformityRuleWithoutExtension) {
+ DiagnosticDirective(wgsl::DiagnosticSeverity::kOff, "chromium", "subgroup_matrix_uniformity");
+ EXPECT_TRUE(r()->Resolve()) << r()->error();
+}
+
} // namespace
} // namespace tint::resolver
diff --git a/src/tint/lang/wgsl/resolver/validator.cc b/src/tint/lang/wgsl/resolver/validator.cc
index db1350c..7150f93 100644
--- a/src/tint/lang/wgsl/resolver/validator.cc
+++ b/src/tint/lang/wgsl/resolver/validator.cc
@@ -180,6 +180,8 @@
wgsl::DiagnosticSeverity::kError);
diagnostic_filters_.Set(wgsl::CoreDiagnosticRule::kSubgroupUniformity,
wgsl::DiagnosticSeverity::kError);
+ diagnostic_filters_.Set(wgsl::ChromiumDiagnosticRule::kSubgroupMatrixUniformity,
+ wgsl::DiagnosticSeverity::kError);
diagnostic_filters_.Set(wgsl::ChromiumDiagnosticRule::kUnreachableCode,
wgsl::DiagnosticSeverity::kWarning);
}
diff --git a/src/tint/lang/wgsl/wgsl.def b/src/tint/lang/wgsl/wgsl.def
index 6338902..f553579 100644
--- a/src/tint/lang/wgsl/wgsl.def
+++ b/src/tint/lang/wgsl/wgsl.def
@@ -57,6 +57,7 @@
// chromium-specific diagnostics
enum chromium_diagnostic_rule {
// Chromium specific rules not defined in the spec.
+ subgroup_matrix_uniformity
unreachable_code
}