From ad50ded7b56ef272cbee224ddab0339816ea22b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cle=CC=81ment=20Foucault?= Date: Sat, 30 Sep 2023 21:37:36 +0200 Subject: [PATCH] Metal: Fix texture atomic wrapper GLSL imageAtomic operations operate on single components. --- .../gpu/shaders/metal/mtl_shader_defines.msl | 52 +++++++++---------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/source/blender/gpu/shaders/metal/mtl_shader_defines.msl b/source/blender/gpu/shaders/metal/mtl_shader_defines.msl index 22685368d95..4b5be8c0e24 100644 --- a/source/blender/gpu/shaders/metal/mtl_shader_defines.msl +++ b/source/blender/gpu/shaders/metal/mtl_shader_defines.msl @@ -985,52 +985,52 @@ inline void _texture_write_internal_fast(thread _mtl_combined_image_sampler_3d -vec _texture_image_atomic_min_internal(thread _mtl_combined_image_sampler_1d tex, +S _texture_image_atomic_min_internal(thread _mtl_combined_image_sampler_1d tex, int coord, - vec data) + S data) { - return tex.texture->atomic_fetch_min(uint(coord), data); + return tex.texture->atomic_fetch_min(uint(coord), vec(data)).x; } template -vec _texture_image_atomic_min_internal(thread _mtl_combined_image_sampler_1d_array tex, +S _texture_image_atomic_min_internal(thread _mtl_combined_image_sampler_1d_array tex, int2 coord, - vec data) + S data) { - return tex.texture->atomic_fetch_min(uint(coord.x), uint(coord.y), data); + return tex.texture->atomic_fetch_min(uint(coord.x), uint(coord.y), vec(data)).x; } template -vec _texture_image_atomic_min_internal(thread _mtl_combined_image_sampler_2d tex, +S _texture_image_atomic_min_internal(thread _mtl_combined_image_sampler_2d tex, int2 coord, - vec data) + S data) { - return tex.texture->atomic_fetch_min(uint2(coord.xy), data); + return tex.texture->atomic_fetch_min(uint2(coord.xy), vec(data)).x; } template -vec _texture_image_atomic_min_internal(thread _mtl_combined_image_sampler_2d_array tex, +S _texture_image_atomic_min_internal(thread _mtl_combined_image_sampler_2d_array tex, int3 coord, - vec data) + S data) { - return tex.texture->atomic_fetch_min(uint2(coord.xy), uint(coord.z), data); + return tex.texture->atomic_fetch_min(uint2(coord.xy), uint(coord.z), vec(data)).x; } template -vec _texture_image_atomic_min_internal(thread _mtl_combined_image_sampler_3d tex, +S _texture_image_atomic_min_internal(thread _mtl_combined_image_sampler_3d tex, int3 coord, - vec data) + S data) { - return tex.texture->atomic_fetch_min(uint3(coord), data); + return tex.texture->atomic_fetch_min(uint3(coord), vec(data)).x; } /* Atomic Exchange. */ -template -vec _texture_image_atomic_exchange_internal(thread _mtl_combined_image_sampler_1d tex, +template +S _texture_image_atomic_exchange_internal(thread _mtl_combined_image_sampler_1d tex, int coord, - vec data) + S data) { - return tex.texture->atomic_exchange(uint(coord), data); + return tex.texture->atomic_exchange(uint(coord), vec(data)).x; } template @@ -1038,31 +1038,31 @@ S _texture_image_atomic_exchange_internal(thread _mtl_combined_image_sampler_1d_ int2 coord, S data) { - return tex.texture->atomic_exchange(uint(coord.x), uint(coord.y), data); + return tex.texture->atomic_exchange(uint(coord.x), uint(coord.y), vec(data)).x; } -template +template S _texture_image_atomic_exchange_internal(thread _mtl_combined_image_sampler_2d tex, int2 coord, S data) { - return tex.texture->atomic_exchange(uint2(coord.xy), data); + return tex.texture->atomic_exchange(uint2(coord.xy), vec(data)).x; } -template +template S _texture_image_atomic_exchange_internal(thread _mtl_combined_image_sampler_2d_array tex, int3 coord, S data) { - return tex.texture->atomic_exchange(uint2(coord.xy), uint(coord.z), data); + return tex.texture->atomic_exchange(uint2(coord.xy), uint(coord.z), vec(data)).x; } -template +template S _texture_image_atomic_exchange_internal(thread _mtl_combined_image_sampler_3d tex, int3 coord, S data) { - return tex.texture->atomic_exchange(uint3(coord), data); + return tex.texture->atomic_exchange(uint3(coord), vec(data)).x; } #else