3 #extension GL_ARB_gpu_shader_int64: enable
\r
4 #extension GL_NV_shader_atomic_int64: enable
\r
6 layout(local_size_x = 16, local_size_y = 16) in;
\r
8 layout(binding = 0) buffer Buffer
\r
24 const int64_t i64c = -24;
\r
25 const uint64_t u64c = 0xF00000000Ful;
\r
27 // Test shader storage block
\r
31 i64 += atomicMin(buf.i64, i64c);
\r
32 u64 += atomicMin(buf.u64, u64c);
\r
34 i64 += atomicMax(buf.i64, i64c);
\r
35 u64 += atomicMax(buf.u64, u64c);
\r
37 i64 += atomicAnd(buf.i64, i64c);
\r
38 u64 += atomicAnd(buf.u64, u64c);
\r
40 i64 += atomicOr(buf.i64, i64c);
\r
41 u64 += atomicOr(buf.u64, u64c);
\r
43 i64 += atomicXor(buf.i64, i64c);
\r
44 u64 += atomicXor(buf.u64, u64c);
\r
46 i64 += atomicAdd(buf.i64, i64c);
\r
47 i64 += atomicExchange(buf.i64, i64c);
\r
48 i64 += atomicCompSwap(buf.i64, i64c, i64);
\r
53 // Test shared variable
\r
57 i64 += atomicMin(s.i64, i64c);
\r
58 u64 += atomicMin(s.u64, u64c);
\r
60 i64 += atomicMax(s.i64, i64c);
\r
61 u64 += atomicMax(s.u64, u64c);
\r
63 i64 += atomicAnd(s.i64, i64c);
\r
64 u64 += atomicAnd(s.u64, u64c);
\r
66 i64 += atomicOr(s.i64, i64c);
\r
67 u64 += atomicOr(s.u64, u64c);
\r
69 i64 += atomicXor(s.i64, i64c);
\r
70 u64 += atomicXor(s.u64, u64c);
\r
72 i64 += atomicAdd(s.i64, i64c);
\r
73 i64 += atomicExchange(s.i64, i64c);
\r
74 i64 += atomicCompSwap(s.i64, i64c, i64);
\r