[tint][msl] Add validation support for 2.3
Change-Id: I5070713b88aecaefe53ce876d75b1dd81392281f
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/150144
Auto-Submit: Ben Clayton <bclayton@google.com>
Kokoro: Kokoro <noreply+kokoro@google.com>
Reviewed-by: James Price <jrprice@google.com>
Commit-Queue: Ben Clayton <bclayton@google.com>
diff --git a/src/tint/cmd/remote_compile/main.cc b/src/tint/cmd/remote_compile/main.cc
index 12f5fdb..95e2c48 100644
--- a/src/tint/cmd/remote_compile/main.cc
+++ b/src/tint/cmd/remote_compile/main.cc
@@ -427,6 +427,9 @@
if (req.version_major == 2 && req.version_minor == 1) {
version = tint::msl::validate::MslVersion::kMsl_2_1;
}
+ if (req.version_major == 2 && req.version_minor == 3) {
+ version = tint::msl::validate::MslVersion::kMsl_2_3;
+ }
auto result = tint::msl::validate::UsingMetalAPI(req.source, version);
CompileResponse resp;
if (result.failed) {
diff --git a/src/tint/lang/msl/validate/msl.cc b/src/tint/lang/msl/validate/msl.cc
index fce70d6..b0c10ad 100644
--- a/src/tint/lang/msl/validate/msl.cc
+++ b/src/tint/lang/msl/validate/msl.cc
@@ -42,6 +42,9 @@
case MslVersion::kMsl_2_1:
version_str = "-std=macos-metal2.1";
break;
+ case MslVersion::kMsl_2_3:
+ version_str = "-std=macos-metal2.3";
+ break;
}
#ifdef _WIN32
diff --git a/src/tint/lang/msl/validate/msl_metal.mm b/src/tint/lang/msl/validate/msl_metal.mm
index 8fd3ee9..cdd34ad 100644
--- a/src/tint/lang/msl/validate/msl_metal.mm
+++ b/src/tint/lang/msl/validate/msl_metal.mm
@@ -43,6 +43,11 @@
case MslVersion::kMsl_2_1:
compileOptions.languageVersion = MTLLanguageVersion2_1;
break;
+ case MslVersion::kMsl_2_3:
+ if (@available(macOS 11.0, *)) {
+ compileOptions.languageVersion = MTLLanguageVersion2_3;
+ }
+ break;
}
id<MTLLibrary> library = [device newLibraryWithSource:source
diff --git a/src/tint/lang/msl/validate/val.h b/src/tint/lang/msl/validate/val.h
index ca32763..e9f4037 100644
--- a/src/tint/lang/msl/validate/val.h
+++ b/src/tint/lang/msl/validate/val.h
@@ -30,12 +30,19 @@
using EntryPointList = std::vector<std::pair<std::string, ast::PipelineStage>>;
-// The version of MSL to validate against.
+/// The version of MSL to validate against.
+/// Note: these must kept be in ascending order
enum class MslVersion {
kMsl_1_2,
kMsl_2_1,
+ kMsl_2_3,
};
+/// MslVersion less-than operator
+inline bool operator<(MslVersion a, MslVersion b) {
+ return static_cast<int>(a) < static_cast<int>(b);
+}
+
/// The return structure of Validate()
struct Result {
/// True if validation passed