1e5c31af7Sopenharmony_cigroup struct "Uniform structs"
2e5c31af7Sopenharmony_ci	# Struct linkage handling
3e5c31af7Sopenharmony_ci	case basic
4e5c31af7Sopenharmony_ci		version 450
5e5c31af7Sopenharmony_ci		desc "Same uniform struct in both shaders"
6e5c31af7Sopenharmony_ci		values {
7e5c31af7Sopenharmony_ci			uniform float val.a = 1.0;
8e5c31af7Sopenharmony_ci			uniform float val.b = 2.0;
9e5c31af7Sopenharmony_ci			output float out0 = 3.0;
10e5c31af7Sopenharmony_ci		}
11e5c31af7Sopenharmony_ci		vertex ""
12e5c31af7Sopenharmony_ci			#version 450
13e5c31af7Sopenharmony_ci			${VERTEX_DECLARATIONS}
14e5c31af7Sopenharmony_ci			struct Struct {mediump float a; mediump float b;};
15e5c31af7Sopenharmony_ci			uniform Struct val;
16e5c31af7Sopenharmony_ci			out mediump float dummy;
17e5c31af7Sopenharmony_ci			void main()
18e5c31af7Sopenharmony_ci			{
19e5c31af7Sopenharmony_ci				dummy = val.a + val.b;
20e5c31af7Sopenharmony_ci				${VERTEX_OUTPUT}
21e5c31af7Sopenharmony_ci			}
22e5c31af7Sopenharmony_ci		""
23e5c31af7Sopenharmony_ci		fragment ""
24e5c31af7Sopenharmony_ci			#version 450
25e5c31af7Sopenharmony_ci			precision mediump float;
26e5c31af7Sopenharmony_ci			struct Struct {mediump float a; mediump float b;};
27e5c31af7Sopenharmony_ci			uniform Struct val;
28e5c31af7Sopenharmony_ci			in mediump float dummy;
29e5c31af7Sopenharmony_ci			${FRAGMENT_DECLARATIONS}
30e5c31af7Sopenharmony_ci			void main()
31e5c31af7Sopenharmony_ci			{
32e5c31af7Sopenharmony_ci				out0 = val.b + val.a;
33e5c31af7Sopenharmony_ci				out0 = out0 + dummy;
34e5c31af7Sopenharmony_ci				out0 = out0 - dummy;
35e5c31af7Sopenharmony_ci				${FRAGMENT_OUTPUT}
36e5c31af7Sopenharmony_ci			}
37e5c31af7Sopenharmony_ci		""
38e5c31af7Sopenharmony_ci	end
39e5c31af7Sopenharmony_ci
40e5c31af7Sopenharmony_ci	case vertex_only
41e5c31af7Sopenharmony_ci		version 450
42e5c31af7Sopenharmony_ci		desc "Uniform struct declared in both, used only in vertex."
43e5c31af7Sopenharmony_ci		values {
44e5c31af7Sopenharmony_ci			uniform float val.a = 1.0;
45e5c31af7Sopenharmony_ci			uniform float val.b = 2.0;
46e5c31af7Sopenharmony_ci			output float out0 = 3.0;
47e5c31af7Sopenharmony_ci		}
48e5c31af7Sopenharmony_ci		vertex ""
49e5c31af7Sopenharmony_ci			#version 450
50e5c31af7Sopenharmony_ci			${VERTEX_DECLARATIONS}
51e5c31af7Sopenharmony_ci			struct Struct {mediump float a; mediump float b;};
52e5c31af7Sopenharmony_ci			uniform Struct val;
53e5c31af7Sopenharmony_ci			out mediump float res;
54e5c31af7Sopenharmony_ci			void main()
55e5c31af7Sopenharmony_ci			{
56e5c31af7Sopenharmony_ci				res = val.a + val.b;
57e5c31af7Sopenharmony_ci				${VERTEX_OUTPUT}
58e5c31af7Sopenharmony_ci			}
59e5c31af7Sopenharmony_ci		""
60e5c31af7Sopenharmony_ci		fragment ""
61e5c31af7Sopenharmony_ci			#version 450
62e5c31af7Sopenharmony_ci			precision mediump float;
63e5c31af7Sopenharmony_ci			struct Struct {mediump float a; mediump float b;};
64e5c31af7Sopenharmony_ci			uniform Struct val;
65e5c31af7Sopenharmony_ci			in mediump float res;
66e5c31af7Sopenharmony_ci			${FRAGMENT_DECLARATIONS}
67e5c31af7Sopenharmony_ci			void main()
68e5c31af7Sopenharmony_ci			{
69e5c31af7Sopenharmony_ci				out0 = res;
70e5c31af7Sopenharmony_ci				${FRAGMENT_OUTPUT}
71e5c31af7Sopenharmony_ci			}
72e5c31af7Sopenharmony_ci		""
73e5c31af7Sopenharmony_ci	end
74e5c31af7Sopenharmony_ci
75e5c31af7Sopenharmony_ci	case fragment_only
76e5c31af7Sopenharmony_ci		version 450
77e5c31af7Sopenharmony_ci		desc "Uniform struct declared in both, used only in fragment."
78e5c31af7Sopenharmony_ci		values {
79e5c31af7Sopenharmony_ci			uniform float val.a = 1.0;
80e5c31af7Sopenharmony_ci			uniform float val.b = 2.0;
81e5c31af7Sopenharmony_ci			output float out0 = 3.0;
82e5c31af7Sopenharmony_ci		}
83e5c31af7Sopenharmony_ci		vertex ""
84e5c31af7Sopenharmony_ci			#version 450
85e5c31af7Sopenharmony_ci			${VERTEX_DECLARATIONS}
86e5c31af7Sopenharmony_ci			struct Struct {mediump float a; mediump float b;};
87e5c31af7Sopenharmony_ci			uniform Struct val;
88e5c31af7Sopenharmony_ci			void main()
89e5c31af7Sopenharmony_ci			{
90e5c31af7Sopenharmony_ci				${VERTEX_OUTPUT}
91e5c31af7Sopenharmony_ci			}
92e5c31af7Sopenharmony_ci		""
93e5c31af7Sopenharmony_ci		fragment ""
94e5c31af7Sopenharmony_ci			#version 450
95e5c31af7Sopenharmony_ci			precision mediump float;
96e5c31af7Sopenharmony_ci			struct Struct {mediump float a; mediump float b;};
97e5c31af7Sopenharmony_ci			uniform Struct val;
98e5c31af7Sopenharmony_ci			${FRAGMENT_DECLARATIONS}
99e5c31af7Sopenharmony_ci			void main()
100e5c31af7Sopenharmony_ci			{
101e5c31af7Sopenharmony_ci				out0 = val.a + val.b;
102e5c31af7Sopenharmony_ci				${FRAGMENT_OUTPUT}
103e5c31af7Sopenharmony_ci			}
104e5c31af7Sopenharmony_ci		""
105e5c31af7Sopenharmony_ci	end
106e5c31af7Sopenharmony_ci
107e5c31af7Sopenharmony_ci	case partial
108e5c31af7Sopenharmony_ci		version 450
109e5c31af7Sopenharmony_ci		desc "Uniform struct declared in both, used partially in both."
110e5c31af7Sopenharmony_ci		values {
111e5c31af7Sopenharmony_ci			uniform float val.a = 1.0;
112e5c31af7Sopenharmony_ci			uniform float val.b = 2.0;
113e5c31af7Sopenharmony_ci			output float out0 = 3.0;
114e5c31af7Sopenharmony_ci		}
115e5c31af7Sopenharmony_ci		vertex ""
116e5c31af7Sopenharmony_ci			#version 450
117e5c31af7Sopenharmony_ci			${VERTEX_DECLARATIONS}
118e5c31af7Sopenharmony_ci			struct Struct {mediump float a; mediump float b;};
119e5c31af7Sopenharmony_ci			uniform Struct val;
120e5c31af7Sopenharmony_ci			out mediump float res;
121e5c31af7Sopenharmony_ci			void main()
122e5c31af7Sopenharmony_ci			{
123e5c31af7Sopenharmony_ci				res = val.a;
124e5c31af7Sopenharmony_ci				${VERTEX_OUTPUT}
125e5c31af7Sopenharmony_ci			}
126e5c31af7Sopenharmony_ci		""
127e5c31af7Sopenharmony_ci		fragment ""
128e5c31af7Sopenharmony_ci			#version 450
129e5c31af7Sopenharmony_ci			precision mediump float;
130e5c31af7Sopenharmony_ci			struct Struct {mediump float a; mediump float b;};
131e5c31af7Sopenharmony_ci			uniform Struct val;
132e5c31af7Sopenharmony_ci			${FRAGMENT_DECLARATIONS}
133e5c31af7Sopenharmony_ci			in mediump float res;
134e5c31af7Sopenharmony_ci			void main()
135e5c31af7Sopenharmony_ci			{
136e5c31af7Sopenharmony_ci				out0 = res + val.b;
137e5c31af7Sopenharmony_ci				${FRAGMENT_OUTPUT}
138e5c31af7Sopenharmony_ci			}
139e5c31af7Sopenharmony_ci		""
140e5c31af7Sopenharmony_ci	end
141e5c31af7Sopenharmony_ci
142e5c31af7Sopenharmony_ci	case vec4
143e5c31af7Sopenharmony_ci		version 450
144e5c31af7Sopenharmony_ci		desc "Same uniform struct in both shaders. Datatype vec4"
145e5c31af7Sopenharmony_ci		values {
146e5c31af7Sopenharmony_ci			uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
147e5c31af7Sopenharmony_ci			uniform vec4 val.b = vec4(1.0, 2.0, 3.0, 4.0);
148e5c31af7Sopenharmony_ci			output float out0 = 3.0;
149e5c31af7Sopenharmony_ci		}
150e5c31af7Sopenharmony_ci		vertex ""
151e5c31af7Sopenharmony_ci			#version 450
152e5c31af7Sopenharmony_ci			${VERTEX_DECLARATIONS}
153e5c31af7Sopenharmony_ci			struct Struct {mediump vec4 a; mediump vec4 b;};
154e5c31af7Sopenharmony_ci			uniform Struct val;
155e5c31af7Sopenharmony_ci			out mediump float dummy;
156e5c31af7Sopenharmony_ci			void main()
157e5c31af7Sopenharmony_ci			{
158e5c31af7Sopenharmony_ci				dummy = val.a.x + val.b.y;
159e5c31af7Sopenharmony_ci				${VERTEX_OUTPUT}
160e5c31af7Sopenharmony_ci			}
161e5c31af7Sopenharmony_ci		""
162e5c31af7Sopenharmony_ci		fragment ""
163e5c31af7Sopenharmony_ci			#version 450
164e5c31af7Sopenharmony_ci			precision mediump float;
165e5c31af7Sopenharmony_ci			struct Struct {mediump vec4 a; mediump vec4 b;};
166e5c31af7Sopenharmony_ci			uniform Struct val;
167e5c31af7Sopenharmony_ci			in mediump float dummy;
168e5c31af7Sopenharmony_ci			${FRAGMENT_DECLARATIONS}
169e5c31af7Sopenharmony_ci			void main()
170e5c31af7Sopenharmony_ci			{
171e5c31af7Sopenharmony_ci				out0 = val.b.y + val.a.x;
172e5c31af7Sopenharmony_ci				out0 = out0 + dummy;
173e5c31af7Sopenharmony_ci				out0 = out0 - dummy;
174e5c31af7Sopenharmony_ci				${FRAGMENT_OUTPUT}
175e5c31af7Sopenharmony_ci			}
176e5c31af7Sopenharmony_ci		""
177e5c31af7Sopenharmony_ci	end
178e5c31af7Sopenharmony_ci
179e5c31af7Sopenharmony_ci	case vertex_only_vec4
180e5c31af7Sopenharmony_ci		version 450
181e5c31af7Sopenharmony_ci		desc "Uniform struct declared in both, used only in vertex. Datatype vec4	"
182e5c31af7Sopenharmony_ci		values {
183e5c31af7Sopenharmony_ci			uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
184e5c31af7Sopenharmony_ci			uniform vec4 val.b = vec4(1.0, 2.0, 3.0, 4.0);
185e5c31af7Sopenharmony_ci			output float out0 = 3.0;
186e5c31af7Sopenharmony_ci		}
187e5c31af7Sopenharmony_ci		vertex ""
188e5c31af7Sopenharmony_ci			#version 450
189e5c31af7Sopenharmony_ci			${VERTEX_DECLARATIONS}
190e5c31af7Sopenharmony_ci			struct Struct {mediump vec4 a; mediump vec4 b;};
191e5c31af7Sopenharmony_ci			uniform Struct val;
192e5c31af7Sopenharmony_ci			out mediump float res;
193e5c31af7Sopenharmony_ci			void main()
194e5c31af7Sopenharmony_ci			{
195e5c31af7Sopenharmony_ci				res = val.a.x + val.b.y;
196e5c31af7Sopenharmony_ci				${VERTEX_OUTPUT}
197e5c31af7Sopenharmony_ci			}
198e5c31af7Sopenharmony_ci		""
199e5c31af7Sopenharmony_ci		fragment ""
200e5c31af7Sopenharmony_ci			#version 450
201e5c31af7Sopenharmony_ci			precision mediump float;
202e5c31af7Sopenharmony_ci			struct Struct {mediump vec4 a; mediump vec4 b;};
203e5c31af7Sopenharmony_ci			uniform Struct val;
204e5c31af7Sopenharmony_ci			in mediump float res;
205e5c31af7Sopenharmony_ci			${FRAGMENT_DECLARATIONS}
206e5c31af7Sopenharmony_ci			void main()
207e5c31af7Sopenharmony_ci			{			out0 = res;
208e5c31af7Sopenharmony_ci				${FRAGMENT_OUTPUT}
209e5c31af7Sopenharmony_ci			}
210e5c31af7Sopenharmony_ci		""
211e5c31af7Sopenharmony_ci	end
212e5c31af7Sopenharmony_ci
213e5c31af7Sopenharmony_ci	case fragment_only_vec4
214e5c31af7Sopenharmony_ci		version 450
215e5c31af7Sopenharmony_ci		desc "Uniform struct declared in both, used only in fragment. Datatype vec4"
216e5c31af7Sopenharmony_ci		values {
217e5c31af7Sopenharmony_ci			uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
218e5c31af7Sopenharmony_ci			uniform vec4 val.b = vec4(1.0, 2.0, 3.0, 4.0);
219e5c31af7Sopenharmony_ci			output float out0 = 3.0;
220e5c31af7Sopenharmony_ci		}
221e5c31af7Sopenharmony_ci		vertex ""
222e5c31af7Sopenharmony_ci			#version 450
223e5c31af7Sopenharmony_ci			${VERTEX_DECLARATIONS}
224e5c31af7Sopenharmony_ci			struct Struct {mediump vec4 a; mediump vec4 b;};
225e5c31af7Sopenharmony_ci			uniform Struct val;
226e5c31af7Sopenharmony_ci			void main()
227e5c31af7Sopenharmony_ci			{
228e5c31af7Sopenharmony_ci				${VERTEX_OUTPUT}
229e5c31af7Sopenharmony_ci			}
230e5c31af7Sopenharmony_ci		""
231e5c31af7Sopenharmony_ci		fragment ""
232e5c31af7Sopenharmony_ci			#version 450
233e5c31af7Sopenharmony_ci			precision mediump float;
234e5c31af7Sopenharmony_ci			struct Struct {mediump vec4 a; mediump vec4 b;};
235e5c31af7Sopenharmony_ci			uniform Struct val;
236e5c31af7Sopenharmony_ci			${FRAGMENT_DECLARATIONS}
237e5c31af7Sopenharmony_ci			void main()
238e5c31af7Sopenharmony_ci			{			out0 = val.a.x + val.b.y;
239e5c31af7Sopenharmony_ci				${FRAGMENT_OUTPUT}
240e5c31af7Sopenharmony_ci			}
241e5c31af7Sopenharmony_ci		""
242e5c31af7Sopenharmony_ci	end
243e5c31af7Sopenharmony_ci
244e5c31af7Sopenharmony_ci	case partial_vec4
245e5c31af7Sopenharmony_ci		version 450
246e5c31af7Sopenharmony_ci		desc "Uniform struct declared in both, used partially in both. Datatype vec4"
247e5c31af7Sopenharmony_ci		values {
248e5c31af7Sopenharmony_ci			uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
249e5c31af7Sopenharmony_ci			uniform vec4 val.b = vec4(1.0, 2.0, 3.0, 4.0);
250e5c31af7Sopenharmony_ci			output float out0 = 3.0;
251e5c31af7Sopenharmony_ci		}
252e5c31af7Sopenharmony_ci		vertex ""
253e5c31af7Sopenharmony_ci			#version 450
254e5c31af7Sopenharmony_ci			${VERTEX_DECLARATIONS}
255e5c31af7Sopenharmony_ci			struct Struct {mediump vec4 a; mediump vec4 b;};
256e5c31af7Sopenharmony_ci			uniform Struct val;
257e5c31af7Sopenharmony_ci			out mediump float res;
258e5c31af7Sopenharmony_ci			void main()
259e5c31af7Sopenharmony_ci			{
260e5c31af7Sopenharmony_ci				res = val.a.x;
261e5c31af7Sopenharmony_ci				${VERTEX_OUTPUT}
262e5c31af7Sopenharmony_ci			}
263e5c31af7Sopenharmony_ci		""
264e5c31af7Sopenharmony_ci		fragment ""
265e5c31af7Sopenharmony_ci			#version 450
266e5c31af7Sopenharmony_ci			precision mediump float;
267e5c31af7Sopenharmony_ci			struct Struct {mediump vec4 a; mediump vec4 b;};
268e5c31af7Sopenharmony_ci			uniform Struct val;
269e5c31af7Sopenharmony_ci			${FRAGMENT_DECLARATIONS}
270e5c31af7Sopenharmony_ci			in mediump float res;
271e5c31af7Sopenharmony_ci			void main()
272e5c31af7Sopenharmony_ci			{			out0 = res + val.b.y;
273e5c31af7Sopenharmony_ci				${FRAGMENT_OUTPUT}
274e5c31af7Sopenharmony_ci			}
275e5c31af7Sopenharmony_ci		""
276e5c31af7Sopenharmony_ci	end
277e5c31af7Sopenharmony_ci
278e5c31af7Sopenharmony_ci	case vec4_vec3
279e5c31af7Sopenharmony_ci		version 450
280e5c31af7Sopenharmony_ci		desc "Same uniform struct in both shaders. Datatype vec4 and vec3"
281e5c31af7Sopenharmony_ci		values {
282e5c31af7Sopenharmony_ci			uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
283e5c31af7Sopenharmony_ci			uniform vec3 val.b = vec3(1.0, 2.0, 3.0);
284e5c31af7Sopenharmony_ci			output float out0 = 3.0;
285e5c31af7Sopenharmony_ci		}
286e5c31af7Sopenharmony_ci		vertex ""
287e5c31af7Sopenharmony_ci			#version 450
288e5c31af7Sopenharmony_ci			${VERTEX_DECLARATIONS}
289e5c31af7Sopenharmony_ci			struct Struct {mediump vec4 a; mediump vec3 b;};
290e5c31af7Sopenharmony_ci			uniform Struct val;
291e5c31af7Sopenharmony_ci			out mediump float dummy;
292e5c31af7Sopenharmony_ci			void main()
293e5c31af7Sopenharmony_ci			{
294e5c31af7Sopenharmony_ci				dummy = val.a.x + val.b.y;
295e5c31af7Sopenharmony_ci				${VERTEX_OUTPUT}
296e5c31af7Sopenharmony_ci			}
297e5c31af7Sopenharmony_ci		""
298e5c31af7Sopenharmony_ci		fragment ""
299e5c31af7Sopenharmony_ci			#version 450
300e5c31af7Sopenharmony_ci			precision mediump float;
301e5c31af7Sopenharmony_ci			struct Struct {mediump vec4 a; mediump vec3 b;};
302e5c31af7Sopenharmony_ci			uniform Struct val;
303e5c31af7Sopenharmony_ci			in mediump float dummy;
304e5c31af7Sopenharmony_ci			${FRAGMENT_DECLARATIONS}
305e5c31af7Sopenharmony_ci			void main()
306e5c31af7Sopenharmony_ci			{			out0 = val.b.y + val.a.x;
307e5c31af7Sopenharmony_ci				out0 = out0 + dummy;
308e5c31af7Sopenharmony_ci				out0 = out0 - dummy;
309e5c31af7Sopenharmony_ci				${FRAGMENT_OUTPUT}
310e5c31af7Sopenharmony_ci			}
311e5c31af7Sopenharmony_ci		""
312e5c31af7Sopenharmony_ci	end
313e5c31af7Sopenharmony_ci
314e5c31af7Sopenharmony_ci	case vertex_only_vec4_vec3
315e5c31af7Sopenharmony_ci		version 450
316e5c31af7Sopenharmony_ci		desc "Uniform struct declared in both, used only in vertex. Datatype vec4 and vec3"
317e5c31af7Sopenharmony_ci		values {
318e5c31af7Sopenharmony_ci			uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
319e5c31af7Sopenharmony_ci			uniform vec3 val.b = vec3(1.0, 2.0, 3.0);
320e5c31af7Sopenharmony_ci			output float out0 = 3.0;
321e5c31af7Sopenharmony_ci		}
322e5c31af7Sopenharmony_ci		vertex ""
323e5c31af7Sopenharmony_ci			#version 450
324e5c31af7Sopenharmony_ci			${VERTEX_DECLARATIONS}
325e5c31af7Sopenharmony_ci			struct Struct {mediump vec4 a; mediump vec3 b;};
326e5c31af7Sopenharmony_ci			uniform Struct val;
327e5c31af7Sopenharmony_ci			out mediump float res;
328e5c31af7Sopenharmony_ci			void main()
329e5c31af7Sopenharmony_ci			{
330e5c31af7Sopenharmony_ci				res = val.a.x + val.b.y;
331e5c31af7Sopenharmony_ci				${VERTEX_OUTPUT}
332e5c31af7Sopenharmony_ci			}
333e5c31af7Sopenharmony_ci		""
334e5c31af7Sopenharmony_ci		fragment ""
335e5c31af7Sopenharmony_ci			#version 450
336e5c31af7Sopenharmony_ci			precision mediump float;
337e5c31af7Sopenharmony_ci			struct Struct {mediump vec4 a; mediump vec3 b;};
338e5c31af7Sopenharmony_ci			uniform Struct val;
339e5c31af7Sopenharmony_ci			in mediump float res;
340e5c31af7Sopenharmony_ci			${FRAGMENT_DECLARATIONS}
341e5c31af7Sopenharmony_ci			void main()
342e5c31af7Sopenharmony_ci			{			out0 = res;
343e5c31af7Sopenharmony_ci				${FRAGMENT_OUTPUT}
344e5c31af7Sopenharmony_ci			}
345e5c31af7Sopenharmony_ci		""
346e5c31af7Sopenharmony_ci	end
347e5c31af7Sopenharmony_ci
348e5c31af7Sopenharmony_ci	case fragment_only_vec4_vec3
349e5c31af7Sopenharmony_ci		version 450
350e5c31af7Sopenharmony_ci		desc "Uniform struct declared in both, used only in fragment. Datatype vec4 and vec3"
351e5c31af7Sopenharmony_ci		values {
352e5c31af7Sopenharmony_ci			uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
353e5c31af7Sopenharmony_ci			uniform vec3 val.b = vec3(1.0, 2.0, 3.0);
354e5c31af7Sopenharmony_ci			output float out0 = 3.0;
355e5c31af7Sopenharmony_ci		}
356e5c31af7Sopenharmony_ci		vertex ""
357e5c31af7Sopenharmony_ci			#version 450
358e5c31af7Sopenharmony_ci			${VERTEX_DECLARATIONS}
359e5c31af7Sopenharmony_ci			struct Struct {mediump vec4 a; mediump vec3 b;};
360e5c31af7Sopenharmony_ci			uniform Struct val;
361e5c31af7Sopenharmony_ci			void main()
362e5c31af7Sopenharmony_ci			{
363e5c31af7Sopenharmony_ci				${VERTEX_OUTPUT}
364e5c31af7Sopenharmony_ci			}
365e5c31af7Sopenharmony_ci		""
366e5c31af7Sopenharmony_ci		fragment ""
367e5c31af7Sopenharmony_ci			#version 450
368e5c31af7Sopenharmony_ci			precision mediump float;
369e5c31af7Sopenharmony_ci			struct Struct {mediump vec4 a; mediump vec3 b;};
370e5c31af7Sopenharmony_ci			uniform Struct val;
371e5c31af7Sopenharmony_ci			${FRAGMENT_DECLARATIONS}
372e5c31af7Sopenharmony_ci			void main()
373e5c31af7Sopenharmony_ci			{			out0 = val.a.x + val.b.y;
374e5c31af7Sopenharmony_ci				${FRAGMENT_OUTPUT}
375e5c31af7Sopenharmony_ci			}
376e5c31af7Sopenharmony_ci		""
377e5c31af7Sopenharmony_ci	end
378e5c31af7Sopenharmony_ci
379e5c31af7Sopenharmony_ci	case partial_vec4_vec3
380e5c31af7Sopenharmony_ci		version 450
381e5c31af7Sopenharmony_ci		desc "Uniform struct declared in both, used partially in both. Datatype vec4 and vec3"
382e5c31af7Sopenharmony_ci		values {
383e5c31af7Sopenharmony_ci			uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
384e5c31af7Sopenharmony_ci			uniform vec3 val.b = vec3(1.0, 2.0, 3.0);
385e5c31af7Sopenharmony_ci			output float out0 = 3.0;
386e5c31af7Sopenharmony_ci		}
387e5c31af7Sopenharmony_ci		vertex ""
388e5c31af7Sopenharmony_ci			#version 450
389e5c31af7Sopenharmony_ci			${VERTEX_DECLARATIONS}
390e5c31af7Sopenharmony_ci			struct Struct {mediump vec4 a; mediump vec3 b;};
391e5c31af7Sopenharmony_ci			uniform Struct val;
392e5c31af7Sopenharmony_ci			out mediump float res;
393e5c31af7Sopenharmony_ci			void main()
394e5c31af7Sopenharmony_ci			{
395e5c31af7Sopenharmony_ci				res = val.a.x;
396e5c31af7Sopenharmony_ci				${VERTEX_OUTPUT}
397e5c31af7Sopenharmony_ci			}
398e5c31af7Sopenharmony_ci		""
399e5c31af7Sopenharmony_ci		fragment ""
400e5c31af7Sopenharmony_ci			#version 450
401e5c31af7Sopenharmony_ci			precision mediump float;
402e5c31af7Sopenharmony_ci			struct Struct {mediump vec4 a; mediump vec3 b;};
403e5c31af7Sopenharmony_ci			uniform Struct val;
404e5c31af7Sopenharmony_ci			${FRAGMENT_DECLARATIONS}
405e5c31af7Sopenharmony_ci			in mediump float res;
406e5c31af7Sopenharmony_ci			void main()
407e5c31af7Sopenharmony_ci			{			out0 = res + val.b.y;
408e5c31af7Sopenharmony_ci				${FRAGMENT_OUTPUT}
409e5c31af7Sopenharmony_ci			}
410e5c31af7Sopenharmony_ci		""
411e5c31af7Sopenharmony_ci	end
412e5c31af7Sopenharmony_ci
413e5c31af7Sopenharmony_ci	case vec4_float
414e5c31af7Sopenharmony_ci		version 450
415e5c31af7Sopenharmony_ci		desc "Same uniform struct in both shaders. Datatype vec4 and float"
416e5c31af7Sopenharmony_ci		values {
417e5c31af7Sopenharmony_ci			uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
418e5c31af7Sopenharmony_ci			uniform float val.b = 2.0;
419e5c31af7Sopenharmony_ci			output float out0 = 3.0;
420e5c31af7Sopenharmony_ci		}
421e5c31af7Sopenharmony_ci		vertex ""
422e5c31af7Sopenharmony_ci			#version 450
423e5c31af7Sopenharmony_ci			${VERTEX_DECLARATIONS}
424e5c31af7Sopenharmony_ci			struct Struct {mediump vec4 a; mediump float b;};
425e5c31af7Sopenharmony_ci			uniform Struct val;
426e5c31af7Sopenharmony_ci			out mediump float dummy;
427e5c31af7Sopenharmony_ci			void main()
428e5c31af7Sopenharmony_ci			{
429e5c31af7Sopenharmony_ci				dummy = val.a.x + val.b;
430e5c31af7Sopenharmony_ci				${VERTEX_OUTPUT}
431e5c31af7Sopenharmony_ci			}
432e5c31af7Sopenharmony_ci		""
433e5c31af7Sopenharmony_ci		fragment ""
434e5c31af7Sopenharmony_ci			#version 450
435e5c31af7Sopenharmony_ci			precision mediump float;
436e5c31af7Sopenharmony_ci			struct Struct {mediump vec4 a; mediump float b;};
437e5c31af7Sopenharmony_ci			uniform Struct val;
438e5c31af7Sopenharmony_ci			in mediump float dummy;
439e5c31af7Sopenharmony_ci			${FRAGMENT_DECLARATIONS}
440e5c31af7Sopenharmony_ci			void main()
441e5c31af7Sopenharmony_ci			{			out0 = val.b + val.a.x;
442e5c31af7Sopenharmony_ci				out0 = out0 + dummy;
443e5c31af7Sopenharmony_ci				out0 = out0 - dummy;
444e5c31af7Sopenharmony_ci				${FRAGMENT_OUTPUT}
445e5c31af7Sopenharmony_ci			}
446e5c31af7Sopenharmony_ci		""
447e5c31af7Sopenharmony_ci	end
448e5c31af7Sopenharmony_ci
449e5c31af7Sopenharmony_ci	case vertex_only_vec4_float
450e5c31af7Sopenharmony_ci		version 450
451e5c31af7Sopenharmony_ci		desc "Uniform struct declared in both, used only in vertex. Datatype vec4 and float"
452e5c31af7Sopenharmony_ci		values {
453e5c31af7Sopenharmony_ci			uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
454e5c31af7Sopenharmony_ci			uniform float val.b = 2.0;
455e5c31af7Sopenharmony_ci			output float out0 = 3.0;
456e5c31af7Sopenharmony_ci		}
457e5c31af7Sopenharmony_ci		vertex ""
458e5c31af7Sopenharmony_ci			#version 450
459e5c31af7Sopenharmony_ci			${VERTEX_DECLARATIONS}
460e5c31af7Sopenharmony_ci			struct Struct {mediump vec4 a; mediump float b;};
461e5c31af7Sopenharmony_ci			uniform Struct val;
462e5c31af7Sopenharmony_ci			out mediump float res;
463e5c31af7Sopenharmony_ci			void main()
464e5c31af7Sopenharmony_ci			{
465e5c31af7Sopenharmony_ci				res = val.a.x + val.b;
466e5c31af7Sopenharmony_ci				${VERTEX_OUTPUT}
467e5c31af7Sopenharmony_ci			}
468e5c31af7Sopenharmony_ci		""
469e5c31af7Sopenharmony_ci		fragment ""
470e5c31af7Sopenharmony_ci			#version 450
471e5c31af7Sopenharmony_ci			precision mediump float;
472e5c31af7Sopenharmony_ci			struct Struct {mediump vec4 a; mediump float b;};
473e5c31af7Sopenharmony_ci			uniform Struct val;
474e5c31af7Sopenharmony_ci			in mediump float res;
475e5c31af7Sopenharmony_ci			${FRAGMENT_DECLARATIONS}
476e5c31af7Sopenharmony_ci			void main()
477e5c31af7Sopenharmony_ci			{			out0 = res;
478e5c31af7Sopenharmony_ci				${FRAGMENT_OUTPUT}
479e5c31af7Sopenharmony_ci			}
480e5c31af7Sopenharmony_ci		""
481e5c31af7Sopenharmony_ci	end
482e5c31af7Sopenharmony_ci
483e5c31af7Sopenharmony_ci	case fragment_only_vec4_float
484e5c31af7Sopenharmony_ci		version 450
485e5c31af7Sopenharmony_ci		desc "Uniform struct declared in both, used only in fragment. Datatype vec4 and float"
486e5c31af7Sopenharmony_ci		values {
487e5c31af7Sopenharmony_ci			uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
488e5c31af7Sopenharmony_ci			uniform float val.b = 2.0;
489e5c31af7Sopenharmony_ci			output float out0 = 3.0;
490e5c31af7Sopenharmony_ci		}
491e5c31af7Sopenharmony_ci		vertex ""
492e5c31af7Sopenharmony_ci			#version 450
493e5c31af7Sopenharmony_ci			${VERTEX_DECLARATIONS}
494e5c31af7Sopenharmony_ci			struct Struct {mediump vec4 a; mediump float b;};
495e5c31af7Sopenharmony_ci			uniform Struct val;
496e5c31af7Sopenharmony_ci			void main()
497e5c31af7Sopenharmony_ci			{
498e5c31af7Sopenharmony_ci				${VERTEX_OUTPUT}
499e5c31af7Sopenharmony_ci			}
500e5c31af7Sopenharmony_ci		""
501e5c31af7Sopenharmony_ci		fragment ""
502e5c31af7Sopenharmony_ci			#version 450
503e5c31af7Sopenharmony_ci			precision mediump float;
504e5c31af7Sopenharmony_ci			struct Struct {mediump vec4 a; mediump float b;};
505e5c31af7Sopenharmony_ci			uniform Struct val;
506e5c31af7Sopenharmony_ci			${FRAGMENT_DECLARATIONS}
507e5c31af7Sopenharmony_ci			void main()
508e5c31af7Sopenharmony_ci			{			out0 = val.a.x + val.b;
509e5c31af7Sopenharmony_ci				${FRAGMENT_OUTPUT}
510e5c31af7Sopenharmony_ci			}
511e5c31af7Sopenharmony_ci		""
512e5c31af7Sopenharmony_ci	end
513e5c31af7Sopenharmony_ci
514e5c31af7Sopenharmony_ci	case partial_vec4_float
515e5c31af7Sopenharmony_ci		version 450
516e5c31af7Sopenharmony_ci		desc "Uniform struct declared in both, used partially in both. Datatype vec4 and float"
517e5c31af7Sopenharmony_ci		values {
518e5c31af7Sopenharmony_ci			uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
519e5c31af7Sopenharmony_ci			uniform float val.b = 2.0;
520e5c31af7Sopenharmony_ci			output float out0 = 3.0;
521e5c31af7Sopenharmony_ci		}
522e5c31af7Sopenharmony_ci		vertex ""
523e5c31af7Sopenharmony_ci			#version 450
524e5c31af7Sopenharmony_ci			${VERTEX_DECLARATIONS}
525e5c31af7Sopenharmony_ci			struct Struct {mediump vec4 a; mediump float b;};
526e5c31af7Sopenharmony_ci			uniform Struct val;
527e5c31af7Sopenharmony_ci			out mediump float res;
528e5c31af7Sopenharmony_ci			void main()
529e5c31af7Sopenharmony_ci			{
530e5c31af7Sopenharmony_ci				res = val.a.x;
531e5c31af7Sopenharmony_ci				${VERTEX_OUTPUT}
532e5c31af7Sopenharmony_ci			}
533e5c31af7Sopenharmony_ci		""
534e5c31af7Sopenharmony_ci		fragment ""
535e5c31af7Sopenharmony_ci			#version 450
536e5c31af7Sopenharmony_ci			precision mediump float;
537e5c31af7Sopenharmony_ci			struct Struct {mediump vec4 a; mediump float b;};
538e5c31af7Sopenharmony_ci			uniform Struct val;
539e5c31af7Sopenharmony_ci			${FRAGMENT_DECLARATIONS}
540e5c31af7Sopenharmony_ci			in mediump float res;
541e5c31af7Sopenharmony_ci			void main()
542e5c31af7Sopenharmony_ci			{			out0 = res + val.b;
543e5c31af7Sopenharmony_ci				${FRAGMENT_OUTPUT}
544e5c31af7Sopenharmony_ci			}
545e5c31af7Sopenharmony_ci		""
546e5c31af7Sopenharmony_ci	end
547e5c31af7Sopenharmony_ci
548e5c31af7Sopenharmony_ci	case partial_vec4_struct
549e5c31af7Sopenharmony_ci		version 450
550e5c31af7Sopenharmony_ci		desc "Uniform struct declared in both, used partially in both. Datatype vec4 and struct with vec4"
551e5c31af7Sopenharmony_ci		values {
552e5c31af7Sopenharmony_ci			uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
553e5c31af7Sopenharmony_ci			uniform vec4 val.b.c = vec4(1.0, 2.0, 3.0, 4.0);
554e5c31af7Sopenharmony_ci			output float out0 = 3.0;
555e5c31af7Sopenharmony_ci		}
556e5c31af7Sopenharmony_ci		vertex ""
557e5c31af7Sopenharmony_ci			#version 450
558e5c31af7Sopenharmony_ci			${VERTEX_DECLARATIONS}
559e5c31af7Sopenharmony_ci			struct Inner {mediump vec4 c;};
560e5c31af7Sopenharmony_ci			struct Struct {mediump vec4 a; Inner b;};
561e5c31af7Sopenharmony_ci			uniform Struct val;
562e5c31af7Sopenharmony_ci			out mediump float res;
563e5c31af7Sopenharmony_ci			void main()
564e5c31af7Sopenharmony_ci			{
565e5c31af7Sopenharmony_ci				res = val.a.x;
566e5c31af7Sopenharmony_ci				${VERTEX_OUTPUT}
567e5c31af7Sopenharmony_ci			}
568e5c31af7Sopenharmony_ci		""
569e5c31af7Sopenharmony_ci		fragment ""
570e5c31af7Sopenharmony_ci			#version 450
571e5c31af7Sopenharmony_ci			precision mediump float;
572e5c31af7Sopenharmony_ci			struct Inner {mediump vec4 c;};
573e5c31af7Sopenharmony_ci			struct Struct {mediump vec4 a; Inner b;};
574e5c31af7Sopenharmony_ci			uniform Struct val;
575e5c31af7Sopenharmony_ci			${FRAGMENT_DECLARATIONS}
576e5c31af7Sopenharmony_ci			in mediump float res;
577e5c31af7Sopenharmony_ci			void main()
578e5c31af7Sopenharmony_ci			{			out0 = res + val.b.c.y;
579e5c31af7Sopenharmony_ci				${FRAGMENT_OUTPUT}
580e5c31af7Sopenharmony_ci			}
581e5c31af7Sopenharmony_ci		""
582e5c31af7Sopenharmony_ci	end
583e5c31af7Sopenharmony_ci
584e5c31af7Sopenharmony_ci	case partial_vec4_vec3_struct
585e5c31af7Sopenharmony_ci		version 450
586e5c31af7Sopenharmony_ci		desc "Uniform struct declared in both, used partially in both. Datatype vec4 and struct with vec3"
587e5c31af7Sopenharmony_ci		values {
588e5c31af7Sopenharmony_ci			uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
589e5c31af7Sopenharmony_ci			uniform vec3 val.b.c = vec3(1.0, 2.0, 3.0);
590e5c31af7Sopenharmony_ci			output float out0 = 3.0;
591e5c31af7Sopenharmony_ci		}
592e5c31af7Sopenharmony_ci		vertex ""
593e5c31af7Sopenharmony_ci			#version 450
594e5c31af7Sopenharmony_ci			${VERTEX_DECLARATIONS}
595e5c31af7Sopenharmony_ci			struct Inner {mediump vec3 c;};
596e5c31af7Sopenharmony_ci			struct Struct {mediump vec4 a; Inner b;};
597e5c31af7Sopenharmony_ci			uniform Struct val;
598e5c31af7Sopenharmony_ci			out mediump float res;
599e5c31af7Sopenharmony_ci			void main()
600e5c31af7Sopenharmony_ci			{
601e5c31af7Sopenharmony_ci				res = val.a.x;
602e5c31af7Sopenharmony_ci				${VERTEX_OUTPUT}
603e5c31af7Sopenharmony_ci			}
604e5c31af7Sopenharmony_ci		""
605e5c31af7Sopenharmony_ci		fragment ""
606e5c31af7Sopenharmony_ci			#version 450
607e5c31af7Sopenharmony_ci			precision mediump float;
608e5c31af7Sopenharmony_ci			struct Inner {mediump vec3 c;};
609e5c31af7Sopenharmony_ci			struct Struct {mediump vec4 a; Inner b;};
610e5c31af7Sopenharmony_ci			uniform Struct val;
611e5c31af7Sopenharmony_ci			${FRAGMENT_DECLARATIONS}
612e5c31af7Sopenharmony_ci			in mediump float res;
613e5c31af7Sopenharmony_ci			void main()
614e5c31af7Sopenharmony_ci			{			out0 = res + val.b.c.y;
615e5c31af7Sopenharmony_ci				${FRAGMENT_OUTPUT}
616e5c31af7Sopenharmony_ci			}
617e5c31af7Sopenharmony_ci		""
618e5c31af7Sopenharmony_ci	end
619e5c31af7Sopenharmony_ci
620e5c31af7Sopenharmony_ci	case partial_vec2_vec3
621e5c31af7Sopenharmony_ci		version 450
622e5c31af7Sopenharmony_ci		desc "Uniform struct declared in both, used partially in both. Datatype vec2 and vec3"
623e5c31af7Sopenharmony_ci		values {
624e5c31af7Sopenharmony_ci			uniform vec2 val.a = vec2(1.0, 2.0);
625e5c31af7Sopenharmony_ci			uniform vec3 val.b = vec3(1.0, 2.0, 3.0);
626e5c31af7Sopenharmony_ci			output float out0 = 3.0;
627e5c31af7Sopenharmony_ci		}
628e5c31af7Sopenharmony_ci		vertex ""
629e5c31af7Sopenharmony_ci			#version 450
630e5c31af7Sopenharmony_ci			${VERTEX_DECLARATIONS}
631e5c31af7Sopenharmony_ci			struct Struct {mediump vec2 a; mediump vec3 b;};
632e5c31af7Sopenharmony_ci			uniform Struct val;
633e5c31af7Sopenharmony_ci			out mediump float res;
634e5c31af7Sopenharmony_ci			void main()
635e5c31af7Sopenharmony_ci			{
636e5c31af7Sopenharmony_ci				res = val.a.x;
637e5c31af7Sopenharmony_ci				${VERTEX_OUTPUT}
638e5c31af7Sopenharmony_ci			}
639e5c31af7Sopenharmony_ci		""
640e5c31af7Sopenharmony_ci		fragment ""
641e5c31af7Sopenharmony_ci			#version 450
642e5c31af7Sopenharmony_ci			precision mediump float;
643e5c31af7Sopenharmony_ci			struct Struct {mediump vec2 a; mediump vec3 b;};
644e5c31af7Sopenharmony_ci			uniform Struct val;
645e5c31af7Sopenharmony_ci			${FRAGMENT_DECLARATIONS}
646e5c31af7Sopenharmony_ci			in mediump float res;
647e5c31af7Sopenharmony_ci			void main()
648e5c31af7Sopenharmony_ci			{			out0 = res + val.b.y;
649e5c31af7Sopenharmony_ci				${FRAGMENT_OUTPUT}
650e5c31af7Sopenharmony_ci			}
651e5c31af7Sopenharmony_ci		""
652e5c31af7Sopenharmony_ci	end
653e5c31af7Sopenharmony_ci
654e5c31af7Sopenharmony_ci	case partial_vec2_int
655e5c31af7Sopenharmony_ci		version 450
656e5c31af7Sopenharmony_ci		desc "Uniform struct declared in both, used partially in both. Datatype vec2 and int"
657e5c31af7Sopenharmony_ci		values {
658e5c31af7Sopenharmony_ci			uniform vec2 val.a = vec2(1.0, 2.0);
659e5c31af7Sopenharmony_ci			uniform int val.b = 2;
660e5c31af7Sopenharmony_ci			output float out0 = 3.0;
661e5c31af7Sopenharmony_ci		}
662e5c31af7Sopenharmony_ci		vertex ""
663e5c31af7Sopenharmony_ci			#version 450
664e5c31af7Sopenharmony_ci			${VERTEX_DECLARATIONS}
665e5c31af7Sopenharmony_ci			struct Struct {mediump vec2 a; mediump int b;};
666e5c31af7Sopenharmony_ci			uniform Struct val;
667e5c31af7Sopenharmony_ci			out mediump float res;
668e5c31af7Sopenharmony_ci			void main()
669e5c31af7Sopenharmony_ci			{
670e5c31af7Sopenharmony_ci				res = val.a.x;
671e5c31af7Sopenharmony_ci				${VERTEX_OUTPUT}
672e5c31af7Sopenharmony_ci			}
673e5c31af7Sopenharmony_ci		""
674e5c31af7Sopenharmony_ci		fragment ""
675e5c31af7Sopenharmony_ci			#version 450
676e5c31af7Sopenharmony_ci			precision mediump float;
677e5c31af7Sopenharmony_ci			struct Struct {mediump vec2 a; mediump int b;};
678e5c31af7Sopenharmony_ci			uniform Struct val;
679e5c31af7Sopenharmony_ci			${FRAGMENT_DECLARATIONS}
680e5c31af7Sopenharmony_ci			in mediump float res;
681e5c31af7Sopenharmony_ci			void main()
682e5c31af7Sopenharmony_ci			{			out0 = res + float(val.b);
683e5c31af7Sopenharmony_ci				${FRAGMENT_OUTPUT}
684e5c31af7Sopenharmony_ci			}
685e5c31af7Sopenharmony_ci		""
686e5c31af7Sopenharmony_ci	end
687e5c31af7Sopenharmony_ci
688e5c31af7Sopenharmony_ci	case partial_int_float
689e5c31af7Sopenharmony_ci		version 450
690e5c31af7Sopenharmony_ci		desc "Uniform struct declared in both, used partially in both. Datatype int and float"
691e5c31af7Sopenharmony_ci		values {
692e5c31af7Sopenharmony_ci			uniform float val.a = 1.0;
693e5c31af7Sopenharmony_ci			uniform int val.b = 2;
694e5c31af7Sopenharmony_ci			output float out0 = 3.0;
695e5c31af7Sopenharmony_ci		}
696e5c31af7Sopenharmony_ci		vertex ""
697e5c31af7Sopenharmony_ci			#version 450
698e5c31af7Sopenharmony_ci			${VERTEX_DECLARATIONS}
699e5c31af7Sopenharmony_ci			struct Struct {mediump float a; mediump int b;};
700e5c31af7Sopenharmony_ci			uniform Struct val;
701e5c31af7Sopenharmony_ci			out mediump float res;
702e5c31af7Sopenharmony_ci			void main()
703e5c31af7Sopenharmony_ci			{
704e5c31af7Sopenharmony_ci				res = val.a;
705e5c31af7Sopenharmony_ci				${VERTEX_OUTPUT}
706e5c31af7Sopenharmony_ci			}
707e5c31af7Sopenharmony_ci		""
708e5c31af7Sopenharmony_ci		fragment ""
709e5c31af7Sopenharmony_ci			#version 450
710e5c31af7Sopenharmony_ci			precision mediump float;
711e5c31af7Sopenharmony_ci			struct Struct {mediump float a; mediump int b;};
712e5c31af7Sopenharmony_ci			uniform Struct val;
713e5c31af7Sopenharmony_ci			${FRAGMENT_DECLARATIONS}
714e5c31af7Sopenharmony_ci			in mediump float res;
715e5c31af7Sopenharmony_ci			void main()
716e5c31af7Sopenharmony_ci			{			out0 = res + float(val.b);
717e5c31af7Sopenharmony_ci				${FRAGMENT_OUTPUT}
718e5c31af7Sopenharmony_ci			}
719e5c31af7Sopenharmony_ci		""
720e5c31af7Sopenharmony_ci	end
721e5c31af7Sopenharmony_ci
722e5c31af7Sopenharmony_ci	case partial_bvec2_vec2
723e5c31af7Sopenharmony_ci		version 450
724e5c31af7Sopenharmony_ci		desc "Uniform struct declared in both, used partially in both. Datatype bvec2 and vec2"
725e5c31af7Sopenharmony_ci		values {
726e5c31af7Sopenharmony_ci			uniform bvec2 val.a = bvec2(true, true);
727e5c31af7Sopenharmony_ci			uniform vec2 val.b = vec2(1.0, 2.0);
728e5c31af7Sopenharmony_ci			output float out0 = 3.0;
729e5c31af7Sopenharmony_ci		}
730e5c31af7Sopenharmony_ci		vertex ""
731e5c31af7Sopenharmony_ci			#version 450
732e5c31af7Sopenharmony_ci			${VERTEX_DECLARATIONS}
733e5c31af7Sopenharmony_ci			struct Struct {bvec2 a; mediump vec2 b;};
734e5c31af7Sopenharmony_ci			uniform Struct val;
735e5c31af7Sopenharmony_ci			out mediump float res;
736e5c31af7Sopenharmony_ci			void main()
737e5c31af7Sopenharmony_ci			{
738e5c31af7Sopenharmony_ci				res = float(val.a.x);
739e5c31af7Sopenharmony_ci				${VERTEX_OUTPUT}
740e5c31af7Sopenharmony_ci			}
741e5c31af7Sopenharmony_ci		""
742e5c31af7Sopenharmony_ci		fragment ""
743e5c31af7Sopenharmony_ci			#version 450
744e5c31af7Sopenharmony_ci			precision mediump float;
745e5c31af7Sopenharmony_ci			struct Struct {bvec2 a; mediump vec2 b;};
746e5c31af7Sopenharmony_ci			uniform Struct val;
747e5c31af7Sopenharmony_ci			${FRAGMENT_DECLARATIONS}
748e5c31af7Sopenharmony_ci			in mediump float res;
749e5c31af7Sopenharmony_ci			void main()
750e5c31af7Sopenharmony_ci			{			out0 = res + val.b.y;
751e5c31af7Sopenharmony_ci				${FRAGMENT_OUTPUT}
752e5c31af7Sopenharmony_ci			}
753e5c31af7Sopenharmony_ci		""
754e5c31af7Sopenharmony_ci	end
755e5c31af7Sopenharmony_ci
756e5c31af7Sopenharmony_ci	case partial_ivec2_vec2
757e5c31af7Sopenharmony_ci		version 450
758e5c31af7Sopenharmony_ci		desc "Uniform struct declared in both, used partially in both. Datatype ivec2 and vec2"
759e5c31af7Sopenharmony_ci		values {
760e5c31af7Sopenharmony_ci			uniform ivec2 val.a = ivec2(1, 2);
761e5c31af7Sopenharmony_ci			uniform vec2 val.b = vec2(1.0, 2.0);
762e5c31af7Sopenharmony_ci			output float out0 = 3.0;
763e5c31af7Sopenharmony_ci		}
764e5c31af7Sopenharmony_ci		vertex ""
765e5c31af7Sopenharmony_ci			#version 450
766e5c31af7Sopenharmony_ci			${VERTEX_DECLARATIONS}
767e5c31af7Sopenharmony_ci			struct Struct {mediump ivec2 a; mediump vec2 b;};
768e5c31af7Sopenharmony_ci			uniform Struct val;
769e5c31af7Sopenharmony_ci			out mediump float res;
770e5c31af7Sopenharmony_ci			void main()
771e5c31af7Sopenharmony_ci			{
772e5c31af7Sopenharmony_ci				res = vec2(val.a).x;
773e5c31af7Sopenharmony_ci				${VERTEX_OUTPUT}
774e5c31af7Sopenharmony_ci			}
775e5c31af7Sopenharmony_ci		""
776e5c31af7Sopenharmony_ci		fragment ""
777e5c31af7Sopenharmony_ci			#version 450
778e5c31af7Sopenharmony_ci			precision mediump float;
779e5c31af7Sopenharmony_ci			struct Struct {mediump ivec2 a; mediump vec2 b;};
780e5c31af7Sopenharmony_ci			uniform Struct val;
781e5c31af7Sopenharmony_ci			${FRAGMENT_DECLARATIONS}
782e5c31af7Sopenharmony_ci			in mediump float res;
783e5c31af7Sopenharmony_ci			void main()
784e5c31af7Sopenharmony_ci			{			out0 = res + val.b.y;
785e5c31af7Sopenharmony_ci				${FRAGMENT_OUTPUT}
786e5c31af7Sopenharmony_ci			}
787e5c31af7Sopenharmony_ci		""
788e5c31af7Sopenharmony_ci	end
789e5c31af7Sopenharmony_ci
790e5c31af7Sopenharmony_ci	case partial_ivec2_ivec2
791e5c31af7Sopenharmony_ci		version 450
792e5c31af7Sopenharmony_ci		desc "Uniform struct declared in both, used partially in both. Datatype ivec2 and ivec2"
793e5c31af7Sopenharmony_ci		values {
794e5c31af7Sopenharmony_ci			uniform ivec2 val.a = ivec2(1, 2);
795e5c31af7Sopenharmony_ci			uniform ivec2 val.b = ivec2(1, 2);
796e5c31af7Sopenharmony_ci			output float out0 = 3.0;
797e5c31af7Sopenharmony_ci		}
798e5c31af7Sopenharmony_ci		vertex ""
799e5c31af7Sopenharmony_ci			#version 450
800e5c31af7Sopenharmony_ci			${VERTEX_DECLARATIONS}
801e5c31af7Sopenharmony_ci			struct Struct {mediump ivec2 a; mediump ivec2 b;};
802e5c31af7Sopenharmony_ci			uniform Struct val;
803e5c31af7Sopenharmony_ci			out mediump float res;
804e5c31af7Sopenharmony_ci			void main()
805e5c31af7Sopenharmony_ci			{
806e5c31af7Sopenharmony_ci				res = vec2(val.a).x;
807e5c31af7Sopenharmony_ci				${VERTEX_OUTPUT}
808e5c31af7Sopenharmony_ci			}
809e5c31af7Sopenharmony_ci		""
810e5c31af7Sopenharmony_ci		fragment ""
811e5c31af7Sopenharmony_ci			#version 450
812e5c31af7Sopenharmony_ci			precision mediump float;
813e5c31af7Sopenharmony_ci			struct Struct {mediump ivec2 a; mediump ivec2 b;};
814e5c31af7Sopenharmony_ci			uniform Struct val;
815e5c31af7Sopenharmony_ci			${FRAGMENT_DECLARATIONS}
816e5c31af7Sopenharmony_ci			in mediump float res;
817e5c31af7Sopenharmony_ci			void main()
818e5c31af7Sopenharmony_ci			{			out0 = res + vec2(val.b).y;
819e5c31af7Sopenharmony_ci				${FRAGMENT_OUTPUT}
820e5c31af7Sopenharmony_ci			}
821e5c31af7Sopenharmony_ci		""
822e5c31af7Sopenharmony_ci	end
823e5c31af7Sopenharmony_ci
824e5c31af7Sopenharmony_ci	case type_conflict_1
825e5c31af7Sopenharmony_ci		version 450
826e5c31af7Sopenharmony_ci		desc "Fragment struct has one less member than fragment version"
827e5c31af7Sopenharmony_ci		expect link_fail
828e5c31af7Sopenharmony_ci		values {output float out0 = 3.0;}
829e5c31af7Sopenharmony_ci		vertex ""
830e5c31af7Sopenharmony_ci			#version 450
831e5c31af7Sopenharmony_ci			${VERTEX_DECLARATIONS}
832e5c31af7Sopenharmony_ci			struct Struct {mediump float a; mediump float b;};
833e5c31af7Sopenharmony_ci			uniform Struct val;
834e5c31af7Sopenharmony_ci			out mediump float res;
835e5c31af7Sopenharmony_ci			void main()
836e5c31af7Sopenharmony_ci			{
837e5c31af7Sopenharmony_ci				res = val.a;
838e5c31af7Sopenharmony_ci				${VERTEX_OUTPUT}
839e5c31af7Sopenharmony_ci			}
840e5c31af7Sopenharmony_ci		""
841e5c31af7Sopenharmony_ci		fragment ""
842e5c31af7Sopenharmony_ci			#version 450
843e5c31af7Sopenharmony_ci			precision mediump float;
844e5c31af7Sopenharmony_ci			struct Struct {mediump float a;};
845e5c31af7Sopenharmony_ci			uniform Struct val;
846e5c31af7Sopenharmony_ci			${FRAGMENT_DECLARATIONS}
847e5c31af7Sopenharmony_ci			in mediump float res;
848e5c31af7Sopenharmony_ci			void main()
849e5c31af7Sopenharmony_ci			{			out0 = res + val.a;
850e5c31af7Sopenharmony_ci				${FRAGMENT_OUTPUT}
851e5c31af7Sopenharmony_ci			}
852e5c31af7Sopenharmony_ci		""
853e5c31af7Sopenharmony_ci	end
854e5c31af7Sopenharmony_ci
855e5c31af7Sopenharmony_ci	case type_conflict_2
856e5c31af7Sopenharmony_ci		version 450
857e5c31af7Sopenharmony_ci		desc "Vertex struct has int, fragment struct has float."
858e5c31af7Sopenharmony_ci		expect link_fail
859e5c31af7Sopenharmony_ci		values {output float out0 = 3.0;}
860e5c31af7Sopenharmony_ci		vertex ""
861e5c31af7Sopenharmony_ci			#version 450
862e5c31af7Sopenharmony_ci			${VERTEX_DECLARATIONS}
863e5c31af7Sopenharmony_ci			struct Struct {mediump int a;};
864e5c31af7Sopenharmony_ci			uniform Struct val;
865e5c31af7Sopenharmony_ci			out mediump float res;
866e5c31af7Sopenharmony_ci			void main()
867e5c31af7Sopenharmony_ci			{
868e5c31af7Sopenharmony_ci				res = float(val.a);
869e5c31af7Sopenharmony_ci				${VERTEX_OUTPUT}
870e5c31af7Sopenharmony_ci			}
871e5c31af7Sopenharmony_ci		""
872e5c31af7Sopenharmony_ci		fragment ""
873e5c31af7Sopenharmony_ci			#version 450
874e5c31af7Sopenharmony_ci			precision mediump float;
875e5c31af7Sopenharmony_ci			struct Struct {mediump float a;};
876e5c31af7Sopenharmony_ci			uniform Struct val;
877e5c31af7Sopenharmony_ci			${FRAGMENT_DECLARATIONS}
878e5c31af7Sopenharmony_ci			in mediump float res;
879e5c31af7Sopenharmony_ci			void main()
880e5c31af7Sopenharmony_ci			{			out0 = val.a;
881e5c31af7Sopenharmony_ci				${FRAGMENT_OUTPUT}
882e5c31af7Sopenharmony_ci			}
883e5c31af7Sopenharmony_ci		""
884e5c31af7Sopenharmony_ci	end
885e5c31af7Sopenharmony_ci
886e5c31af7Sopenharmony_ci	case type_conflict_3
887e5c31af7Sopenharmony_ci		version 450
888e5c31af7Sopenharmony_ci		desc "Vertex struct has vec3, fragment struct has vec4."
889e5c31af7Sopenharmony_ci		expect link_fail
890e5c31af7Sopenharmony_ci		values {output float out0 = 3.0;}
891e5c31af7Sopenharmony_ci		vertex ""
892e5c31af7Sopenharmony_ci			#version 450
893e5c31af7Sopenharmony_ci			${VERTEX_DECLARATIONS}
894e5c31af7Sopenharmony_ci			struct Struct {mediump vec3 a;};
895e5c31af7Sopenharmony_ci			uniform Struct val;
896e5c31af7Sopenharmony_ci			out mediump float res;
897e5c31af7Sopenharmony_ci			void main()
898e5c31af7Sopenharmony_ci			{
899e5c31af7Sopenharmony_ci				res = float(val.a.x);
900e5c31af7Sopenharmony_ci				${VERTEX_OUTPUT}
901e5c31af7Sopenharmony_ci			}
902e5c31af7Sopenharmony_ci		""
903e5c31af7Sopenharmony_ci		fragment ""
904e5c31af7Sopenharmony_ci			#version 450
905e5c31af7Sopenharmony_ci			precision mediump float;
906e5c31af7Sopenharmony_ci			struct Struct {mediump vec4 a;};
907e5c31af7Sopenharmony_ci			uniform Struct val;
908e5c31af7Sopenharmony_ci			${FRAGMENT_DECLARATIONS}
909e5c31af7Sopenharmony_ci			in mediump float res;
910e5c31af7Sopenharmony_ci			void main()
911e5c31af7Sopenharmony_ci			{			out0 = val.a.x;
912e5c31af7Sopenharmony_ci				${FRAGMENT_OUTPUT}
913e5c31af7Sopenharmony_ci			}
914e5c31af7Sopenharmony_ci		""
915e5c31af7Sopenharmony_ci	end
916e5c31af7Sopenharmony_ci
917e5c31af7Sopenharmony_ci	case light_struct_highp
918e5c31af7Sopenharmony_ci		version 450
919e5c31af7Sopenharmony_ci		desc "Complex Light struct from use case tests."
920e5c31af7Sopenharmony_ci		values {
921e5c31af7Sopenharmony_ci			uniform float val.constantAttenuation = 1.0;
922e5c31af7Sopenharmony_ci			uniform float val.quadraticAttenuation = 1.0;
923e5c31af7Sopenharmony_ci			output float out0 = 2.0;
924e5c31af7Sopenharmony_ci		}
925e5c31af7Sopenharmony_ci		vertex ""
926e5c31af7Sopenharmony_ci			#version 450
927e5c31af7Sopenharmony_ci			struct Light
928e5c31af7Sopenharmony_ci			{
929e5c31af7Sopenharmony_ci				mediump vec3	color;
930e5c31af7Sopenharmony_ci				highp vec4		position;
931e5c31af7Sopenharmony_ci				highp vec3		direction;
932e5c31af7Sopenharmony_ci				mediump float	constantAttenuation;
933e5c31af7Sopenharmony_ci				mediump float	linearAttenuation;
934e5c31af7Sopenharmony_ci				mediump float	quadraticAttenuation;
935e5c31af7Sopenharmony_ci			};
936e5c31af7Sopenharmony_ci			${VERTEX_DECLARATIONS}
937e5c31af7Sopenharmony_ci			uniform Light val;
938e5c31af7Sopenharmony_ci			out mediump float res;
939e5c31af7Sopenharmony_ci			void main()
940e5c31af7Sopenharmony_ci			{
941e5c31af7Sopenharmony_ci				res = val.constantAttenuation;
942e5c31af7Sopenharmony_ci				${VERTEX_OUTPUT}
943e5c31af7Sopenharmony_ci			}
944e5c31af7Sopenharmony_ci		""
945e5c31af7Sopenharmony_ci		fragment ""
946e5c31af7Sopenharmony_ci			#version 450
947e5c31af7Sopenharmony_ci			precision mediump float;
948e5c31af7Sopenharmony_ci			struct Light
949e5c31af7Sopenharmony_ci			{
950e5c31af7Sopenharmony_ci				mediump vec3	color;
951e5c31af7Sopenharmony_ci				highp vec4		position;
952e5c31af7Sopenharmony_ci				highp vec3		direction;
953e5c31af7Sopenharmony_ci				mediump float	constantAttenuation;
954e5c31af7Sopenharmony_ci				mediump float	linearAttenuation;
955e5c31af7Sopenharmony_ci				mediump float	quadraticAttenuation;
956e5c31af7Sopenharmony_ci			};
957e5c31af7Sopenharmony_ci			struct Struct {float a;};
958e5c31af7Sopenharmony_ci			uniform Light val;
959e5c31af7Sopenharmony_ci			${FRAGMENT_DECLARATIONS}
960e5c31af7Sopenharmony_ci			in mediump float res;
961e5c31af7Sopenharmony_ci			void main()
962e5c31af7Sopenharmony_ci			{
963e5c31af7Sopenharmony_ci				out0 = res + val.quadraticAttenuation;
964e5c31af7Sopenharmony_ci				${FRAGMENT_OUTPUT}
965e5c31af7Sopenharmony_ci			}
966e5c31af7Sopenharmony_ci		""
967e5c31af7Sopenharmony_ci	end
968e5c31af7Sopenharmony_ci
969e5c31af7Sopenharmony_ci	case light_struct_mediump
970e5c31af7Sopenharmony_ci		version 450
971e5c31af7Sopenharmony_ci		desc "Complex Light struct from use case tests, without highp usage"
972e5c31af7Sopenharmony_ci		values {
973e5c31af7Sopenharmony_ci			uniform float val.constantAttenuation = 1.0;
974e5c31af7Sopenharmony_ci			uniform float val.quadraticAttenuation = 1.0;
975e5c31af7Sopenharmony_ci			output float out0 = 2.0;
976e5c31af7Sopenharmony_ci		}
977e5c31af7Sopenharmony_ci		vertex ""
978e5c31af7Sopenharmony_ci			#version 450
979e5c31af7Sopenharmony_ci			struct Light
980e5c31af7Sopenharmony_ci			{
981e5c31af7Sopenharmony_ci				mediump vec3	color;
982e5c31af7Sopenharmony_ci				mediump vec4	position;
983e5c31af7Sopenharmony_ci				mediump vec3	direction;
984e5c31af7Sopenharmony_ci				mediump float	constantAttenuation;
985e5c31af7Sopenharmony_ci				mediump float	linearAttenuation;
986e5c31af7Sopenharmony_ci				mediump float	quadraticAttenuation;
987e5c31af7Sopenharmony_ci			};
988e5c31af7Sopenharmony_ci			${VERTEX_DECLARATIONS}
989e5c31af7Sopenharmony_ci			uniform Light val;
990e5c31af7Sopenharmony_ci			out mediump float res;
991e5c31af7Sopenharmony_ci			void main()
992e5c31af7Sopenharmony_ci			{
993e5c31af7Sopenharmony_ci				res = val.constantAttenuation;
994e5c31af7Sopenharmony_ci				${VERTEX_OUTPUT}
995e5c31af7Sopenharmony_ci			}
996e5c31af7Sopenharmony_ci		""
997e5c31af7Sopenharmony_ci		fragment ""
998e5c31af7Sopenharmony_ci			#version 450
999e5c31af7Sopenharmony_ci			precision mediump float;
1000e5c31af7Sopenharmony_ci			struct Light
1001e5c31af7Sopenharmony_ci			{
1002e5c31af7Sopenharmony_ci				mediump vec3	color;
1003e5c31af7Sopenharmony_ci				mediump vec4	position;
1004e5c31af7Sopenharmony_ci				mediump vec3	direction;
1005e5c31af7Sopenharmony_ci				mediump float	constantAttenuation;
1006e5c31af7Sopenharmony_ci				mediump float	linearAttenuation;
1007e5c31af7Sopenharmony_ci				mediump float	quadraticAttenuation;
1008e5c31af7Sopenharmony_ci			};
1009e5c31af7Sopenharmony_ci			struct Struct {float a;};
1010e5c31af7Sopenharmony_ci			uniform Light val;
1011e5c31af7Sopenharmony_ci			${FRAGMENT_DECLARATIONS}
1012e5c31af7Sopenharmony_ci			in mediump float res;
1013e5c31af7Sopenharmony_ci			void main()
1014e5c31af7Sopenharmony_ci			{
1015e5c31af7Sopenharmony_ci				out0 = res + val.quadraticAttenuation;
1016e5c31af7Sopenharmony_ci				${FRAGMENT_OUTPUT}
1017e5c31af7Sopenharmony_ci			}
1018e5c31af7Sopenharmony_ci		""
1019e5c31af7Sopenharmony_ci	end
1020e5c31af7Sopenharmony_ciend
1021e5c31af7Sopenharmony_ci
1022e5c31af7Sopenharmony_cigroup block "Uniform blocks"
1023e5c31af7Sopenharmony_ci	case differing_precision
1024e5c31af7Sopenharmony_ci		version 450
1025e5c31af7Sopenharmony_ci		expect build_successful
1026e5c31af7Sopenharmony_ci		vertex ""
1027e5c31af7Sopenharmony_ci			#version 450
1028e5c31af7Sopenharmony_ci
1029e5c31af7Sopenharmony_ci			uniform Block
1030e5c31af7Sopenharmony_ci			{
1031e5c31af7Sopenharmony_ci				highp vec4 val;
1032e5c31af7Sopenharmony_ci			};
1033e5c31af7Sopenharmony_ci
1034e5c31af7Sopenharmony_ci			${VERTEX_DECLARATIONS}
1035e5c31af7Sopenharmony_ci			out mediump float res;
1036e5c31af7Sopenharmony_ci			void main()
1037e5c31af7Sopenharmony_ci			{
1038e5c31af7Sopenharmony_ci				res = val.x;
1039e5c31af7Sopenharmony_ci				${VERTEX_OUTPUT}
1040e5c31af7Sopenharmony_ci			}
1041e5c31af7Sopenharmony_ci		""
1042e5c31af7Sopenharmony_ci		fragment ""
1043e5c31af7Sopenharmony_ci			#version 450
1044e5c31af7Sopenharmony_ci
1045e5c31af7Sopenharmony_ci			uniform Block
1046e5c31af7Sopenharmony_ci			{
1047e5c31af7Sopenharmony_ci				mediump vec4 val;
1048e5c31af7Sopenharmony_ci			};
1049e5c31af7Sopenharmony_ci
1050e5c31af7Sopenharmony_ci			precision mediump float;
1051e5c31af7Sopenharmony_ci			${FRAGMENT_DECLARATIONS}
1052e5c31af7Sopenharmony_ci			in mediump float res;
1053e5c31af7Sopenharmony_ci			void main()
1054e5c31af7Sopenharmony_ci			{
1055e5c31af7Sopenharmony_ci				dEQP_FragColor = val;
1056e5c31af7Sopenharmony_ci			}
1057e5c31af7Sopenharmony_ci		""
1058e5c31af7Sopenharmony_ci	end
1059e5c31af7Sopenharmony_ci
1060e5c31af7Sopenharmony_ci	case type_mismatch
1061e5c31af7Sopenharmony_ci		version 450
1062e5c31af7Sopenharmony_ci		expect link_fail
1063e5c31af7Sopenharmony_ci		vertex ""
1064e5c31af7Sopenharmony_ci			#version 450
1065e5c31af7Sopenharmony_ci
1066e5c31af7Sopenharmony_ci			uniform Block
1067e5c31af7Sopenharmony_ci			{
1068e5c31af7Sopenharmony_ci				highp vec4 val;
1069e5c31af7Sopenharmony_ci			};
1070e5c31af7Sopenharmony_ci
1071e5c31af7Sopenharmony_ci			${VERTEX_DECLARATIONS}
1072e5c31af7Sopenharmony_ci			out mediump float res;
1073e5c31af7Sopenharmony_ci			void main()
1074e5c31af7Sopenharmony_ci			{
1075e5c31af7Sopenharmony_ci				res = val.x;
1076e5c31af7Sopenharmony_ci				${VERTEX_OUTPUT}
1077e5c31af7Sopenharmony_ci			}
1078e5c31af7Sopenharmony_ci		""
1079e5c31af7Sopenharmony_ci		fragment ""
1080e5c31af7Sopenharmony_ci			#version 450
1081e5c31af7Sopenharmony_ci
1082e5c31af7Sopenharmony_ci			uniform Block
1083e5c31af7Sopenharmony_ci			{
1084e5c31af7Sopenharmony_ci				highp vec3 val;
1085e5c31af7Sopenharmony_ci			};
1086e5c31af7Sopenharmony_ci
1087e5c31af7Sopenharmony_ci			precision mediump float;
1088e5c31af7Sopenharmony_ci			${FRAGMENT_DECLARATIONS}
1089e5c31af7Sopenharmony_ci			in mediump float res;
1090e5c31af7Sopenharmony_ci			void main()
1091e5c31af7Sopenharmony_ci			{
1092e5c31af7Sopenharmony_ci				dEQP_FragColor = vec4(val, 1.0);
1093e5c31af7Sopenharmony_ci			}
1094e5c31af7Sopenharmony_ci		""
1095e5c31af7Sopenharmony_ci	end
1096e5c31af7Sopenharmony_ci
1097e5c31af7Sopenharmony_ci	case members_mismatch
1098e5c31af7Sopenharmony_ci		version 450
1099e5c31af7Sopenharmony_ci		expect link_fail
1100e5c31af7Sopenharmony_ci		vertex ""
1101e5c31af7Sopenharmony_ci			#version 450
1102e5c31af7Sopenharmony_ci
1103e5c31af7Sopenharmony_ci			uniform Block
1104e5c31af7Sopenharmony_ci			{
1105e5c31af7Sopenharmony_ci				highp vec4 val;
1106e5c31af7Sopenharmony_ci			};
1107e5c31af7Sopenharmony_ci
1108e5c31af7Sopenharmony_ci			${VERTEX_DECLARATIONS}
1109e5c31af7Sopenharmony_ci			out mediump float res;
1110e5c31af7Sopenharmony_ci			void main()
1111e5c31af7Sopenharmony_ci			{
1112e5c31af7Sopenharmony_ci				res = val.x;
1113e5c31af7Sopenharmony_ci				${VERTEX_OUTPUT}
1114e5c31af7Sopenharmony_ci			}
1115e5c31af7Sopenharmony_ci		""
1116e5c31af7Sopenharmony_ci		fragment ""
1117e5c31af7Sopenharmony_ci			#version 450
1118e5c31af7Sopenharmony_ci
1119e5c31af7Sopenharmony_ci			uniform Block
1120e5c31af7Sopenharmony_ci			{
1121e5c31af7Sopenharmony_ci				highp vec4 val;
1122e5c31af7Sopenharmony_ci				lowp uint u;
1123e5c31af7Sopenharmony_ci			};
1124e5c31af7Sopenharmony_ci
1125e5c31af7Sopenharmony_ci			precision mediump float;
1126e5c31af7Sopenharmony_ci			${FRAGMENT_DECLARATIONS}
1127e5c31af7Sopenharmony_ci			in mediump float res;
1128e5c31af7Sopenharmony_ci			void main()
1129e5c31af7Sopenharmony_ci			{
1130e5c31af7Sopenharmony_ci				dEQP_FragColor = vec4(val);
1131e5c31af7Sopenharmony_ci			}
1132e5c31af7Sopenharmony_ci		""
1133e5c31af7Sopenharmony_ci	end
1134e5c31af7Sopenharmony_ci
1135e5c31af7Sopenharmony_ci	case layout_qualifier_mismatch_4
1136e5c31af7Sopenharmony_ci		version 450
1137e5c31af7Sopenharmony_ci		expect link_fail
1138e5c31af7Sopenharmony_ci		vertex ""
1139e5c31af7Sopenharmony_ci			#version 450
1140e5c31af7Sopenharmony_ci
1141e5c31af7Sopenharmony_ci			layout(row_major) uniform Block
1142e5c31af7Sopenharmony_ci			{
1143e5c31af7Sopenharmony_ci				highp mat3 val;
1144e5c31af7Sopenharmony_ci			};
1145e5c31af7Sopenharmony_ci
1146e5c31af7Sopenharmony_ci			${VERTEX_DECLARATIONS}
1147e5c31af7Sopenharmony_ci			out mediump float res;
1148e5c31af7Sopenharmony_ci			void main()
1149e5c31af7Sopenharmony_ci			{
1150e5c31af7Sopenharmony_ci				res = val[0][1];
1151e5c31af7Sopenharmony_ci				${VERTEX_OUTPUT}
1152e5c31af7Sopenharmony_ci			}
1153e5c31af7Sopenharmony_ci		""
1154e5c31af7Sopenharmony_ci		fragment ""
1155e5c31af7Sopenharmony_ci			#version 450
1156e5c31af7Sopenharmony_ci
1157e5c31af7Sopenharmony_ci			layout(column_major) uniform Block
1158e5c31af7Sopenharmony_ci			{
1159e5c31af7Sopenharmony_ci				highp mat3 val;
1160e5c31af7Sopenharmony_ci			};
1161e5c31af7Sopenharmony_ci
1162e5c31af7Sopenharmony_ci			precision mediump float;
1163e5c31af7Sopenharmony_ci			${FRAGMENT_DECLARATIONS}
1164e5c31af7Sopenharmony_ci			in mediump float res;
1165e5c31af7Sopenharmony_ci			void main()
1166e5c31af7Sopenharmony_ci			{
1167e5c31af7Sopenharmony_ci				dEQP_FragColor = vec4(val[2], 1.0);
1168e5c31af7Sopenharmony_ci			}
1169e5c31af7Sopenharmony_ci		""
1170e5c31af7Sopenharmony_ci	end
1171e5c31af7Sopenharmony_ci
1172e5c31af7Sopenharmony_ci	case layout_qualifier_mismatch_5
1173e5c31af7Sopenharmony_ci		version 450
1174e5c31af7Sopenharmony_ci		expect link_fail
1175e5c31af7Sopenharmony_ci		vertex ""
1176e5c31af7Sopenharmony_ci			#version 450
1177e5c31af7Sopenharmony_ci
1178e5c31af7Sopenharmony_ci			uniform Block
1179e5c31af7Sopenharmony_ci			{
1180e5c31af7Sopenharmony_ci				layout(row_major) uniform highp mat3 val;
1181e5c31af7Sopenharmony_ci			};
1182e5c31af7Sopenharmony_ci
1183e5c31af7Sopenharmony_ci			${VERTEX_DECLARATIONS}
1184e5c31af7Sopenharmony_ci			out mediump float res;
1185e5c31af7Sopenharmony_ci			void main()
1186e5c31af7Sopenharmony_ci			{
1187e5c31af7Sopenharmony_ci				res = val[0][1];
1188e5c31af7Sopenharmony_ci				${VERTEX_OUTPUT}
1189e5c31af7Sopenharmony_ci			}
1190e5c31af7Sopenharmony_ci		""
1191e5c31af7Sopenharmony_ci		fragment ""
1192e5c31af7Sopenharmony_ci			#version 450
1193e5c31af7Sopenharmony_ci
1194e5c31af7Sopenharmony_ci			uniform Block
1195e5c31af7Sopenharmony_ci			{
1196e5c31af7Sopenharmony_ci				layout(column_major) uniform highp mat3 val;
1197e5c31af7Sopenharmony_ci			};
1198e5c31af7Sopenharmony_ci
1199e5c31af7Sopenharmony_ci			precision mediump float;
1200e5c31af7Sopenharmony_ci			${FRAGMENT_DECLARATIONS}
1201e5c31af7Sopenharmony_ci			in mediump float res;
1202e5c31af7Sopenharmony_ci			void main()
1203e5c31af7Sopenharmony_ci			{
1204e5c31af7Sopenharmony_ci				dEQP_FragColor = vec4(val[2], 1.0);
1205e5c31af7Sopenharmony_ci			}
1206e5c31af7Sopenharmony_ci		""
1207e5c31af7Sopenharmony_ci	end
1208e5c31af7Sopenharmony_ciend
1209