1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- #version 450 core
- #extension GL_ARB_gpu_shader_int64: enable
- #extension GL_NV_shader_atomic_int64: enable
- layout(local_size_x = 16, local_size_y = 16) in;
- layout(binding = 0) buffer Buffer
- {
- int64_t i64;
- uint64_t u64;
- } buf;
- struct Struct
- {
- int64_t i64;
- uint64_t u64;
- };
- shared Struct s;
- void main()
- {
- const int64_t i64c = -24;
- const uint64_t u64c = 0xF00000000Ful;
- // Test shader storage block
- int64_t i64 = 0;
- uint64_t u64 = 0;
- i64 += atomicMin(buf.i64, i64c);
- u64 += atomicMin(buf.u64, u64c);
- i64 += atomicMax(buf.i64, i64c);
- u64 += atomicMax(buf.u64, u64c);
- i64 += atomicAnd(buf.i64, i64c);
- u64 += atomicAnd(buf.u64, u64c);
- i64 += atomicOr(buf.i64, i64c);
- u64 += atomicOr(buf.u64, u64c);
- i64 += atomicXor(buf.i64, i64c);
- u64 += atomicXor(buf.u64, u64c);
- i64 += atomicAdd(buf.i64, i64c);
- i64 += atomicExchange(buf.i64, i64c);
- i64 += atomicCompSwap(buf.i64, i64c, i64);
- buf.i64 = i64;
- buf.u64 = u64;
- // Test shared variable
- i64 = 0;
- u64 = 0;
- i64 += atomicMin(s.i64, i64c);
- u64 += atomicMin(s.u64, u64c);
- i64 += atomicMax(s.i64, i64c);
- u64 += atomicMax(s.u64, u64c);
- i64 += atomicAnd(s.i64, i64c);
- u64 += atomicAnd(s.u64, u64c);
- i64 += atomicOr(s.i64, i64c);
- u64 += atomicOr(s.u64, u64c);
- i64 += atomicXor(s.i64, i64c);
- u64 += atomicXor(s.u64, u64c);
- i64 += atomicAdd(s.i64, i64c);
- i64 += atomicExchange(s.i64, i64c);
- i64 += atomicCompSwap(s.i64, i64c, i64);
- s.i64 = i64;
- s.u64 = u64;
- }
|