#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;
}

