Home | History | Annotate | Download | only in Test
      1 #version 450 core
      2 
      3 #extension GL_ARB_gpu_shader_int64: enable
      4 #extension GL_NV_shader_atomic_int64: enable
      5 
      6 layout(local_size_x = 16, local_size_y = 16) in;
      7 
      8 layout(binding = 0) buffer Buffer
      9 {
     10     int64_t  i64;
     11     uint64_t u64;
     12 } buf;
     13 
     14 struct Struct
     15 {
     16     int64_t  i64;
     17     uint64_t u64;
     18 };
     19 
     20 shared Struct s;
     21 
     22 void main()
     23 {
     24     const int64_t  i64c = -24;
     25     const uint64_t u64c = 0xF00000000Ful; 
     26 
     27     // Test shader storage block
     28     int64_t  i64 = 0;
     29     uint64_t u64 = 0;
     30 
     31     i64 += atomicMin(buf.i64, i64c);
     32     u64 += atomicMin(buf.u64, u64c);
     33 
     34     i64 += atomicMax(buf.i64, i64c);
     35     u64 += atomicMax(buf.u64, u64c);
     36 
     37     i64 += atomicAnd(buf.i64, i64c);
     38     u64 += atomicAnd(buf.u64, u64c);
     39 
     40     i64 += atomicOr(buf.i64, i64c);
     41     u64 += atomicOr(buf.u64, u64c);
     42 
     43     i64 += atomicXor(buf.i64, i64c);
     44     u64 += atomicXor(buf.u64, u64c);
     45 
     46     i64 += atomicAdd(buf.i64, i64c);
     47     i64 += atomicExchange(buf.i64, i64c);
     48     i64 += atomicCompSwap(buf.i64, i64c, i64);
     49 
     50     buf.i64 = i64;
     51     buf.u64 = u64;
     52 
     53     // Test shared variable
     54     i64 = 0;
     55     u64 = 0;
     56 
     57     i64 += atomicMin(s.i64, i64c);
     58     u64 += atomicMin(s.u64, u64c);
     59 
     60     i64 += atomicMax(s.i64, i64c);
     61     u64 += atomicMax(s.u64, u64c);
     62 
     63     i64 += atomicAnd(s.i64, i64c);
     64     u64 += atomicAnd(s.u64, u64c);
     65 
     66     i64 += atomicOr(s.i64, i64c);
     67     u64 += atomicOr(s.u64, u64c);
     68 
     69     i64 += atomicXor(s.i64, i64c);
     70     u64 += atomicXor(s.u64, u64c);
     71 
     72     i64 += atomicAdd(s.i64, i64c);
     73     i64 += atomicExchange(s.i64, i64c);
     74     i64 += atomicCompSwap(s.i64, i64c, i64);
     75 
     76     s.i64 = i64;
     77     s.u64 = u64;
     78 }
     79 
     80