diff --git a/wgpu-hal/src/metal/adapter.rs b/wgpu-hal/src/metal/adapter.rs index 287430a7fed..5dcde974c40 100644 --- a/wgpu-hal/src/metal/adapter.rs +++ b/wgpu-hal/src/metal/adapter.rs @@ -906,6 +906,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) + }, } } diff --git a/wgpu-hal/src/metal/device.rs b/wgpu-hal/src/metal/device.rs index 84a2caf362c..be70a64841f 100644 --- a/wgpu-hal/src/metal/device.rs +++ b/wgpu-hal/src/metal/device.rs @@ -76,6 +76,11 @@ 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 { + // TODO: Workaround until naga supports [[invariant]] + options.set_preserve_invariance(true); + } + let library = self .shared .device diff --git a/wgpu-hal/src/metal/mod.rs b/wgpu-hal/src/metal/mod.rs index 2ea58c2635a..ccee2b00d6d 100644 --- a/wgpu-hal/src/metal/mod.rs +++ b/wgpu-hal/src/metal/mod.rs @@ -226,6 +226,7 @@ struct PrivateCapabilities { supports_arrays_of_textures_write: bool, supports_mutability: bool, supports_depth_clip_control: bool, + supports_preserve_invariance: bool, } #[derive(Clone, Debug)]