Merge pull request #2892 from greg-lunarg/mb
[platform/upstream/glslang.git] / Test / reflection.vert
1 #version 440 core\r
2 \r
3 layout(std140, row_major) uniform nameless {\r
4     vec3 anonMember1;\r
5     mat3x2 m23;\r
6     int scalarAfterm23;\r
7     vec4 anonDeadMember2;\r
8     vec4 anonMember3;\r
9     int scalarBeforeArray;\r
10     float floatArray[5];\r
11     int scalarAfterArray;\r
12     mat2x2 m22[9];\r
13 };\r
14 \r
15 layout(std140, column_major) uniform c_nameless {\r
16     vec3 c_anonMember1;\r
17     mat3x2 c_m23;\r
18     int c_scalarAfterm23;\r
19     vec4 c_anonDeadMember2;\r
20     vec4 c_anonMember3;\r
21 };\r
22 \r
23 layout(std140) uniform named {\r
24     vec3 deadMember1;\r
25     int scalar;\r
26     vec4 member2;\r
27     vec4 member3;\r
28     vec2 memvec2;\r
29     float memf1;\r
30     bool  memf2;\r
31     int   memf3;\r
32     vec2 memvec2a;\r
33     mat2x2 m22[7];\r
34 } ablock;\r
35 \r
36 layout(std140) uniform namelessdead {\r
37     int a;\r
38 };\r
39 \r
40 layout(std140) uniform namedDead {\r
41     int b;\r
42 } bblock;\r
43 \r
44 struct N1 {\r
45     float a;\r
46 };\r
47 \r
48 struct N2 {\r
49     float b;\r
50     float c;\r
51     float d;\r
52 };\r
53 \r
54 struct N3 {\r
55     N1 n1;\r
56     N2 n2;\r
57 };\r
58 \r
59 layout(std140) uniform nested {\r
60     N3 foo;\r
61 } nest;\r
62 \r
63 layout(std140) uniform nested2 {\r
64     vec4 padding; // offset 0, size 16\r
65     N3 a;       // offset 16, size 32\r
66     N1 b[4];    // offset 48, size 64\r
67     N1 c[2];    // offset 112, size 32\r
68     N1 d[4];    // offset 144, size 64\r
69 } nest2;\r
70 \r
71 struct TS {\r
72     int a;\r
73     int dead;\r
74 };\r
75 \r
76 uniform TS s;\r
77 \r
78 uniform float uf1;\r
79 uniform float uf2;\r
80 uniform float ufDead3;\r
81 uniform float ufDead4;\r
82 \r
83 uniform writeonly uimage2D image_ui2D;\r
84 uniform sampler2D sampler_2D;\r
85 uniform sampler2DMSArray sampler_2DMSArray;\r
86 \r
87 uniform mat2 dm22[10];\r
88 \r
89 struct deep1 {\r
90     vec2 va[3];\r
91     bool b;\r
92 };\r
93 \r
94 struct deep2 {\r
95     int i;\r
96     deep1 d1[4];\r
97 };\r
98 \r
99 struct deep3 {\r
100     vec4 iv4;\r
101     deep2 d2;\r
102     ivec3 v3;\r
103 };\r
104 \r
105 in float attributeFloat;\r
106 layout(location = 2) in vec2 attributeFloat2;\r
107 in vec3 attributeFloat3;\r
108 in vec4 attributeFloat4;\r
109 in mat4 attributeMat4;\r
110 in float attributeFloatArray[3];\r
111 \r
112 uniform deep3 deepA[2], deepB[2], deepC[3], deepD[2];\r
113 \r
114 const bool control = true;\r
115 \r
116 void deadFunction()\r
117 {\r
118     vec3 v3 = ablock.deadMember1;\r
119     vec4 v = anonDeadMember2;\r
120     float f = ufDead4;\r
121 }\r
122 \r
123 void liveFunction2()\r
124 {\r
125     vec3 v = anonMember1;\r
126     float f = uf1;\r
127 }\r
128 \r
129 void liveFunction1(writeonly uimage2D p_ui2D, sampler2D p_2D, sampler2DMSArray p_2DMSArray)\r
130 \r
131 {\r
132     liveFunction2();\r
133     float f = uf2;\r
134     vec4 v = ablock.member3;\r
135 }\r
136 \r
137 uniform abl {\r
138     float foo;\r
139 } arrBl[4];\r
140 \r
141 uniform abl2 {\r
142     float foo;\r
143 } arrBl2[4];\r
144 \r
145 buffer buf1 {\r
146     float scalar;\r
147     float runtimeArray[];\r
148 } buf1i;\r
149 \r
150 buffer buf2 {\r
151     float scalar;\r
152     N2 runtimeArray[];\r
153 } buf2i;\r
154 \r
155 buffer buf3 {\r
156     float scalar;\r
157     float runtimeArray[];\r
158 } buf3i;\r
159 \r
160 buffer buf4 {\r
161     float scalar;\r
162     N2 runtimeArray[];\r
163 } buf4i;\r
164 \r
165 struct VertexInfo {\r
166     float position[3];\r
167     float normal[3];\r
168 };\r
169 \r
170 struct TriangleInfo {\r
171     VertexInfo v[3];\r
172 };\r
173 \r
174 buffer VertexCollection {\r
175     TriangleInfo t[5];\r
176     uint padding[10];\r
177 };\r
178 \r
179 out float outval;\r
180 \r
181 void main()\r
182 {\r
183     liveFunction1(image_ui2D, sampler_2D, sampler_2DMSArray);\r
184     liveFunction2();\r
185 \r
186     if (! control)\r
187         deadFunction();\r
188 \r
189     float f;\r
190     int i;\r
191     if (control) {\r
192         liveFunction2();\r
193         f = anonMember3.z;\r
194         f = s.a;\r
195         f = ablock.scalar;\r
196         f = m23[1].y + scalarAfterm23;\r
197         f = c_m23[1].y + c_scalarAfterm23;\r
198         f += scalarBeforeArray;\r
199         f += floatArray[2];\r
200         f += floatArray[4];\r
201         f += scalarAfterArray;\r
202         f += ablock.memvec2.x;\r
203         f += ablock.memf1;\r
204         f += float(ablock.memf2);\r
205         f += ablock.memf3;\r
206         f += ablock.memvec2a.y;\r
207         f += ablock.m22[i][1][0];\r
208         f += dm22[3][0][1];\r
209         f += m22[2][1].y;\r
210         f += nest.foo.n1.a + nest.foo.n2.b + nest.foo.n2.c + nest.foo.n2.d;\r
211         f += deepA[i].d2.d1[2].va[1].x;\r
212         f += deepB[1].d2.d1[i].va[1].x;\r
213         f += deepB[i].d2.d1[i].va[1].x;\r
214         deep3 d = deepC[1];\r
215         deep3 da[2] = deepD;\r
216         deep1 db = deepA[i].d2.d1[i];\r
217     } else\r
218         f = ufDead3;\r
219 \r
220     f += arrBl[2].foo + arrBl[0].foo;\r
221     f += arrBl2[i].foo;\r
222 \r
223     f += attributeFloat;\r
224     f += attributeFloat2.x;\r
225     f += attributeFloat3.x;\r
226     f += attributeFloat4.x;\r
227     f += attributeMat4[0][1];\r
228     f += attributeFloatArray[2];\r
229     f += buf1i.runtimeArray[3];\r
230     f += buf2i.runtimeArray[3].c;\r
231     f += buf3i.runtimeArray[gl_InstanceID];\r
232     f += buf4i.runtimeArray[gl_InstanceID].c;\r
233 \r
234     N3 n = nest2.a;\r
235     N1 b[4] = nest2.b;\r
236     f += nest2.c[1].a;\r
237     f += nest2.d[gl_InstanceID].a;\r
238 \r
239     f += t[0].v[0].position[0];\r
240     f += t[gl_InstanceID].v[gl_InstanceID].position[gl_InstanceID];\r
241     f += t[gl_InstanceID].v[gl_InstanceID].normal[gl_InstanceID];\r
242     TriangleInfo tlocal[5] = t;\r
243 \r
244     outval = f;\r
245 }\r