| #version 310 es |
| #extension GL_OES_shader_image_atomic : require |
| layout(local_size_x = 1) in; |
| |
| layout(r32ui, binding = 0) uniform highp uimage2D uImage; |
| layout(r32i, binding = 1) uniform highp iimage2D iImage; |
| layout(binding = 2, std430) buffer SSBO |
| { |
| uint u32; |
| int i32; |
| } ssbo; |
| |
| shared int int_atomic; |
| shared uint uint_atomic; |
| shared int int_atomic_array[1]; |
| shared uint uint_atomic_array[1]; |
| |
| void main() |
| { |
| imageAtomicAdd(uImage, ivec2(1, 5), 1u); |
| |
| // Test that we do not invalidate OpImage variables which are loaded from UniformConstant |
| // address space. |
| imageStore(iImage, ivec2(1, 6), ivec4(imageAtomicAdd(uImage, ivec2(1, 5), 1u))); |
| |
| imageAtomicOr(uImage, ivec2(1, 5), 1u); |
| imageAtomicXor(uImage, ivec2(1, 5), 1u); |
| imageAtomicAnd(uImage, ivec2(1, 5), 1u); |
| imageAtomicMin(uImage, ivec2(1, 5), 1u); |
| imageAtomicMax(uImage, ivec2(1, 5), 1u); |
| //imageAtomicExchange(uImage, ivec2(1, 5), 1u); |
| imageAtomicCompSwap(uImage, ivec2(1, 5), 10u, 2u); |
| |
| imageAtomicAdd(iImage, ivec2(1, 6), 1); |
| imageAtomicOr(iImage, ivec2(1, 6), 1); |
| imageAtomicXor(iImage, ivec2(1, 6), 1); |
| imageAtomicAnd(iImage, ivec2(1, 6), 1); |
| imageAtomicMin(iImage, ivec2(1, 6), 1); |
| imageAtomicMax(iImage, ivec2(1, 6), 1); |
| //imageAtomicExchange(iImage, ivec2(1, 5), 1u); |
| imageAtomicCompSwap(iImage, ivec2(1, 5), 10, 2); |
| |
| atomicAdd(ssbo.u32, 1u); |
| atomicOr(ssbo.u32, 1u); |
| atomicXor(ssbo.u32, 1u); |
| atomicAnd(ssbo.u32, 1u); |
| atomicMin(ssbo.u32, 1u); |
| atomicMax(ssbo.u32, 1u); |
| atomicExchange(ssbo.u32, 1u); |
| atomicCompSwap(ssbo.u32, 10u, 2u); |
| |
| atomicAdd(ssbo.i32, 1); |
| atomicOr(ssbo.i32, 1); |
| atomicXor(ssbo.i32, 1); |
| atomicAnd(ssbo.i32, 1); |
| atomicMin(ssbo.i32, 1); |
| atomicMax(ssbo.i32, 1); |
| atomicExchange(ssbo.i32, 1); |
| atomicCompSwap(ssbo.i32, 10, 2); |
| |
| atomicAdd(int_atomic, 10); |
| atomicAdd(uint_atomic, 10u); |
| atomicAdd(int_atomic_array[0], 10); |
| atomicAdd(uint_atomic_array[0], 10u); |
| } |
| |