Merge pull request #2976 from jeremy-lunarg/hayes-fix-2975
[platform/upstream/glslang.git] / Test / 310AofA.vert
1 #version 310 es
2
3 // Check name mangling of functions with parameters that are multi-dimensional arrays.
4
5 #define NX 2
6 #define NY 3
7 #define NZ 4
8 void f(bool a, float b, uint[4] c, int[NY][NX] d) {
9 }
10
11 void main() {
12   int[NY][NX] d;
13   f(false, 12.1, uint[NZ](uint(0),uint(1),uint(1),uint(2)), d);
14 }
15
16 buffer b {\r
17     float u[];  // ERROR\r
18     vec4 v[];\r
19 } name[3];
20 \r
21 uniform ub {\r
22     float u;\r
23     vec4 v[];   // ERROR\r
24 } uname[3];
25
26 buffer b2 {\r
27     float u;\r
28     vec4 v[][];  // ERROR\r
29 } name2[3];
30
31 buffer b3 {\r
32     float u; \r
33     vec4 v[][7];\r
34 } name3[3];
35
36 // General arrays of arrays
37 \r
38 float[4][5][6] many[1][2][3];\r
39 \r
40 float gu[][7];     // ERROR, size required\r
41 float g4[4][7];\r
42 float g5[5][7];\r
43 \r
44 float[4][7] foo(float a[5][7])\r
45 {\r
46     float r[7];\r
47     r = a[2];\r
48     float[](a[0], a[1], r, a[3]);              // ERROR, too few dims\r
49     float[4][7][4](a[0], a[1], r, a[3]);       // ERROR, too many dims\r
50     return float[4][7](a[0], a[1], r, a[3]);\r
51     return float[][](a[0], a[1], r, a[3]);\r
52     return float[][7](a[0], a[1], a[2], a[3]);\r
53 }\r
54 \r
55 void bar(float[5][7]) {}\r
56 \r
57 void foo2()\r
58 {\r
59     {\r
60         float gu[3][4][2];\r
61 \r
62         gu[2][4][1] = 4.0;                     // ERROR, overflow\r
63     }\r
64     vec4 ca4[3][2] = vec4[][](vec4[2](vec4(0.0), vec4(1.0)),\r
65                               vec4[2](vec4(0.0), vec4(1.0)),\r
66                               vec4[2](vec4(0.0), vec4(1.0)));\r
67     vec4 caim[][2] = vec4[][](vec4[2](vec4(4.0), vec4(2.0)),\r
68                               vec4[2](vec4(4.0), vec4(2.0)),\r
69                               vec4[2](vec4(4.0), vec4(2.0)));\r
70     vec4 caim2[][] = vec4[][](vec4[2](vec4(4.0), vec4(2.0)),\r
71                               vec4[2](vec4(4.0), vec4(2.0)),\r
72                               vec4[2](vec4(4.0), vec4(2.0)));\r
73     vec4 caim3[3][] = vec4[][](vec4[2](vec4(4.0), vec4(2.0)),\r
74                                vec4[2](vec4(4.0), vec4(2.0)),\r
75                                vec4[2](vec4(4.0), vec4(2.0)));\r
76 \r
77     g4 = foo(g5);\r
78     g5 = g4;           // ERROR, wrong types\r
79     gu = g4;           // ERROR, not yet sized\r
80 \r
81     foo(gu);           // ERROR, not yet sized\r
82     bar(g5);\r
83 \r
84     if (foo(g5) == g4)\r
85         ;\r
86     if (foo(g5) == g5)  // ERROR, different types\r
87         ;\r
88 \r
89     float u[5][7];\r
90     u[5][2] = 5.0;      // ERROR\r
91     foo(u);\r
92 \r
93     vec4 badAss[3];\r
94     name[1].v[-1];     // ERROR\r
95     name[1].v[1] = vec4(4.3);\r
96     name[1].v = badAss;  // ERROR, bad assignemnt\r
97 \r
98     name3[0].v[1].length();  // 7\r
99     name3[0].v.length();     // run time\r
100 }\r
101 \r
102 struct badS {\r
103     int sa[];     // ERROR\r
104     int a[][];    // ERROR\r
105     int b[][2];   // ERROR\r
106     int c[2][];   // ERROR\r
107     int d[][4];   // ERROR\r
108 };\r
109 \r
110 in float inArray[2][3];    // ERROR\r
111 out float outArray[2][3];  // ERROR\r
112 \r
113 uniform ubaa {\r
114     int a;\r
115 } ubaaname[2][3];  // ERROR\r
116 \r
117 vec3 func(in mat3[2] x[3])\r
118 {\r
119         mat3 a0 = x[2][1];\r
120     return a0[2];\r
121 }\r