Metal: Handle use_tint_ir toggle
Hook it up to the IR version of the Tint MSL backend.
Bug: 42251016
Change-Id: Icf94c3476203d3b0d677b424f662c5944bd3f701
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/189741
Reviewed-by: Austin Eng <enga@chromium.org>
diff --git a/src/dawn/native/metal/ShaderModuleMTL.mm b/src/dawn/native/metal/ShaderModuleMTL.mm
index 1727257..084385b 100644
--- a/src/dawn/native/metal/ShaderModuleMTL.mm
+++ b/src/dawn/native/metal/ShaderModuleMTL.mm
@@ -63,6 +63,7 @@
X(std::string, entryPointName) \
X(bool, disableSymbolRenaming) \
X(tint::msl::writer::Options, tintOptions) \
+ X(bool, use_tint_ir) \
X(CacheKey::UnsafeUnkeyedValue<dawn::platform::Platform*>, platform) \
X(std::optional<uint32_t>, maxSubgroupSizeForFullSubgroups)
@@ -272,6 +273,7 @@
req.tintOptions.array_length_from_uniform = std::move(arrayLengthFromUniform);
req.tintOptions.pixel_local_options = std::move(pixelLocal);
req.tintOptions.bindings = std::move(bindings);
+ req.use_tint_ir = device->IsToggleEnabled(Toggle::UseTintIR);
req.tintOptions.disable_polyfill_integer_div_mod =
device->IsToggleEnabled(Toggle::DisablePolyfillsOnIntegerDivisonAndModulo);
@@ -347,7 +349,19 @@
}
TRACE_EVENT0(r.platform.UnsafeGetValue(), General, "tint::msl::writer::Generate");
- auto result = tint::msl::writer::Generate(program, r.tintOptions);
+ tint::Result<tint::msl::writer::Output> result;
+ if (r.use_tint_ir) {
+ // Convert the AST program to an IR module.
+ auto ir = tint::wgsl::reader::ProgramToLoweredIR(program);
+ DAWN_INVALID_IF(ir != tint::Success,
+ "An error occurred while generating Tint IR\n%s",
+ ir.Failure().reason.Str());
+
+ result = tint::msl::writer::Generate(ir.Get(), r.tintOptions);
+ } else {
+ result = tint::msl::writer::Generate(program, r.tintOptions);
+ }
+
DAWN_INVALID_IF(result != tint::Success, "An error occurred while generating MSL:\n%s",
result.Failure().reason.Str());