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 13void main() 14{ 15 imageAtomicAdd(uImage, ivec2(1, 5), 1u); 16 17 // Test that we do not invalidate OpImage variables which are loaded from UniformConstant 18 // address space. 19 imageStore(iImage, ivec2(1, 6), ivec4(imageAtomicAdd(uImage, ivec2(1, 5), 1u))); 20 21 imageAtomicOr(uImage, ivec2(1, 5), 1u); 22 imageAtomicXor(uImage, ivec2(1, 5), 1u); 23 imageAtomicAnd(uImage, ivec2(1, 5), 1u); 24 imageAtomicMin(uImage, ivec2(1, 5), 1u); 25 imageAtomicMax(uImage, ivec2(1, 5), 1u); 26 //imageAtomicExchange(uImage, ivec2(1, 5), 1u); 27 imageAtomicCompSwap(uImage, ivec2(1, 5), 10u, 2u); 28 29 imageAtomicAdd(iImage, ivec2(1, 6), 1); 30 imageAtomicOr(iImage, ivec2(1, 6), 1); 31 imageAtomicXor(iImage, ivec2(1, 6), 1); 32 imageAtomicAnd(iImage, ivec2(1, 6), 1); 33 imageAtomicMin(iImage, ivec2(1, 6), 1); 34 imageAtomicMax(iImage, ivec2(1, 6), 1); 35 //imageAtomicExchange(iImage, ivec2(1, 5), 1u); 36 imageAtomicCompSwap(iImage, ivec2(1, 5), 10, 2); 37 38 atomicAdd(ssbo.u32, 1u); 39 atomicOr(ssbo.u32, 1u); 40 atomicXor(ssbo.u32, 1u); 41 atomicAnd(ssbo.u32, 1u); 42 atomicMin(ssbo.u32, 1u); 43 atomicMax(ssbo.u32, 1u); 44 atomicExchange(ssbo.u32, 1u); 45 atomicCompSwap(ssbo.u32, 10u, 2u); 46 47 atomicAdd(ssbo.i32, 1); 48 atomicOr(ssbo.i32, 1); 49 atomicXor(ssbo.i32, 1); 50 atomicAnd(ssbo.i32, 1); 51 atomicMin(ssbo.i32, 1); 52 atomicMax(ssbo.i32, 1); 53 atomicExchange(ssbo.i32, 1); 54 atomicCompSwap(ssbo.i32, 10, 2); 55} 56 57