Merge pull request #2976 from jeremy-lunarg/hayes-fix-2975
[platform/upstream/glslang.git] / Test / spv.bufferhandle18.frag
1 #version 450\r
2 \r
3 #extension GL_EXT_shader_explicit_arithmetic_types_int64 : enable\r
4 #extension GL_EXT_buffer_reference2 : enable\r
5 #extension GL_EXT_scalar_block_layout : enable\r
6 \r
7 layout(buffer_reference, buffer_reference_align = 8) buffer T1 {\r
8     int x;\r
9     bool y;\r
10 };\r
11 layout(buffer_reference, buffer_reference_align = 64) buffer T2 {\r
12     int x;\r
13 };\r
14 \r
15 const int s = int(uint64_t(T1(T2(uint64_t(3)))));\r
16 int x[s];\r
17 const uint64_t t = uint64_t(true ? T2(uint64_t(10)) : T2(uint64_t(11)));\r
18 \r
19 \r
20 #define sizeof(T) (uint64_t(T(uint64_t(0))+1))\r
21 \r
22 const uint64_t s2 = sizeof(T1);\r
23 uint buf[int(s2)];\r
24 \r
25 \r
26 void main()\r
27 {\r
28     T1 a = T1(uint64_t(4)), b = T1(uint64_t(5));\r
29     T1 c = true ? a : b;\r
30     T1 d = (a,b);\r
31     T1 e = true ? T1(uint64_t(6)) : T1(uint64_t(7));\r
32     T1 f = a.y ? T1(uint64_t(8)) : T1(uint64_t(9));\r
33 \r
34     f[3].x = 1;\r
35     (f+5).x = 1;\r
36 \r
37     T1 arr[2] = {a, f};\r
38     arr[1][7].x = 1;\r
39     int i;\r
40     arr[i][i].x = 1;\r
41     // Since we don't distinguish between "pointer" and "reference" type,\r
42     // a reference type can have [] applied to it repeatedly and it has\r
43     // the effect of adding up the indices.\r
44     arr[i][i][i][i][i][i][i].x = 1;\r
45 \r
46     T1 j;\r
47     j = j+1;\r
48     j = j-2;\r
49     j += 3;\r
50     j -= 4;\r
51     j = 5+j;\r
52     T1 k = j + 6;\r
53     int64_t x = k - j;\r
54     uint64_t y = sizeof(T1);\r
55     k = k + (-1);\r
56 \r
57     T2 m;\r
58     m = m+1;\r
59 }\r