1#version 450 core 2 3#extension GL_ARB_gpu_shader_int64: enable 4#extension GL_EXT_shader_image_int64: enable 5#extension GL_KHR_memory_scope_semantics: enable 6#extension GL_ARB_sparse_texture2: enable 7 8layout(binding = 0, r64i) uniform i64image1D i1D; 9layout(binding = 1, r64ui) uniform u64image2D u2D; 10layout(binding = 2, r64i) uniform i64image3D i3D; 11layout(binding = 3, r64ui) uniform u64imageCube uCube; 12layout(binding = 4, r64i) uniform i64imageBuffer iBuf; 13layout(binding = 5, r64ui) uniform u64image1DArray u1DArray; 14layout(binding = 6, r64i) uniform i64image2DArray i2DArray; 15layout(binding = 7, r64ui) uniform u64imageCubeArray uCubeArray; 16layout(binding = 8, r64i) uniform i64image2DRect i2DRect; 17layout(binding = 9, r64ui) uniform u64image2DMS u2DMS; 18layout(binding = 10, r64i) uniform i64image2DMSArray i2DMSArray; 19 20layout(binding = 11) buffer Buf 21{ 22 int64_t i64; 23 uint64_t u64; 24 i64vec4 i64v4; 25 u64vec4 u64v4; 26 ivec4 i32v4; 27}; 28 29void main() 30{ 31 i64 = imageAtomicAdd(i1D, i32v4.x, i64); 32 i64 = imageAtomicMin(i3D, i32v4.xyz, i64); 33 i64 = imageAtomicMax(iBuf, i32v4.x, i64); 34 i64 = imageAtomicAnd(i2DArray, i32v4.xyz, i64); 35 i64 = imageAtomicOr(i2DRect, i32v4.xy, i64); 36 i64 = imageAtomicXor(i2DMSArray, i32v4.xyz, i32v4.w, i64); 37 i64 = imageAtomicExchange(i1D, i32v4.x, i64); 38 i64 = imageAtomicCompSwap(i3D, i32v4.xyz, i64, i64 + 1); 39 40 i64 = imageAtomicAdd(i1D, i32v4.x, i64, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed); 41 i64 = imageAtomicMin(i3D, i32v4.xyz, i64, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed); 42 i64 = imageAtomicMax(iBuf, i32v4.x, i64, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed); 43 i64 = imageAtomicAnd(i2DArray, i32v4.xyz, i64, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed); 44 i64 = imageAtomicOr(i2DRect, i32v4.xy, i64, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed); 45 i64 = imageAtomicXor(i2DMSArray, i32v4.xyz, i32v4.w, i64, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed); 46 i64 = imageAtomicExchange(i1D, i32v4.x, i64, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed); 47 i64 = imageAtomicCompSwap(i3D, i32v4.xyz, i64, i64 + 1, gl_ScopeDevice, 48 gl_StorageSemanticsImage, gl_SemanticsRelaxed, gl_StorageSemanticsImage, gl_SemanticsRelaxed); 49 i64 = imageAtomicLoad(iBuf, i32v4.x, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed); 50 imageAtomicStore(i2DArray, i32v4.xyz, i64, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed); 51 52 u64 = imageAtomicAdd(u2D, i32v4.xy, u64); 53 u64 = imageAtomicMin(uCube, i32v4.xyz, u64); 54 u64 = imageAtomicMax(u1DArray, i32v4.xy, u64); 55 u64 = imageAtomicAnd(uCubeArray, i32v4.xyz, u64); 56 u64 = imageAtomicOr(u2DMS, i32v4.xy, i32v4.z, u64); 57 u64 = imageAtomicXor(u2D, i32v4.xy, u64); 58 u64 = imageAtomicExchange(uCube, i32v4.xyz, u64); 59 u64 = imageAtomicCompSwap(u1DArray, i32v4.xy, u64, u64 + 1); 60 61 u64 = imageAtomicAdd(u2D, i32v4.xy, u64, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed); 62 u64 = imageAtomicMin(uCube, i32v4.xyz, u64, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed); 63 u64 = imageAtomicMax(u1DArray, i32v4.xy, u64, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed); 64 u64 = imageAtomicAnd(uCubeArray, i32v4.xyz, u64, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed); 65 u64 = imageAtomicOr(u2DMS, i32v4.xy, i32v4.z, u64, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed); 66 u64 = imageAtomicXor(u2D, i32v4.xy, u64, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed); 67 u64 = imageAtomicExchange(uCube, i32v4.xyz, u64, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed); 68 u64 = imageAtomicCompSwap(u1DArray, i32v4.xy, u64, u64 + 1, gl_ScopeDevice, 69 gl_StorageSemanticsImage, gl_SemanticsRelaxed, gl_StorageSemanticsImage, gl_SemanticsRelaxed); 70 u64 = imageAtomicLoad(uCubeArray, i32v4.xyz, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed); 71 imageAtomicStore(u2DMS, i32v4.xy, i32v4.z, u64, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed); 72 73 i64v4 += imageLoad(i1D, i32v4.x); 74 i64v4 += imageLoad(i3D, i32v4.xyz); 75 i64v4 += imageLoad(iBuf, i32v4.x); 76 i64v4 += imageLoad(i2DArray, i32v4.xyz); 77 i64v4 += imageLoad(i2DRect, i32v4.xy); 78 i64v4 += imageLoad(i2DMSArray, i32v4.xyz, i32v4.w); 79 80 imageStore(u2D, i32v4.xy, u64v4); 81 imageStore(uCube, i32v4.xyz, u64v4); 82 imageStore(u1DArray, i32v4.xy, u64v4); 83 imageStore(uCubeArray, i32v4.xyz, u64v4); 84 imageStore(u2DMS, i32v4.xy, i32v4.z, u64v4); 85 86 sparseImageLoadARB(i3D, i32v4.xyz, i64v4); 87 sparseImageLoadARB(i2DArray, i32v4.xyz, i64v4); 88 sparseImageLoadARB(i2DRect, i32v4.xy, i64v4); 89 sparseImageLoadARB(u2D, i32v4.xy, u64v4); 90 sparseImageLoadARB(uCube, i32v4.xyz, u64v4); 91 sparseImageLoadARB(uCubeArray, i32v4.xyz, u64v4); 92}