1e5c31af7Sopenharmony_cigroup basic "Default block uniforms of scalar and vector types"
2e5c31af7Sopenharmony_ci	case precision_conflict_1
3e5c31af7Sopenharmony_ci		version 310 es
4e5c31af7Sopenharmony_ci		desc "Vertex side uniform has highp, fragment side uniform mediump."
5e5c31af7Sopenharmony_ci		expect link_fail
6e5c31af7Sopenharmony_ci		values {output float out0 = 3.0;}
7e5c31af7Sopenharmony_ci		vertex ""
8e5c31af7Sopenharmony_ci			#version 310 es
9e5c31af7Sopenharmony_ci			${VERTEX_DECLARATIONS}
10e5c31af7Sopenharmony_ci			uniform highp float u_val;
11e5c31af7Sopenharmony_ci			out mediump float res;
12e5c31af7Sopenharmony_ci			void main()
13e5c31af7Sopenharmony_ci			{
14e5c31af7Sopenharmony_ci				res = u_val;
15e5c31af7Sopenharmony_ci				${VERTEX_OUTPUT}
16e5c31af7Sopenharmony_ci			}
17e5c31af7Sopenharmony_ci		""
18e5c31af7Sopenharmony_ci		fragment ""
19e5c31af7Sopenharmony_ci			#version 310 es
20e5c31af7Sopenharmony_ci			precision mediump float;
21e5c31af7Sopenharmony_ci			uniform float u_val;
22e5c31af7Sopenharmony_ci			${FRAGMENT_DECLARATIONS}
23e5c31af7Sopenharmony_ci			in mediump float res;
24e5c31af7Sopenharmony_ci			void main()
25e5c31af7Sopenharmony_ci			{
26e5c31af7Sopenharmony_ci				out0 = u_val + res;
27e5c31af7Sopenharmony_ci				${FRAGMENT_OUTPUT}
28e5c31af7Sopenharmony_ci			}
29e5c31af7Sopenharmony_ci		""
30e5c31af7Sopenharmony_ci	end
31e5c31af7Sopenharmony_ci	case precision_conflict_2
32e5c31af7Sopenharmony_ci		version 310 es
33e5c31af7Sopenharmony_ci		desc "Vertex side uniform has highp, fragment side uniform mediump."
34e5c31af7Sopenharmony_ci		expect link_fail
35e5c31af7Sopenharmony_ci		values {output float out0 = 3.0;}
36e5c31af7Sopenharmony_ci		vertex ""
37e5c31af7Sopenharmony_ci			#version 310 es
38e5c31af7Sopenharmony_ci			${VERTEX_DECLARATIONS}
39e5c31af7Sopenharmony_ci			uniform highp float u_val;
40e5c31af7Sopenharmony_ci			out mediump float res;
41e5c31af7Sopenharmony_ci			void main()
42e5c31af7Sopenharmony_ci			{
43e5c31af7Sopenharmony_ci				res = u_val;
44e5c31af7Sopenharmony_ci				${VERTEX_OUTPUT}
45e5c31af7Sopenharmony_ci			}
46e5c31af7Sopenharmony_ci		""
47e5c31af7Sopenharmony_ci		fragment ""
48e5c31af7Sopenharmony_ci			#version 310 es
49e5c31af7Sopenharmony_ci			precision highp float;
50e5c31af7Sopenharmony_ci			uniform mediump float u_val;
51e5c31af7Sopenharmony_ci			${FRAGMENT_DECLARATIONS}
52e5c31af7Sopenharmony_ci			in mediump float res;
53e5c31af7Sopenharmony_ci			void main()
54e5c31af7Sopenharmony_ci			{
55e5c31af7Sopenharmony_ci				out0 = u_val + res;
56e5c31af7Sopenharmony_ci				${FRAGMENT_OUTPUT}
57e5c31af7Sopenharmony_ci			}
58e5c31af7Sopenharmony_ci		""
59e5c31af7Sopenharmony_ci	end
60e5c31af7Sopenharmony_ci	case precision_conflict_3
61e5c31af7Sopenharmony_ci		version 310 es
62e5c31af7Sopenharmony_ci		desc "Vertex side uniform has lowp, fragment side uniform highp."
63e5c31af7Sopenharmony_ci		expect link_fail
64e5c31af7Sopenharmony_ci		values {output float out0 = 3.0;}
65e5c31af7Sopenharmony_ci		vertex ""
66e5c31af7Sopenharmony_ci			#version 310 es
67e5c31af7Sopenharmony_ci			${VERTEX_DECLARATIONS}
68e5c31af7Sopenharmony_ci			uniform lowp int u_val;
69e5c31af7Sopenharmony_ci			out mediump float res;
70e5c31af7Sopenharmony_ci			void main()
71e5c31af7Sopenharmony_ci			{
72e5c31af7Sopenharmony_ci				res = float(u_val);
73e5c31af7Sopenharmony_ci				${VERTEX_OUTPUT}
74e5c31af7Sopenharmony_ci			}
75e5c31af7Sopenharmony_ci		""
76e5c31af7Sopenharmony_ci		fragment ""
77e5c31af7Sopenharmony_ci			#version 310 es
78e5c31af7Sopenharmony_ci			precision highp float;
79e5c31af7Sopenharmony_ci			uniform highp int u_val;
80e5c31af7Sopenharmony_ci			${FRAGMENT_DECLARATIONS}
81e5c31af7Sopenharmony_ci			in mediump float res;
82e5c31af7Sopenharmony_ci			void main()
83e5c31af7Sopenharmony_ci			{
84e5c31af7Sopenharmony_ci				out0 = float(u_val) + res;
85e5c31af7Sopenharmony_ci				${FRAGMENT_OUTPUT}
86e5c31af7Sopenharmony_ci			}
87e5c31af7Sopenharmony_ci		""
88e5c31af7Sopenharmony_ci	end
89e5c31af7Sopenharmony_ci	case precision_conflict_4
90e5c31af7Sopenharmony_ci		version 310 es
91e5c31af7Sopenharmony_ci		desc "Vertex side uniform has lowp, fragment side uniform mediump."
92e5c31af7Sopenharmony_ci		expect link_fail
93e5c31af7Sopenharmony_ci		values {output float out0 = 3.0;}
94e5c31af7Sopenharmony_ci		vertex ""
95e5c31af7Sopenharmony_ci			#version 310 es
96e5c31af7Sopenharmony_ci			${VERTEX_DECLARATIONS}
97e5c31af7Sopenharmony_ci			uniform lowp vec3 u_val;
98e5c31af7Sopenharmony_ci			out mediump float res;
99e5c31af7Sopenharmony_ci			void main()
100e5c31af7Sopenharmony_ci			{
101e5c31af7Sopenharmony_ci				res = u_val.y;
102e5c31af7Sopenharmony_ci				${VERTEX_OUTPUT}
103e5c31af7Sopenharmony_ci			}
104e5c31af7Sopenharmony_ci		""
105e5c31af7Sopenharmony_ci		fragment ""
106e5c31af7Sopenharmony_ci			#version 310 es
107e5c31af7Sopenharmony_ci			precision highp float;
108e5c31af7Sopenharmony_ci			uniform mediump vec3 u_val;
109e5c31af7Sopenharmony_ci			${FRAGMENT_DECLARATIONS}
110e5c31af7Sopenharmony_ci			in mediump float res;
111e5c31af7Sopenharmony_ci			void main()
112e5c31af7Sopenharmony_ci			{
113e5c31af7Sopenharmony_ci				out0 = u_val.z + res;
114e5c31af7Sopenharmony_ci				${FRAGMENT_OUTPUT}
115e5c31af7Sopenharmony_ci			}
116e5c31af7Sopenharmony_ci		""
117e5c31af7Sopenharmony_ci	end
118e5c31af7Sopenharmony_ciend
119e5c31af7Sopenharmony_ci
120e5c31af7Sopenharmony_cigroup struct "Uniform structs"
121e5c31af7Sopenharmony_ci	# Struct linkage handling
122e5c31af7Sopenharmony_ci	case basic
123e5c31af7Sopenharmony_ci		version 310 es
124e5c31af7Sopenharmony_ci		desc "Same uniform struct in both shaders"
125e5c31af7Sopenharmony_ci		values {
126e5c31af7Sopenharmony_ci			uniform float val.a = 1.0;
127e5c31af7Sopenharmony_ci			uniform float val.b = 2.0;
128e5c31af7Sopenharmony_ci			output float out0 = 3.0;
129e5c31af7Sopenharmony_ci		}
130e5c31af7Sopenharmony_ci		vertex ""
131e5c31af7Sopenharmony_ci			#version 310 es
132e5c31af7Sopenharmony_ci			${VERTEX_DECLARATIONS}
133e5c31af7Sopenharmony_ci			struct Struct {mediump float a; mediump float b;};
134e5c31af7Sopenharmony_ci			uniform Struct val;
135e5c31af7Sopenharmony_ci			out mediump float dummy;
136e5c31af7Sopenharmony_ci			void main()
137e5c31af7Sopenharmony_ci			{
138e5c31af7Sopenharmony_ci				dummy = val.a + val.b;
139e5c31af7Sopenharmony_ci				${VERTEX_OUTPUT}
140e5c31af7Sopenharmony_ci			}
141e5c31af7Sopenharmony_ci		""
142e5c31af7Sopenharmony_ci		fragment ""
143e5c31af7Sopenharmony_ci			#version 310 es
144e5c31af7Sopenharmony_ci			precision mediump float;
145e5c31af7Sopenharmony_ci			struct Struct {mediump float a; mediump float b;};
146e5c31af7Sopenharmony_ci			uniform Struct val;
147e5c31af7Sopenharmony_ci			in mediump float dummy;
148e5c31af7Sopenharmony_ci			${FRAGMENT_DECLARATIONS}
149e5c31af7Sopenharmony_ci			void main()
150e5c31af7Sopenharmony_ci			{
151e5c31af7Sopenharmony_ci				out0 = val.b + val.a;
152e5c31af7Sopenharmony_ci				out0 = out0 + dummy;
153e5c31af7Sopenharmony_ci				out0 = out0 - dummy;
154e5c31af7Sopenharmony_ci				${FRAGMENT_OUTPUT}
155e5c31af7Sopenharmony_ci			}
156e5c31af7Sopenharmony_ci		""
157e5c31af7Sopenharmony_ci	end
158e5c31af7Sopenharmony_ci
159e5c31af7Sopenharmony_ci	case vertex_only
160e5c31af7Sopenharmony_ci		version 310 es
161e5c31af7Sopenharmony_ci		desc "Uniform struct declared in both, used only in vertex."
162e5c31af7Sopenharmony_ci		values {
163e5c31af7Sopenharmony_ci			uniform float val.a = 1.0;
164e5c31af7Sopenharmony_ci			uniform float val.b = 2.0;
165e5c31af7Sopenharmony_ci			output float out0 = 3.0;
166e5c31af7Sopenharmony_ci		}
167e5c31af7Sopenharmony_ci		vertex ""
168e5c31af7Sopenharmony_ci			#version 310 es
169e5c31af7Sopenharmony_ci			${VERTEX_DECLARATIONS}
170e5c31af7Sopenharmony_ci			struct Struct {mediump float a; mediump float b;};
171e5c31af7Sopenharmony_ci			uniform Struct val;
172e5c31af7Sopenharmony_ci			out mediump float res;
173e5c31af7Sopenharmony_ci			void main()
174e5c31af7Sopenharmony_ci			{
175e5c31af7Sopenharmony_ci				res = val.a + val.b;
176e5c31af7Sopenharmony_ci				${VERTEX_OUTPUT}
177e5c31af7Sopenharmony_ci			}
178e5c31af7Sopenharmony_ci		""
179e5c31af7Sopenharmony_ci		fragment ""
180e5c31af7Sopenharmony_ci			#version 310 es
181e5c31af7Sopenharmony_ci			precision mediump float;
182e5c31af7Sopenharmony_ci			struct Struct {mediump float a; mediump float b;};
183e5c31af7Sopenharmony_ci			uniform Struct val;
184e5c31af7Sopenharmony_ci			in mediump float res;
185e5c31af7Sopenharmony_ci			${FRAGMENT_DECLARATIONS}
186e5c31af7Sopenharmony_ci			void main()
187e5c31af7Sopenharmony_ci			{
188e5c31af7Sopenharmony_ci				out0 = res;
189e5c31af7Sopenharmony_ci				${FRAGMENT_OUTPUT}
190e5c31af7Sopenharmony_ci			}
191e5c31af7Sopenharmony_ci		""
192e5c31af7Sopenharmony_ci	end
193e5c31af7Sopenharmony_ci
194e5c31af7Sopenharmony_ci	case fragment_only
195e5c31af7Sopenharmony_ci		version 310 es
196e5c31af7Sopenharmony_ci		desc "Uniform struct declared in both, used only in fragment."
197e5c31af7Sopenharmony_ci		values {
198e5c31af7Sopenharmony_ci			uniform float val.a = 1.0;
199e5c31af7Sopenharmony_ci			uniform float val.b = 2.0;
200e5c31af7Sopenharmony_ci			output float out0 = 3.0;
201e5c31af7Sopenharmony_ci		}
202e5c31af7Sopenharmony_ci		vertex ""
203e5c31af7Sopenharmony_ci			#version 310 es
204e5c31af7Sopenharmony_ci			${VERTEX_DECLARATIONS}
205e5c31af7Sopenharmony_ci			struct Struct {mediump float a; mediump float b;};
206e5c31af7Sopenharmony_ci			uniform Struct val;
207e5c31af7Sopenharmony_ci			void main()
208e5c31af7Sopenharmony_ci			{
209e5c31af7Sopenharmony_ci				${VERTEX_OUTPUT}
210e5c31af7Sopenharmony_ci			}
211e5c31af7Sopenharmony_ci		""
212e5c31af7Sopenharmony_ci		fragment ""
213e5c31af7Sopenharmony_ci			#version 310 es
214e5c31af7Sopenharmony_ci			precision mediump float;
215e5c31af7Sopenharmony_ci			struct Struct {mediump float a; mediump float b;};
216e5c31af7Sopenharmony_ci			uniform Struct val;
217e5c31af7Sopenharmony_ci			${FRAGMENT_DECLARATIONS}
218e5c31af7Sopenharmony_ci			void main()
219e5c31af7Sopenharmony_ci			{
220e5c31af7Sopenharmony_ci				out0 = val.a + val.b;
221e5c31af7Sopenharmony_ci				${FRAGMENT_OUTPUT}
222e5c31af7Sopenharmony_ci			}
223e5c31af7Sopenharmony_ci		""
224e5c31af7Sopenharmony_ci	end
225e5c31af7Sopenharmony_ci
226e5c31af7Sopenharmony_ci	case partial
227e5c31af7Sopenharmony_ci		version 310 es
228e5c31af7Sopenharmony_ci		desc "Uniform struct declared in both, used partially in both."
229e5c31af7Sopenharmony_ci		values {
230e5c31af7Sopenharmony_ci			uniform float val.a = 1.0;
231e5c31af7Sopenharmony_ci			uniform float val.b = 2.0;
232e5c31af7Sopenharmony_ci			output float out0 = 3.0;
233e5c31af7Sopenharmony_ci		}
234e5c31af7Sopenharmony_ci		vertex ""
235e5c31af7Sopenharmony_ci			#version 310 es
236e5c31af7Sopenharmony_ci			${VERTEX_DECLARATIONS}
237e5c31af7Sopenharmony_ci			struct Struct {mediump float a; mediump float b;};
238e5c31af7Sopenharmony_ci			uniform Struct val;
239e5c31af7Sopenharmony_ci			out mediump float res;
240e5c31af7Sopenharmony_ci			void main()
241e5c31af7Sopenharmony_ci			{
242e5c31af7Sopenharmony_ci				res = val.a;
243e5c31af7Sopenharmony_ci				${VERTEX_OUTPUT}
244e5c31af7Sopenharmony_ci			}
245e5c31af7Sopenharmony_ci		""
246e5c31af7Sopenharmony_ci		fragment ""
247e5c31af7Sopenharmony_ci			#version 310 es
248e5c31af7Sopenharmony_ci			precision mediump float;
249e5c31af7Sopenharmony_ci			struct Struct {mediump float a; mediump float b;};
250e5c31af7Sopenharmony_ci			uniform Struct val;
251e5c31af7Sopenharmony_ci			${FRAGMENT_DECLARATIONS}
252e5c31af7Sopenharmony_ci			in mediump float res;
253e5c31af7Sopenharmony_ci			void main()
254e5c31af7Sopenharmony_ci			{
255e5c31af7Sopenharmony_ci				out0 = res + val.b;
256e5c31af7Sopenharmony_ci				${FRAGMENT_OUTPUT}
257e5c31af7Sopenharmony_ci			}
258e5c31af7Sopenharmony_ci		""
259e5c31af7Sopenharmony_ci	end
260e5c31af7Sopenharmony_ci
261e5c31af7Sopenharmony_ci	case vec4
262e5c31af7Sopenharmony_ci		version 310 es
263e5c31af7Sopenharmony_ci		desc "Same uniform struct in both shaders. Datatype vec4"
264e5c31af7Sopenharmony_ci		values {
265e5c31af7Sopenharmony_ci			uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
266e5c31af7Sopenharmony_ci			uniform vec4 val.b = vec4(1.0, 2.0, 3.0, 4.0);
267e5c31af7Sopenharmony_ci			output float out0 = 3.0;
268e5c31af7Sopenharmony_ci		}
269e5c31af7Sopenharmony_ci		vertex ""
270e5c31af7Sopenharmony_ci			#version 310 es
271e5c31af7Sopenharmony_ci			${VERTEX_DECLARATIONS}
272e5c31af7Sopenharmony_ci			struct Struct {mediump vec4 a; mediump vec4 b;};
273e5c31af7Sopenharmony_ci			uniform Struct val;
274e5c31af7Sopenharmony_ci			out mediump float dummy;
275e5c31af7Sopenharmony_ci			void main()
276e5c31af7Sopenharmony_ci			{
277e5c31af7Sopenharmony_ci				dummy = val.a.x + val.b.y;
278e5c31af7Sopenharmony_ci				${VERTEX_OUTPUT}
279e5c31af7Sopenharmony_ci			}
280e5c31af7Sopenharmony_ci		""
281e5c31af7Sopenharmony_ci		fragment ""
282e5c31af7Sopenharmony_ci			#version 310 es
283e5c31af7Sopenharmony_ci			precision mediump float;
284e5c31af7Sopenharmony_ci			struct Struct {mediump vec4 a; mediump vec4 b;};
285e5c31af7Sopenharmony_ci			uniform Struct val;
286e5c31af7Sopenharmony_ci			in mediump float dummy;
287e5c31af7Sopenharmony_ci			${FRAGMENT_DECLARATIONS}
288e5c31af7Sopenharmony_ci			void main()
289e5c31af7Sopenharmony_ci			{
290e5c31af7Sopenharmony_ci				out0 = val.b.y + val.a.x;
291e5c31af7Sopenharmony_ci				out0 = out0 + dummy;
292e5c31af7Sopenharmony_ci				out0 = out0 - dummy;
293e5c31af7Sopenharmony_ci				${FRAGMENT_OUTPUT}
294e5c31af7Sopenharmony_ci			}
295e5c31af7Sopenharmony_ci		""
296e5c31af7Sopenharmony_ci	end
297e5c31af7Sopenharmony_ci
298e5c31af7Sopenharmony_ci	case vertex_only_vec4
299e5c31af7Sopenharmony_ci		version 310 es
300e5c31af7Sopenharmony_ci		desc "Uniform struct declared in both, used only in vertex. Datatype vec4	"
301e5c31af7Sopenharmony_ci		values {
302e5c31af7Sopenharmony_ci			uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
303e5c31af7Sopenharmony_ci			uniform vec4 val.b = vec4(1.0, 2.0, 3.0, 4.0);
304e5c31af7Sopenharmony_ci			output float out0 = 3.0;
305e5c31af7Sopenharmony_ci		}
306e5c31af7Sopenharmony_ci		vertex ""
307e5c31af7Sopenharmony_ci			#version 310 es
308e5c31af7Sopenharmony_ci			${VERTEX_DECLARATIONS}
309e5c31af7Sopenharmony_ci			struct Struct {mediump vec4 a; mediump vec4 b;};
310e5c31af7Sopenharmony_ci			uniform Struct val;
311e5c31af7Sopenharmony_ci			out mediump float res;
312e5c31af7Sopenharmony_ci			void main()
313e5c31af7Sopenharmony_ci			{
314e5c31af7Sopenharmony_ci				res = val.a.x + val.b.y;
315e5c31af7Sopenharmony_ci				${VERTEX_OUTPUT}
316e5c31af7Sopenharmony_ci			}
317e5c31af7Sopenharmony_ci		""
318e5c31af7Sopenharmony_ci		fragment ""
319e5c31af7Sopenharmony_ci			#version 310 es
320e5c31af7Sopenharmony_ci			precision mediump float;
321e5c31af7Sopenharmony_ci			struct Struct {mediump vec4 a; mediump vec4 b;};
322e5c31af7Sopenharmony_ci			uniform Struct val;
323e5c31af7Sopenharmony_ci			in mediump float res;
324e5c31af7Sopenharmony_ci			${FRAGMENT_DECLARATIONS}
325e5c31af7Sopenharmony_ci			void main()
326e5c31af7Sopenharmony_ci			{			out0 = res;
327e5c31af7Sopenharmony_ci				${FRAGMENT_OUTPUT}
328e5c31af7Sopenharmony_ci			}
329e5c31af7Sopenharmony_ci		""
330e5c31af7Sopenharmony_ci	end
331e5c31af7Sopenharmony_ci
332e5c31af7Sopenharmony_ci	case fragment_only_vec4
333e5c31af7Sopenharmony_ci		version 310 es
334e5c31af7Sopenharmony_ci		desc "Uniform struct declared in both, used only in fragment. Datatype vec4"
335e5c31af7Sopenharmony_ci		values {
336e5c31af7Sopenharmony_ci			uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
337e5c31af7Sopenharmony_ci			uniform vec4 val.b = vec4(1.0, 2.0, 3.0, 4.0);
338e5c31af7Sopenharmony_ci			output float out0 = 3.0;
339e5c31af7Sopenharmony_ci		}
340e5c31af7Sopenharmony_ci		vertex ""
341e5c31af7Sopenharmony_ci			#version 310 es
342e5c31af7Sopenharmony_ci			${VERTEX_DECLARATIONS}
343e5c31af7Sopenharmony_ci			struct Struct {mediump vec4 a; mediump vec4 b;};
344e5c31af7Sopenharmony_ci			uniform Struct val;
345e5c31af7Sopenharmony_ci			void main()
346e5c31af7Sopenharmony_ci			{
347e5c31af7Sopenharmony_ci				${VERTEX_OUTPUT}
348e5c31af7Sopenharmony_ci			}
349e5c31af7Sopenharmony_ci		""
350e5c31af7Sopenharmony_ci		fragment ""
351e5c31af7Sopenharmony_ci			#version 310 es
352e5c31af7Sopenharmony_ci			precision mediump float;
353e5c31af7Sopenharmony_ci			struct Struct {mediump vec4 a; mediump vec4 b;};
354e5c31af7Sopenharmony_ci			uniform Struct val;
355e5c31af7Sopenharmony_ci			${FRAGMENT_DECLARATIONS}
356e5c31af7Sopenharmony_ci			void main()
357e5c31af7Sopenharmony_ci			{			out0 = val.a.x + val.b.y;
358e5c31af7Sopenharmony_ci				${FRAGMENT_OUTPUT}
359e5c31af7Sopenharmony_ci			}
360e5c31af7Sopenharmony_ci		""
361e5c31af7Sopenharmony_ci	end
362e5c31af7Sopenharmony_ci
363e5c31af7Sopenharmony_ci	case partial_vec4
364e5c31af7Sopenharmony_ci		version 310 es
365e5c31af7Sopenharmony_ci		desc "Uniform struct declared in both, used partially in both. Datatype vec4"
366e5c31af7Sopenharmony_ci		values {
367e5c31af7Sopenharmony_ci			uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
368e5c31af7Sopenharmony_ci			uniform vec4 val.b = vec4(1.0, 2.0, 3.0, 4.0);
369e5c31af7Sopenharmony_ci			output float out0 = 3.0;
370e5c31af7Sopenharmony_ci		}
371e5c31af7Sopenharmony_ci		vertex ""
372e5c31af7Sopenharmony_ci			#version 310 es
373e5c31af7Sopenharmony_ci			${VERTEX_DECLARATIONS}
374e5c31af7Sopenharmony_ci			struct Struct {mediump vec4 a; mediump vec4 b;};
375e5c31af7Sopenharmony_ci			uniform Struct val;
376e5c31af7Sopenharmony_ci			out mediump float res;
377e5c31af7Sopenharmony_ci			void main()
378e5c31af7Sopenharmony_ci			{
379e5c31af7Sopenharmony_ci				res = val.a.x;
380e5c31af7Sopenharmony_ci				${VERTEX_OUTPUT}
381e5c31af7Sopenharmony_ci			}
382e5c31af7Sopenharmony_ci		""
383e5c31af7Sopenharmony_ci		fragment ""
384e5c31af7Sopenharmony_ci			#version 310 es
385e5c31af7Sopenharmony_ci			precision mediump float;
386e5c31af7Sopenharmony_ci			struct Struct {mediump vec4 a; mediump vec4 b;};
387e5c31af7Sopenharmony_ci			uniform Struct val;
388e5c31af7Sopenharmony_ci			${FRAGMENT_DECLARATIONS}
389e5c31af7Sopenharmony_ci			in mediump float res;
390e5c31af7Sopenharmony_ci			void main()
391e5c31af7Sopenharmony_ci			{			out0 = res + val.b.y;
392e5c31af7Sopenharmony_ci				${FRAGMENT_OUTPUT}
393e5c31af7Sopenharmony_ci			}
394e5c31af7Sopenharmony_ci		""
395e5c31af7Sopenharmony_ci	end
396e5c31af7Sopenharmony_ci
397e5c31af7Sopenharmony_ci	case vec4_vec3
398e5c31af7Sopenharmony_ci		version 310 es
399e5c31af7Sopenharmony_ci		desc "Same uniform struct in both shaders. Datatype vec4 and vec3"
400e5c31af7Sopenharmony_ci		values {
401e5c31af7Sopenharmony_ci			uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
402e5c31af7Sopenharmony_ci			uniform vec3 val.b = vec3(1.0, 2.0, 3.0);
403e5c31af7Sopenharmony_ci			output float out0 = 3.0;
404e5c31af7Sopenharmony_ci		}
405e5c31af7Sopenharmony_ci		vertex ""
406e5c31af7Sopenharmony_ci			#version 310 es
407e5c31af7Sopenharmony_ci			${VERTEX_DECLARATIONS}
408e5c31af7Sopenharmony_ci			struct Struct {mediump vec4 a; mediump vec3 b;};
409e5c31af7Sopenharmony_ci			uniform Struct val;
410e5c31af7Sopenharmony_ci			out mediump float dummy;
411e5c31af7Sopenharmony_ci			void main()
412e5c31af7Sopenharmony_ci			{
413e5c31af7Sopenharmony_ci				dummy = val.a.x + val.b.y;
414e5c31af7Sopenharmony_ci				${VERTEX_OUTPUT}
415e5c31af7Sopenharmony_ci			}
416e5c31af7Sopenharmony_ci		""
417e5c31af7Sopenharmony_ci		fragment ""
418e5c31af7Sopenharmony_ci			#version 310 es
419e5c31af7Sopenharmony_ci			precision mediump float;
420e5c31af7Sopenharmony_ci			struct Struct {mediump vec4 a; mediump vec3 b;};
421e5c31af7Sopenharmony_ci			uniform Struct val;
422e5c31af7Sopenharmony_ci			in mediump float dummy;
423e5c31af7Sopenharmony_ci			${FRAGMENT_DECLARATIONS}
424e5c31af7Sopenharmony_ci			void main()
425e5c31af7Sopenharmony_ci			{			out0 = val.b.y + val.a.x;
426e5c31af7Sopenharmony_ci				out0 = out0 + dummy;
427e5c31af7Sopenharmony_ci				out0 = out0 - dummy;
428e5c31af7Sopenharmony_ci				${FRAGMENT_OUTPUT}
429e5c31af7Sopenharmony_ci			}
430e5c31af7Sopenharmony_ci		""
431e5c31af7Sopenharmony_ci	end
432e5c31af7Sopenharmony_ci
433e5c31af7Sopenharmony_ci	case vertex_only_vec4_vec3
434e5c31af7Sopenharmony_ci		version 310 es
435e5c31af7Sopenharmony_ci		desc "Uniform struct declared in both, used only in vertex. Datatype vec4 and vec3"
436e5c31af7Sopenharmony_ci		values {
437e5c31af7Sopenharmony_ci			uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
438e5c31af7Sopenharmony_ci			uniform vec3 val.b = vec3(1.0, 2.0, 3.0);
439e5c31af7Sopenharmony_ci			output float out0 = 3.0;
440e5c31af7Sopenharmony_ci		}
441e5c31af7Sopenharmony_ci		vertex ""
442e5c31af7Sopenharmony_ci			#version 310 es
443e5c31af7Sopenharmony_ci			${VERTEX_DECLARATIONS}
444e5c31af7Sopenharmony_ci			struct Struct {mediump vec4 a; mediump vec3 b;};
445e5c31af7Sopenharmony_ci			uniform Struct val;
446e5c31af7Sopenharmony_ci			out mediump float res;
447e5c31af7Sopenharmony_ci			void main()
448e5c31af7Sopenharmony_ci			{
449e5c31af7Sopenharmony_ci				res = val.a.x + val.b.y;
450e5c31af7Sopenharmony_ci				${VERTEX_OUTPUT}
451e5c31af7Sopenharmony_ci			}
452e5c31af7Sopenharmony_ci		""
453e5c31af7Sopenharmony_ci		fragment ""
454e5c31af7Sopenharmony_ci			#version 310 es
455e5c31af7Sopenharmony_ci			precision mediump float;
456e5c31af7Sopenharmony_ci			struct Struct {mediump vec4 a; mediump vec3 b;};
457e5c31af7Sopenharmony_ci			uniform Struct val;
458e5c31af7Sopenharmony_ci			in mediump float res;
459e5c31af7Sopenharmony_ci			${FRAGMENT_DECLARATIONS}
460e5c31af7Sopenharmony_ci			void main()
461e5c31af7Sopenharmony_ci			{			out0 = res;
462e5c31af7Sopenharmony_ci				${FRAGMENT_OUTPUT}
463e5c31af7Sopenharmony_ci			}
464e5c31af7Sopenharmony_ci		""
465e5c31af7Sopenharmony_ci	end
466e5c31af7Sopenharmony_ci
467e5c31af7Sopenharmony_ci	case fragment_only_vec4_vec3
468e5c31af7Sopenharmony_ci		version 310 es
469e5c31af7Sopenharmony_ci		desc "Uniform struct declared in both, used only in fragment. Datatype vec4 and vec3"
470e5c31af7Sopenharmony_ci		values {
471e5c31af7Sopenharmony_ci			uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
472e5c31af7Sopenharmony_ci			uniform vec3 val.b = vec3(1.0, 2.0, 3.0);
473e5c31af7Sopenharmony_ci			output float out0 = 3.0;
474e5c31af7Sopenharmony_ci		}
475e5c31af7Sopenharmony_ci		vertex ""
476e5c31af7Sopenharmony_ci			#version 310 es
477e5c31af7Sopenharmony_ci			${VERTEX_DECLARATIONS}
478e5c31af7Sopenharmony_ci			struct Struct {mediump vec4 a; mediump vec3 b;};
479e5c31af7Sopenharmony_ci			uniform Struct val;
480e5c31af7Sopenharmony_ci			void main()
481e5c31af7Sopenharmony_ci			{
482e5c31af7Sopenharmony_ci				${VERTEX_OUTPUT}
483e5c31af7Sopenharmony_ci			}
484e5c31af7Sopenharmony_ci		""
485e5c31af7Sopenharmony_ci		fragment ""
486e5c31af7Sopenharmony_ci			#version 310 es
487e5c31af7Sopenharmony_ci			precision mediump float;
488e5c31af7Sopenharmony_ci			struct Struct {mediump vec4 a; mediump vec3 b;};
489e5c31af7Sopenharmony_ci			uniform Struct val;
490e5c31af7Sopenharmony_ci			${FRAGMENT_DECLARATIONS}
491e5c31af7Sopenharmony_ci			void main()
492e5c31af7Sopenharmony_ci			{			out0 = val.a.x + val.b.y;
493e5c31af7Sopenharmony_ci				${FRAGMENT_OUTPUT}
494e5c31af7Sopenharmony_ci			}
495e5c31af7Sopenharmony_ci		""
496e5c31af7Sopenharmony_ci	end
497e5c31af7Sopenharmony_ci
498e5c31af7Sopenharmony_ci	case partial_vec4_vec3
499e5c31af7Sopenharmony_ci		version 310 es
500e5c31af7Sopenharmony_ci		desc "Uniform struct declared in both, used partially in both. Datatype vec4 and vec3"
501e5c31af7Sopenharmony_ci		values {
502e5c31af7Sopenharmony_ci			uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
503e5c31af7Sopenharmony_ci			uniform vec3 val.b = vec3(1.0, 2.0, 3.0);
504e5c31af7Sopenharmony_ci			output float out0 = 3.0;
505e5c31af7Sopenharmony_ci		}
506e5c31af7Sopenharmony_ci		vertex ""
507e5c31af7Sopenharmony_ci			#version 310 es
508e5c31af7Sopenharmony_ci			${VERTEX_DECLARATIONS}
509e5c31af7Sopenharmony_ci			struct Struct {mediump vec4 a; mediump vec3 b;};
510e5c31af7Sopenharmony_ci			uniform Struct val;
511e5c31af7Sopenharmony_ci			out mediump float res;
512e5c31af7Sopenharmony_ci			void main()
513e5c31af7Sopenharmony_ci			{
514e5c31af7Sopenharmony_ci				res = val.a.x;
515e5c31af7Sopenharmony_ci				${VERTEX_OUTPUT}
516e5c31af7Sopenharmony_ci			}
517e5c31af7Sopenharmony_ci		""
518e5c31af7Sopenharmony_ci		fragment ""
519e5c31af7Sopenharmony_ci			#version 310 es
520e5c31af7Sopenharmony_ci			precision mediump float;
521e5c31af7Sopenharmony_ci			struct Struct {mediump vec4 a; mediump vec3 b;};
522e5c31af7Sopenharmony_ci			uniform Struct val;
523e5c31af7Sopenharmony_ci			${FRAGMENT_DECLARATIONS}
524e5c31af7Sopenharmony_ci			in mediump float res;
525e5c31af7Sopenharmony_ci			void main()
526e5c31af7Sopenharmony_ci			{			out0 = res + val.b.y;
527e5c31af7Sopenharmony_ci				${FRAGMENT_OUTPUT}
528e5c31af7Sopenharmony_ci			}
529e5c31af7Sopenharmony_ci		""
530e5c31af7Sopenharmony_ci	end
531e5c31af7Sopenharmony_ci
532e5c31af7Sopenharmony_ci	case vec4_float
533e5c31af7Sopenharmony_ci		version 310 es
534e5c31af7Sopenharmony_ci		desc "Same uniform struct in both shaders. Datatype vec4 and float"
535e5c31af7Sopenharmony_ci		values {
536e5c31af7Sopenharmony_ci			uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
537e5c31af7Sopenharmony_ci			uniform float val.b = 2.0;
538e5c31af7Sopenharmony_ci			output float out0 = 3.0;
539e5c31af7Sopenharmony_ci		}
540e5c31af7Sopenharmony_ci		vertex ""
541e5c31af7Sopenharmony_ci			#version 310 es
542e5c31af7Sopenharmony_ci			${VERTEX_DECLARATIONS}
543e5c31af7Sopenharmony_ci			struct Struct {mediump vec4 a; mediump float b;};
544e5c31af7Sopenharmony_ci			uniform Struct val;
545e5c31af7Sopenharmony_ci			out mediump float dummy;
546e5c31af7Sopenharmony_ci			void main()
547e5c31af7Sopenharmony_ci			{
548e5c31af7Sopenharmony_ci				dummy = val.a.x + val.b;
549e5c31af7Sopenharmony_ci				${VERTEX_OUTPUT}
550e5c31af7Sopenharmony_ci			}
551e5c31af7Sopenharmony_ci		""
552e5c31af7Sopenharmony_ci		fragment ""
553e5c31af7Sopenharmony_ci			#version 310 es
554e5c31af7Sopenharmony_ci			precision mediump float;
555e5c31af7Sopenharmony_ci			struct Struct {mediump vec4 a; mediump float b;};
556e5c31af7Sopenharmony_ci			uniform Struct val;
557e5c31af7Sopenharmony_ci			in mediump float dummy;
558e5c31af7Sopenharmony_ci			${FRAGMENT_DECLARATIONS}
559e5c31af7Sopenharmony_ci			void main()
560e5c31af7Sopenharmony_ci			{			out0 = val.b + val.a.x;
561e5c31af7Sopenharmony_ci				out0 = out0 + dummy;
562e5c31af7Sopenharmony_ci				out0 = out0 - dummy;
563e5c31af7Sopenharmony_ci				${FRAGMENT_OUTPUT}
564e5c31af7Sopenharmony_ci			}
565e5c31af7Sopenharmony_ci		""
566e5c31af7Sopenharmony_ci	end
567e5c31af7Sopenharmony_ci
568e5c31af7Sopenharmony_ci	case vertex_only_vec4_float
569e5c31af7Sopenharmony_ci		version 310 es
570e5c31af7Sopenharmony_ci		desc "Uniform struct declared in both, used only in vertex. Datatype vec4 and float"
571e5c31af7Sopenharmony_ci		values {
572e5c31af7Sopenharmony_ci			uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
573e5c31af7Sopenharmony_ci			uniform float val.b = 2.0;
574e5c31af7Sopenharmony_ci			output float out0 = 3.0;
575e5c31af7Sopenharmony_ci		}
576e5c31af7Sopenharmony_ci		vertex ""
577e5c31af7Sopenharmony_ci			#version 310 es
578e5c31af7Sopenharmony_ci			${VERTEX_DECLARATIONS}
579e5c31af7Sopenharmony_ci			struct Struct {mediump vec4 a; mediump float b;};
580e5c31af7Sopenharmony_ci			uniform Struct val;
581e5c31af7Sopenharmony_ci			out mediump float res;
582e5c31af7Sopenharmony_ci			void main()
583e5c31af7Sopenharmony_ci			{
584e5c31af7Sopenharmony_ci				res = val.a.x + val.b;
585e5c31af7Sopenharmony_ci				${VERTEX_OUTPUT}
586e5c31af7Sopenharmony_ci			}
587e5c31af7Sopenharmony_ci		""
588e5c31af7Sopenharmony_ci		fragment ""
589e5c31af7Sopenharmony_ci			#version 310 es
590e5c31af7Sopenharmony_ci			precision mediump float;
591e5c31af7Sopenharmony_ci			struct Struct {mediump vec4 a; mediump float b;};
592e5c31af7Sopenharmony_ci			uniform Struct val;
593e5c31af7Sopenharmony_ci			in mediump float res;
594e5c31af7Sopenharmony_ci			${FRAGMENT_DECLARATIONS}
595e5c31af7Sopenharmony_ci			void main()
596e5c31af7Sopenharmony_ci			{			out0 = res;
597e5c31af7Sopenharmony_ci				${FRAGMENT_OUTPUT}
598e5c31af7Sopenharmony_ci			}
599e5c31af7Sopenharmony_ci		""
600e5c31af7Sopenharmony_ci	end
601e5c31af7Sopenharmony_ci
602e5c31af7Sopenharmony_ci	case fragment_only_vec4_float
603e5c31af7Sopenharmony_ci		version 310 es
604e5c31af7Sopenharmony_ci		desc "Uniform struct declared in both, used only in fragment. Datatype vec4 and float"
605e5c31af7Sopenharmony_ci		values {
606e5c31af7Sopenharmony_ci			uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
607e5c31af7Sopenharmony_ci			uniform float val.b = 2.0;
608e5c31af7Sopenharmony_ci			output float out0 = 3.0;
609e5c31af7Sopenharmony_ci		}
610e5c31af7Sopenharmony_ci		vertex ""
611e5c31af7Sopenharmony_ci			#version 310 es
612e5c31af7Sopenharmony_ci			${VERTEX_DECLARATIONS}
613e5c31af7Sopenharmony_ci			struct Struct {mediump vec4 a; mediump float b;};
614e5c31af7Sopenharmony_ci			uniform Struct val;
615e5c31af7Sopenharmony_ci			void main()
616e5c31af7Sopenharmony_ci			{
617e5c31af7Sopenharmony_ci				${VERTEX_OUTPUT}
618e5c31af7Sopenharmony_ci			}
619e5c31af7Sopenharmony_ci		""
620e5c31af7Sopenharmony_ci		fragment ""
621e5c31af7Sopenharmony_ci			#version 310 es
622e5c31af7Sopenharmony_ci			precision mediump float;
623e5c31af7Sopenharmony_ci			struct Struct {mediump vec4 a; mediump float b;};
624e5c31af7Sopenharmony_ci			uniform Struct val;
625e5c31af7Sopenharmony_ci			${FRAGMENT_DECLARATIONS}
626e5c31af7Sopenharmony_ci			void main()
627e5c31af7Sopenharmony_ci			{			out0 = val.a.x + val.b;
628e5c31af7Sopenharmony_ci				${FRAGMENT_OUTPUT}
629e5c31af7Sopenharmony_ci			}
630e5c31af7Sopenharmony_ci		""
631e5c31af7Sopenharmony_ci	end
632e5c31af7Sopenharmony_ci
633e5c31af7Sopenharmony_ci	case partial_vec4_float
634e5c31af7Sopenharmony_ci		version 310 es
635e5c31af7Sopenharmony_ci		desc "Uniform struct declared in both, used partially in both. Datatype vec4 and float"
636e5c31af7Sopenharmony_ci		values {
637e5c31af7Sopenharmony_ci			uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
638e5c31af7Sopenharmony_ci			uniform float val.b = 2.0;
639e5c31af7Sopenharmony_ci			output float out0 = 3.0;
640e5c31af7Sopenharmony_ci		}
641e5c31af7Sopenharmony_ci		vertex ""
642e5c31af7Sopenharmony_ci			#version 310 es
643e5c31af7Sopenharmony_ci			${VERTEX_DECLARATIONS}
644e5c31af7Sopenharmony_ci			struct Struct {mediump vec4 a; mediump float b;};
645e5c31af7Sopenharmony_ci			uniform Struct val;
646e5c31af7Sopenharmony_ci			out mediump float res;
647e5c31af7Sopenharmony_ci			void main()
648e5c31af7Sopenharmony_ci			{
649e5c31af7Sopenharmony_ci				res = val.a.x;
650e5c31af7Sopenharmony_ci				${VERTEX_OUTPUT}
651e5c31af7Sopenharmony_ci			}
652e5c31af7Sopenharmony_ci		""
653e5c31af7Sopenharmony_ci		fragment ""
654e5c31af7Sopenharmony_ci			#version 310 es
655e5c31af7Sopenharmony_ci			precision mediump float;
656e5c31af7Sopenharmony_ci			struct Struct {mediump vec4 a; mediump float b;};
657e5c31af7Sopenharmony_ci			uniform Struct val;
658e5c31af7Sopenharmony_ci			${FRAGMENT_DECLARATIONS}
659e5c31af7Sopenharmony_ci			in mediump float res;
660e5c31af7Sopenharmony_ci			void main()
661e5c31af7Sopenharmony_ci			{			out0 = res + val.b;
662e5c31af7Sopenharmony_ci				${FRAGMENT_OUTPUT}
663e5c31af7Sopenharmony_ci			}
664e5c31af7Sopenharmony_ci		""
665e5c31af7Sopenharmony_ci	end
666e5c31af7Sopenharmony_ci
667e5c31af7Sopenharmony_ci	case partial_vec4_struct
668e5c31af7Sopenharmony_ci		version 310 es
669e5c31af7Sopenharmony_ci		desc "Uniform struct declared in both, used partially in both. Datatype vec4 and struct with vec4"
670e5c31af7Sopenharmony_ci		values {
671e5c31af7Sopenharmony_ci			uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
672e5c31af7Sopenharmony_ci			uniform vec4 val.b.c = vec4(1.0, 2.0, 3.0, 4.0);
673e5c31af7Sopenharmony_ci			output float out0 = 3.0;
674e5c31af7Sopenharmony_ci		}
675e5c31af7Sopenharmony_ci		vertex ""
676e5c31af7Sopenharmony_ci			#version 310 es
677e5c31af7Sopenharmony_ci			${VERTEX_DECLARATIONS}
678e5c31af7Sopenharmony_ci			struct Inner {mediump vec4 c;};
679e5c31af7Sopenharmony_ci			struct Struct {mediump vec4 a; Inner b;};
680e5c31af7Sopenharmony_ci			uniform Struct val;
681e5c31af7Sopenharmony_ci			out mediump float res;
682e5c31af7Sopenharmony_ci			void main()
683e5c31af7Sopenharmony_ci			{
684e5c31af7Sopenharmony_ci				res = val.a.x;
685e5c31af7Sopenharmony_ci				${VERTEX_OUTPUT}
686e5c31af7Sopenharmony_ci			}
687e5c31af7Sopenharmony_ci		""
688e5c31af7Sopenharmony_ci		fragment ""
689e5c31af7Sopenharmony_ci			#version 310 es
690e5c31af7Sopenharmony_ci			precision mediump float;
691e5c31af7Sopenharmony_ci			struct Inner {mediump vec4 c;};
692e5c31af7Sopenharmony_ci			struct Struct {mediump vec4 a; Inner b;};
693e5c31af7Sopenharmony_ci			uniform Struct val;
694e5c31af7Sopenharmony_ci			${FRAGMENT_DECLARATIONS}
695e5c31af7Sopenharmony_ci			in mediump float res;
696e5c31af7Sopenharmony_ci			void main()
697e5c31af7Sopenharmony_ci			{			out0 = res + val.b.c.y;
698e5c31af7Sopenharmony_ci				${FRAGMENT_OUTPUT}
699e5c31af7Sopenharmony_ci			}
700e5c31af7Sopenharmony_ci		""
701e5c31af7Sopenharmony_ci	end
702e5c31af7Sopenharmony_ci
703e5c31af7Sopenharmony_ci	case partial_vec4_vec3_struct
704e5c31af7Sopenharmony_ci		version 310 es
705e5c31af7Sopenharmony_ci		desc "Uniform struct declared in both, used partially in both. Datatype vec4 and struct with vec3"
706e5c31af7Sopenharmony_ci		values {
707e5c31af7Sopenharmony_ci			uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
708e5c31af7Sopenharmony_ci			uniform vec3 val.b.c = vec3(1.0, 2.0, 3.0);
709e5c31af7Sopenharmony_ci			output float out0 = 3.0;
710e5c31af7Sopenharmony_ci		}
711e5c31af7Sopenharmony_ci		vertex ""
712e5c31af7Sopenharmony_ci			#version 310 es
713e5c31af7Sopenharmony_ci			${VERTEX_DECLARATIONS}
714e5c31af7Sopenharmony_ci			struct Inner {mediump vec3 c;};
715e5c31af7Sopenharmony_ci			struct Struct {mediump vec4 a; Inner b;};
716e5c31af7Sopenharmony_ci			uniform Struct val;
717e5c31af7Sopenharmony_ci			out mediump float res;
718e5c31af7Sopenharmony_ci			void main()
719e5c31af7Sopenharmony_ci			{
720e5c31af7Sopenharmony_ci				res = val.a.x;
721e5c31af7Sopenharmony_ci				${VERTEX_OUTPUT}
722e5c31af7Sopenharmony_ci			}
723e5c31af7Sopenharmony_ci		""
724e5c31af7Sopenharmony_ci		fragment ""
725e5c31af7Sopenharmony_ci			#version 310 es
726e5c31af7Sopenharmony_ci			precision mediump float;
727e5c31af7Sopenharmony_ci			struct Inner {mediump vec3 c;};
728e5c31af7Sopenharmony_ci			struct Struct {mediump vec4 a; Inner b;};
729e5c31af7Sopenharmony_ci			uniform Struct val;
730e5c31af7Sopenharmony_ci			${FRAGMENT_DECLARATIONS}
731e5c31af7Sopenharmony_ci			in mediump float res;
732e5c31af7Sopenharmony_ci			void main()
733e5c31af7Sopenharmony_ci			{			out0 = res + val.b.c.y;
734e5c31af7Sopenharmony_ci				${FRAGMENT_OUTPUT}
735e5c31af7Sopenharmony_ci			}
736e5c31af7Sopenharmony_ci		""
737e5c31af7Sopenharmony_ci	end
738e5c31af7Sopenharmony_ci
739e5c31af7Sopenharmony_ci	case partial_vec2_vec3
740e5c31af7Sopenharmony_ci		version 310 es
741e5c31af7Sopenharmony_ci		desc "Uniform struct declared in both, used partially in both. Datatype vec2 and vec3"
742e5c31af7Sopenharmony_ci		values {
743e5c31af7Sopenharmony_ci			uniform vec2 val.a = vec2(1.0, 2.0);
744e5c31af7Sopenharmony_ci			uniform vec3 val.b = vec3(1.0, 2.0, 3.0);
745e5c31af7Sopenharmony_ci			output float out0 = 3.0;
746e5c31af7Sopenharmony_ci		}
747e5c31af7Sopenharmony_ci		vertex ""
748e5c31af7Sopenharmony_ci			#version 310 es
749e5c31af7Sopenharmony_ci			${VERTEX_DECLARATIONS}
750e5c31af7Sopenharmony_ci			struct Struct {mediump vec2 a; mediump vec3 b;};
751e5c31af7Sopenharmony_ci			uniform Struct val;
752e5c31af7Sopenharmony_ci			out mediump float res;
753e5c31af7Sopenharmony_ci			void main()
754e5c31af7Sopenharmony_ci			{
755e5c31af7Sopenharmony_ci				res = val.a.x;
756e5c31af7Sopenharmony_ci				${VERTEX_OUTPUT}
757e5c31af7Sopenharmony_ci			}
758e5c31af7Sopenharmony_ci		""
759e5c31af7Sopenharmony_ci		fragment ""
760e5c31af7Sopenharmony_ci			#version 310 es
761e5c31af7Sopenharmony_ci			precision mediump float;
762e5c31af7Sopenharmony_ci			struct Struct {mediump vec2 a; mediump vec3 b;};
763e5c31af7Sopenharmony_ci			uniform Struct val;
764e5c31af7Sopenharmony_ci			${FRAGMENT_DECLARATIONS}
765e5c31af7Sopenharmony_ci			in mediump float res;
766e5c31af7Sopenharmony_ci			void main()
767e5c31af7Sopenharmony_ci			{			out0 = res + val.b.y;
768e5c31af7Sopenharmony_ci				${FRAGMENT_OUTPUT}
769e5c31af7Sopenharmony_ci			}
770e5c31af7Sopenharmony_ci		""
771e5c31af7Sopenharmony_ci	end
772e5c31af7Sopenharmony_ci
773e5c31af7Sopenharmony_ci	case partial_vec2_int
774e5c31af7Sopenharmony_ci		version 310 es
775e5c31af7Sopenharmony_ci		desc "Uniform struct declared in both, used partially in both. Datatype vec2 and int"
776e5c31af7Sopenharmony_ci		values {
777e5c31af7Sopenharmony_ci			uniform vec2 val.a = vec2(1.0, 2.0);
778e5c31af7Sopenharmony_ci			uniform int val.b = 2;
779e5c31af7Sopenharmony_ci			output float out0 = 3.0;
780e5c31af7Sopenharmony_ci		}
781e5c31af7Sopenharmony_ci		vertex ""
782e5c31af7Sopenharmony_ci			#version 310 es
783e5c31af7Sopenharmony_ci			${VERTEX_DECLARATIONS}
784e5c31af7Sopenharmony_ci			struct Struct {mediump vec2 a; mediump int b;};
785e5c31af7Sopenharmony_ci			uniform Struct val;
786e5c31af7Sopenharmony_ci			out mediump float res;
787e5c31af7Sopenharmony_ci			void main()
788e5c31af7Sopenharmony_ci			{
789e5c31af7Sopenharmony_ci				res = val.a.x;
790e5c31af7Sopenharmony_ci				${VERTEX_OUTPUT}
791e5c31af7Sopenharmony_ci			}
792e5c31af7Sopenharmony_ci		""
793e5c31af7Sopenharmony_ci		fragment ""
794e5c31af7Sopenharmony_ci			#version 310 es
795e5c31af7Sopenharmony_ci			precision mediump float;
796e5c31af7Sopenharmony_ci			struct Struct {mediump vec2 a; mediump int b;};
797e5c31af7Sopenharmony_ci			uniform Struct val;
798e5c31af7Sopenharmony_ci			${FRAGMENT_DECLARATIONS}
799e5c31af7Sopenharmony_ci			in mediump float res;
800e5c31af7Sopenharmony_ci			void main()
801e5c31af7Sopenharmony_ci			{			out0 = res + float(val.b);
802e5c31af7Sopenharmony_ci				${FRAGMENT_OUTPUT}
803e5c31af7Sopenharmony_ci			}
804e5c31af7Sopenharmony_ci		""
805e5c31af7Sopenharmony_ci	end
806e5c31af7Sopenharmony_ci
807e5c31af7Sopenharmony_ci	case partial_int_float
808e5c31af7Sopenharmony_ci		version 310 es
809e5c31af7Sopenharmony_ci		desc "Uniform struct declared in both, used partially in both. Datatype int and float"
810e5c31af7Sopenharmony_ci		values {
811e5c31af7Sopenharmony_ci			uniform float val.a = 1.0;
812e5c31af7Sopenharmony_ci			uniform int val.b = 2;
813e5c31af7Sopenharmony_ci			output float out0 = 3.0;
814e5c31af7Sopenharmony_ci		}
815e5c31af7Sopenharmony_ci		vertex ""
816e5c31af7Sopenharmony_ci			#version 310 es
817e5c31af7Sopenharmony_ci			${VERTEX_DECLARATIONS}
818e5c31af7Sopenharmony_ci			struct Struct {mediump float a; mediump int b;};
819e5c31af7Sopenharmony_ci			uniform Struct val;
820e5c31af7Sopenharmony_ci			out mediump float res;
821e5c31af7Sopenharmony_ci			void main()
822e5c31af7Sopenharmony_ci			{
823e5c31af7Sopenharmony_ci				res = val.a;
824e5c31af7Sopenharmony_ci				${VERTEX_OUTPUT}
825e5c31af7Sopenharmony_ci			}
826e5c31af7Sopenharmony_ci		""
827e5c31af7Sopenharmony_ci		fragment ""
828e5c31af7Sopenharmony_ci			#version 310 es
829e5c31af7Sopenharmony_ci			precision mediump float;
830e5c31af7Sopenharmony_ci			struct Struct {mediump float a; mediump int b;};
831e5c31af7Sopenharmony_ci			uniform Struct val;
832e5c31af7Sopenharmony_ci			${FRAGMENT_DECLARATIONS}
833e5c31af7Sopenharmony_ci			in mediump float res;
834e5c31af7Sopenharmony_ci			void main()
835e5c31af7Sopenharmony_ci			{			out0 = res + float(val.b);
836e5c31af7Sopenharmony_ci				${FRAGMENT_OUTPUT}
837e5c31af7Sopenharmony_ci			}
838e5c31af7Sopenharmony_ci		""
839e5c31af7Sopenharmony_ci	end
840e5c31af7Sopenharmony_ci
841e5c31af7Sopenharmony_ci	case partial_bvec2_vec2
842e5c31af7Sopenharmony_ci		version 310 es
843e5c31af7Sopenharmony_ci		desc "Uniform struct declared in both, used partially in both. Datatype bvec2 and vec2"
844e5c31af7Sopenharmony_ci		values {
845e5c31af7Sopenharmony_ci			uniform bvec2 val.a = bvec2(true, true);
846e5c31af7Sopenharmony_ci			uniform vec2 val.b = vec2(1.0, 2.0);
847e5c31af7Sopenharmony_ci			output float out0 = 3.0;
848e5c31af7Sopenharmony_ci		}
849e5c31af7Sopenharmony_ci		vertex ""
850e5c31af7Sopenharmony_ci			#version 310 es
851e5c31af7Sopenharmony_ci			${VERTEX_DECLARATIONS}
852e5c31af7Sopenharmony_ci			struct Struct {bvec2 a; mediump vec2 b;};
853e5c31af7Sopenharmony_ci			uniform Struct val;
854e5c31af7Sopenharmony_ci			out mediump float res;
855e5c31af7Sopenharmony_ci			void main()
856e5c31af7Sopenharmony_ci			{
857e5c31af7Sopenharmony_ci				res = float(val.a.x);
858e5c31af7Sopenharmony_ci				${VERTEX_OUTPUT}
859e5c31af7Sopenharmony_ci			}
860e5c31af7Sopenharmony_ci		""
861e5c31af7Sopenharmony_ci		fragment ""
862e5c31af7Sopenharmony_ci			#version 310 es
863e5c31af7Sopenharmony_ci			precision mediump float;
864e5c31af7Sopenharmony_ci			struct Struct {bvec2 a; mediump vec2 b;};
865e5c31af7Sopenharmony_ci			uniform Struct val;
866e5c31af7Sopenharmony_ci			${FRAGMENT_DECLARATIONS}
867e5c31af7Sopenharmony_ci			in mediump float res;
868e5c31af7Sopenharmony_ci			void main()
869e5c31af7Sopenharmony_ci			{			out0 = res + val.b.y;
870e5c31af7Sopenharmony_ci				${FRAGMENT_OUTPUT}
871e5c31af7Sopenharmony_ci			}
872e5c31af7Sopenharmony_ci		""
873e5c31af7Sopenharmony_ci	end
874e5c31af7Sopenharmony_ci
875e5c31af7Sopenharmony_ci	case partial_ivec2_vec2
876e5c31af7Sopenharmony_ci		version 310 es
877e5c31af7Sopenharmony_ci		desc "Uniform struct declared in both, used partially in both. Datatype ivec2 and vec2"
878e5c31af7Sopenharmony_ci		values {
879e5c31af7Sopenharmony_ci			uniform ivec2 val.a = ivec2(1, 2);
880e5c31af7Sopenharmony_ci			uniform vec2 val.b = vec2(1.0, 2.0);
881e5c31af7Sopenharmony_ci			output float out0 = 3.0;
882e5c31af7Sopenharmony_ci		}
883e5c31af7Sopenharmony_ci		vertex ""
884e5c31af7Sopenharmony_ci			#version 310 es
885e5c31af7Sopenharmony_ci			${VERTEX_DECLARATIONS}
886e5c31af7Sopenharmony_ci			struct Struct {mediump ivec2 a; mediump vec2 b;};
887e5c31af7Sopenharmony_ci			uniform Struct val;
888e5c31af7Sopenharmony_ci			out mediump float res;
889e5c31af7Sopenharmony_ci			void main()
890e5c31af7Sopenharmony_ci			{
891e5c31af7Sopenharmony_ci				res = vec2(val.a).x;
892e5c31af7Sopenharmony_ci				${VERTEX_OUTPUT}
893e5c31af7Sopenharmony_ci			}
894e5c31af7Sopenharmony_ci		""
895e5c31af7Sopenharmony_ci		fragment ""
896e5c31af7Sopenharmony_ci			#version 310 es
897e5c31af7Sopenharmony_ci			precision mediump float;
898e5c31af7Sopenharmony_ci			struct Struct {mediump ivec2 a; mediump vec2 b;};
899e5c31af7Sopenharmony_ci			uniform Struct val;
900e5c31af7Sopenharmony_ci			${FRAGMENT_DECLARATIONS}
901e5c31af7Sopenharmony_ci			in mediump float res;
902e5c31af7Sopenharmony_ci			void main()
903e5c31af7Sopenharmony_ci			{			out0 = res + val.b.y;
904e5c31af7Sopenharmony_ci				${FRAGMENT_OUTPUT}
905e5c31af7Sopenharmony_ci			}
906e5c31af7Sopenharmony_ci		""
907e5c31af7Sopenharmony_ci	end
908e5c31af7Sopenharmony_ci
909e5c31af7Sopenharmony_ci	case partial_ivec2_ivec2
910e5c31af7Sopenharmony_ci		version 310 es
911e5c31af7Sopenharmony_ci		desc "Uniform struct declared in both, used partially in both. Datatype ivec2 and ivec2"
912e5c31af7Sopenharmony_ci		values {
913e5c31af7Sopenharmony_ci			uniform ivec2 val.a = ivec2(1, 2);
914e5c31af7Sopenharmony_ci			uniform ivec2 val.b = ivec2(1, 2);
915e5c31af7Sopenharmony_ci			output float out0 = 3.0;
916e5c31af7Sopenharmony_ci		}
917e5c31af7Sopenharmony_ci		vertex ""
918e5c31af7Sopenharmony_ci			#version 310 es
919e5c31af7Sopenharmony_ci			${VERTEX_DECLARATIONS}
920e5c31af7Sopenharmony_ci			struct Struct {mediump ivec2 a; mediump ivec2 b;};
921e5c31af7Sopenharmony_ci			uniform Struct val;
922e5c31af7Sopenharmony_ci			out mediump float res;
923e5c31af7Sopenharmony_ci			void main()
924e5c31af7Sopenharmony_ci			{
925e5c31af7Sopenharmony_ci				res = vec2(val.a).x;
926e5c31af7Sopenharmony_ci				${VERTEX_OUTPUT}
927e5c31af7Sopenharmony_ci			}
928e5c31af7Sopenharmony_ci		""
929e5c31af7Sopenharmony_ci		fragment ""
930e5c31af7Sopenharmony_ci			#version 310 es
931e5c31af7Sopenharmony_ci			precision mediump float;
932e5c31af7Sopenharmony_ci			struct Struct {mediump ivec2 a; mediump ivec2 b;};
933e5c31af7Sopenharmony_ci			uniform Struct val;
934e5c31af7Sopenharmony_ci			${FRAGMENT_DECLARATIONS}
935e5c31af7Sopenharmony_ci			in mediump float res;
936e5c31af7Sopenharmony_ci			void main()
937e5c31af7Sopenharmony_ci			{			out0 = res + vec2(val.b).y;
938e5c31af7Sopenharmony_ci				${FRAGMENT_OUTPUT}
939e5c31af7Sopenharmony_ci			}
940e5c31af7Sopenharmony_ci		""
941e5c31af7Sopenharmony_ci	end
942e5c31af7Sopenharmony_ci
943e5c31af7Sopenharmony_ci	case type_conflict_1
944e5c31af7Sopenharmony_ci		version 310 es
945e5c31af7Sopenharmony_ci		desc "Fragment struct has one less member than fragment version"
946e5c31af7Sopenharmony_ci		expect link_fail
947e5c31af7Sopenharmony_ci		values {output float out0 = 3.0;}
948e5c31af7Sopenharmony_ci		vertex ""
949e5c31af7Sopenharmony_ci			#version 310 es
950e5c31af7Sopenharmony_ci			${VERTEX_DECLARATIONS}
951e5c31af7Sopenharmony_ci			struct Struct {mediump float a; mediump float b;};
952e5c31af7Sopenharmony_ci			uniform Struct val;
953e5c31af7Sopenharmony_ci			out mediump float res;
954e5c31af7Sopenharmony_ci			void main()
955e5c31af7Sopenharmony_ci			{
956e5c31af7Sopenharmony_ci				res = val.a;
957e5c31af7Sopenharmony_ci				${VERTEX_OUTPUT}
958e5c31af7Sopenharmony_ci			}
959e5c31af7Sopenharmony_ci		""
960e5c31af7Sopenharmony_ci		fragment ""
961e5c31af7Sopenharmony_ci			#version 310 es
962e5c31af7Sopenharmony_ci			precision mediump float;
963e5c31af7Sopenharmony_ci			struct Struct {mediump float a;};
964e5c31af7Sopenharmony_ci			uniform Struct val;
965e5c31af7Sopenharmony_ci			${FRAGMENT_DECLARATIONS}
966e5c31af7Sopenharmony_ci			in mediump float res;
967e5c31af7Sopenharmony_ci			void main()
968e5c31af7Sopenharmony_ci			{			out0 = res + val.a;
969e5c31af7Sopenharmony_ci				${FRAGMENT_OUTPUT}
970e5c31af7Sopenharmony_ci			}
971e5c31af7Sopenharmony_ci		""
972e5c31af7Sopenharmony_ci	end
973e5c31af7Sopenharmony_ci
974e5c31af7Sopenharmony_ci	case type_conflict_2
975e5c31af7Sopenharmony_ci		version 310 es
976e5c31af7Sopenharmony_ci		desc "Vertex struct has int, fragment struct has float."
977e5c31af7Sopenharmony_ci		expect link_fail
978e5c31af7Sopenharmony_ci		values {output float out0 = 3.0;}
979e5c31af7Sopenharmony_ci		vertex ""
980e5c31af7Sopenharmony_ci			#version 310 es
981e5c31af7Sopenharmony_ci			${VERTEX_DECLARATIONS}
982e5c31af7Sopenharmony_ci			struct Struct {mediump int a;};
983e5c31af7Sopenharmony_ci			uniform Struct val;
984e5c31af7Sopenharmony_ci			out mediump float res;
985e5c31af7Sopenharmony_ci			void main()
986e5c31af7Sopenharmony_ci			{
987e5c31af7Sopenharmony_ci				res = float(val.a);
988e5c31af7Sopenharmony_ci				${VERTEX_OUTPUT}
989e5c31af7Sopenharmony_ci			}
990e5c31af7Sopenharmony_ci		""
991e5c31af7Sopenharmony_ci		fragment ""
992e5c31af7Sopenharmony_ci			#version 310 es
993e5c31af7Sopenharmony_ci			precision mediump float;
994e5c31af7Sopenharmony_ci			struct Struct {mediump float a;};
995e5c31af7Sopenharmony_ci			uniform Struct val;
996e5c31af7Sopenharmony_ci			${FRAGMENT_DECLARATIONS}
997e5c31af7Sopenharmony_ci			in mediump float res;
998e5c31af7Sopenharmony_ci			void main()
999e5c31af7Sopenharmony_ci			{			out0 = val.a;
1000e5c31af7Sopenharmony_ci				${FRAGMENT_OUTPUT}
1001e5c31af7Sopenharmony_ci			}
1002e5c31af7Sopenharmony_ci		""
1003e5c31af7Sopenharmony_ci	end
1004e5c31af7Sopenharmony_ci
1005e5c31af7Sopenharmony_ci	case type_conflict_3
1006e5c31af7Sopenharmony_ci		version 310 es
1007e5c31af7Sopenharmony_ci		desc "Vertex struct has vec3, fragment struct has vec4."
1008e5c31af7Sopenharmony_ci		expect link_fail
1009e5c31af7Sopenharmony_ci		values {output float out0 = 3.0;}
1010e5c31af7Sopenharmony_ci		vertex ""
1011e5c31af7Sopenharmony_ci			#version 310 es
1012e5c31af7Sopenharmony_ci			${VERTEX_DECLARATIONS}
1013e5c31af7Sopenharmony_ci			struct Struct {mediump vec3 a;};
1014e5c31af7Sopenharmony_ci			uniform Struct val;
1015e5c31af7Sopenharmony_ci			out mediump float res;
1016e5c31af7Sopenharmony_ci			void main()
1017e5c31af7Sopenharmony_ci			{
1018e5c31af7Sopenharmony_ci				res = float(val.a.x);
1019e5c31af7Sopenharmony_ci				${VERTEX_OUTPUT}
1020e5c31af7Sopenharmony_ci			}
1021e5c31af7Sopenharmony_ci		""
1022e5c31af7Sopenharmony_ci		fragment ""
1023e5c31af7Sopenharmony_ci			#version 310 es
1024e5c31af7Sopenharmony_ci			precision mediump float;
1025e5c31af7Sopenharmony_ci			struct Struct {mediump vec4 a;};
1026e5c31af7Sopenharmony_ci			uniform Struct val;
1027e5c31af7Sopenharmony_ci			${FRAGMENT_DECLARATIONS}
1028e5c31af7Sopenharmony_ci			in mediump float res;
1029e5c31af7Sopenharmony_ci			void main()
1030e5c31af7Sopenharmony_ci			{			out0 = val.a.x;
1031e5c31af7Sopenharmony_ci				${FRAGMENT_OUTPUT}
1032e5c31af7Sopenharmony_ci			}
1033e5c31af7Sopenharmony_ci		""
1034e5c31af7Sopenharmony_ci	end
1035e5c31af7Sopenharmony_ci
1036e5c31af7Sopenharmony_ci	case precision_conflict_1
1037e5c31af7Sopenharmony_ci		version 310 es
1038e5c31af7Sopenharmony_ci		desc "Vertex side struct has highp, fragment side struct mediump."
1039e5c31af7Sopenharmony_ci		expect link_fail
1040e5c31af7Sopenharmony_ci		values {output float out0 = 3.0;}
1041e5c31af7Sopenharmony_ci		vertex ""
1042e5c31af7Sopenharmony_ci			#version 310 es
1043e5c31af7Sopenharmony_ci			${VERTEX_DECLARATIONS}
1044e5c31af7Sopenharmony_ci			struct Struct {highp float a;};
1045e5c31af7Sopenharmony_ci			uniform Struct val;
1046e5c31af7Sopenharmony_ci			out mediump float res;
1047e5c31af7Sopenharmony_ci			void main()
1048e5c31af7Sopenharmony_ci			{
1049e5c31af7Sopenharmony_ci				res = val.a;
1050e5c31af7Sopenharmony_ci				${VERTEX_OUTPUT}
1051e5c31af7Sopenharmony_ci			}
1052e5c31af7Sopenharmony_ci		""
1053e5c31af7Sopenharmony_ci		fragment ""
1054e5c31af7Sopenharmony_ci			#version 310 es
1055e5c31af7Sopenharmony_ci			precision mediump float;
1056e5c31af7Sopenharmony_ci			struct Struct {mediump float a;};
1057e5c31af7Sopenharmony_ci			uniform Struct val;
1058e5c31af7Sopenharmony_ci			${FRAGMENT_DECLARATIONS}
1059e5c31af7Sopenharmony_ci			in mediump float res;
1060e5c31af7Sopenharmony_ci			void main()
1061e5c31af7Sopenharmony_ci			{			out0 = val.a;
1062e5c31af7Sopenharmony_ci				${FRAGMENT_OUTPUT}
1063e5c31af7Sopenharmony_ci			}
1064e5c31af7Sopenharmony_ci		""
1065e5c31af7Sopenharmony_ci	end
1066e5c31af7Sopenharmony_ci
1067e5c31af7Sopenharmony_ci	case precision_conflict_2
1068e5c31af7Sopenharmony_ci		version 310 es
1069e5c31af7Sopenharmony_ci		desc "Vertex side struct has mediump, fragment side struct lowp."
1070e5c31af7Sopenharmony_ci		expect link_fail
1071e5c31af7Sopenharmony_ci		values {output float out0 = 3.0;}
1072e5c31af7Sopenharmony_ci		vertex ""
1073e5c31af7Sopenharmony_ci			#version 310 es
1074e5c31af7Sopenharmony_ci			${VERTEX_DECLARATIONS}
1075e5c31af7Sopenharmony_ci			struct Struct {mediump float a;};
1076e5c31af7Sopenharmony_ci			uniform Struct val;
1077e5c31af7Sopenharmony_ci			out mediump float res;
1078e5c31af7Sopenharmony_ci			void main()
1079e5c31af7Sopenharmony_ci			{
1080e5c31af7Sopenharmony_ci				res = val.a;
1081e5c31af7Sopenharmony_ci				${VERTEX_OUTPUT}
1082e5c31af7Sopenharmony_ci			}
1083e5c31af7Sopenharmony_ci		""
1084e5c31af7Sopenharmony_ci		fragment ""
1085e5c31af7Sopenharmony_ci			#version 310 es
1086e5c31af7Sopenharmony_ci			precision mediump float;
1087e5c31af7Sopenharmony_ci			struct Struct {lowp float a;};
1088e5c31af7Sopenharmony_ci			uniform Struct val;
1089e5c31af7Sopenharmony_ci			${FRAGMENT_DECLARATIONS}
1090e5c31af7Sopenharmony_ci			in mediump float res;
1091e5c31af7Sopenharmony_ci			void main()
1092e5c31af7Sopenharmony_ci			{			out0 = val.a;
1093e5c31af7Sopenharmony_ci				${FRAGMENT_OUTPUT}
1094e5c31af7Sopenharmony_ci			}
1095e5c31af7Sopenharmony_ci		""
1096e5c31af7Sopenharmony_ci	end
1097e5c31af7Sopenharmony_ci
1098e5c31af7Sopenharmony_ci	case precision_conflict_3
1099e5c31af7Sopenharmony_ci		version 310 es
1100e5c31af7Sopenharmony_ci		desc "Vertex side struct has lowp, fragment side struct mediump."
1101e5c31af7Sopenharmony_ci		expect link_fail
1102e5c31af7Sopenharmony_ci		values {output float out0 = 3.0;}
1103e5c31af7Sopenharmony_ci		vertex ""
1104e5c31af7Sopenharmony_ci			#version 310 es
1105e5c31af7Sopenharmony_ci			${VERTEX_DECLARATIONS}
1106e5c31af7Sopenharmony_ci			struct Struct {lowp float a;};
1107e5c31af7Sopenharmony_ci			uniform Struct val;
1108e5c31af7Sopenharmony_ci			out mediump float res;
1109e5c31af7Sopenharmony_ci			void main()
1110e5c31af7Sopenharmony_ci			{
1111e5c31af7Sopenharmony_ci				res = val.a;
1112e5c31af7Sopenharmony_ci				${VERTEX_OUTPUT}
1113e5c31af7Sopenharmony_ci			}
1114e5c31af7Sopenharmony_ci		""
1115e5c31af7Sopenharmony_ci		fragment ""
1116e5c31af7Sopenharmony_ci			#version 310 es
1117e5c31af7Sopenharmony_ci			precision mediump float;
1118e5c31af7Sopenharmony_ci			struct Struct {mediump float a;};
1119e5c31af7Sopenharmony_ci			uniform Struct val;
1120e5c31af7Sopenharmony_ci			${FRAGMENT_DECLARATIONS}
1121e5c31af7Sopenharmony_ci			in mediump float res;
1122e5c31af7Sopenharmony_ci			void main()
1123e5c31af7Sopenharmony_ci			{			out0 = val.a;
1124e5c31af7Sopenharmony_ci				${FRAGMENT_OUTPUT}
1125e5c31af7Sopenharmony_ci			}
1126e5c31af7Sopenharmony_ci		""
1127e5c31af7Sopenharmony_ci	end
1128e5c31af7Sopenharmony_ci
1129e5c31af7Sopenharmony_ci	case precision_conflict_4
1130e5c31af7Sopenharmony_ci		version 310 es
1131e5c31af7Sopenharmony_ci		desc "Vertex side struct has lowp, fragment side struct implicit mediump."
1132e5c31af7Sopenharmony_ci		expect link_fail
1133e5c31af7Sopenharmony_ci		values {output float out0 = 3.0;}
1134e5c31af7Sopenharmony_ci		vertex ""
1135e5c31af7Sopenharmony_ci			#version 310 es
1136e5c31af7Sopenharmony_ci			${VERTEX_DECLARATIONS}
1137e5c31af7Sopenharmony_ci			struct Struct {lowp float a;};
1138e5c31af7Sopenharmony_ci			uniform Struct val;
1139e5c31af7Sopenharmony_ci			out mediump float res;
1140e5c31af7Sopenharmony_ci			void main()
1141e5c31af7Sopenharmony_ci			{
1142e5c31af7Sopenharmony_ci				res = val.a;
1143e5c31af7Sopenharmony_ci				${VERTEX_OUTPUT}
1144e5c31af7Sopenharmony_ci			}
1145e5c31af7Sopenharmony_ci		""
1146e5c31af7Sopenharmony_ci		fragment ""
1147e5c31af7Sopenharmony_ci			#version 310 es
1148e5c31af7Sopenharmony_ci			precision mediump float;
1149e5c31af7Sopenharmony_ci			struct Struct {float a;};
1150e5c31af7Sopenharmony_ci			uniform Struct val;
1151e5c31af7Sopenharmony_ci			${FRAGMENT_DECLARATIONS}
1152e5c31af7Sopenharmony_ci			in mediump float res;
1153e5c31af7Sopenharmony_ci			void main()
1154e5c31af7Sopenharmony_ci			{			out0 = val.a;
1155e5c31af7Sopenharmony_ci				${FRAGMENT_OUTPUT}
1156e5c31af7Sopenharmony_ci			}
1157e5c31af7Sopenharmony_ci		""
1158e5c31af7Sopenharmony_ci	end
1159e5c31af7Sopenharmony_ci
1160e5c31af7Sopenharmony_ci	case light_struct_highp
1161e5c31af7Sopenharmony_ci		version 310 es
1162e5c31af7Sopenharmony_ci		desc "Complex Light struct from use case tests."
1163e5c31af7Sopenharmony_ci		values {
1164e5c31af7Sopenharmony_ci			uniform float val.constantAttenuation = 1.0;
1165e5c31af7Sopenharmony_ci			uniform float val.quadraticAttenuation = 1.0;
1166e5c31af7Sopenharmony_ci			output float out0 = 2.0;
1167e5c31af7Sopenharmony_ci		}
1168e5c31af7Sopenharmony_ci		vertex ""
1169e5c31af7Sopenharmony_ci			#version 310 es
1170e5c31af7Sopenharmony_ci			struct Light
1171e5c31af7Sopenharmony_ci			{
1172e5c31af7Sopenharmony_ci				mediump vec3	color;
1173e5c31af7Sopenharmony_ci				highp vec4		position;
1174e5c31af7Sopenharmony_ci				highp vec3		direction;
1175e5c31af7Sopenharmony_ci				mediump float	constantAttenuation;
1176e5c31af7Sopenharmony_ci				mediump float	linearAttenuation;
1177e5c31af7Sopenharmony_ci				mediump float	quadraticAttenuation;
1178e5c31af7Sopenharmony_ci			};
1179e5c31af7Sopenharmony_ci			${VERTEX_DECLARATIONS}
1180e5c31af7Sopenharmony_ci			uniform Light val;
1181e5c31af7Sopenharmony_ci			out mediump float res;
1182e5c31af7Sopenharmony_ci			void main()
1183e5c31af7Sopenharmony_ci			{
1184e5c31af7Sopenharmony_ci				res = val.constantAttenuation;
1185e5c31af7Sopenharmony_ci				${VERTEX_OUTPUT}
1186e5c31af7Sopenharmony_ci			}
1187e5c31af7Sopenharmony_ci		""
1188e5c31af7Sopenharmony_ci		fragment ""
1189e5c31af7Sopenharmony_ci			#version 310 es
1190e5c31af7Sopenharmony_ci			precision mediump float;
1191e5c31af7Sopenharmony_ci			struct Light
1192e5c31af7Sopenharmony_ci			{
1193e5c31af7Sopenharmony_ci				mediump vec3	color;
1194e5c31af7Sopenharmony_ci				highp vec4		position;
1195e5c31af7Sopenharmony_ci				highp vec3		direction;
1196e5c31af7Sopenharmony_ci				mediump float	constantAttenuation;
1197e5c31af7Sopenharmony_ci				mediump float	linearAttenuation;
1198e5c31af7Sopenharmony_ci				mediump float	quadraticAttenuation;
1199e5c31af7Sopenharmony_ci			};
1200e5c31af7Sopenharmony_ci			struct Struct {float a;};
1201e5c31af7Sopenharmony_ci			uniform Light val;
1202e5c31af7Sopenharmony_ci			${FRAGMENT_DECLARATIONS}
1203e5c31af7Sopenharmony_ci			in mediump float res;
1204e5c31af7Sopenharmony_ci			void main()
1205e5c31af7Sopenharmony_ci			{
1206e5c31af7Sopenharmony_ci				out0 = res + val.quadraticAttenuation;
1207e5c31af7Sopenharmony_ci				${FRAGMENT_OUTPUT}
1208e5c31af7Sopenharmony_ci			}
1209e5c31af7Sopenharmony_ci		""
1210e5c31af7Sopenharmony_ci	end
1211e5c31af7Sopenharmony_ci
1212e5c31af7Sopenharmony_ci	case light_struct_mediump
1213e5c31af7Sopenharmony_ci		version 310 es
1214e5c31af7Sopenharmony_ci		desc "Complex Light struct from use case tests, without highp usage"
1215e5c31af7Sopenharmony_ci		values {
1216e5c31af7Sopenharmony_ci			uniform float val.constantAttenuation = 1.0;
1217e5c31af7Sopenharmony_ci			uniform float val.quadraticAttenuation = 1.0;
1218e5c31af7Sopenharmony_ci			output float out0 = 2.0;
1219e5c31af7Sopenharmony_ci		}
1220e5c31af7Sopenharmony_ci		vertex ""
1221e5c31af7Sopenharmony_ci			#version 310 es
1222e5c31af7Sopenharmony_ci			struct Light
1223e5c31af7Sopenharmony_ci			{
1224e5c31af7Sopenharmony_ci				mediump vec3	color;
1225e5c31af7Sopenharmony_ci				mediump vec4	position;
1226e5c31af7Sopenharmony_ci				mediump vec3	direction;
1227e5c31af7Sopenharmony_ci				mediump float	constantAttenuation;
1228e5c31af7Sopenharmony_ci				mediump float	linearAttenuation;
1229e5c31af7Sopenharmony_ci				mediump float	quadraticAttenuation;
1230e5c31af7Sopenharmony_ci			};
1231e5c31af7Sopenharmony_ci			${VERTEX_DECLARATIONS}
1232e5c31af7Sopenharmony_ci			uniform Light val;
1233e5c31af7Sopenharmony_ci			out mediump float res;
1234e5c31af7Sopenharmony_ci			void main()
1235e5c31af7Sopenharmony_ci			{
1236e5c31af7Sopenharmony_ci				res = val.constantAttenuation;
1237e5c31af7Sopenharmony_ci				${VERTEX_OUTPUT}
1238e5c31af7Sopenharmony_ci			}
1239e5c31af7Sopenharmony_ci		""
1240e5c31af7Sopenharmony_ci		fragment ""
1241e5c31af7Sopenharmony_ci			#version 310 es
1242e5c31af7Sopenharmony_ci			precision mediump float;
1243e5c31af7Sopenharmony_ci			struct Light
1244e5c31af7Sopenharmony_ci			{
1245e5c31af7Sopenharmony_ci				mediump vec3	color;
1246e5c31af7Sopenharmony_ci				mediump vec4	position;
1247e5c31af7Sopenharmony_ci				mediump vec3	direction;
1248e5c31af7Sopenharmony_ci				mediump float	constantAttenuation;
1249e5c31af7Sopenharmony_ci				mediump float	linearAttenuation;
1250e5c31af7Sopenharmony_ci				mediump float	quadraticAttenuation;
1251e5c31af7Sopenharmony_ci			};
1252e5c31af7Sopenharmony_ci			struct Struct {float a;};
1253e5c31af7Sopenharmony_ci			uniform Light val;
1254e5c31af7Sopenharmony_ci			${FRAGMENT_DECLARATIONS}
1255e5c31af7Sopenharmony_ci			in mediump float res;
1256e5c31af7Sopenharmony_ci			void main()
1257e5c31af7Sopenharmony_ci			{
1258e5c31af7Sopenharmony_ci				out0 = res + val.quadraticAttenuation;
1259e5c31af7Sopenharmony_ci				${FRAGMENT_OUTPUT}
1260e5c31af7Sopenharmony_ci			}
1261e5c31af7Sopenharmony_ci		""
1262e5c31af7Sopenharmony_ci	end
1263e5c31af7Sopenharmony_ciend
1264e5c31af7Sopenharmony_ci
1265e5c31af7Sopenharmony_cigroup block "Uniform blocks"
1266e5c31af7Sopenharmony_ci	case differing_precision
1267e5c31af7Sopenharmony_ci		version 310 es
1268e5c31af7Sopenharmony_ci		expect build_successful
1269e5c31af7Sopenharmony_ci		vertex ""
1270e5c31af7Sopenharmony_ci			#version 310 es
1271e5c31af7Sopenharmony_ci
1272e5c31af7Sopenharmony_ci			uniform Block
1273e5c31af7Sopenharmony_ci			{
1274e5c31af7Sopenharmony_ci				highp vec4 val;
1275e5c31af7Sopenharmony_ci			};
1276e5c31af7Sopenharmony_ci
1277e5c31af7Sopenharmony_ci			${VERTEX_DECLARATIONS}
1278e5c31af7Sopenharmony_ci			out mediump float res;
1279e5c31af7Sopenharmony_ci			void main()
1280e5c31af7Sopenharmony_ci			{
1281e5c31af7Sopenharmony_ci				res = val.x;
1282e5c31af7Sopenharmony_ci				${VERTEX_OUTPUT}
1283e5c31af7Sopenharmony_ci			}
1284e5c31af7Sopenharmony_ci		""
1285e5c31af7Sopenharmony_ci		fragment ""
1286e5c31af7Sopenharmony_ci			#version 310 es
1287e5c31af7Sopenharmony_ci
1288e5c31af7Sopenharmony_ci			uniform Block
1289e5c31af7Sopenharmony_ci			{
1290e5c31af7Sopenharmony_ci				mediump vec4 val;
1291e5c31af7Sopenharmony_ci			};
1292e5c31af7Sopenharmony_ci
1293e5c31af7Sopenharmony_ci			precision mediump float;
1294e5c31af7Sopenharmony_ci			${FRAGMENT_DECLARATIONS}
1295e5c31af7Sopenharmony_ci			in mediump float res;
1296e5c31af7Sopenharmony_ci			void main()
1297e5c31af7Sopenharmony_ci			{
1298e5c31af7Sopenharmony_ci				dEQP_FragColor = val;
1299e5c31af7Sopenharmony_ci			}
1300e5c31af7Sopenharmony_ci		""
1301e5c31af7Sopenharmony_ci	end
1302e5c31af7Sopenharmony_ci
1303e5c31af7Sopenharmony_ci	case type_mismatch
1304e5c31af7Sopenharmony_ci		version 310 es
1305e5c31af7Sopenharmony_ci		expect link_fail
1306e5c31af7Sopenharmony_ci		vertex ""
1307e5c31af7Sopenharmony_ci			#version 310 es
1308e5c31af7Sopenharmony_ci
1309e5c31af7Sopenharmony_ci			uniform Block
1310e5c31af7Sopenharmony_ci			{
1311e5c31af7Sopenharmony_ci				highp vec4 val;
1312e5c31af7Sopenharmony_ci			};
1313e5c31af7Sopenharmony_ci
1314e5c31af7Sopenharmony_ci			${VERTEX_DECLARATIONS}
1315e5c31af7Sopenharmony_ci			out mediump float res;
1316e5c31af7Sopenharmony_ci			void main()
1317e5c31af7Sopenharmony_ci			{
1318e5c31af7Sopenharmony_ci				res = val.x;
1319e5c31af7Sopenharmony_ci				${VERTEX_OUTPUT}
1320e5c31af7Sopenharmony_ci			}
1321e5c31af7Sopenharmony_ci		""
1322e5c31af7Sopenharmony_ci		fragment ""
1323e5c31af7Sopenharmony_ci			#version 310 es
1324e5c31af7Sopenharmony_ci
1325e5c31af7Sopenharmony_ci			uniform Block
1326e5c31af7Sopenharmony_ci			{
1327e5c31af7Sopenharmony_ci				highp vec3 val;
1328e5c31af7Sopenharmony_ci			};
1329e5c31af7Sopenharmony_ci
1330e5c31af7Sopenharmony_ci			precision mediump float;
1331e5c31af7Sopenharmony_ci			${FRAGMENT_DECLARATIONS}
1332e5c31af7Sopenharmony_ci			in mediump float res;
1333e5c31af7Sopenharmony_ci			void main()
1334e5c31af7Sopenharmony_ci			{
1335e5c31af7Sopenharmony_ci				dEQP_FragColor = vec4(val, 1.0);
1336e5c31af7Sopenharmony_ci			}
1337e5c31af7Sopenharmony_ci		""
1338e5c31af7Sopenharmony_ci	end
1339e5c31af7Sopenharmony_ci
1340e5c31af7Sopenharmony_ci	case members_mismatch
1341e5c31af7Sopenharmony_ci		version 310 es
1342e5c31af7Sopenharmony_ci		expect link_fail
1343e5c31af7Sopenharmony_ci		vertex ""
1344e5c31af7Sopenharmony_ci			#version 310 es
1345e5c31af7Sopenharmony_ci
1346e5c31af7Sopenharmony_ci			uniform Block
1347e5c31af7Sopenharmony_ci			{
1348e5c31af7Sopenharmony_ci				highp vec4 val;
1349e5c31af7Sopenharmony_ci			};
1350e5c31af7Sopenharmony_ci
1351e5c31af7Sopenharmony_ci			${VERTEX_DECLARATIONS}
1352e5c31af7Sopenharmony_ci			out mediump float res;
1353e5c31af7Sopenharmony_ci			void main()
1354e5c31af7Sopenharmony_ci			{
1355e5c31af7Sopenharmony_ci				res = val.x;
1356e5c31af7Sopenharmony_ci				${VERTEX_OUTPUT}
1357e5c31af7Sopenharmony_ci			}
1358e5c31af7Sopenharmony_ci		""
1359e5c31af7Sopenharmony_ci		fragment ""
1360e5c31af7Sopenharmony_ci			#version 310 es
1361e5c31af7Sopenharmony_ci
1362e5c31af7Sopenharmony_ci			uniform Block
1363e5c31af7Sopenharmony_ci			{
1364e5c31af7Sopenharmony_ci				highp vec4 val;
1365e5c31af7Sopenharmony_ci				lowp uint u;
1366e5c31af7Sopenharmony_ci			};
1367e5c31af7Sopenharmony_ci
1368e5c31af7Sopenharmony_ci			precision mediump float;
1369e5c31af7Sopenharmony_ci			${FRAGMENT_DECLARATIONS}
1370e5c31af7Sopenharmony_ci			in mediump float res;
1371e5c31af7Sopenharmony_ci			void main()
1372e5c31af7Sopenharmony_ci			{
1373e5c31af7Sopenharmony_ci				dEQP_FragColor = vec4(val);
1374e5c31af7Sopenharmony_ci			}
1375e5c31af7Sopenharmony_ci		""
1376e5c31af7Sopenharmony_ci	end
1377e5c31af7Sopenharmony_ci
1378e5c31af7Sopenharmony_ci	case layout_qualifier_mismatch_1
1379e5c31af7Sopenharmony_ci		version 310 es
1380e5c31af7Sopenharmony_ci		expect link_fail
1381e5c31af7Sopenharmony_ci		vertex ""
1382e5c31af7Sopenharmony_ci			#version 310 es
1383e5c31af7Sopenharmony_ci
1384e5c31af7Sopenharmony_ci			layout(std140) uniform Block
1385e5c31af7Sopenharmony_ci			{
1386e5c31af7Sopenharmony_ci				highp vec4 val;
1387e5c31af7Sopenharmony_ci			};
1388e5c31af7Sopenharmony_ci
1389e5c31af7Sopenharmony_ci			${VERTEX_DECLARATIONS}
1390e5c31af7Sopenharmony_ci			out mediump float res;
1391e5c31af7Sopenharmony_ci			void main()
1392e5c31af7Sopenharmony_ci			{
1393e5c31af7Sopenharmony_ci				res = val.x;
1394e5c31af7Sopenharmony_ci				${VERTEX_OUTPUT}
1395e5c31af7Sopenharmony_ci			}
1396e5c31af7Sopenharmony_ci		""
1397e5c31af7Sopenharmony_ci		fragment ""
1398e5c31af7Sopenharmony_ci			#version 310 es
1399e5c31af7Sopenharmony_ci
1400e5c31af7Sopenharmony_ci			uniform Block
1401e5c31af7Sopenharmony_ci			{
1402e5c31af7Sopenharmony_ci				highp vec4 val;
1403e5c31af7Sopenharmony_ci			};
1404e5c31af7Sopenharmony_ci
1405e5c31af7Sopenharmony_ci			precision mediump float;
1406e5c31af7Sopenharmony_ci			${FRAGMENT_DECLARATIONS}
1407e5c31af7Sopenharmony_ci			in mediump float res;
1408e5c31af7Sopenharmony_ci			void main()
1409e5c31af7Sopenharmony_ci			{
1410e5c31af7Sopenharmony_ci				dEQP_FragColor = vec4(val);
1411e5c31af7Sopenharmony_ci			}
1412e5c31af7Sopenharmony_ci		""
1413e5c31af7Sopenharmony_ci	end
1414e5c31af7Sopenharmony_ci
1415e5c31af7Sopenharmony_ci	case layout_qualifier_mismatch_2
1416e5c31af7Sopenharmony_ci		version 310 es
1417e5c31af7Sopenharmony_ci		expect link_fail
1418e5c31af7Sopenharmony_ci		vertex ""
1419e5c31af7Sopenharmony_ci			#version 310 es
1420e5c31af7Sopenharmony_ci
1421e5c31af7Sopenharmony_ci			layout(shared) uniform Block
1422e5c31af7Sopenharmony_ci			{
1423e5c31af7Sopenharmony_ci				highp vec4 val;
1424e5c31af7Sopenharmony_ci			};
1425e5c31af7Sopenharmony_ci
1426e5c31af7Sopenharmony_ci			${VERTEX_DECLARATIONS}
1427e5c31af7Sopenharmony_ci			out mediump float res;
1428e5c31af7Sopenharmony_ci			void main()
1429e5c31af7Sopenharmony_ci			{
1430e5c31af7Sopenharmony_ci				res = val.x;
1431e5c31af7Sopenharmony_ci				${VERTEX_OUTPUT}
1432e5c31af7Sopenharmony_ci			}
1433e5c31af7Sopenharmony_ci		""
1434e5c31af7Sopenharmony_ci		fragment ""
1435e5c31af7Sopenharmony_ci			#version 310 es
1436e5c31af7Sopenharmony_ci
1437e5c31af7Sopenharmony_ci			layout(packed) uniform Block
1438e5c31af7Sopenharmony_ci			{
1439e5c31af7Sopenharmony_ci				highp vec4 val;
1440e5c31af7Sopenharmony_ci			};
1441e5c31af7Sopenharmony_ci
1442e5c31af7Sopenharmony_ci			precision mediump float;
1443e5c31af7Sopenharmony_ci			${FRAGMENT_DECLARATIONS}
1444e5c31af7Sopenharmony_ci			in mediump float res;
1445e5c31af7Sopenharmony_ci			void main()
1446e5c31af7Sopenharmony_ci			{
1447e5c31af7Sopenharmony_ci				dEQP_FragColor = vec4(val);
1448e5c31af7Sopenharmony_ci			}
1449e5c31af7Sopenharmony_ci		""
1450e5c31af7Sopenharmony_ci	end
1451e5c31af7Sopenharmony_ci
1452e5c31af7Sopenharmony_ci	case layout_qualifier_mismatch_3
1453e5c31af7Sopenharmony_ci		version 310 es
1454e5c31af7Sopenharmony_ci		expect link_fail
1455e5c31af7Sopenharmony_ci		vertex ""
1456e5c31af7Sopenharmony_ci			#version 310 es
1457e5c31af7Sopenharmony_ci
1458e5c31af7Sopenharmony_ci			layout(row_major) uniform Block
1459e5c31af7Sopenharmony_ci			{
1460e5c31af7Sopenharmony_ci				highp vec4 val;
1461e5c31af7Sopenharmony_ci			};
1462e5c31af7Sopenharmony_ci
1463e5c31af7Sopenharmony_ci			${VERTEX_DECLARATIONS}
1464e5c31af7Sopenharmony_ci			out mediump float res;
1465e5c31af7Sopenharmony_ci			void main()
1466e5c31af7Sopenharmony_ci			{
1467e5c31af7Sopenharmony_ci				res = val.x;
1468e5c31af7Sopenharmony_ci				${VERTEX_OUTPUT}
1469e5c31af7Sopenharmony_ci			}
1470e5c31af7Sopenharmony_ci		""
1471e5c31af7Sopenharmony_ci		fragment ""
1472e5c31af7Sopenharmony_ci			#version 310 es
1473e5c31af7Sopenharmony_ci
1474e5c31af7Sopenharmony_ci			layout(column_major) uniform Block
1475e5c31af7Sopenharmony_ci			{
1476e5c31af7Sopenharmony_ci				highp vec4 val;
1477e5c31af7Sopenharmony_ci			};
1478e5c31af7Sopenharmony_ci
1479e5c31af7Sopenharmony_ci			precision mediump float;
1480e5c31af7Sopenharmony_ci			${FRAGMENT_DECLARATIONS}
1481e5c31af7Sopenharmony_ci			in mediump float res;
1482e5c31af7Sopenharmony_ci			void main()
1483e5c31af7Sopenharmony_ci			{
1484e5c31af7Sopenharmony_ci				dEQP_FragColor = vec4(val);
1485e5c31af7Sopenharmony_ci			}
1486e5c31af7Sopenharmony_ci		""
1487e5c31af7Sopenharmony_ci	end
1488e5c31af7Sopenharmony_ci
1489e5c31af7Sopenharmony_ci	case layout_qualifier_mismatch_4
1490e5c31af7Sopenharmony_ci		version 310 es
1491e5c31af7Sopenharmony_ci		expect link_fail
1492e5c31af7Sopenharmony_ci		vertex ""
1493e5c31af7Sopenharmony_ci			#version 310 es
1494e5c31af7Sopenharmony_ci
1495e5c31af7Sopenharmony_ci			layout(row_major) uniform Block
1496e5c31af7Sopenharmony_ci			{
1497e5c31af7Sopenharmony_ci				highp mat3 val;
1498e5c31af7Sopenharmony_ci			};
1499e5c31af7Sopenharmony_ci
1500e5c31af7Sopenharmony_ci			${VERTEX_DECLARATIONS}
1501e5c31af7Sopenharmony_ci			out mediump float res;
1502e5c31af7Sopenharmony_ci			void main()
1503e5c31af7Sopenharmony_ci			{
1504e5c31af7Sopenharmony_ci				res = val[0][1];
1505e5c31af7Sopenharmony_ci				${VERTEX_OUTPUT}
1506e5c31af7Sopenharmony_ci			}
1507e5c31af7Sopenharmony_ci		""
1508e5c31af7Sopenharmony_ci		fragment ""
1509e5c31af7Sopenharmony_ci			#version 310 es
1510e5c31af7Sopenharmony_ci
1511e5c31af7Sopenharmony_ci			layout(column_major) uniform Block
1512e5c31af7Sopenharmony_ci			{
1513e5c31af7Sopenharmony_ci				highp mat3 val;
1514e5c31af7Sopenharmony_ci			};
1515e5c31af7Sopenharmony_ci
1516e5c31af7Sopenharmony_ci			precision mediump float;
1517e5c31af7Sopenharmony_ci			${FRAGMENT_DECLARATIONS}
1518e5c31af7Sopenharmony_ci			in mediump float res;
1519e5c31af7Sopenharmony_ci			void main()
1520e5c31af7Sopenharmony_ci			{
1521e5c31af7Sopenharmony_ci				dEQP_FragColor = vec4(val[2], 1.0);
1522e5c31af7Sopenharmony_ci			}
1523e5c31af7Sopenharmony_ci		""
1524e5c31af7Sopenharmony_ci	end
1525e5c31af7Sopenharmony_ci
1526e5c31af7Sopenharmony_ci	case layout_qualifier_mismatch_5
1527e5c31af7Sopenharmony_ci		version 310 es
1528e5c31af7Sopenharmony_ci		expect link_fail
1529e5c31af7Sopenharmony_ci		vertex ""
1530e5c31af7Sopenharmony_ci			#version 310 es
1531e5c31af7Sopenharmony_ci
1532e5c31af7Sopenharmony_ci			uniform Block
1533e5c31af7Sopenharmony_ci			{
1534e5c31af7Sopenharmony_ci				layout(row_major) uniform highp mat3 val;
1535e5c31af7Sopenharmony_ci			};
1536e5c31af7Sopenharmony_ci
1537e5c31af7Sopenharmony_ci			${VERTEX_DECLARATIONS}
1538e5c31af7Sopenharmony_ci			out mediump float res;
1539e5c31af7Sopenharmony_ci			void main()
1540e5c31af7Sopenharmony_ci			{
1541e5c31af7Sopenharmony_ci				res = val[0][1];
1542e5c31af7Sopenharmony_ci				${VERTEX_OUTPUT}
1543e5c31af7Sopenharmony_ci			}
1544e5c31af7Sopenharmony_ci		""
1545e5c31af7Sopenharmony_ci		fragment ""
1546e5c31af7Sopenharmony_ci			#version 310 es
1547e5c31af7Sopenharmony_ci
1548e5c31af7Sopenharmony_ci			uniform Block
1549e5c31af7Sopenharmony_ci			{
1550e5c31af7Sopenharmony_ci				layout(column_major) uniform highp mat3 val;
1551e5c31af7Sopenharmony_ci			};
1552e5c31af7Sopenharmony_ci
1553e5c31af7Sopenharmony_ci			precision mediump float;
1554e5c31af7Sopenharmony_ci			${FRAGMENT_DECLARATIONS}
1555e5c31af7Sopenharmony_ci			in mediump float res;
1556e5c31af7Sopenharmony_ci			void main()
1557e5c31af7Sopenharmony_ci			{
1558e5c31af7Sopenharmony_ci				dEQP_FragColor = vec4(val[2], 1.0);
1559e5c31af7Sopenharmony_ci			}
1560e5c31af7Sopenharmony_ci		""
1561e5c31af7Sopenharmony_ci	end
1562e5c31af7Sopenharmony_ciend
1563