diff --git a/CHANGELOG.md b/CHANGELOG.md index 5678c5760d..f7dc3ba79c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -109,6 +109,7 @@ By @SupaMaggie70Incorporated in [#8206](https://github.com/gfx-rs/wgpu/pull/8206 - Added support for transient textures on Vulkan and Metal. By @opstic in [#8247](https://github.com/gfx-rs/wgpu/pull/8247) - Implement shader triangle barycentric coordinate builtins. By @atlv24 in [#8320](https://github.com/gfx-rs/wgpu/pull/8320). +- Added support for binding arrays of storage textures on Metal. By @msvbg in [#8464](https://github.com/gfx-rs/wgpu/pull/8464) ### Changes diff --git a/naga/src/back/msl/writer.rs b/naga/src/back/msl/writer.rs index 484142630d..50f5c86503 100644 --- a/naga/src/back/msl/writer.rs +++ b/naga/src/back/msl/writer.rs @@ -7099,9 +7099,11 @@ template } } crate::ImageClass::Storage { .. } => { - return Err(Error::UnsupportedArrayOf( - "read-write textures".to_string(), - )); + if options.lang_version < (3, 0) { + return Err(Error::UnsupportedArrayOf( + "read-write textures".to_string(), + )); + } } crate::ImageClass::External => { return Err(Error::UnsupportedArrayOf( diff --git a/wgpu-hal/src/metal/adapter.rs b/wgpu-hal/src/metal/adapter.rs index fa3d2fa8d4..bc0f8ead25 100644 --- a/wgpu-hal/src/metal/adapter.rs +++ b/wgpu-hal/src/metal/adapter.rs @@ -985,6 +985,13 @@ impl super::PrivateCapabilities { && self.supports_arrays_of_textures && self.argument_buffers as u64 >= MTLArgumentBuffersTier::Tier2 as u64, ); + features.set( + F::STORAGE_RESOURCE_BINDING_ARRAY, + self.msl_version >= MTLLanguageVersion::V3_0 + && self.supports_arrays_of_textures + && self.supports_arrays_of_textures_write + && self.argument_buffers as u64 >= MTLArgumentBuffersTier::Tier2 as u64, + ); features.set( F::SHADER_INT64, self.int64 && self.msl_version >= MTLLanguageVersion::V2_3,