diff --git a/naga/src/back/msl/writer.rs b/naga/src/back/msl/writer.rs index 4fc589ea37..a1b2f764c3 100644 --- a/naga/src/back/msl/writer.rs +++ b/naga/src/back/msl/writer.rs @@ -344,9 +344,7 @@ impl TypedGlobalVariable<'_> { let (space, access, reference) = match var.space.to_msl_name() { Some(space) if self.reference => { let access = if var.space.needs_access_qualifier() - && !self - .usage - .intersects(valid::GlobalUse::WRITE | valid::GlobalUse::ATOMIC) + && !self.usage.intersects(valid::GlobalUse::WRITE) { "const" } else { diff --git a/naga/src/lib.rs b/naga/src/lib.rs index 01e6e17e09..ffda755740 100644 --- a/naga/src/lib.rs +++ b/naga/src/lib.rs @@ -2023,9 +2023,6 @@ pub enum Statement { /// /// Doing atomics on images with mipmaps is not supported, so there is no /// `level` operand. - /// - /// This statement is a barrier for any operations on the corresponding - /// [`Expression::GlobalVariable`] for this image. ImageAtomic { /// The image to perform an atomic operation on. This must have type /// [`Image`]. (This will necessarily be a [`GlobalVariable`] or diff --git a/naga/tests/out/glsl/atomicTexture.cs_main.Compute.glsl b/naga/tests/out/glsl/atomicTexture.cs_main.Compute.glsl new file mode 100644 index 0000000000..280907e523 --- /dev/null +++ b/naga/tests/out/glsl/atomicTexture.cs_main.Compute.glsl @@ -0,0 +1,29 @@ +#version 310 es + +precision highp float; +precision highp int; + +layout(local_size_x = 2, local_size_y = 1, local_size_z = 1) in; + +layout(r32ui) uniform highp uimage2D _group_0_binding_0_cs; + +layout(r32i) uniform highp iimage2D _group_0_binding_1_cs; + + +void main() { + uvec3 id = gl_LocalInvocationID; + imageAtomicMax(_group_0_binding_0_cs, ivec2(0, 0), 1u); + imageAtomicMin(_group_0_binding_0_cs, ivec2(0, 0), 1u); + imageAtomicAdd(_group_0_binding_0_cs, ivec2(0, 0), 1u); + imageAtomicAnd(_group_0_binding_0_cs, ivec2(0, 0), 1u); + imageAtomicOr(_group_0_binding_0_cs, ivec2(0, 0), 1u); + imageAtomicXor(_group_0_binding_0_cs, ivec2(0, 0), 1u); + imageAtomicMax(_group_0_binding_1_cs, ivec2(0, 0), 1); + imageAtomicMin(_group_0_binding_1_cs, ivec2(0, 0), 1); + imageAtomicAdd(_group_0_binding_1_cs, ivec2(0, 0), 1); + imageAtomicAnd(_group_0_binding_1_cs, ivec2(0, 0), 1); + imageAtomicOr(_group_0_binding_1_cs, ivec2(0, 0), 1); + imageAtomicXor(_group_0_binding_1_cs, ivec2(0, 0), 1); + return; +} + diff --git a/naga/tests/out/hlsl/atomicTexture.ron b/naga/tests/out/hlsl/atomicTexture.ron index 67a9035512..66bda64ff8 100644 --- a/naga/tests/out/hlsl/atomicTexture.ron +++ b/naga/tests/out/hlsl/atomicTexture.ron @@ -6,7 +6,7 @@ compute:[ ( entry_point:"cs_main", - target_profile:"cs_6_6", + target_profile:"cs_5_0", ), ], ) diff --git a/naga/tests/snapshots.rs b/naga/tests/snapshots.rs index 728fffab44..db5fcdf19e 100644 --- a/naga/tests/snapshots.rs +++ b/naga/tests/snapshots.rs @@ -790,7 +790,7 @@ fn convert_wgsl() { ), ( "atomicTexture", - Targets::SPIRV | Targets::METAL | Targets::HLSL | Targets::WGSL, + Targets::SPIRV | Targets::METAL | Targets::GLSL | Targets::HLSL | Targets::WGSL, ), ( "atomicOps-float32",