1#version 310 es 2#extension GL_OES_shader_image_atomic : require 3layout(local_size_x = 1) in; 4 5layout(r32ui, binding = 0) uniform highp uimage2D uImage; 6layout(r32i, binding = 1) uniform highp iimage2D iImage; 7layout(binding = 2, std430) buffer SSBO 8{ 9 uint u32; 10 int i32; 11} ssbo; 12 13shared int int_atomic; 14shared uint uint_atomic; 15shared int int_atomic_array[1]; 16shared uint uint_atomic_array[1]; 17 18void main() 19{ 20 imageAtomicAdd(uImage, ivec2(1, 5), 1u); 21 22 // Test that we do not invalidate OpImage variables which are loaded from UniformConstant 23 // address space. 24 imageStore(iImage, ivec2(1, 6), ivec4(imageAtomicAdd(uImage, ivec2(1, 5), 1u))); 25 26 imageAtomicOr(uImage, ivec2(1, 5), 1u); 27 imageAtomicXor(uImage, ivec2(1, 5), 1u); 28 imageAtomicAnd(uImage, ivec2(1, 5), 1u); 29 imageAtomicMin(uImage, ivec2(1, 5), 1u); 30 imageAtomicMax(uImage, ivec2(1, 5), 1u); 31 //imageAtomicExchange(uImage, ivec2(1, 5), 1u); 32 imageAtomicCompSwap(uImage, ivec2(1, 5), 10u, 2u); 33 34 imageAtomicAdd(iImage, ivec2(1, 6), 1); 35 imageAtomicOr(iImage, ivec2(1, 6), 1); 36 imageAtomicXor(iImage, ivec2(1, 6), 1); 37 imageAtomicAnd(iImage, ivec2(1, 6), 1); 38 imageAtomicMin(iImage, ivec2(1, 6), 1); 39 imageAtomicMax(iImage, ivec2(1, 6), 1); 40 //imageAtomicExchange(iImage, ivec2(1, 5), 1u); 41 imageAtomicCompSwap(iImage, ivec2(1, 5), 10, 2); 42 43 atomicAdd(ssbo.u32, 1u); 44 atomicOr(ssbo.u32, 1u); 45 atomicXor(ssbo.u32, 1u); 46 atomicAnd(ssbo.u32, 1u); 47 atomicMin(ssbo.u32, 1u); 48 atomicMax(ssbo.u32, 1u); 49 atomicExchange(ssbo.u32, 1u); 50 atomicCompSwap(ssbo.u32, 10u, 2u); 51 52 atomicAdd(ssbo.i32, 1); 53 atomicOr(ssbo.i32, 1); 54 atomicXor(ssbo.i32, 1); 55 atomicAnd(ssbo.i32, 1); 56 atomicMin(ssbo.i32, 1); 57 atomicMax(ssbo.i32, 1); 58 atomicExchange(ssbo.i32, 1); 59 atomicCompSwap(ssbo.i32, 10, 2); 60 61 atomicAdd(int_atomic, 10); 62 atomicAdd(uint_atomic, 10u); 63 atomicAdd(int_atomic_array[0], 10); 64 atomicAdd(uint_atomic_array[0], 10u); 65} 66 67