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