metal: Set preserveInvariance for shader options

This enables invariance for metal, for stable vertex positions, which
are useful for depth prepass and similiar things.
This commit is contained in:
Mikko Lehtonen
2022-01-09 23:24:51 +02:00
committed by Dzmitry Malyshau
parent 16edd91976
commit 99b3a6ebfb
3 changed files with 10 additions and 0 deletions

View File

@@ -979,6 +979,11 @@ impl super::PrivateCapabilities {
supports_depth_clip_control: device
.supports_feature_set(MTLFeatureSet::iOS_GPUFamily4_v1)
|| os_is_mac,
supports_preserve_invariance: if os_is_mac {
Self::version_at_least(major, minor, 11, 0)
} else {
Self::version_at_least(major, minor, 13, 0)
},
}
}

View File

@@ -76,6 +76,10 @@ impl super::Device {
let options = mtl::CompileOptions::new();
options.set_language_version(self.shared.private_caps.msl_version);
if self.shared.private_caps.supports_preserve_invariance {
options.set_preserve_invariance(true);
}
let library = self
.shared
.device

View File

@@ -229,6 +229,7 @@ struct PrivateCapabilities {
supports_arrays_of_textures_write: bool,
supports_mutability: bool,
supports_depth_clip_control: bool,
supports_preserve_invariance: bool,
}
#[derive(Clone, Debug)]