1e5c31af7Sopenharmony_ci
2e5c31af7Sopenharmony_ci# Varying tests
3e5c31af7Sopenharmony_cigroup varying "Varying linkage"
4e5c31af7Sopenharmony_ci
5e5c31af7Sopenharmony_ci	# Linking rules
6e5c31af7Sopenharmony_ci	group rules "Varying linking rules"
7e5c31af7Sopenharmony_ci		# not declared in vertex shader, declared in fragment shader
8e5c31af7Sopenharmony_ci		case fragment_declare
9e5c31af7Sopenharmony_ci			version 300 es
10e5c31af7Sopenharmony_ci			desc "varying declared in fragment shader, no reference in vertex shader"
11e5c31af7Sopenharmony_ci			values { output float out0 = 1.0; }
12e5c31af7Sopenharmony_ci			vertex ""
13e5c31af7Sopenharmony_ci				#version 300 es
14e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
15e5c31af7Sopenharmony_ci				void main()
16e5c31af7Sopenharmony_ci				{
17e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
18e5c31af7Sopenharmony_ci				}
19e5c31af7Sopenharmony_ci			""
20e5c31af7Sopenharmony_ci			fragment ""
21e5c31af7Sopenharmony_ci				#version 300 es
22e5c31af7Sopenharmony_ci				precision mediump float;
23e5c31af7Sopenharmony_ci				in mediump float var;
24e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
25e5c31af7Sopenharmony_ci				void main()
26e5c31af7Sopenharmony_ci				{
27e5c31af7Sopenharmony_ci					out0 = 1.0;
28e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
29e5c31af7Sopenharmony_ci				}
30e5c31af7Sopenharmony_ci			""
31e5c31af7Sopenharmony_ci		end
32e5c31af7Sopenharmony_ci
33e5c31af7Sopenharmony_ci		# declared in vertex shader, no reference in frag shader
34e5c31af7Sopenharmony_ci		case vertex_declare
35e5c31af7Sopenharmony_ci			version 300 es
36e5c31af7Sopenharmony_ci			desc "varying declared in vertex shader, no reference in fragment shader"
37e5c31af7Sopenharmony_ci			vertex ""
38e5c31af7Sopenharmony_ci				#version 300 es
39e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
40e5c31af7Sopenharmony_ci				out mediump float var;
41e5c31af7Sopenharmony_ci				void main()
42e5c31af7Sopenharmony_ci				{
43e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
44e5c31af7Sopenharmony_ci				}
45e5c31af7Sopenharmony_ci			""
46e5c31af7Sopenharmony_ci			fragment ""
47e5c31af7Sopenharmony_ci				#version 300 es
48e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
49e5c31af7Sopenharmony_ci				void main()
50e5c31af7Sopenharmony_ci				{
51e5c31af7Sopenharmony_ci					${FRAG_COLOR} = vec4(1.0);
52e5c31af7Sopenharmony_ci				}
53e5c31af7Sopenharmony_ci			""
54e5c31af7Sopenharmony_ci		end
55e5c31af7Sopenharmony_ci
56e5c31af7Sopenharmony_ci		# declared in vertex shader, declared in frag shader
57e5c31af7Sopenharmony_ci		case both_declare
58e5c31af7Sopenharmony_ci			version 300 es
59e5c31af7Sopenharmony_ci			desc "varying declared in both vertex and fragment shader, but not used"
60e5c31af7Sopenharmony_ci			vertex ""
61e5c31af7Sopenharmony_ci				#version 300 es
62e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
63e5c31af7Sopenharmony_ci				out mediump float var;
64e5c31af7Sopenharmony_ci				void main()
65e5c31af7Sopenharmony_ci				{
66e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
67e5c31af7Sopenharmony_ci				}
68e5c31af7Sopenharmony_ci			""
69e5c31af7Sopenharmony_ci			fragment ""
70e5c31af7Sopenharmony_ci				#version 300 es
71e5c31af7Sopenharmony_ci				in mediump float var;
72e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
73e5c31af7Sopenharmony_ci				void main()
74e5c31af7Sopenharmony_ci				{
75e5c31af7Sopenharmony_ci					${FRAG_COLOR} = vec4(1.0);
76e5c31af7Sopenharmony_ci				}
77e5c31af7Sopenharmony_ci			""
78e5c31af7Sopenharmony_ci		end
79e5c31af7Sopenharmony_ci
80e5c31af7Sopenharmony_ci		# declared in vertex shader, static use in frag shader
81e5c31af7Sopenharmony_ci		case vertex_declare_fragment_use
82e5c31af7Sopenharmony_ci			version 300 es
83e5c31af7Sopenharmony_ci			desc "varying declared in both shaders, statically used in fragment shader"
84e5c31af7Sopenharmony_ci			values { uniform bool u_false = false; }
85e5c31af7Sopenharmony_ci			vertex ""
86e5c31af7Sopenharmony_ci				#version 300 es
87e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
88e5c31af7Sopenharmony_ci				out mediump float var;
89e5c31af7Sopenharmony_ci				void main()
90e5c31af7Sopenharmony_ci				{
91e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
92e5c31af7Sopenharmony_ci				}
93e5c31af7Sopenharmony_ci			""
94e5c31af7Sopenharmony_ci			fragment ""
95e5c31af7Sopenharmony_ci				#version 300 es
96e5c31af7Sopenharmony_ci				in mediump float var;
97e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
98e5c31af7Sopenharmony_ci				void main()
99e5c31af7Sopenharmony_ci				{
100e5c31af7Sopenharmony_ci					if (u_false)
101e5c31af7Sopenharmony_ci						${FRAG_COLOR} = vec4(var);
102e5c31af7Sopenharmony_ci					else
103e5c31af7Sopenharmony_ci						${FRAG_COLOR} = vec4(1.0);
104e5c31af7Sopenharmony_ci				}
105e5c31af7Sopenharmony_ci			""
106e5c31af7Sopenharmony_ci		end
107e5c31af7Sopenharmony_ci
108e5c31af7Sopenharmony_ci		# static use in vertex shader, no reference in fragment shader
109e5c31af7Sopenharmony_ci		case vertex_use_fragment_declare
110e5c31af7Sopenharmony_ci			version 300 es
111e5c31af7Sopenharmony_ci			desc "varying declared and statically used in vertex shader, no reference in fragment shader"
112e5c31af7Sopenharmony_ci			values { uniform bool u_false = false; }
113e5c31af7Sopenharmony_ci			vertex ""
114e5c31af7Sopenharmony_ci				#version 300 es
115e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
116e5c31af7Sopenharmony_ci				out mediump float var;
117e5c31af7Sopenharmony_ci				void main()
118e5c31af7Sopenharmony_ci				{
119e5c31af7Sopenharmony_ci					if (u_false)
120e5c31af7Sopenharmony_ci						var = 1.0;
121e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
122e5c31af7Sopenharmony_ci				}
123e5c31af7Sopenharmony_ci			""
124e5c31af7Sopenharmony_ci			fragment ""
125e5c31af7Sopenharmony_ci				#version 300 es
126e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
127e5c31af7Sopenharmony_ci				void main()
128e5c31af7Sopenharmony_ci				{
129e5c31af7Sopenharmony_ci					${FRAG_COLOR} = vec4(1.0);
130e5c31af7Sopenharmony_ci				}
131e5c31af7Sopenharmony_ci			""
132e5c31af7Sopenharmony_ci		end
133e5c31af7Sopenharmony_ci
134e5c31af7Sopenharmony_ci		# static use in vertex shader, declared in fragment shader
135e5c31af7Sopenharmony_ci		case vertex_use_declare_fragment
136e5c31af7Sopenharmony_ci			version 300 es
137e5c31af7Sopenharmony_ci			desc "varying declared and statically used in vertex shader, only declared in fragment shader"
138e5c31af7Sopenharmony_ci			values { uniform bool u_false = false; }
139e5c31af7Sopenharmony_ci			vertex ""
140e5c31af7Sopenharmony_ci				#version 300 es
141e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
142e5c31af7Sopenharmony_ci				out mediump float var;
143e5c31af7Sopenharmony_ci				void main()
144e5c31af7Sopenharmony_ci				{
145e5c31af7Sopenharmony_ci					if (u_false)
146e5c31af7Sopenharmony_ci						var = 1.0;
147e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
148e5c31af7Sopenharmony_ci				}
149e5c31af7Sopenharmony_ci			""
150e5c31af7Sopenharmony_ci			fragment ""
151e5c31af7Sopenharmony_ci				#version 300 es
152e5c31af7Sopenharmony_ci				in mediump float var;
153e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
154e5c31af7Sopenharmony_ci				void main()
155e5c31af7Sopenharmony_ci				{
156e5c31af7Sopenharmony_ci					${FRAG_COLOR} = vec4(1.0);
157e5c31af7Sopenharmony_ci				}
158e5c31af7Sopenharmony_ci			""
159e5c31af7Sopenharmony_ci		end
160e5c31af7Sopenharmony_ci
161e5c31af7Sopenharmony_ci		# static use in vertex shader, used in fragment shader
162e5c31af7Sopenharmony_ci		case vertex_use_fragment_use
163e5c31af7Sopenharmony_ci			version 300 es
164e5c31af7Sopenharmony_ci			desc "varying statically used in both vertex and fragment shader"
165e5c31af7Sopenharmony_ci			values { uniform bool u_false = false; }
166e5c31af7Sopenharmony_ci			vertex ""
167e5c31af7Sopenharmony_ci				#version 300 es
168e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
169e5c31af7Sopenharmony_ci				out mediump float var;
170e5c31af7Sopenharmony_ci				void main()
171e5c31af7Sopenharmony_ci				{
172e5c31af7Sopenharmony_ci					if (u_false)
173e5c31af7Sopenharmony_ci						var = 1.0;
174e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
175e5c31af7Sopenharmony_ci				}
176e5c31af7Sopenharmony_ci			""
177e5c31af7Sopenharmony_ci			fragment ""
178e5c31af7Sopenharmony_ci				#version 300 es
179e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
180e5c31af7Sopenharmony_ci				in mediump float var;
181e5c31af7Sopenharmony_ci				void main()
182e5c31af7Sopenharmony_ci				{
183e5c31af7Sopenharmony_ci					if (u_false)
184e5c31af7Sopenharmony_ci						${FRAG_COLOR} = vec4(var);
185e5c31af7Sopenharmony_ci					else
186e5c31af7Sopenharmony_ci						${FRAG_COLOR} = vec4(1.0);
187e5c31af7Sopenharmony_ci				}
188e5c31af7Sopenharmony_ci			""
189e5c31af7Sopenharmony_ci		end
190e5c31af7Sopenharmony_ci
191e5c31af7Sopenharmony_ci		# differing precision tests
192e5c31af7Sopenharmony_ci		case differing_precision_1
193e5c31af7Sopenharmony_ci			version 300 es
194e5c31af7Sopenharmony_ci			desc "varying declared as highp in vertex shader, but mediump in fragment shader"
195e5c31af7Sopenharmony_ci			values
196e5c31af7Sopenharmony_ci			{
197e5c31af7Sopenharmony_ci				input float in0		= [ -1.25 | -25.55 | 1.0 | 2.25 | 3.4 | 16.0 ];
198e5c31af7Sopenharmony_ci				output float out0	= [ -1.25 | -25.55 | 1.0 | 2.25 | 3.4 | 16.0 ];
199e5c31af7Sopenharmony_ci			}
200e5c31af7Sopenharmony_ci
201e5c31af7Sopenharmony_ci			vertex ""
202e5c31af7Sopenharmony_ci				#version 300 es
203e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
204e5c31af7Sopenharmony_ci				out highp float var;
205e5c31af7Sopenharmony_ci				void main()
206e5c31af7Sopenharmony_ci				{
207e5c31af7Sopenharmony_ci					var = in0;
208e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
209e5c31af7Sopenharmony_ci				}
210e5c31af7Sopenharmony_ci			""
211e5c31af7Sopenharmony_ci			fragment ""
212e5c31af7Sopenharmony_ci				#version 300 es
213e5c31af7Sopenharmony_ci				precision mediump float;
214e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
215e5c31af7Sopenharmony_ci				in mediump float var;
216e5c31af7Sopenharmony_ci				void main()
217e5c31af7Sopenharmony_ci				{
218e5c31af7Sopenharmony_ci					out0 = var;
219e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
220e5c31af7Sopenharmony_ci				}
221e5c31af7Sopenharmony_ci			""
222e5c31af7Sopenharmony_ci		end
223e5c31af7Sopenharmony_ci
224e5c31af7Sopenharmony_ci		# differing precision tests
225e5c31af7Sopenharmony_ci		case differing_precision_2
226e5c31af7Sopenharmony_ci			version 300 es
227e5c31af7Sopenharmony_ci			desc "varying declared as highp in vertex shader, but lowp in fragment shader"
228e5c31af7Sopenharmony_ci			values
229e5c31af7Sopenharmony_ci			{
230e5c31af7Sopenharmony_ci				input float in0		= [ -1.25 | -25.56 | 1.0 | 2.25 | 3.4 | 16.0 ];
231e5c31af7Sopenharmony_ci				output float out0	= [ -1.25 | -25.56 | 1.0 | 2.25 | 3.4 | 16.0 ];
232e5c31af7Sopenharmony_ci			}
233e5c31af7Sopenharmony_ci
234e5c31af7Sopenharmony_ci			vertex ""
235e5c31af7Sopenharmony_ci				#version 300 es
236e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
237e5c31af7Sopenharmony_ci				out highp vec2 var;
238e5c31af7Sopenharmony_ci				void main()
239e5c31af7Sopenharmony_ci				{
240e5c31af7Sopenharmony_ci					var = vec2(in0, 2.0*in0);
241e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
242e5c31af7Sopenharmony_ci				}
243e5c31af7Sopenharmony_ci			""
244e5c31af7Sopenharmony_ci			fragment ""
245e5c31af7Sopenharmony_ci				#version 300 es
246e5c31af7Sopenharmony_ci				precision mediump float;
247e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
248e5c31af7Sopenharmony_ci				in lowp vec2 var;
249e5c31af7Sopenharmony_ci				void main()
250e5c31af7Sopenharmony_ci				{
251e5c31af7Sopenharmony_ci					out0 = var.y - var.x;
252e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
253e5c31af7Sopenharmony_ci				}
254e5c31af7Sopenharmony_ci			""
255e5c31af7Sopenharmony_ci		end
256e5c31af7Sopenharmony_ci
257e5c31af7Sopenharmony_ci		# differing precision tests
258e5c31af7Sopenharmony_ci		case differing_precision_3
259e5c31af7Sopenharmony_ci			version 300 es
260e5c31af7Sopenharmony_ci			desc "varying declared as lowp in vertex shader, but mediump in fragment shader"
261e5c31af7Sopenharmony_ci			values
262e5c31af7Sopenharmony_ci			{
263e5c31af7Sopenharmony_ci				input float in0		= [ -1.25 | -25.0 | 1.0 | 2.25 | 3.4 | 16.0 ];
264e5c31af7Sopenharmony_ci				output float out0	= [ -1.25 | -25.0 | 1.0 | 2.25 | 3.4 | 16.0 ];
265e5c31af7Sopenharmony_ci			}
266e5c31af7Sopenharmony_ci
267e5c31af7Sopenharmony_ci			vertex ""
268e5c31af7Sopenharmony_ci				#version 300 es
269e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
270e5c31af7Sopenharmony_ci				out lowp vec4 var;
271e5c31af7Sopenharmony_ci				void main()
272e5c31af7Sopenharmony_ci				{
273e5c31af7Sopenharmony_ci					var = vec4(in0, 2.0*in0, -in0, -in0);
274e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
275e5c31af7Sopenharmony_ci				}
276e5c31af7Sopenharmony_ci			""
277e5c31af7Sopenharmony_ci			fragment ""
278e5c31af7Sopenharmony_ci				#version 300 es
279e5c31af7Sopenharmony_ci				precision mediump float;
280e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
281e5c31af7Sopenharmony_ci				in mediump vec4 var;
282e5c31af7Sopenharmony_ci				void main()
283e5c31af7Sopenharmony_ci				{
284e5c31af7Sopenharmony_ci					out0 = var.x + var.y + var.z + var.w;
285e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
286e5c31af7Sopenharmony_ci				}
287e5c31af7Sopenharmony_ci			""
288e5c31af7Sopenharmony_ci		end
289e5c31af7Sopenharmony_ci
290e5c31af7Sopenharmony_ci		# mismatched type, static use but no runtime use in the fragment shader
291e5c31af7Sopenharmony_ci		case type_mismatch_1
292e5c31af7Sopenharmony_ci			version 300 es
293e5c31af7Sopenharmony_ci			desc "varying type mismatch (float vs. vec2), static use but no runtime use in the fragment shader"
294e5c31af7Sopenharmony_ci			expect link_fail
295e5c31af7Sopenharmony_ci			vertex ""
296e5c31af7Sopenharmony_ci				#version 300 es
297e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
298e5c31af7Sopenharmony_ci				out mediump float var;
299e5c31af7Sopenharmony_ci				void main()
300e5c31af7Sopenharmony_ci				{
301e5c31af7Sopenharmony_ci					var = 2.0;
302e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
303e5c31af7Sopenharmony_ci				}
304e5c31af7Sopenharmony_ci			""
305e5c31af7Sopenharmony_ci			fragment ""
306e5c31af7Sopenharmony_ci				#version 300 es
307e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
308e5c31af7Sopenharmony_ci				in mediump vec2 var;
309e5c31af7Sopenharmony_ci				void main()
310e5c31af7Sopenharmony_ci				{
311e5c31af7Sopenharmony_ci					if (false)
312e5c31af7Sopenharmony_ci					{
313e5c31af7Sopenharmony_ci						${FRAG_COLOR} = vec4(var.y);
314e5c31af7Sopenharmony_ci					}
315e5c31af7Sopenharmony_ci					else
316e5c31af7Sopenharmony_ci					{
317e5c31af7Sopenharmony_ci						${FRAG_COLOR} = vec4(1.0);
318e5c31af7Sopenharmony_ci					}
319e5c31af7Sopenharmony_ci				}
320e5c31af7Sopenharmony_ci			""
321e5c31af7Sopenharmony_ci		end
322e5c31af7Sopenharmony_ci
323e5c31af7Sopenharmony_ci		# mismatched type, varyings used
324e5c31af7Sopenharmony_ci		case type_mismatch_2
325e5c31af7Sopenharmony_ci			version 300 es
326e5c31af7Sopenharmony_ci			desc "varying type mismatch (float vs. vec2)"
327e5c31af7Sopenharmony_ci			expect link_fail
328e5c31af7Sopenharmony_ci			vertex ""
329e5c31af7Sopenharmony_ci				#version 300 es
330e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
331e5c31af7Sopenharmony_ci				out mediump float var;
332e5c31af7Sopenharmony_ci				void main()
333e5c31af7Sopenharmony_ci				{
334e5c31af7Sopenharmony_ci					var = 2.0;
335e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
336e5c31af7Sopenharmony_ci				}
337e5c31af7Sopenharmony_ci			""
338e5c31af7Sopenharmony_ci			fragment ""
339e5c31af7Sopenharmony_ci				#version 300 es
340e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
341e5c31af7Sopenharmony_ci				in mediump vec2 var;
342e5c31af7Sopenharmony_ci				void main()
343e5c31af7Sopenharmony_ci				{
344e5c31af7Sopenharmony_ci					${FRAG_COLOR} = var.xyyx;
345e5c31af7Sopenharmony_ci				}
346e5c31af7Sopenharmony_ci			""
347e5c31af7Sopenharmony_ci		end
348e5c31af7Sopenharmony_ci
349e5c31af7Sopenharmony_ci		# mismatched type, varyings used
350e5c31af7Sopenharmony_ci		case type_mismatch_3
351e5c31af7Sopenharmony_ci			version 300 es
352e5c31af7Sopenharmony_ci			desc "varying type mismatch (int vs. uint)"
353e5c31af7Sopenharmony_ci			expect link_fail
354e5c31af7Sopenharmony_ci			vertex ""
355e5c31af7Sopenharmony_ci				#version 300 es
356e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
357e5c31af7Sopenharmony_ci				flat out mediump int var;
358e5c31af7Sopenharmony_ci				void main()
359e5c31af7Sopenharmony_ci				{
360e5c31af7Sopenharmony_ci					var = 2;
361e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
362e5c31af7Sopenharmony_ci				}
363e5c31af7Sopenharmony_ci			""
364e5c31af7Sopenharmony_ci			fragment ""
365e5c31af7Sopenharmony_ci				#version 300 es
366e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
367e5c31af7Sopenharmony_ci				flat in mediump uint var;
368e5c31af7Sopenharmony_ci				void main()
369e5c31af7Sopenharmony_ci				{
370e5c31af7Sopenharmony_ci					${FRAG_COLOR} = vec4(var);
371e5c31af7Sopenharmony_ci				}
372e5c31af7Sopenharmony_ci			""
373e5c31af7Sopenharmony_ci		end
374e5c31af7Sopenharmony_ci
375e5c31af7Sopenharmony_ci		# mismatched type, varyings used
376e5c31af7Sopenharmony_ci		case struct_type_mismatch_1
377e5c31af7Sopenharmony_ci			version 300 es
378e5c31af7Sopenharmony_ci			desc "struct member mismatch"
379e5c31af7Sopenharmony_ci			expect link_fail
380e5c31af7Sopenharmony_ci			vertex ""
381e5c31af7Sopenharmony_ci				#version 300 es
382e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
383e5c31af7Sopenharmony_ci				struct S { highp float a; highp vec2 b; };
384e5c31af7Sopenharmony_ci				out S var;
385e5c31af7Sopenharmony_ci				void main()
386e5c31af7Sopenharmony_ci				{
387e5c31af7Sopenharmony_ci					var.a = 2.0;
388e5c31af7Sopenharmony_ci					var.b = vec2(1.0, 0.0);
389e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
390e5c31af7Sopenharmony_ci				}
391e5c31af7Sopenharmony_ci			""
392e5c31af7Sopenharmony_ci			fragment ""
393e5c31af7Sopenharmony_ci				#version 300 es
394e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
395e5c31af7Sopenharmony_ci				struct S { highp float a; highp vec3 b; };
396e5c31af7Sopenharmony_ci				in S var;
397e5c31af7Sopenharmony_ci				void main()
398e5c31af7Sopenharmony_ci				{
399e5c31af7Sopenharmony_ci					${FRAG_COLOR} = vec4(var.a, var.b);
400e5c31af7Sopenharmony_ci				}
401e5c31af7Sopenharmony_ci			""
402e5c31af7Sopenharmony_ci		end
403e5c31af7Sopenharmony_ci
404e5c31af7Sopenharmony_ci		# mismatched type, varyings unused in fragment shader (runtime)
405e5c31af7Sopenharmony_ci		case struct_type_mismatch_2
406e5c31af7Sopenharmony_ci			version 300 es
407e5c31af7Sopenharmony_ci			desc "struct member mismatch"
408e5c31af7Sopenharmony_ci			expect link_fail
409e5c31af7Sopenharmony_ci			vertex ""
410e5c31af7Sopenharmony_ci				#version 300 es
411e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
412e5c31af7Sopenharmony_ci				struct S { highp float a; highp vec2 b; };
413e5c31af7Sopenharmony_ci				out S var;
414e5c31af7Sopenharmony_ci				void main()
415e5c31af7Sopenharmony_ci				{
416e5c31af7Sopenharmony_ci					var.a = 2.0;
417e5c31af7Sopenharmony_ci					var.b = vec2(1.0, 0.0);
418e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
419e5c31af7Sopenharmony_ci				}
420e5c31af7Sopenharmony_ci			""
421e5c31af7Sopenharmony_ci			fragment ""
422e5c31af7Sopenharmony_ci				#version 300 es
423e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
424e5c31af7Sopenharmony_ci				struct S { highp float a; highp vec3 b; };
425e5c31af7Sopenharmony_ci				in S var;
426e5c31af7Sopenharmony_ci				void main()
427e5c31af7Sopenharmony_ci				{
428e5c31af7Sopenharmony_ci					${FRAG_COLOR} = vec4(var.a);
429e5c31af7Sopenharmony_ci					if (false)
430e5c31af7Sopenharmony_ci						${FRAG_COLOR}.yzw = var.b;
431e5c31af7Sopenharmony_ci				}
432e5c31af7Sopenharmony_ci			""
433e5c31af7Sopenharmony_ci		end
434e5c31af7Sopenharmony_ci
435e5c31af7Sopenharmony_ci		# mismatched type, varyings unused in both (runtime)
436e5c31af7Sopenharmony_ci		case struct_type_mismatch_3
437e5c31af7Sopenharmony_ci			version 300 es
438e5c31af7Sopenharmony_ci			desc "struct member mismatch"
439e5c31af7Sopenharmony_ci			expect link_fail
440e5c31af7Sopenharmony_ci			vertex ""
441e5c31af7Sopenharmony_ci				#version 300 es
442e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
443e5c31af7Sopenharmony_ci				struct S { highp float a; highp vec2 b; };
444e5c31af7Sopenharmony_ci				out S var;
445e5c31af7Sopenharmony_ci				void main()
446e5c31af7Sopenharmony_ci				{
447e5c31af7Sopenharmony_ci					var.a = 2.0;
448e5c31af7Sopenharmony_ci					if (false)
449e5c31af7Sopenharmony_ci						var.b = vec2(1.0, 0.0);
450e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
451e5c31af7Sopenharmony_ci				}
452e5c31af7Sopenharmony_ci			""
453e5c31af7Sopenharmony_ci			fragment ""
454e5c31af7Sopenharmony_ci				#version 300 es
455e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
456e5c31af7Sopenharmony_ci				struct S { highp float a; highp vec3 b; };
457e5c31af7Sopenharmony_ci				in S var;
458e5c31af7Sopenharmony_ci				void main()
459e5c31af7Sopenharmony_ci				{
460e5c31af7Sopenharmony_ci					${FRAG_COLOR} = vec4(var.a);
461e5c31af7Sopenharmony_ci					if (false)
462e5c31af7Sopenharmony_ci						${FRAG_COLOR}.yzw = var.b;
463e5c31af7Sopenharmony_ci				}
464e5c31af7Sopenharmony_ci			""
465e5c31af7Sopenharmony_ci		end
466e5c31af7Sopenharmony_ci
467e5c31af7Sopenharmony_ci		# interpolation_mismatch
468e5c31af7Sopenharmony_ci		case interpolation_mismatch_1
469e5c31af7Sopenharmony_ci			version 300 es
470e5c31af7Sopenharmony_ci			desc "varying interpolation different (flat vs. smooth)"
471e5c31af7Sopenharmony_ci			expect link_fail
472e5c31af7Sopenharmony_ci
473e5c31af7Sopenharmony_ci			vertex ""
474e5c31af7Sopenharmony_ci				#version 300 es
475e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
476e5c31af7Sopenharmony_ci				in highp float in0;
477e5c31af7Sopenharmony_ci				flat out mediump float var;
478e5c31af7Sopenharmony_ci				void main()
479e5c31af7Sopenharmony_ci				{
480e5c31af7Sopenharmony_ci					var = in0;
481e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
482e5c31af7Sopenharmony_ci				}
483e5c31af7Sopenharmony_ci			""
484e5c31af7Sopenharmony_ci			fragment ""
485e5c31af7Sopenharmony_ci				#version 300 es
486e5c31af7Sopenharmony_ci				precision mediump float;
487e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
488e5c31af7Sopenharmony_ci				in mediump float var;
489e5c31af7Sopenharmony_ci				void main()
490e5c31af7Sopenharmony_ci				{
491e5c31af7Sopenharmony_ci					${FRAG_COLOR} = vec4(var);
492e5c31af7Sopenharmony_ci				}
493e5c31af7Sopenharmony_ci			""
494e5c31af7Sopenharmony_ci		end
495e5c31af7Sopenharmony_ci
496e5c31af7Sopenharmony_ci		# different interpolation
497e5c31af7Sopenharmony_ci		case differing_interpolation_2
498e5c31af7Sopenharmony_ci			version 300 es
499e5c31af7Sopenharmony_ci			desc "varying interpolation different (smooth vs. centroid)"
500e5c31af7Sopenharmony_ci			values
501e5c31af7Sopenharmony_ci			{
502e5c31af7Sopenharmony_ci				input float in0		= [ -1.25 | -25.0 | 1.0 | 2.25 | 3.4 | 16.0 ];
503e5c31af7Sopenharmony_ci				output float out0	= [ -1.25 | -25.0 | 1.0 | 2.25 | 3.4 | 16.0 ];
504e5c31af7Sopenharmony_ci			}
505e5c31af7Sopenharmony_ci
506e5c31af7Sopenharmony_ci			vertex ""
507e5c31af7Sopenharmony_ci				#version 300 es
508e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
509e5c31af7Sopenharmony_ci				smooth out mediump float var;
510e5c31af7Sopenharmony_ci				void main()
511e5c31af7Sopenharmony_ci				{
512e5c31af7Sopenharmony_ci					var = in0;
513e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
514e5c31af7Sopenharmony_ci				}
515e5c31af7Sopenharmony_ci			""
516e5c31af7Sopenharmony_ci			fragment ""
517e5c31af7Sopenharmony_ci				#version 300 es
518e5c31af7Sopenharmony_ci				precision mediump float;
519e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
520e5c31af7Sopenharmony_ci				centroid in mediump float var;
521e5c31af7Sopenharmony_ci				void main()
522e5c31af7Sopenharmony_ci				{
523e5c31af7Sopenharmony_ci					out0 = var;
524e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
525e5c31af7Sopenharmony_ci				}
526e5c31af7Sopenharmony_ci			""
527e5c31af7Sopenharmony_ci		end
528e5c31af7Sopenharmony_ci
529e5c31af7Sopenharmony_ci		# no declaration in vertex shader, but static use in fragment
530e5c31af7Sopenharmony_ci		case illegal_usage_1
531e5c31af7Sopenharmony_ci			version 300 es
532e5c31af7Sopenharmony_ci			desc "varying not declared in vertex shader, but statically used in fragment shader"
533e5c31af7Sopenharmony_ci			expect link_fail
534e5c31af7Sopenharmony_ci			vertex ""
535e5c31af7Sopenharmony_ci				#version 300 es
536e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
537e5c31af7Sopenharmony_ci				void main()
538e5c31af7Sopenharmony_ci				{
539e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
540e5c31af7Sopenharmony_ci				}
541e5c31af7Sopenharmony_ci			""
542e5c31af7Sopenharmony_ci			fragment ""
543e5c31af7Sopenharmony_ci				#version 300 es
544e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
545e5c31af7Sopenharmony_ci				in mediump float var;
546e5c31af7Sopenharmony_ci				void main()
547e5c31af7Sopenharmony_ci				{
548e5c31af7Sopenharmony_ci					${FRAG_COLOR} = vec4(var);
549e5c31af7Sopenharmony_ci				}
550e5c31af7Sopenharmony_ci			""
551e5c31af7Sopenharmony_ci		end
552e5c31af7Sopenharmony_ci
553e5c31af7Sopenharmony_ci		# non-flat integer varyings not allowed
554e5c31af7Sopenharmony_ci		case invalid_type_int
555e5c31af7Sopenharmony_ci			version 300 es
556e5c31af7Sopenharmony_ci			desc "integer varying used"
557e5c31af7Sopenharmony_ci			expect compile_fail
558e5c31af7Sopenharmony_ci			vertex ""
559e5c31af7Sopenharmony_ci				#version 300 es
560e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
561e5c31af7Sopenharmony_ci				out mediump int var;
562e5c31af7Sopenharmony_ci				void main()
563e5c31af7Sopenharmony_ci				{
564e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
565e5c31af7Sopenharmony_ci				}
566e5c31af7Sopenharmony_ci			""
567e5c31af7Sopenharmony_ci			fragment ""
568e5c31af7Sopenharmony_ci				#version 300 es
569e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
570e5c31af7Sopenharmony_ci				in mediump int var;
571e5c31af7Sopenharmony_ci				void main()
572e5c31af7Sopenharmony_ci				{
573e5c31af7Sopenharmony_ci					${FRAG_COLOR} = vec4(1.0);
574e5c31af7Sopenharmony_ci				}
575e5c31af7Sopenharmony_ci			""
576e5c31af7Sopenharmony_ci		end
577e5c31af7Sopenharmony_ci
578e5c31af7Sopenharmony_ci		# non-flat integer varyings not allowed
579e5c31af7Sopenharmony_ci		case invalid_type_uint
580e5c31af7Sopenharmony_ci			version 300 es
581e5c31af7Sopenharmony_ci			desc "integer varying used"
582e5c31af7Sopenharmony_ci			expect compile_fail
583e5c31af7Sopenharmony_ci			vertex ""
584e5c31af7Sopenharmony_ci				#version 300 es
585e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
586e5c31af7Sopenharmony_ci				out mediump uint var;
587e5c31af7Sopenharmony_ci				void main()
588e5c31af7Sopenharmony_ci				{
589e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
590e5c31af7Sopenharmony_ci				}
591e5c31af7Sopenharmony_ci			""
592e5c31af7Sopenharmony_ci			fragment ""
593e5c31af7Sopenharmony_ci				#version 300 es
594e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
595e5c31af7Sopenharmony_ci				in mediump uint var;
596e5c31af7Sopenharmony_ci				void main()
597e5c31af7Sopenharmony_ci				{
598e5c31af7Sopenharmony_ci					${FRAG_COLOR} = vec4(1.0);
599e5c31af7Sopenharmony_ci				}
600e5c31af7Sopenharmony_ci			""
601e5c31af7Sopenharmony_ci		end
602e5c31af7Sopenharmony_ci
603e5c31af7Sopenharmony_ci		# bool varyings not allowed
604e5c31af7Sopenharmony_ci		case invalid_type_bool
605e5c31af7Sopenharmony_ci			version 300 es
606e5c31af7Sopenharmony_ci			desc "boolean varying used"
607e5c31af7Sopenharmony_ci			expect compile_fail
608e5c31af7Sopenharmony_ci			vertex ""
609e5c31af7Sopenharmony_ci				#version 300 es
610e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
611e5c31af7Sopenharmony_ci				out bool var;
612e5c31af7Sopenharmony_ci				void main()
613e5c31af7Sopenharmony_ci				{
614e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
615e5c31af7Sopenharmony_ci				}
616e5c31af7Sopenharmony_ci			""
617e5c31af7Sopenharmony_ci			fragment ""
618e5c31af7Sopenharmony_ci				#version 300 es
619e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
620e5c31af7Sopenharmony_ci				in bool var;
621e5c31af7Sopenharmony_ci				void main()
622e5c31af7Sopenharmony_ci				{
623e5c31af7Sopenharmony_ci					${FRAG_COLOR} = vec4(1.0);
624e5c31af7Sopenharmony_ci				}
625e5c31af7Sopenharmony_ci			""
626e5c31af7Sopenharmony_ci		end
627e5c31af7Sopenharmony_ci
628e5c31af7Sopenharmony_ci		case invalid_type_struct_array
629e5c31af7Sopenharmony_ci			version 300 es
630e5c31af7Sopenharmony_ci			desc "float array inside struct"
631e5c31af7Sopenharmony_ci			expect compile_fail
632e5c31af7Sopenharmony_ci			vertex ""
633e5c31af7Sopenharmony_ci				#version 300 es
634e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
635e5c31af7Sopenharmony_ci				struct S { mediump float a[3]; };
636e5c31af7Sopenharmony_ci				out S var;
637e5c31af7Sopenharmony_ci				void main()
638e5c31af7Sopenharmony_ci				{
639e5c31af7Sopenharmony_ci					var.a[0] = 1.0;
640e5c31af7Sopenharmony_ci					var.a[1] = 1.0;
641e5c31af7Sopenharmony_ci					var.a[2] = 1.0;
642e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
643e5c31af7Sopenharmony_ci				}
644e5c31af7Sopenharmony_ci			""
645e5c31af7Sopenharmony_ci			fragment ""
646e5c31af7Sopenharmony_ci				#version 300 es
647e5c31af7Sopenharmony_ci				precision mediump float;
648e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
649e5c31af7Sopenharmony_ci				struct S { mediump float a[3]; };
650e5c31af7Sopenharmony_ci				in S var;
651e5c31af7Sopenharmony_ci				void main()
652e5c31af7Sopenharmony_ci				{
653e5c31af7Sopenharmony_ci					${FRAG_COLOR} = vec4(1.0);
654e5c31af7Sopenharmony_ci				}
655e5c31af7Sopenharmony_ci			""
656e5c31af7Sopenharmony_ci		end
657e5c31af7Sopenharmony_ci
658e5c31af7Sopenharmony_ci		case invalid_type_struct_struct
659e5c31af7Sopenharmony_ci			version 300 es
660e5c31af7Sopenharmony_ci			desc "struct inside struct"
661e5c31af7Sopenharmony_ci			expect compile_fail
662e5c31af7Sopenharmony_ci			vertex ""
663e5c31af7Sopenharmony_ci				#version 300 es
664e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
665e5c31af7Sopenharmony_ci				struct S { mediump float a; };
666e5c31af7Sopenharmony_ci				struct T { S s; };
667e5c31af7Sopenharmony_ci				out T var;
668e5c31af7Sopenharmony_ci				void main()
669e5c31af7Sopenharmony_ci				{
670e5c31af7Sopenharmony_ci					var.s.a = 1.0;
671e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
672e5c31af7Sopenharmony_ci				}
673e5c31af7Sopenharmony_ci			""
674e5c31af7Sopenharmony_ci			fragment ""
675e5c31af7Sopenharmony_ci				#version 300 es
676e5c31af7Sopenharmony_ci				precision mediump float;
677e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
678e5c31af7Sopenharmony_ci				struct S { mediump float a; };
679e5c31af7Sopenharmony_ci				struct T { S s; };
680e5c31af7Sopenharmony_ci				in T var;
681e5c31af7Sopenharmony_ci				void main()
682e5c31af7Sopenharmony_ci				{
683e5c31af7Sopenharmony_ci					${FRAG_COLOR} = vec4(1.0);
684e5c31af7Sopenharmony_ci				}
685e5c31af7Sopenharmony_ci			""
686e5c31af7Sopenharmony_ci		end
687e5c31af7Sopenharmony_ci
688e5c31af7Sopenharmony_ci		case invalid_type_array_struct
689e5c31af7Sopenharmony_ci			version 300 es
690e5c31af7Sopenharmony_ci			desc "array of structs"
691e5c31af7Sopenharmony_ci			expect compile_fail
692e5c31af7Sopenharmony_ci			vertex ""
693e5c31af7Sopenharmony_ci				#version 300 es
694e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
695e5c31af7Sopenharmony_ci				struct S { mediump int a; };
696e5c31af7Sopenharmony_ci				flat out S var[2];
697e5c31af7Sopenharmony_ci				void main()
698e5c31af7Sopenharmony_ci				{
699e5c31af7Sopenharmony_ci					${VERTEX_SETUP}
700e5c31af7Sopenharmony_ci					var[0].a = 1;
701e5c31af7Sopenharmony_ci					var[1].a = 1;
702e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
703e5c31af7Sopenharmony_ci				}
704e5c31af7Sopenharmony_ci			""
705e5c31af7Sopenharmony_ci			fragment ""
706e5c31af7Sopenharmony_ci				#version 300 es
707e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
708e5c31af7Sopenharmony_ci				struct S { mediump int a; };
709e5c31af7Sopenharmony_ci				flat in S var[2];
710e5c31af7Sopenharmony_ci				void main()
711e5c31af7Sopenharmony_ci				{
712e5c31af7Sopenharmony_ci					${FRAG_COLOR} = vec4(1.0);
713e5c31af7Sopenharmony_ci				}
714e5c31af7Sopenharmony_ci			""
715e5c31af7Sopenharmony_ci		end
716e5c31af7Sopenharmony_ci
717e5c31af7Sopenharmony_ci		case invalid_type_array_array
718e5c31af7Sopenharmony_ci			version 300 es
719e5c31af7Sopenharmony_ci			desc "array of arrays"
720e5c31af7Sopenharmony_ci			expect compile_fail
721e5c31af7Sopenharmony_ci			vertex ""
722e5c31af7Sopenharmony_ci				#version 300 es
723e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
724e5c31af7Sopenharmony_ci				out mediump float var[2][2];
725e5c31af7Sopenharmony_ci				void main()
726e5c31af7Sopenharmony_ci				{
727e5c31af7Sopenharmony_ci					${VERTEX_SETUP}
728e5c31af7Sopenharmony_ci					var[0][0] = 1.0;
729e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
730e5c31af7Sopenharmony_ci				}
731e5c31af7Sopenharmony_ci			""
732e5c31af7Sopenharmony_ci			fragment ""
733e5c31af7Sopenharmony_ci				#version 300 es
734e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
735e5c31af7Sopenharmony_ci				in mediump float var[2][2];
736e5c31af7Sopenharmony_ci				void main()
737e5c31af7Sopenharmony_ci				{
738e5c31af7Sopenharmony_ci					${FRAG_COLOR} = vec4(1.0);
739e5c31af7Sopenharmony_ci				}
740e5c31af7Sopenharmony_ci			""
741e5c31af7Sopenharmony_ci		end
742e5c31af7Sopenharmony_ci	end
743e5c31af7Sopenharmony_ci
744e5c31af7Sopenharmony_ci	group basic_types "Basic varying types"
745e5c31af7Sopenharmony_ci		case float
746e5c31af7Sopenharmony_ci			version 300 es
747e5c31af7Sopenharmony_ci			desc "varying of type float"
748e5c31af7Sopenharmony_ci			values
749e5c31af7Sopenharmony_ci			{
750e5c31af7Sopenharmony_ci				input float in0		= [ -1.25 | -25.65 | 1.0 | 2.25 | 3.4 | 16.0 ];
751e5c31af7Sopenharmony_ci				output float out0	= [ -1.25 | -25.65 | 1.0 | 2.25 | 3.4 | 16.0 ];
752e5c31af7Sopenharmony_ci			}
753e5c31af7Sopenharmony_ci			vertex ""
754e5c31af7Sopenharmony_ci				#version 300 es
755e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
756e5c31af7Sopenharmony_ci				out mediump float var;
757e5c31af7Sopenharmony_ci				void main()
758e5c31af7Sopenharmony_ci				{
759e5c31af7Sopenharmony_ci					var = in0;
760e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
761e5c31af7Sopenharmony_ci				}
762e5c31af7Sopenharmony_ci			""
763e5c31af7Sopenharmony_ci			fragment ""
764e5c31af7Sopenharmony_ci				#version 300 es
765e5c31af7Sopenharmony_ci				precision mediump float;
766e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
767e5c31af7Sopenharmony_ci				in float var;
768e5c31af7Sopenharmony_ci				void main()
769e5c31af7Sopenharmony_ci				{
770e5c31af7Sopenharmony_ci					out0 = var;
771e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
772e5c31af7Sopenharmony_ci				}
773e5c31af7Sopenharmony_ci			""
774e5c31af7Sopenharmony_ci		end
775e5c31af7Sopenharmony_ci
776e5c31af7Sopenharmony_ci		case vec2
777e5c31af7Sopenharmony_ci			version 300 es
778e5c31af7Sopenharmony_ci			desc "varying of type vec2"
779e5c31af7Sopenharmony_ci			values
780e5c31af7Sopenharmony_ci			{
781e5c31af7Sopenharmony_ci				input vec2 in0		= [ vec2(-1.25, 1.25) | vec2(-25.65, -7.25) | vec2(0.0, 1.0) | vec2(2.25, 2.25) | vec2(3.4, 9.5) | vec2(16.0, 32.0) ];
782e5c31af7Sopenharmony_ci				output vec2 out0	= [ vec2(-1.25, 1.25) | vec2(-25.65, -7.25) | vec2(0.0, 1.0) | vec2(2.25, 2.25) | vec2(3.4, 9.5) | vec2(16.0, 32.0) ];
783e5c31af7Sopenharmony_ci			}
784e5c31af7Sopenharmony_ci			vertex ""
785e5c31af7Sopenharmony_ci				#version 300 es
786e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
787e5c31af7Sopenharmony_ci				out mediump vec2 var;
788e5c31af7Sopenharmony_ci				void main()
789e5c31af7Sopenharmony_ci				{
790e5c31af7Sopenharmony_ci					var = in0;
791e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
792e5c31af7Sopenharmony_ci				}
793e5c31af7Sopenharmony_ci			""
794e5c31af7Sopenharmony_ci			fragment ""
795e5c31af7Sopenharmony_ci				#version 300 es
796e5c31af7Sopenharmony_ci				precision mediump float;
797e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
798e5c31af7Sopenharmony_ci				in vec2 var;
799e5c31af7Sopenharmony_ci				void main()
800e5c31af7Sopenharmony_ci				{
801e5c31af7Sopenharmony_ci					out0 = var;
802e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
803e5c31af7Sopenharmony_ci				}
804e5c31af7Sopenharmony_ci			""
805e5c31af7Sopenharmony_ci		end
806e5c31af7Sopenharmony_ci
807e5c31af7Sopenharmony_ci		case vec3
808e5c31af7Sopenharmony_ci			version 300 es
809e5c31af7Sopenharmony_ci			desc "varying of type vec3"
810e5c31af7Sopenharmony_ci			values
811e5c31af7Sopenharmony_ci			{
812e5c31af7Sopenharmony_ci				input vec3 in0		= [ vec3(-1.25, 1.25, -9.5) | vec3(-25.65, -7.25, 14.21) | vec3(0.0, 1.0, -1.0) | vec3(2.25, 2.25, 22.5) | vec3(3.4, 9.5, 19.5) | vec3(16.0, 32.0, -64.0) ];
813e5c31af7Sopenharmony_ci				output vec3 out0	= [ vec3(-1.25, 1.25, -9.5) | vec3(-25.65, -7.25, 14.21) | vec3(0.0, 1.0, -1.0) | vec3(2.25, 2.25, 22.5) | vec3(3.4, 9.5, 19.5) | vec3(16.0, 32.0, -64.0) ];
814e5c31af7Sopenharmony_ci			}
815e5c31af7Sopenharmony_ci			vertex ""
816e5c31af7Sopenharmony_ci				#version 300 es
817e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
818e5c31af7Sopenharmony_ci				out mediump vec3 var;
819e5c31af7Sopenharmony_ci				void main()
820e5c31af7Sopenharmony_ci				{
821e5c31af7Sopenharmony_ci					var = in0;
822e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
823e5c31af7Sopenharmony_ci				}
824e5c31af7Sopenharmony_ci			""
825e5c31af7Sopenharmony_ci			fragment ""
826e5c31af7Sopenharmony_ci				#version 300 es
827e5c31af7Sopenharmony_ci				precision mediump float;
828e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
829e5c31af7Sopenharmony_ci				in vec3 var;
830e5c31af7Sopenharmony_ci				void main()
831e5c31af7Sopenharmony_ci				{
832e5c31af7Sopenharmony_ci					out0 = var;
833e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
834e5c31af7Sopenharmony_ci				}
835e5c31af7Sopenharmony_ci			""
836e5c31af7Sopenharmony_ci		end
837e5c31af7Sopenharmony_ci
838e5c31af7Sopenharmony_ci		case vec4
839e5c31af7Sopenharmony_ci			version 300 es
840e5c31af7Sopenharmony_ci			desc "varying of type vec4"
841e5c31af7Sopenharmony_ci			values
842e5c31af7Sopenharmony_ci			{
843e5c31af7Sopenharmony_ci				input vec4 in0		= [ vec4(-1.25, 1.25, -9.5, -12.2) | vec4(-25.65, -7.25, 14.21, -77.7) | vec4(0.0, 1.0, -1.0, 2.0) | vec4(2.25, 2.25, 22.5, 225.0) | vec4(3.4, 9.5, 19.5, 29.5) | vec4(16.0, 32.0, -64.0, -128.0) ];
844e5c31af7Sopenharmony_ci				output vec4 out0	= [ vec4(-1.25, 1.25, -9.5, -12.2) | vec4(-25.65, -7.25, 14.21, -77.7) | vec4(0.0, 1.0, -1.0, 2.0) | vec4(2.25, 2.25, 22.5, 225.0) | vec4(3.4, 9.5, 19.5, 29.5) | vec4(16.0, 32.0, -64.0, -128.0) ];
845e5c31af7Sopenharmony_ci			}
846e5c31af7Sopenharmony_ci			vertex ""
847e5c31af7Sopenharmony_ci				#version 300 es
848e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
849e5c31af7Sopenharmony_ci				out mediump vec4 var;
850e5c31af7Sopenharmony_ci				void main()
851e5c31af7Sopenharmony_ci				{
852e5c31af7Sopenharmony_ci					var = in0;
853e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
854e5c31af7Sopenharmony_ci				}
855e5c31af7Sopenharmony_ci			""
856e5c31af7Sopenharmony_ci			fragment ""
857e5c31af7Sopenharmony_ci				#version 300 es
858e5c31af7Sopenharmony_ci				precision mediump float;
859e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
860e5c31af7Sopenharmony_ci				in vec4 var;
861e5c31af7Sopenharmony_ci				void main()
862e5c31af7Sopenharmony_ci				{
863e5c31af7Sopenharmony_ci					out0 = var;
864e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
865e5c31af7Sopenharmony_ci				}
866e5c31af7Sopenharmony_ci			""
867e5c31af7Sopenharmony_ci		end
868e5c31af7Sopenharmony_ci
869e5c31af7Sopenharmony_ci		case mat2
870e5c31af7Sopenharmony_ci			version 300 es
871e5c31af7Sopenharmony_ci			desc "varying of type mat2"
872e5c31af7Sopenharmony_ci			values
873e5c31af7Sopenharmony_ci			{
874e5c31af7Sopenharmony_ci				input mat2 in0		= [ mat2(1.0, 1.0, 1.0, 1.0) | mat2(-1.25, 1.25, -9.5, -12.2) | mat2(-25.65, -7.25, 14.21, -77.7) | mat2(0.0, 1.0, -1.0, 2.0) | mat2(2.25, 2.25, 22.5, 225.0) | mat2(3.4, 9.5, 19.5, 29.5) | mat2(16.0, 32.0, -64.0, -128.0) ];
875e5c31af7Sopenharmony_ci				output mat2 out0	= [ mat2(1.0, 1.0, 1.0, 1.0) | mat2(-1.25, 1.25, -9.5, -12.2) | mat2(-25.65, -7.25, 14.21, -77.7) | mat2(0.0, 1.0, -1.0, 2.0) | mat2(2.25, 2.25, 22.5, 225.0) | mat2(3.4, 9.5, 19.5, 29.5) | mat2(16.0, 32.0, -64.0, -128.0) ];
876e5c31af7Sopenharmony_ci			}
877e5c31af7Sopenharmony_ci			vertex ""
878e5c31af7Sopenharmony_ci				#version 300 es
879e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
880e5c31af7Sopenharmony_ci				out mediump mat2 var;
881e5c31af7Sopenharmony_ci				void main()
882e5c31af7Sopenharmony_ci				{
883e5c31af7Sopenharmony_ci					var = in0;
884e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
885e5c31af7Sopenharmony_ci				}
886e5c31af7Sopenharmony_ci			""
887e5c31af7Sopenharmony_ci			fragment ""
888e5c31af7Sopenharmony_ci				#version 300 es
889e5c31af7Sopenharmony_ci				precision mediump float;
890e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
891e5c31af7Sopenharmony_ci				in mat2 var;
892e5c31af7Sopenharmony_ci				void main()
893e5c31af7Sopenharmony_ci				{
894e5c31af7Sopenharmony_ci					out0 = var;
895e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
896e5c31af7Sopenharmony_ci				}
897e5c31af7Sopenharmony_ci			""
898e5c31af7Sopenharmony_ci		end
899e5c31af7Sopenharmony_ci
900e5c31af7Sopenharmony_ci		case mat2x3
901e5c31af7Sopenharmony_ci			version 300 es
902e5c31af7Sopenharmony_ci			desc "varying of type mat2x3"
903e5c31af7Sopenharmony_ci			values
904e5c31af7Sopenharmony_ci			{
905e5c31af7Sopenharmony_ci				input mat2x3 in0	= [ mat2x3(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25) ];
906e5c31af7Sopenharmony_ci				output mat2x3 out0	= [ mat2x3(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25) ];
907e5c31af7Sopenharmony_ci			}
908e5c31af7Sopenharmony_ci			vertex ""
909e5c31af7Sopenharmony_ci				#version 300 es
910e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
911e5c31af7Sopenharmony_ci				out mediump mat2x3 var;
912e5c31af7Sopenharmony_ci				void main()
913e5c31af7Sopenharmony_ci				{
914e5c31af7Sopenharmony_ci					var = in0;
915e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
916e5c31af7Sopenharmony_ci				}
917e5c31af7Sopenharmony_ci			""
918e5c31af7Sopenharmony_ci			fragment ""
919e5c31af7Sopenharmony_ci				#version 300 es
920e5c31af7Sopenharmony_ci				precision mediump float;
921e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
922e5c31af7Sopenharmony_ci				in mat2x3 var;
923e5c31af7Sopenharmony_ci				void main()
924e5c31af7Sopenharmony_ci				{
925e5c31af7Sopenharmony_ci					out0 = var;
926e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
927e5c31af7Sopenharmony_ci				}
928e5c31af7Sopenharmony_ci			""
929e5c31af7Sopenharmony_ci		end
930e5c31af7Sopenharmony_ci
931e5c31af7Sopenharmony_ci		case mat2x4
932e5c31af7Sopenharmony_ci			version 300 es
933e5c31af7Sopenharmony_ci			desc "varying of type mat2x4"
934e5c31af7Sopenharmony_ci			values
935e5c31af7Sopenharmony_ci			{
936e5c31af7Sopenharmony_ci				input mat2x4 in0	= [ mat2x4(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7) ];
937e5c31af7Sopenharmony_ci				output mat2x4 out0	= [ mat2x4(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7) ];
938e5c31af7Sopenharmony_ci			}
939e5c31af7Sopenharmony_ci			vertex ""
940e5c31af7Sopenharmony_ci				#version 300 es
941e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
942e5c31af7Sopenharmony_ci				out mediump mat2x4 var;
943e5c31af7Sopenharmony_ci				void main()
944e5c31af7Sopenharmony_ci				{
945e5c31af7Sopenharmony_ci					var = in0;
946e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
947e5c31af7Sopenharmony_ci				}
948e5c31af7Sopenharmony_ci			""
949e5c31af7Sopenharmony_ci			fragment ""
950e5c31af7Sopenharmony_ci				#version 300 es
951e5c31af7Sopenharmony_ci				precision mediump float;
952e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
953e5c31af7Sopenharmony_ci				in mat2x4 var;
954e5c31af7Sopenharmony_ci				void main()
955e5c31af7Sopenharmony_ci				{
956e5c31af7Sopenharmony_ci					out0 = var;
957e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
958e5c31af7Sopenharmony_ci				}
959e5c31af7Sopenharmony_ci			""
960e5c31af7Sopenharmony_ci		end
961e5c31af7Sopenharmony_ci
962e5c31af7Sopenharmony_ci		case mat3x2
963e5c31af7Sopenharmony_ci			version 300 es
964e5c31af7Sopenharmony_ci			desc "varying of type mat3x2"
965e5c31af7Sopenharmony_ci			values
966e5c31af7Sopenharmony_ci			{
967e5c31af7Sopenharmony_ci				input mat3x2 in0	= [ mat3x2(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25) ];
968e5c31af7Sopenharmony_ci				output mat3x2 out0	= [ mat3x2(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25) ];
969e5c31af7Sopenharmony_ci			}
970e5c31af7Sopenharmony_ci			vertex ""
971e5c31af7Sopenharmony_ci				#version 300 es
972e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
973e5c31af7Sopenharmony_ci				out mediump mat3x2 var;
974e5c31af7Sopenharmony_ci				void main()
975e5c31af7Sopenharmony_ci				{
976e5c31af7Sopenharmony_ci					var = in0;
977e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
978e5c31af7Sopenharmony_ci				}
979e5c31af7Sopenharmony_ci			""
980e5c31af7Sopenharmony_ci			fragment ""
981e5c31af7Sopenharmony_ci				#version 300 es
982e5c31af7Sopenharmony_ci				precision mediump float;
983e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
984e5c31af7Sopenharmony_ci				in mat3x2 var;
985e5c31af7Sopenharmony_ci				void main()
986e5c31af7Sopenharmony_ci				{
987e5c31af7Sopenharmony_ci					out0 = var;
988e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
989e5c31af7Sopenharmony_ci				}
990e5c31af7Sopenharmony_ci			""
991e5c31af7Sopenharmony_ci		end
992e5c31af7Sopenharmony_ci
993e5c31af7Sopenharmony_ci		case mat3
994e5c31af7Sopenharmony_ci			version 300 es
995e5c31af7Sopenharmony_ci			desc "varying of type mat3"
996e5c31af7Sopenharmony_ci			values
997e5c31af7Sopenharmony_ci			{
998e5c31af7Sopenharmony_ci				input mat3 in0		= [ mat3(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7, 9.9) | mat3(0.0, 1.0, -1.0, 2.0, 2.25, 2.25, 22.5, 225.0, -9.9) | mat3(3.4, 9.5, 19.5, 29.5, 16.0, 32.0, -64.0, -128.0, 256.0) ];
999e5c31af7Sopenharmony_ci				output mat3 out0	= [ mat3(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7, 9.9) | mat3(0.0, 1.0, -1.0, 2.0, 2.25, 2.25, 22.5, 225.0, -9.9) | mat3(3.4, 9.5, 19.5, 29.5, 16.0, 32.0, -64.0, -128.0, 256.0) ];
1000e5c31af7Sopenharmony_ci			}
1001e5c31af7Sopenharmony_ci			vertex ""
1002e5c31af7Sopenharmony_ci				#version 300 es
1003e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
1004e5c31af7Sopenharmony_ci				out mediump mat3 var;
1005e5c31af7Sopenharmony_ci				void main()
1006e5c31af7Sopenharmony_ci				{
1007e5c31af7Sopenharmony_ci					var = in0;
1008e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
1009e5c31af7Sopenharmony_ci				}
1010e5c31af7Sopenharmony_ci			""
1011e5c31af7Sopenharmony_ci			fragment ""
1012e5c31af7Sopenharmony_ci				#version 300 es
1013e5c31af7Sopenharmony_ci				precision mediump float;
1014e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
1015e5c31af7Sopenharmony_ci				in mat3 var;
1016e5c31af7Sopenharmony_ci				void main()
1017e5c31af7Sopenharmony_ci				{
1018e5c31af7Sopenharmony_ci					out0 = var;
1019e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
1020e5c31af7Sopenharmony_ci				}
1021e5c31af7Sopenharmony_ci			""
1022e5c31af7Sopenharmony_ci		end
1023e5c31af7Sopenharmony_ci
1024e5c31af7Sopenharmony_ci		case mat3x4
1025e5c31af7Sopenharmony_ci			version 300 es
1026e5c31af7Sopenharmony_ci			desc "varying of type mat3x4"
1027e5c31af7Sopenharmony_ci			values
1028e5c31af7Sopenharmony_ci			{
1029e5c31af7Sopenharmony_ci				input mat3x4 in0	= [ mat3x4(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7, 0.0, 1.0, -1.0, 2.0) ];
1030e5c31af7Sopenharmony_ci				output mat3x4 out0	= [ mat3x4(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7, 0.0, 1.0, -1.0, 2.0) ];
1031e5c31af7Sopenharmony_ci			}
1032e5c31af7Sopenharmony_ci			vertex ""
1033e5c31af7Sopenharmony_ci				#version 300 es
1034e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
1035e5c31af7Sopenharmony_ci				out mediump mat3x4 var;
1036e5c31af7Sopenharmony_ci				void main()
1037e5c31af7Sopenharmony_ci				{
1038e5c31af7Sopenharmony_ci					var = in0;
1039e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
1040e5c31af7Sopenharmony_ci				}
1041e5c31af7Sopenharmony_ci			""
1042e5c31af7Sopenharmony_ci			fragment ""
1043e5c31af7Sopenharmony_ci				#version 300 es
1044e5c31af7Sopenharmony_ci				precision mediump float;
1045e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
1046e5c31af7Sopenharmony_ci				in mat3x4 var;
1047e5c31af7Sopenharmony_ci				void main()
1048e5c31af7Sopenharmony_ci				{
1049e5c31af7Sopenharmony_ci					out0 = var;
1050e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
1051e5c31af7Sopenharmony_ci				}
1052e5c31af7Sopenharmony_ci			""
1053e5c31af7Sopenharmony_ci		end
1054e5c31af7Sopenharmony_ci
1055e5c31af7Sopenharmony_ci		case mat4x2
1056e5c31af7Sopenharmony_ci			version 300 es
1057e5c31af7Sopenharmony_ci			desc "varying of type mat4x2"
1058e5c31af7Sopenharmony_ci			values
1059e5c31af7Sopenharmony_ci			{
1060e5c31af7Sopenharmony_ci				input mat4x2 in0	= [ mat4x2(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7) ];
1061e5c31af7Sopenharmony_ci				output mat4x2 out0	= [ mat4x2(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7) ];
1062e5c31af7Sopenharmony_ci			}
1063e5c31af7Sopenharmony_ci			vertex ""
1064e5c31af7Sopenharmony_ci				#version 300 es
1065e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
1066e5c31af7Sopenharmony_ci				out mediump mat4x2 var;
1067e5c31af7Sopenharmony_ci				void main()
1068e5c31af7Sopenharmony_ci				{
1069e5c31af7Sopenharmony_ci					var = in0;
1070e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
1071e5c31af7Sopenharmony_ci				}
1072e5c31af7Sopenharmony_ci			""
1073e5c31af7Sopenharmony_ci			fragment ""
1074e5c31af7Sopenharmony_ci				#version 300 es
1075e5c31af7Sopenharmony_ci				precision mediump float;
1076e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
1077e5c31af7Sopenharmony_ci				in mat4x2 var;
1078e5c31af7Sopenharmony_ci				void main()
1079e5c31af7Sopenharmony_ci				{
1080e5c31af7Sopenharmony_ci					out0 = var;
1081e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
1082e5c31af7Sopenharmony_ci				}
1083e5c31af7Sopenharmony_ci			""
1084e5c31af7Sopenharmony_ci		end
1085e5c31af7Sopenharmony_ci
1086e5c31af7Sopenharmony_ci		case mat4x3
1087e5c31af7Sopenharmony_ci			version 300 es
1088e5c31af7Sopenharmony_ci			desc "varying of type mat4x3"
1089e5c31af7Sopenharmony_ci			values
1090e5c31af7Sopenharmony_ci			{
1091e5c31af7Sopenharmony_ci				input mat4x3 in0	= [ mat4x3(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7, 0.0, 1.0, -1.0, 2.0) ];
1092e5c31af7Sopenharmony_ci				output mat4x3 out0	= [ mat4x3(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7, 0.0, 1.0, -1.0, 2.0) ];
1093e5c31af7Sopenharmony_ci			}
1094e5c31af7Sopenharmony_ci			vertex ""
1095e5c31af7Sopenharmony_ci				#version 300 es
1096e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
1097e5c31af7Sopenharmony_ci				out mediump mat4x3 var;
1098e5c31af7Sopenharmony_ci				void main()
1099e5c31af7Sopenharmony_ci				{
1100e5c31af7Sopenharmony_ci					var = in0;
1101e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
1102e5c31af7Sopenharmony_ci				}
1103e5c31af7Sopenharmony_ci			""
1104e5c31af7Sopenharmony_ci			fragment ""
1105e5c31af7Sopenharmony_ci				#version 300 es
1106e5c31af7Sopenharmony_ci				precision mediump float;
1107e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
1108e5c31af7Sopenharmony_ci				in mat4x3 var;
1109e5c31af7Sopenharmony_ci				void main()
1110e5c31af7Sopenharmony_ci				{
1111e5c31af7Sopenharmony_ci					out0 = var;
1112e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
1113e5c31af7Sopenharmony_ci				}
1114e5c31af7Sopenharmony_ci			""
1115e5c31af7Sopenharmony_ci		end
1116e5c31af7Sopenharmony_ci
1117e5c31af7Sopenharmony_ci		case mat4
1118e5c31af7Sopenharmony_ci			version 300 es
1119e5c31af7Sopenharmony_ci			desc "varying of type mat4"
1120e5c31af7Sopenharmony_ci			values
1121e5c31af7Sopenharmony_ci			{
1122e5c31af7Sopenharmony_ci				input mat4 in0		= [ mat4(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7, 0.0, 1.0, -1.0, 2.0, 2.25, 2.25, 22.5, 225.0) ];
1123e5c31af7Sopenharmony_ci				output mat4 out0	= [ mat4(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7, 0.0, 1.0, -1.0, 2.0, 2.25, 2.25, 22.5, 225.0) ];
1124e5c31af7Sopenharmony_ci			}
1125e5c31af7Sopenharmony_ci			vertex ""
1126e5c31af7Sopenharmony_ci				#version 300 es
1127e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
1128e5c31af7Sopenharmony_ci				out mediump mat4 var;
1129e5c31af7Sopenharmony_ci				void main()
1130e5c31af7Sopenharmony_ci				{
1131e5c31af7Sopenharmony_ci					var = in0;
1132e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
1133e5c31af7Sopenharmony_ci				}
1134e5c31af7Sopenharmony_ci			""
1135e5c31af7Sopenharmony_ci			fragment ""
1136e5c31af7Sopenharmony_ci				#version 300 es
1137e5c31af7Sopenharmony_ci				precision mediump float;
1138e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
1139e5c31af7Sopenharmony_ci				in mat4 var;
1140e5c31af7Sopenharmony_ci				void main()
1141e5c31af7Sopenharmony_ci				{
1142e5c31af7Sopenharmony_ci					out0 = var;
1143e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
1144e5c31af7Sopenharmony_ci				}
1145e5c31af7Sopenharmony_ci			""
1146e5c31af7Sopenharmony_ci		end
1147e5c31af7Sopenharmony_ci
1148e5c31af7Sopenharmony_ci		case int
1149e5c31af7Sopenharmony_ci			version 300 es
1150e5c31af7Sopenharmony_ci			desc "varying of type int"
1151e5c31af7Sopenharmony_ci			values
1152e5c31af7Sopenharmony_ci			{
1153e5c31af7Sopenharmony_ci				input int in0		= [ -1 | -25 | 1 | 2 | 3 | 16 ];
1154e5c31af7Sopenharmony_ci				output int out0		= [ -1 | -25 | 1 | 2 | 3 | 16 ];
1155e5c31af7Sopenharmony_ci			}
1156e5c31af7Sopenharmony_ci			vertex ""
1157e5c31af7Sopenharmony_ci				#version 300 es
1158e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
1159e5c31af7Sopenharmony_ci				flat out mediump int var;
1160e5c31af7Sopenharmony_ci				void main()
1161e5c31af7Sopenharmony_ci				{
1162e5c31af7Sopenharmony_ci					${VERTEX_SETUP}
1163e5c31af7Sopenharmony_ci					var = in0;
1164e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
1165e5c31af7Sopenharmony_ci				}
1166e5c31af7Sopenharmony_ci			""
1167e5c31af7Sopenharmony_ci			fragment ""
1168e5c31af7Sopenharmony_ci				#version 300 es
1169e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
1170e5c31af7Sopenharmony_ci				flat in int var;
1171e5c31af7Sopenharmony_ci				void main()
1172e5c31af7Sopenharmony_ci				{
1173e5c31af7Sopenharmony_ci					out0 = var;
1174e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
1175e5c31af7Sopenharmony_ci				}
1176e5c31af7Sopenharmony_ci			""
1177e5c31af7Sopenharmony_ci		end
1178e5c31af7Sopenharmony_ci
1179e5c31af7Sopenharmony_ci		case ivec2
1180e5c31af7Sopenharmony_ci			version 300 es
1181e5c31af7Sopenharmony_ci			desc "varying of type ivec2"
1182e5c31af7Sopenharmony_ci			values
1183e5c31af7Sopenharmony_ci			{
1184e5c31af7Sopenharmony_ci				input ivec2 in0		= [ ivec2(-1, 1) | ivec2(-25, 25) | ivec2(1, 1) | ivec2(2, 3) | ivec2(16, 17) ];
1185e5c31af7Sopenharmony_ci				output ivec2 out0	= [ ivec2(-1, 1) | ivec2(-25, 25) | ivec2(1, 1) | ivec2(2, 3) | ivec2(16, 17) ];
1186e5c31af7Sopenharmony_ci			}
1187e5c31af7Sopenharmony_ci			vertex ""
1188e5c31af7Sopenharmony_ci				#version 300 es
1189e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
1190e5c31af7Sopenharmony_ci				flat out mediump ivec2 var;
1191e5c31af7Sopenharmony_ci				void main()
1192e5c31af7Sopenharmony_ci				{
1193e5c31af7Sopenharmony_ci					${VERTEX_SETUP}
1194e5c31af7Sopenharmony_ci					var = in0;
1195e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
1196e5c31af7Sopenharmony_ci				}
1197e5c31af7Sopenharmony_ci			""
1198e5c31af7Sopenharmony_ci			fragment ""
1199e5c31af7Sopenharmony_ci				#version 300 es
1200e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
1201e5c31af7Sopenharmony_ci				flat in ivec2 var;
1202e5c31af7Sopenharmony_ci				void main()
1203e5c31af7Sopenharmony_ci				{
1204e5c31af7Sopenharmony_ci					out0 = var;
1205e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
1206e5c31af7Sopenharmony_ci				}
1207e5c31af7Sopenharmony_ci			""
1208e5c31af7Sopenharmony_ci		end
1209e5c31af7Sopenharmony_ci
1210e5c31af7Sopenharmony_ci		case ivec3
1211e5c31af7Sopenharmony_ci			version 300 es
1212e5c31af7Sopenharmony_ci			desc "varying of type ivec3"
1213e5c31af7Sopenharmony_ci			values
1214e5c31af7Sopenharmony_ci			{
1215e5c31af7Sopenharmony_ci				input ivec3 in0		= [ ivec3(-1, 1, -2) | ivec3(-25, 25, -3) | ivec3(1, 1, 1) | ivec3(2, 3, 4) | ivec3(16, 17, 18) ];
1216e5c31af7Sopenharmony_ci				output ivec3 out0	= [ ivec3(-1, 1, -2) | ivec3(-25, 25, -3) | ivec3(1, 1, 1) | ivec3(2, 3, 4) | ivec3(16, 17, 18) ];
1217e5c31af7Sopenharmony_ci			}
1218e5c31af7Sopenharmony_ci			vertex ""
1219e5c31af7Sopenharmony_ci				#version 300 es
1220e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
1221e5c31af7Sopenharmony_ci				flat out mediump ivec3 var;
1222e5c31af7Sopenharmony_ci				void main()
1223e5c31af7Sopenharmony_ci				{
1224e5c31af7Sopenharmony_ci					${VERTEX_SETUP}
1225e5c31af7Sopenharmony_ci					var = in0;
1226e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
1227e5c31af7Sopenharmony_ci				}
1228e5c31af7Sopenharmony_ci			""
1229e5c31af7Sopenharmony_ci			fragment ""
1230e5c31af7Sopenharmony_ci				#version 300 es
1231e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
1232e5c31af7Sopenharmony_ci				flat in ivec3 var;
1233e5c31af7Sopenharmony_ci				void main()
1234e5c31af7Sopenharmony_ci				{
1235e5c31af7Sopenharmony_ci					out0 = var;
1236e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
1237e5c31af7Sopenharmony_ci				}
1238e5c31af7Sopenharmony_ci			""
1239e5c31af7Sopenharmony_ci		end
1240e5c31af7Sopenharmony_ci
1241e5c31af7Sopenharmony_ci		case ivec4
1242e5c31af7Sopenharmony_ci			version 300 es
1243e5c31af7Sopenharmony_ci			desc "varying of type ivec4"
1244e5c31af7Sopenharmony_ci			values
1245e5c31af7Sopenharmony_ci			{
1246e5c31af7Sopenharmony_ci				input ivec4 in0		= [ ivec4(-1, 1, -2, 2) | ivec4(-25, 25, -3, 3) | ivec4(1, 1, 1, 1) | ivec4(2, 3, 4, 5) | ivec4(16, 17, 18, 19) ];
1247e5c31af7Sopenharmony_ci				output ivec4 out0	= [ ivec4(-1, 1, -2, 2) | ivec4(-25, 25, -3, 3) | ivec4(1, 1, 1, 1) | ivec4(2, 3, 4, 5) | ivec4(16, 17, 18, 19) ];
1248e5c31af7Sopenharmony_ci			}
1249e5c31af7Sopenharmony_ci			vertex ""
1250e5c31af7Sopenharmony_ci				#version 300 es
1251e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
1252e5c31af7Sopenharmony_ci				flat out mediump ivec4 var;
1253e5c31af7Sopenharmony_ci				void main()
1254e5c31af7Sopenharmony_ci				{
1255e5c31af7Sopenharmony_ci					${VERTEX_SETUP}
1256e5c31af7Sopenharmony_ci					var = in0;
1257e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
1258e5c31af7Sopenharmony_ci				}
1259e5c31af7Sopenharmony_ci			""
1260e5c31af7Sopenharmony_ci			fragment ""
1261e5c31af7Sopenharmony_ci				#version 300 es
1262e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
1263e5c31af7Sopenharmony_ci				flat in ivec4 var;
1264e5c31af7Sopenharmony_ci				void main()
1265e5c31af7Sopenharmony_ci				{
1266e5c31af7Sopenharmony_ci					out0 = var;
1267e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
1268e5c31af7Sopenharmony_ci				}
1269e5c31af7Sopenharmony_ci			""
1270e5c31af7Sopenharmony_ci		end
1271e5c31af7Sopenharmony_ci
1272e5c31af7Sopenharmony_ci		case uint
1273e5c31af7Sopenharmony_ci			version 300 es
1274e5c31af7Sopenharmony_ci			desc "varying of type int"
1275e5c31af7Sopenharmony_ci			values
1276e5c31af7Sopenharmony_ci			{
1277e5c31af7Sopenharmony_ci				input uint in0			= [ 1 | 2 | 3 | 16 ];
1278e5c31af7Sopenharmony_ci				output uint out0		= [ 1 | 2 | 3 | 16 ];
1279e5c31af7Sopenharmony_ci			}
1280e5c31af7Sopenharmony_ci			vertex ""
1281e5c31af7Sopenharmony_ci				#version 300 es
1282e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
1283e5c31af7Sopenharmony_ci				flat out mediump uint var;
1284e5c31af7Sopenharmony_ci				void main()
1285e5c31af7Sopenharmony_ci				{
1286e5c31af7Sopenharmony_ci					${VERTEX_SETUP}
1287e5c31af7Sopenharmony_ci					var = in0;
1288e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
1289e5c31af7Sopenharmony_ci				}
1290e5c31af7Sopenharmony_ci			""
1291e5c31af7Sopenharmony_ci			fragment ""
1292e5c31af7Sopenharmony_ci				#version 300 es
1293e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
1294e5c31af7Sopenharmony_ci				flat in uint var;
1295e5c31af7Sopenharmony_ci				void main()
1296e5c31af7Sopenharmony_ci				{
1297e5c31af7Sopenharmony_ci					out0 = var;
1298e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
1299e5c31af7Sopenharmony_ci				}
1300e5c31af7Sopenharmony_ci			""
1301e5c31af7Sopenharmony_ci		end
1302e5c31af7Sopenharmony_ci
1303e5c31af7Sopenharmony_ci		case uvec2
1304e5c31af7Sopenharmony_ci			version 300 es
1305e5c31af7Sopenharmony_ci			desc "varying of type uvec2"
1306e5c31af7Sopenharmony_ci			values
1307e5c31af7Sopenharmony_ci			{
1308e5c31af7Sopenharmony_ci				input uvec2 in0		= [ uvec2(1, 1) | uvec2(25, 25) | uvec2(1, 1) | uvec2(2, 3) | uvec2(16, 17) ];
1309e5c31af7Sopenharmony_ci				output uvec2 out0	= [ uvec2(1, 1) | uvec2(25, 25) | uvec2(1, 1) | uvec2(2, 3) | uvec2(16, 17) ];
1310e5c31af7Sopenharmony_ci			}
1311e5c31af7Sopenharmony_ci			vertex ""
1312e5c31af7Sopenharmony_ci				#version 300 es
1313e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
1314e5c31af7Sopenharmony_ci				flat out mediump uvec2 var;
1315e5c31af7Sopenharmony_ci				void main()
1316e5c31af7Sopenharmony_ci				{
1317e5c31af7Sopenharmony_ci					${VERTEX_SETUP}
1318e5c31af7Sopenharmony_ci					var = in0;
1319e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
1320e5c31af7Sopenharmony_ci				}
1321e5c31af7Sopenharmony_ci			""
1322e5c31af7Sopenharmony_ci			fragment ""
1323e5c31af7Sopenharmony_ci				#version 300 es
1324e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
1325e5c31af7Sopenharmony_ci				flat in uvec2 var;
1326e5c31af7Sopenharmony_ci				void main()
1327e5c31af7Sopenharmony_ci				{
1328e5c31af7Sopenharmony_ci					out0 = var;
1329e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
1330e5c31af7Sopenharmony_ci				}
1331e5c31af7Sopenharmony_ci			""
1332e5c31af7Sopenharmony_ci		end
1333e5c31af7Sopenharmony_ci
1334e5c31af7Sopenharmony_ci		case uvec3
1335e5c31af7Sopenharmony_ci			version 300 es
1336e5c31af7Sopenharmony_ci			desc "varying of type uvec3"
1337e5c31af7Sopenharmony_ci			values
1338e5c31af7Sopenharmony_ci			{
1339e5c31af7Sopenharmony_ci				input uvec3 in0		= [ uvec3(1, 1, 2) | uvec3(25, 25, 3) | uvec3(1, 1, 1) | uvec3(2, 3, 4) | uvec3(16, 17, 18) ];
1340e5c31af7Sopenharmony_ci				output uvec3 out0	= [ uvec3(1, 1, 2) | uvec3(25, 25, 3) | uvec3(1, 1, 1) | uvec3(2, 3, 4) | uvec3(16, 17, 18) ];
1341e5c31af7Sopenharmony_ci			}
1342e5c31af7Sopenharmony_ci			vertex ""
1343e5c31af7Sopenharmony_ci				#version 300 es
1344e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
1345e5c31af7Sopenharmony_ci				flat out mediump uvec3 var;
1346e5c31af7Sopenharmony_ci				void main()
1347e5c31af7Sopenharmony_ci				{
1348e5c31af7Sopenharmony_ci					${VERTEX_SETUP}
1349e5c31af7Sopenharmony_ci					var = in0;
1350e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
1351e5c31af7Sopenharmony_ci				}
1352e5c31af7Sopenharmony_ci			""
1353e5c31af7Sopenharmony_ci			fragment ""
1354e5c31af7Sopenharmony_ci				#version 300 es
1355e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
1356e5c31af7Sopenharmony_ci				flat in uvec3 var;
1357e5c31af7Sopenharmony_ci				void main()
1358e5c31af7Sopenharmony_ci				{
1359e5c31af7Sopenharmony_ci					out0 = var;
1360e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
1361e5c31af7Sopenharmony_ci				}
1362e5c31af7Sopenharmony_ci			""
1363e5c31af7Sopenharmony_ci		end
1364e5c31af7Sopenharmony_ci
1365e5c31af7Sopenharmony_ci		case uvec4
1366e5c31af7Sopenharmony_ci			version 300 es
1367e5c31af7Sopenharmony_ci			desc "varying of type uvec4"
1368e5c31af7Sopenharmony_ci			values
1369e5c31af7Sopenharmony_ci			{
1370e5c31af7Sopenharmony_ci				input uvec4 in0		= [ uvec4(1, 1, 2, 2) | uvec4(25, 25, 3, 3) | uvec4(1, 1, 1, 1) | uvec4(2, 3, 4, 5) | uvec4(16, 17, 18, 19) ];
1371e5c31af7Sopenharmony_ci				output uvec4 out0	= [ uvec4(1, 1, 2, 2) | uvec4(25, 25, 3, 3) | uvec4(1, 1, 1, 1) | uvec4(2, 3, 4, 5) | uvec4(16, 17, 18, 19) ];
1372e5c31af7Sopenharmony_ci			}
1373e5c31af7Sopenharmony_ci			vertex ""
1374e5c31af7Sopenharmony_ci				#version 300 es
1375e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
1376e5c31af7Sopenharmony_ci				flat out mediump uvec4 var;
1377e5c31af7Sopenharmony_ci				void main()
1378e5c31af7Sopenharmony_ci				{
1379e5c31af7Sopenharmony_ci					${VERTEX_SETUP}
1380e5c31af7Sopenharmony_ci					var = in0;
1381e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
1382e5c31af7Sopenharmony_ci				}
1383e5c31af7Sopenharmony_ci			""
1384e5c31af7Sopenharmony_ci			fragment ""
1385e5c31af7Sopenharmony_ci				#version 300 es
1386e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
1387e5c31af7Sopenharmony_ci				flat in uvec4 var;
1388e5c31af7Sopenharmony_ci				void main()
1389e5c31af7Sopenharmony_ci				{
1390e5c31af7Sopenharmony_ci					out0 = var;
1391e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
1392e5c31af7Sopenharmony_ci				}
1393e5c31af7Sopenharmony_ci			""
1394e5c31af7Sopenharmony_ci		end
1395e5c31af7Sopenharmony_ci	end
1396e5c31af7Sopenharmony_ci
1397e5c31af7Sopenharmony_ci	group struct "Structure varyings"
1398e5c31af7Sopenharmony_ci		case float
1399e5c31af7Sopenharmony_ci			version 300 es
1400e5c31af7Sopenharmony_ci			desc "varying of type float inside struct"
1401e5c31af7Sopenharmony_ci			values
1402e5c31af7Sopenharmony_ci			{
1403e5c31af7Sopenharmony_ci				input float in0		= [ -1.25 | -25.65 | 1.0 | 2.25 | 3.4 | 16.0 ];
1404e5c31af7Sopenharmony_ci				output float out0	= [ -1.25 | -25.65 | 1.0 | 2.25 | 3.4 | 16.0 ];
1405e5c31af7Sopenharmony_ci			}
1406e5c31af7Sopenharmony_ci			vertex ""
1407e5c31af7Sopenharmony_ci				#version 300 es
1408e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
1409e5c31af7Sopenharmony_ci				struct S { mediump float a; };
1410e5c31af7Sopenharmony_ci				out S var;
1411e5c31af7Sopenharmony_ci				void main()
1412e5c31af7Sopenharmony_ci				{
1413e5c31af7Sopenharmony_ci					var.a = in0;
1414e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
1415e5c31af7Sopenharmony_ci				}
1416e5c31af7Sopenharmony_ci			""
1417e5c31af7Sopenharmony_ci			fragment ""
1418e5c31af7Sopenharmony_ci				#version 300 es
1419e5c31af7Sopenharmony_ci				precision mediump float;
1420e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
1421e5c31af7Sopenharmony_ci				struct S { mediump float a; };
1422e5c31af7Sopenharmony_ci				in S var;
1423e5c31af7Sopenharmony_ci				void main()
1424e5c31af7Sopenharmony_ci				{
1425e5c31af7Sopenharmony_ci					out0 = var.a;
1426e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
1427e5c31af7Sopenharmony_ci				}
1428e5c31af7Sopenharmony_ci			""
1429e5c31af7Sopenharmony_ci		end
1430e5c31af7Sopenharmony_ci
1431e5c31af7Sopenharmony_ci		case vec2
1432e5c31af7Sopenharmony_ci			version 300 es
1433e5c31af7Sopenharmony_ci			desc "varying of type vec2 inside struct"
1434e5c31af7Sopenharmony_ci			values
1435e5c31af7Sopenharmony_ci			{
1436e5c31af7Sopenharmony_ci				input vec2 in0		= [ vec2(-1.25, 1.25) | vec2(-25.65, -7.25) | vec2(0.0, 1.0) | vec2(2.25, 2.25) | vec2(3.4, 9.5) | vec2(16.0, 32.0) ];
1437e5c31af7Sopenharmony_ci				output vec2 out0	= [ vec2(-1.25, 1.25) | vec2(-25.65, -7.25) | vec2(0.0, 1.0) | vec2(2.25, 2.25) | vec2(3.4, 9.5) | vec2(16.0, 32.0) ];
1438e5c31af7Sopenharmony_ci			}
1439e5c31af7Sopenharmony_ci			vertex ""
1440e5c31af7Sopenharmony_ci				#version 300 es
1441e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
1442e5c31af7Sopenharmony_ci				struct S { mediump vec2 a; };
1443e5c31af7Sopenharmony_ci				out S var;
1444e5c31af7Sopenharmony_ci				void main()
1445e5c31af7Sopenharmony_ci				{
1446e5c31af7Sopenharmony_ci					var.a = in0;
1447e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
1448e5c31af7Sopenharmony_ci				}
1449e5c31af7Sopenharmony_ci			""
1450e5c31af7Sopenharmony_ci			fragment ""
1451e5c31af7Sopenharmony_ci				#version 300 es
1452e5c31af7Sopenharmony_ci				precision mediump float;
1453e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
1454e5c31af7Sopenharmony_ci				struct S { mediump vec2 a; };
1455e5c31af7Sopenharmony_ci				in S var;
1456e5c31af7Sopenharmony_ci				void main()
1457e5c31af7Sopenharmony_ci				{
1458e5c31af7Sopenharmony_ci					out0 = var.a;
1459e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
1460e5c31af7Sopenharmony_ci				}
1461e5c31af7Sopenharmony_ci			""
1462e5c31af7Sopenharmony_ci		end
1463e5c31af7Sopenharmony_ci
1464e5c31af7Sopenharmony_ci		case vec3
1465e5c31af7Sopenharmony_ci			version 300 es
1466e5c31af7Sopenharmony_ci			desc "varying of type vec3 inside struct"
1467e5c31af7Sopenharmony_ci			values
1468e5c31af7Sopenharmony_ci			{
1469e5c31af7Sopenharmony_ci				input vec3 in0		= [ vec3(-1.25, 1.25, -9.5) | vec3(-25.65, -7.25, 14.21) | vec3(0.0, 1.0, -1.0) | vec3(2.25, 2.25, 22.5) | vec3(3.4, 9.5, 19.5) | vec3(16.0, 32.0, -64.0) ];
1470e5c31af7Sopenharmony_ci				output vec3 out0	= [ vec3(-1.25, 1.25, -9.5) | vec3(-25.65, -7.25, 14.21) | vec3(0.0, 1.0, -1.0) | vec3(2.25, 2.25, 22.5) | vec3(3.4, 9.5, 19.5) | vec3(16.0, 32.0, -64.0) ];
1471e5c31af7Sopenharmony_ci			}
1472e5c31af7Sopenharmony_ci			vertex ""
1473e5c31af7Sopenharmony_ci				#version 300 es
1474e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
1475e5c31af7Sopenharmony_ci				struct S { mediump vec3 a; };
1476e5c31af7Sopenharmony_ci				out S var;
1477e5c31af7Sopenharmony_ci				void main()
1478e5c31af7Sopenharmony_ci				{
1479e5c31af7Sopenharmony_ci					var.a = in0;
1480e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
1481e5c31af7Sopenharmony_ci				}
1482e5c31af7Sopenharmony_ci			""
1483e5c31af7Sopenharmony_ci			fragment ""
1484e5c31af7Sopenharmony_ci				#version 300 es
1485e5c31af7Sopenharmony_ci				precision mediump float;
1486e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
1487e5c31af7Sopenharmony_ci				struct S { mediump vec3 a; };
1488e5c31af7Sopenharmony_ci				in S var;
1489e5c31af7Sopenharmony_ci				void main()
1490e5c31af7Sopenharmony_ci				{
1491e5c31af7Sopenharmony_ci					out0 = var.a;
1492e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
1493e5c31af7Sopenharmony_ci				}
1494e5c31af7Sopenharmony_ci			""
1495e5c31af7Sopenharmony_ci		end
1496e5c31af7Sopenharmony_ci
1497e5c31af7Sopenharmony_ci		case vec4
1498e5c31af7Sopenharmony_ci			version 300 es
1499e5c31af7Sopenharmony_ci			desc "varying of type vec4 inside struct"
1500e5c31af7Sopenharmony_ci			values
1501e5c31af7Sopenharmony_ci			{
1502e5c31af7Sopenharmony_ci				input vec4 in0		= [ vec4(-1.25, 1.25, -9.5, -12.2) | vec4(-25.65, -7.25, 14.21, -77.7) | vec4(0.0, 1.0, -1.0, 2.0) | vec4(2.25, 2.25, 22.5, 225.0) | vec4(3.4, 9.5, 19.5, 29.5) | vec4(16.0, 32.0, -64.0, -128.0) ];
1503e5c31af7Sopenharmony_ci				output vec4 out0	= [ vec4(-1.25, 1.25, -9.5, -12.2) | vec4(-25.65, -7.25, 14.21, -77.7) | vec4(0.0, 1.0, -1.0, 2.0) | vec4(2.25, 2.25, 22.5, 225.0) | vec4(3.4, 9.5, 19.5, 29.5) | vec4(16.0, 32.0, -64.0, -128.0) ];
1504e5c31af7Sopenharmony_ci			}
1505e5c31af7Sopenharmony_ci			vertex ""
1506e5c31af7Sopenharmony_ci				#version 300 es
1507e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
1508e5c31af7Sopenharmony_ci				struct S { mediump vec4 a; };
1509e5c31af7Sopenharmony_ci				out S var;
1510e5c31af7Sopenharmony_ci				void main()
1511e5c31af7Sopenharmony_ci				{
1512e5c31af7Sopenharmony_ci					var.a = in0;
1513e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
1514e5c31af7Sopenharmony_ci				}
1515e5c31af7Sopenharmony_ci			""
1516e5c31af7Sopenharmony_ci			fragment ""
1517e5c31af7Sopenharmony_ci				#version 300 es
1518e5c31af7Sopenharmony_ci				precision mediump float;
1519e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
1520e5c31af7Sopenharmony_ci				struct S { mediump vec4 a; };
1521e5c31af7Sopenharmony_ci				in S var;
1522e5c31af7Sopenharmony_ci				void main()
1523e5c31af7Sopenharmony_ci				{
1524e5c31af7Sopenharmony_ci					out0 = var.a;
1525e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
1526e5c31af7Sopenharmony_ci				}
1527e5c31af7Sopenharmony_ci			""
1528e5c31af7Sopenharmony_ci		end
1529e5c31af7Sopenharmony_ci
1530e5c31af7Sopenharmony_ci		case mat2
1531e5c31af7Sopenharmony_ci			version 300 es
1532e5c31af7Sopenharmony_ci			desc "varying of type mat2 inside struct"
1533e5c31af7Sopenharmony_ci			values
1534e5c31af7Sopenharmony_ci			{
1535e5c31af7Sopenharmony_ci				input mat2 in0		= [ mat2(1.0, 1.0, 1.0, 1.0) | mat2(-1.25, 1.25, -9.5, -12.2) | mat2(-25.65, -7.25, 14.21, -77.7) | mat2(0.0, 1.0, -1.0, 2.0) | mat2(2.25, 2.25, 22.5, 225.0) | mat2(3.4, 9.5, 19.5, 29.5) | mat2(16.0, 32.0, -64.0, -128.0) ];
1536e5c31af7Sopenharmony_ci				output mat2 out0	= [ mat2(1.0, 1.0, 1.0, 1.0) | mat2(-1.25, 1.25, -9.5, -12.2) | mat2(-25.65, -7.25, 14.21, -77.7) | mat2(0.0, 1.0, -1.0, 2.0) | mat2(2.25, 2.25, 22.5, 225.0) | mat2(3.4, 9.5, 19.5, 29.5) | mat2(16.0, 32.0, -64.0, -128.0) ];
1537e5c31af7Sopenharmony_ci			}
1538e5c31af7Sopenharmony_ci			vertex ""
1539e5c31af7Sopenharmony_ci				#version 300 es
1540e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
1541e5c31af7Sopenharmony_ci				struct S { mediump mat2 a; };
1542e5c31af7Sopenharmony_ci				out S var;
1543e5c31af7Sopenharmony_ci				void main()
1544e5c31af7Sopenharmony_ci				{
1545e5c31af7Sopenharmony_ci					var.a = in0;
1546e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
1547e5c31af7Sopenharmony_ci				}
1548e5c31af7Sopenharmony_ci			""
1549e5c31af7Sopenharmony_ci			fragment ""
1550e5c31af7Sopenharmony_ci				#version 300 es
1551e5c31af7Sopenharmony_ci				precision mediump float;
1552e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
1553e5c31af7Sopenharmony_ci				struct S { mediump mat2 a; };
1554e5c31af7Sopenharmony_ci				in S var;
1555e5c31af7Sopenharmony_ci				void main()
1556e5c31af7Sopenharmony_ci				{
1557e5c31af7Sopenharmony_ci					out0 = var.a;
1558e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
1559e5c31af7Sopenharmony_ci				}
1560e5c31af7Sopenharmony_ci			""
1561e5c31af7Sopenharmony_ci		end
1562e5c31af7Sopenharmony_ci
1563e5c31af7Sopenharmony_ci		case mat2x3
1564e5c31af7Sopenharmony_ci			version 300 es
1565e5c31af7Sopenharmony_ci			desc "varying of type mat2x3 inside struct"
1566e5c31af7Sopenharmony_ci			values
1567e5c31af7Sopenharmony_ci			{
1568e5c31af7Sopenharmony_ci				input mat2x3 in0	= [ mat2x3(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25) ];
1569e5c31af7Sopenharmony_ci				output mat2x3 out0	= [ mat2x3(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25) ];
1570e5c31af7Sopenharmony_ci			}
1571e5c31af7Sopenharmony_ci			vertex ""
1572e5c31af7Sopenharmony_ci				#version 300 es
1573e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
1574e5c31af7Sopenharmony_ci				struct S { mediump mat2x3 a; };
1575e5c31af7Sopenharmony_ci				out S var;
1576e5c31af7Sopenharmony_ci				void main()
1577e5c31af7Sopenharmony_ci				{
1578e5c31af7Sopenharmony_ci					var.a = in0;
1579e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
1580e5c31af7Sopenharmony_ci				}
1581e5c31af7Sopenharmony_ci			""
1582e5c31af7Sopenharmony_ci			fragment ""
1583e5c31af7Sopenharmony_ci				#version 300 es
1584e5c31af7Sopenharmony_ci				precision mediump float;
1585e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
1586e5c31af7Sopenharmony_ci				struct S { mediump mat2x3 a; };
1587e5c31af7Sopenharmony_ci				in S var;
1588e5c31af7Sopenharmony_ci				void main()
1589e5c31af7Sopenharmony_ci				{
1590e5c31af7Sopenharmony_ci					out0 = var.a;
1591e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
1592e5c31af7Sopenharmony_ci				}
1593e5c31af7Sopenharmony_ci			""
1594e5c31af7Sopenharmony_ci		end
1595e5c31af7Sopenharmony_ci
1596e5c31af7Sopenharmony_ci		case mat2x4
1597e5c31af7Sopenharmony_ci			version 300 es
1598e5c31af7Sopenharmony_ci			desc "varying of type mat2x4 inside struct"
1599e5c31af7Sopenharmony_ci			values
1600e5c31af7Sopenharmony_ci			{
1601e5c31af7Sopenharmony_ci				input mat2x4 in0	= [ mat2x4(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7) ];
1602e5c31af7Sopenharmony_ci				output mat2x4 out0	= [ mat2x4(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7) ];
1603e5c31af7Sopenharmony_ci			}
1604e5c31af7Sopenharmony_ci			vertex ""
1605e5c31af7Sopenharmony_ci				#version 300 es
1606e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
1607e5c31af7Sopenharmony_ci				struct S { mediump mat2x4 a; };
1608e5c31af7Sopenharmony_ci				out S var;
1609e5c31af7Sopenharmony_ci				void main()
1610e5c31af7Sopenharmony_ci				{
1611e5c31af7Sopenharmony_ci					var.a = in0;
1612e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
1613e5c31af7Sopenharmony_ci				}
1614e5c31af7Sopenharmony_ci			""
1615e5c31af7Sopenharmony_ci			fragment ""
1616e5c31af7Sopenharmony_ci				#version 300 es
1617e5c31af7Sopenharmony_ci				precision mediump float;
1618e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
1619e5c31af7Sopenharmony_ci				struct S { mediump mat2x4 a; };
1620e5c31af7Sopenharmony_ci				in S var;
1621e5c31af7Sopenharmony_ci				void main()
1622e5c31af7Sopenharmony_ci				{
1623e5c31af7Sopenharmony_ci					out0 = var.a;
1624e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
1625e5c31af7Sopenharmony_ci				}
1626e5c31af7Sopenharmony_ci			""
1627e5c31af7Sopenharmony_ci		end
1628e5c31af7Sopenharmony_ci
1629e5c31af7Sopenharmony_ci		case mat3x2
1630e5c31af7Sopenharmony_ci			version 300 es
1631e5c31af7Sopenharmony_ci			desc "varying of type mat3x2 inside struct"
1632e5c31af7Sopenharmony_ci			values
1633e5c31af7Sopenharmony_ci			{
1634e5c31af7Sopenharmony_ci				input mat3x2 in0	= [ mat3x2(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25) ];
1635e5c31af7Sopenharmony_ci				output mat3x2 out0	= [ mat3x2(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25) ];
1636e5c31af7Sopenharmony_ci			}
1637e5c31af7Sopenharmony_ci			vertex ""
1638e5c31af7Sopenharmony_ci				#version 300 es
1639e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
1640e5c31af7Sopenharmony_ci				struct S { mediump mat3x2 a; };
1641e5c31af7Sopenharmony_ci				out S var;
1642e5c31af7Sopenharmony_ci				void main()
1643e5c31af7Sopenharmony_ci				{
1644e5c31af7Sopenharmony_ci					var.a = in0;
1645e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
1646e5c31af7Sopenharmony_ci				}
1647e5c31af7Sopenharmony_ci			""
1648e5c31af7Sopenharmony_ci			fragment ""
1649e5c31af7Sopenharmony_ci				#version 300 es
1650e5c31af7Sopenharmony_ci				precision mediump float;
1651e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
1652e5c31af7Sopenharmony_ci				struct S { mediump mat3x2 a; };
1653e5c31af7Sopenharmony_ci				in S var;
1654e5c31af7Sopenharmony_ci				void main()
1655e5c31af7Sopenharmony_ci				{
1656e5c31af7Sopenharmony_ci					out0 = var.a;
1657e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
1658e5c31af7Sopenharmony_ci				}
1659e5c31af7Sopenharmony_ci			""
1660e5c31af7Sopenharmony_ci		end
1661e5c31af7Sopenharmony_ci
1662e5c31af7Sopenharmony_ci		case mat3
1663e5c31af7Sopenharmony_ci			version 300 es
1664e5c31af7Sopenharmony_ci			desc "varying of type mat3 inside struct"
1665e5c31af7Sopenharmony_ci			values
1666e5c31af7Sopenharmony_ci			{
1667e5c31af7Sopenharmony_ci				input mat3 in0		= [ mat3(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7, 9.9) | mat3(0.0, 1.0, -1.0, 2.0, 2.25, 2.25, 22.5, 225.0, -9.9) | mat3(3.4, 9.5, 19.5, 29.5, 16.0, 32.0, -64.0, -128.0, 256.0) ];
1668e5c31af7Sopenharmony_ci				output mat3 out0	= [ mat3(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7, 9.9) | mat3(0.0, 1.0, -1.0, 2.0, 2.25, 2.25, 22.5, 225.0, -9.9) | mat3(3.4, 9.5, 19.5, 29.5, 16.0, 32.0, -64.0, -128.0, 256.0) ];
1669e5c31af7Sopenharmony_ci			}
1670e5c31af7Sopenharmony_ci			vertex ""
1671e5c31af7Sopenharmony_ci				#version 300 es
1672e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
1673e5c31af7Sopenharmony_ci				struct S { mediump mat3 a; };
1674e5c31af7Sopenharmony_ci				out S var;
1675e5c31af7Sopenharmony_ci				void main()
1676e5c31af7Sopenharmony_ci				{
1677e5c31af7Sopenharmony_ci					var.a = in0;
1678e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
1679e5c31af7Sopenharmony_ci				}
1680e5c31af7Sopenharmony_ci			""
1681e5c31af7Sopenharmony_ci			fragment ""
1682e5c31af7Sopenharmony_ci				#version 300 es
1683e5c31af7Sopenharmony_ci				precision mediump float;
1684e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
1685e5c31af7Sopenharmony_ci				struct S { mediump mat3 a; };
1686e5c31af7Sopenharmony_ci				in S var;
1687e5c31af7Sopenharmony_ci				void main()
1688e5c31af7Sopenharmony_ci				{
1689e5c31af7Sopenharmony_ci					out0 = var.a;
1690e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
1691e5c31af7Sopenharmony_ci				}
1692e5c31af7Sopenharmony_ci			""
1693e5c31af7Sopenharmony_ci		end
1694e5c31af7Sopenharmony_ci
1695e5c31af7Sopenharmony_ci		case mat3x4
1696e5c31af7Sopenharmony_ci			version 300 es
1697e5c31af7Sopenharmony_ci			desc "varying of type mat3x4 inside struct"
1698e5c31af7Sopenharmony_ci			values
1699e5c31af7Sopenharmony_ci			{
1700e5c31af7Sopenharmony_ci				input mat3x4 in0	= [ mat3x4(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7, 0.0, 1.0, -1.0, 2.0) ];
1701e5c31af7Sopenharmony_ci				output mat3x4 out0	= [ mat3x4(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7, 0.0, 1.0, -1.0, 2.0) ];
1702e5c31af7Sopenharmony_ci			}
1703e5c31af7Sopenharmony_ci			vertex ""
1704e5c31af7Sopenharmony_ci				#version 300 es
1705e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
1706e5c31af7Sopenharmony_ci				struct S { mediump mat3x4 a; };
1707e5c31af7Sopenharmony_ci				out S var;
1708e5c31af7Sopenharmony_ci				void main()
1709e5c31af7Sopenharmony_ci				{
1710e5c31af7Sopenharmony_ci					var.a = in0;
1711e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
1712e5c31af7Sopenharmony_ci				}
1713e5c31af7Sopenharmony_ci			""
1714e5c31af7Sopenharmony_ci			fragment ""
1715e5c31af7Sopenharmony_ci				#version 300 es
1716e5c31af7Sopenharmony_ci				precision mediump float;
1717e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
1718e5c31af7Sopenharmony_ci				struct S { mediump mat3x4 a; };
1719e5c31af7Sopenharmony_ci				in S var;
1720e5c31af7Sopenharmony_ci				void main()
1721e5c31af7Sopenharmony_ci				{
1722e5c31af7Sopenharmony_ci					out0 = var.a;
1723e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
1724e5c31af7Sopenharmony_ci				}
1725e5c31af7Sopenharmony_ci			""
1726e5c31af7Sopenharmony_ci		end
1727e5c31af7Sopenharmony_ci
1728e5c31af7Sopenharmony_ci		case mat4x2
1729e5c31af7Sopenharmony_ci			version 300 es
1730e5c31af7Sopenharmony_ci			desc "varying of type mat4x2 inside struct"
1731e5c31af7Sopenharmony_ci			values
1732e5c31af7Sopenharmony_ci			{
1733e5c31af7Sopenharmony_ci				input mat4x2 in0	= [ mat4x2(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7) ];
1734e5c31af7Sopenharmony_ci				output mat4x2 out0	= [ mat4x2(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7) ];
1735e5c31af7Sopenharmony_ci			}
1736e5c31af7Sopenharmony_ci			vertex ""
1737e5c31af7Sopenharmony_ci				#version 300 es
1738e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
1739e5c31af7Sopenharmony_ci				struct S { mediump mat4x2 a; };
1740e5c31af7Sopenharmony_ci				out S var;
1741e5c31af7Sopenharmony_ci				void main()
1742e5c31af7Sopenharmony_ci				{
1743e5c31af7Sopenharmony_ci					var.a = in0;
1744e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
1745e5c31af7Sopenharmony_ci				}
1746e5c31af7Sopenharmony_ci			""
1747e5c31af7Sopenharmony_ci			fragment ""
1748e5c31af7Sopenharmony_ci				#version 300 es
1749e5c31af7Sopenharmony_ci				precision mediump float;
1750e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
1751e5c31af7Sopenharmony_ci				struct S { mediump mat4x2 a; };
1752e5c31af7Sopenharmony_ci				in S var;
1753e5c31af7Sopenharmony_ci				void main()
1754e5c31af7Sopenharmony_ci				{
1755e5c31af7Sopenharmony_ci					out0 = var.a;
1756e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
1757e5c31af7Sopenharmony_ci				}
1758e5c31af7Sopenharmony_ci			""
1759e5c31af7Sopenharmony_ci		end
1760e5c31af7Sopenharmony_ci
1761e5c31af7Sopenharmony_ci		case mat4x3
1762e5c31af7Sopenharmony_ci			version 300 es
1763e5c31af7Sopenharmony_ci			desc "varying of type mat4x3 inside struct"
1764e5c31af7Sopenharmony_ci			values
1765e5c31af7Sopenharmony_ci			{
1766e5c31af7Sopenharmony_ci				input mat4x3 in0	= [ mat4x3(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7, 0.0, 1.0, -1.0, 2.0) ];
1767e5c31af7Sopenharmony_ci				output mat4x3 out0	= [ mat4x3(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7, 0.0, 1.0, -1.0, 2.0) ];
1768e5c31af7Sopenharmony_ci			}
1769e5c31af7Sopenharmony_ci			vertex ""
1770e5c31af7Sopenharmony_ci				#version 300 es
1771e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
1772e5c31af7Sopenharmony_ci				struct S { mediump mat4x3 a; };
1773e5c31af7Sopenharmony_ci				out S var;
1774e5c31af7Sopenharmony_ci				void main()
1775e5c31af7Sopenharmony_ci				{
1776e5c31af7Sopenharmony_ci					var.a = in0;
1777e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
1778e5c31af7Sopenharmony_ci				}
1779e5c31af7Sopenharmony_ci			""
1780e5c31af7Sopenharmony_ci			fragment ""
1781e5c31af7Sopenharmony_ci				#version 300 es
1782e5c31af7Sopenharmony_ci				precision mediump float;
1783e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
1784e5c31af7Sopenharmony_ci				struct S { mediump mat4x3 a; };
1785e5c31af7Sopenharmony_ci				in S var;
1786e5c31af7Sopenharmony_ci				void main()
1787e5c31af7Sopenharmony_ci				{
1788e5c31af7Sopenharmony_ci					out0 = var.a;
1789e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
1790e5c31af7Sopenharmony_ci				}
1791e5c31af7Sopenharmony_ci			""
1792e5c31af7Sopenharmony_ci		end
1793e5c31af7Sopenharmony_ci
1794e5c31af7Sopenharmony_ci		case mat4
1795e5c31af7Sopenharmony_ci			version 300 es
1796e5c31af7Sopenharmony_ci			desc "varying of type mat4 inside struct"
1797e5c31af7Sopenharmony_ci			values
1798e5c31af7Sopenharmony_ci			{
1799e5c31af7Sopenharmony_ci				input mat4 in0		= [ mat4(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7, 0.0, 1.0, -1.0, 2.0, 2.25, 2.25, 22.5, 225.0) ];
1800e5c31af7Sopenharmony_ci				output mat4 out0	= [ mat4(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7, 0.0, 1.0, -1.0, 2.0, 2.25, 2.25, 22.5, 225.0) ];
1801e5c31af7Sopenharmony_ci			}
1802e5c31af7Sopenharmony_ci			vertex ""
1803e5c31af7Sopenharmony_ci				#version 300 es
1804e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
1805e5c31af7Sopenharmony_ci				struct S { mediump mat4 a; };
1806e5c31af7Sopenharmony_ci				out S var;
1807e5c31af7Sopenharmony_ci				void main()
1808e5c31af7Sopenharmony_ci				{
1809e5c31af7Sopenharmony_ci					var.a = in0;
1810e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
1811e5c31af7Sopenharmony_ci				}
1812e5c31af7Sopenharmony_ci			""
1813e5c31af7Sopenharmony_ci			fragment ""
1814e5c31af7Sopenharmony_ci				#version 300 es
1815e5c31af7Sopenharmony_ci				precision mediump float;
1816e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
1817e5c31af7Sopenharmony_ci				struct S { mediump mat4 a; };
1818e5c31af7Sopenharmony_ci				in S var;
1819e5c31af7Sopenharmony_ci				void main()
1820e5c31af7Sopenharmony_ci				{
1821e5c31af7Sopenharmony_ci					out0 = var.a;
1822e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
1823e5c31af7Sopenharmony_ci				}
1824e5c31af7Sopenharmony_ci			""
1825e5c31af7Sopenharmony_ci		end
1826e5c31af7Sopenharmony_ci
1827e5c31af7Sopenharmony_ci		case int
1828e5c31af7Sopenharmony_ci			version 300 es
1829e5c31af7Sopenharmony_ci			desc "varying of type int inside struct"
1830e5c31af7Sopenharmony_ci			values
1831e5c31af7Sopenharmony_ci			{
1832e5c31af7Sopenharmony_ci				input int in0		= [ -1 | -25 | 1 | 2 | 3 | 16 ];
1833e5c31af7Sopenharmony_ci				output int out0		= [ -1 | -25 | 1 | 2 | 3 | 16 ];
1834e5c31af7Sopenharmony_ci			}
1835e5c31af7Sopenharmony_ci			vertex ""
1836e5c31af7Sopenharmony_ci				#version 300 es
1837e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
1838e5c31af7Sopenharmony_ci				struct S { mediump int a; };
1839e5c31af7Sopenharmony_ci				flat out S var;
1840e5c31af7Sopenharmony_ci				void main()
1841e5c31af7Sopenharmony_ci				{
1842e5c31af7Sopenharmony_ci					${VERTEX_SETUP}
1843e5c31af7Sopenharmony_ci					var.a = in0;
1844e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
1845e5c31af7Sopenharmony_ci				}
1846e5c31af7Sopenharmony_ci			""
1847e5c31af7Sopenharmony_ci			fragment ""
1848e5c31af7Sopenharmony_ci				#version 300 es
1849e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
1850e5c31af7Sopenharmony_ci				struct S { mediump int a; };
1851e5c31af7Sopenharmony_ci				flat in S var;
1852e5c31af7Sopenharmony_ci				void main()
1853e5c31af7Sopenharmony_ci				{
1854e5c31af7Sopenharmony_ci					out0 = var.a;
1855e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
1856e5c31af7Sopenharmony_ci				}
1857e5c31af7Sopenharmony_ci			""
1858e5c31af7Sopenharmony_ci		end
1859e5c31af7Sopenharmony_ci
1860e5c31af7Sopenharmony_ci		case ivec2
1861e5c31af7Sopenharmony_ci			version 300 es
1862e5c31af7Sopenharmony_ci			desc "varying of type ivec2 inside struct"
1863e5c31af7Sopenharmony_ci			values
1864e5c31af7Sopenharmony_ci			{
1865e5c31af7Sopenharmony_ci				input ivec2 in0		= [ ivec2(-1, 1) | ivec2(-25, 25) | ivec2(1, 1) | ivec2(2, 3) | ivec2(16, 17) ];
1866e5c31af7Sopenharmony_ci				output ivec2 out0	= [ ivec2(-1, 1) | ivec2(-25, 25) | ivec2(1, 1) | ivec2(2, 3) | ivec2(16, 17) ];
1867e5c31af7Sopenharmony_ci			}
1868e5c31af7Sopenharmony_ci			vertex ""
1869e5c31af7Sopenharmony_ci				#version 300 es
1870e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
1871e5c31af7Sopenharmony_ci				struct S { mediump ivec2 a; };
1872e5c31af7Sopenharmony_ci				flat out S var;
1873e5c31af7Sopenharmony_ci				void main()
1874e5c31af7Sopenharmony_ci				{
1875e5c31af7Sopenharmony_ci					${VERTEX_SETUP}
1876e5c31af7Sopenharmony_ci					var.a = in0;
1877e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
1878e5c31af7Sopenharmony_ci				}
1879e5c31af7Sopenharmony_ci			""
1880e5c31af7Sopenharmony_ci			fragment ""
1881e5c31af7Sopenharmony_ci				#version 300 es
1882e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
1883e5c31af7Sopenharmony_ci				struct S { mediump ivec2 a; };
1884e5c31af7Sopenharmony_ci				flat in S var;
1885e5c31af7Sopenharmony_ci				void main()
1886e5c31af7Sopenharmony_ci				{
1887e5c31af7Sopenharmony_ci					out0 = var.a;
1888e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
1889e5c31af7Sopenharmony_ci				}
1890e5c31af7Sopenharmony_ci			""
1891e5c31af7Sopenharmony_ci		end
1892e5c31af7Sopenharmony_ci
1893e5c31af7Sopenharmony_ci		case ivec3
1894e5c31af7Sopenharmony_ci			version 300 es
1895e5c31af7Sopenharmony_ci			desc "varying of type ivec3 inside struct"
1896e5c31af7Sopenharmony_ci			values
1897e5c31af7Sopenharmony_ci			{
1898e5c31af7Sopenharmony_ci				input ivec3 in0		= [ ivec3(-1, 1, -2) | ivec3(-25, 25, -3) | ivec3(1, 1, 1) | ivec3(2, 3, 4) | ivec3(16, 17, 18) ];
1899e5c31af7Sopenharmony_ci				output ivec3 out0	= [ ivec3(-1, 1, -2) | ivec3(-25, 25, -3) | ivec3(1, 1, 1) | ivec3(2, 3, 4) | ivec3(16, 17, 18) ];
1900e5c31af7Sopenharmony_ci			}
1901e5c31af7Sopenharmony_ci			vertex ""
1902e5c31af7Sopenharmony_ci				#version 300 es
1903e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
1904e5c31af7Sopenharmony_ci				struct S { mediump ivec3 a; };
1905e5c31af7Sopenharmony_ci				flat out S var;
1906e5c31af7Sopenharmony_ci				void main()
1907e5c31af7Sopenharmony_ci				{
1908e5c31af7Sopenharmony_ci					${VERTEX_SETUP}
1909e5c31af7Sopenharmony_ci					var.a = in0;
1910e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
1911e5c31af7Sopenharmony_ci				}
1912e5c31af7Sopenharmony_ci			""
1913e5c31af7Sopenharmony_ci			fragment ""
1914e5c31af7Sopenharmony_ci				#version 300 es
1915e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
1916e5c31af7Sopenharmony_ci				struct S { mediump ivec3 a; };
1917e5c31af7Sopenharmony_ci				flat in S var;
1918e5c31af7Sopenharmony_ci				void main()
1919e5c31af7Sopenharmony_ci				{
1920e5c31af7Sopenharmony_ci					out0 = var.a;
1921e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
1922e5c31af7Sopenharmony_ci				}
1923e5c31af7Sopenharmony_ci			""
1924e5c31af7Sopenharmony_ci		end
1925e5c31af7Sopenharmony_ci
1926e5c31af7Sopenharmony_ci		case ivec4
1927e5c31af7Sopenharmony_ci			version 300 es
1928e5c31af7Sopenharmony_ci			desc "varying of type ivec4 inside struct"
1929e5c31af7Sopenharmony_ci			values
1930e5c31af7Sopenharmony_ci			{
1931e5c31af7Sopenharmony_ci				input ivec4 in0		= [ ivec4(-1, 1, -2, 2) | ivec4(-25, 25, -3, 3) | ivec4(1, 1, 1, 1) | ivec4(2, 3, 4, 5) | ivec4(16, 17, 18, 19) ];
1932e5c31af7Sopenharmony_ci				output ivec4 out0	= [ ivec4(-1, 1, -2, 2) | ivec4(-25, 25, -3, 3) | ivec4(1, 1, 1, 1) | ivec4(2, 3, 4, 5) | ivec4(16, 17, 18, 19) ];
1933e5c31af7Sopenharmony_ci			}
1934e5c31af7Sopenharmony_ci			vertex ""
1935e5c31af7Sopenharmony_ci				#version 300 es
1936e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
1937e5c31af7Sopenharmony_ci				struct S { mediump ivec4 a; };
1938e5c31af7Sopenharmony_ci				flat out S var;
1939e5c31af7Sopenharmony_ci				void main()
1940e5c31af7Sopenharmony_ci				{
1941e5c31af7Sopenharmony_ci					${VERTEX_SETUP}
1942e5c31af7Sopenharmony_ci					var.a = in0;
1943e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
1944e5c31af7Sopenharmony_ci				}
1945e5c31af7Sopenharmony_ci			""
1946e5c31af7Sopenharmony_ci			fragment ""
1947e5c31af7Sopenharmony_ci				#version 300 es
1948e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
1949e5c31af7Sopenharmony_ci				struct S { mediump ivec4 a; };
1950e5c31af7Sopenharmony_ci				flat in S var;
1951e5c31af7Sopenharmony_ci				void main()
1952e5c31af7Sopenharmony_ci				{
1953e5c31af7Sopenharmony_ci					out0 = var.a;
1954e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
1955e5c31af7Sopenharmony_ci				}
1956e5c31af7Sopenharmony_ci			""
1957e5c31af7Sopenharmony_ci		end
1958e5c31af7Sopenharmony_ci
1959e5c31af7Sopenharmony_ci		case uint
1960e5c31af7Sopenharmony_ci			version 300 es
1961e5c31af7Sopenharmony_ci			desc "varying of type uint in struct"
1962e5c31af7Sopenharmony_ci			values
1963e5c31af7Sopenharmony_ci			{
1964e5c31af7Sopenharmony_ci				input uint in0			= [ 1 | 2 | 3 | 16 ];
1965e5c31af7Sopenharmony_ci				output uint out0		= [ 1 | 2 | 3 | 16 ];
1966e5c31af7Sopenharmony_ci			}
1967e5c31af7Sopenharmony_ci			vertex ""
1968e5c31af7Sopenharmony_ci				#version 300 es
1969e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
1970e5c31af7Sopenharmony_ci				struct S { mediump uint a; };
1971e5c31af7Sopenharmony_ci				flat out S var;
1972e5c31af7Sopenharmony_ci				void main()
1973e5c31af7Sopenharmony_ci				{
1974e5c31af7Sopenharmony_ci					${VERTEX_SETUP}
1975e5c31af7Sopenharmony_ci					var.a = in0;
1976e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
1977e5c31af7Sopenharmony_ci				}
1978e5c31af7Sopenharmony_ci			""
1979e5c31af7Sopenharmony_ci			fragment ""
1980e5c31af7Sopenharmony_ci				#version 300 es
1981e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
1982e5c31af7Sopenharmony_ci				struct S { mediump uint a; };
1983e5c31af7Sopenharmony_ci				flat in S var;
1984e5c31af7Sopenharmony_ci				void main()
1985e5c31af7Sopenharmony_ci				{
1986e5c31af7Sopenharmony_ci					out0 = var.a;
1987e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
1988e5c31af7Sopenharmony_ci				}
1989e5c31af7Sopenharmony_ci			""
1990e5c31af7Sopenharmony_ci		end
1991e5c31af7Sopenharmony_ci
1992e5c31af7Sopenharmony_ci		case uvec2
1993e5c31af7Sopenharmony_ci			version 300 es
1994e5c31af7Sopenharmony_ci			desc "varying of type uvec2 inside struct"
1995e5c31af7Sopenharmony_ci			values
1996e5c31af7Sopenharmony_ci			{
1997e5c31af7Sopenharmony_ci				input uvec2 in0		= [ uvec2(1, 1) | uvec2(25, 25) | uvec2(1, 1) | uvec2(2, 3) | uvec2(16, 17) ];
1998e5c31af7Sopenharmony_ci				output uvec2 out0	= [ uvec2(1, 1) | uvec2(25, 25) | uvec2(1, 1) | uvec2(2, 3) | uvec2(16, 17) ];
1999e5c31af7Sopenharmony_ci			}
2000e5c31af7Sopenharmony_ci			vertex ""
2001e5c31af7Sopenharmony_ci				#version 300 es
2002e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
2003e5c31af7Sopenharmony_ci				struct S { mediump uvec2 a; };
2004e5c31af7Sopenharmony_ci				flat out S var;
2005e5c31af7Sopenharmony_ci				void main()
2006e5c31af7Sopenharmony_ci				{
2007e5c31af7Sopenharmony_ci					${VERTEX_SETUP}
2008e5c31af7Sopenharmony_ci					var.a = in0;
2009e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
2010e5c31af7Sopenharmony_ci				}
2011e5c31af7Sopenharmony_ci			""
2012e5c31af7Sopenharmony_ci			fragment ""
2013e5c31af7Sopenharmony_ci				#version 300 es
2014e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
2015e5c31af7Sopenharmony_ci				struct S { mediump uvec2 a; };
2016e5c31af7Sopenharmony_ci				flat in S var;
2017e5c31af7Sopenharmony_ci				void main()
2018e5c31af7Sopenharmony_ci				{
2019e5c31af7Sopenharmony_ci					out0 = var.a;
2020e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
2021e5c31af7Sopenharmony_ci				}
2022e5c31af7Sopenharmony_ci			""
2023e5c31af7Sopenharmony_ci		end
2024e5c31af7Sopenharmony_ci
2025e5c31af7Sopenharmony_ci		case uvec3
2026e5c31af7Sopenharmony_ci			version 300 es
2027e5c31af7Sopenharmony_ci			desc "varying of type uvec3 inside struct"
2028e5c31af7Sopenharmony_ci			values
2029e5c31af7Sopenharmony_ci			{
2030e5c31af7Sopenharmony_ci				input uvec3 in0		= [ uvec3(1, 1, 2) | uvec3(25, 25, 3) | uvec3(1, 1, 1) | uvec3(2, 3, 4) | uvec3(16, 17, 18) ];
2031e5c31af7Sopenharmony_ci				output uvec3 out0	= [ uvec3(1, 1, 2) | uvec3(25, 25, 3) | uvec3(1, 1, 1) | uvec3(2, 3, 4) | uvec3(16, 17, 18) ];
2032e5c31af7Sopenharmony_ci			}
2033e5c31af7Sopenharmony_ci			vertex ""
2034e5c31af7Sopenharmony_ci				#version 300 es
2035e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
2036e5c31af7Sopenharmony_ci				struct S { mediump uvec3 a; };
2037e5c31af7Sopenharmony_ci				flat out S var;
2038e5c31af7Sopenharmony_ci				void main()
2039e5c31af7Sopenharmony_ci				{
2040e5c31af7Sopenharmony_ci					${VERTEX_SETUP}
2041e5c31af7Sopenharmony_ci					var.a = in0;
2042e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
2043e5c31af7Sopenharmony_ci				}
2044e5c31af7Sopenharmony_ci			""
2045e5c31af7Sopenharmony_ci			fragment ""
2046e5c31af7Sopenharmony_ci				#version 300 es
2047e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
2048e5c31af7Sopenharmony_ci				struct S { mediump uvec3 a; };
2049e5c31af7Sopenharmony_ci				flat in S var;
2050e5c31af7Sopenharmony_ci				void main()
2051e5c31af7Sopenharmony_ci				{
2052e5c31af7Sopenharmony_ci					out0 = var.a;
2053e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
2054e5c31af7Sopenharmony_ci				}
2055e5c31af7Sopenharmony_ci			""
2056e5c31af7Sopenharmony_ci		end
2057e5c31af7Sopenharmony_ci
2058e5c31af7Sopenharmony_ci		case uvec4
2059e5c31af7Sopenharmony_ci			version 300 es
2060e5c31af7Sopenharmony_ci			desc "varying of type uvec4 inside struct"
2061e5c31af7Sopenharmony_ci			values
2062e5c31af7Sopenharmony_ci			{
2063e5c31af7Sopenharmony_ci				input uvec4 in0		= [ uvec4(1, 1, 2, 2) | uvec4(25, 25, 3, 3) | uvec4(1, 1, 1, 1) | uvec4(2, 3, 4, 5) | uvec4(16, 17, 18, 19) ];
2064e5c31af7Sopenharmony_ci				output uvec4 out0	= [ uvec4(1, 1, 2, 2) | uvec4(25, 25, 3, 3) | uvec4(1, 1, 1, 1) | uvec4(2, 3, 4, 5) | uvec4(16, 17, 18, 19) ];
2065e5c31af7Sopenharmony_ci			}
2066e5c31af7Sopenharmony_ci			vertex ""
2067e5c31af7Sopenharmony_ci				#version 300 es
2068e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
2069e5c31af7Sopenharmony_ci				struct S { mediump uvec4 a; };
2070e5c31af7Sopenharmony_ci				flat out S var;
2071e5c31af7Sopenharmony_ci				void main()
2072e5c31af7Sopenharmony_ci				{
2073e5c31af7Sopenharmony_ci					${VERTEX_SETUP}
2074e5c31af7Sopenharmony_ci					var.a = in0;
2075e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
2076e5c31af7Sopenharmony_ci				}
2077e5c31af7Sopenharmony_ci			""
2078e5c31af7Sopenharmony_ci			fragment ""
2079e5c31af7Sopenharmony_ci				#version 300 es
2080e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
2081e5c31af7Sopenharmony_ci				struct S { mediump uvec4 a; };
2082e5c31af7Sopenharmony_ci				flat in S var;
2083e5c31af7Sopenharmony_ci				void main()
2084e5c31af7Sopenharmony_ci				{
2085e5c31af7Sopenharmony_ci					out0 = var.a;
2086e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
2087e5c31af7Sopenharmony_ci				}
2088e5c31af7Sopenharmony_ci			""
2089e5c31af7Sopenharmony_ci		end
2090e5c31af7Sopenharmony_ci
2091e5c31af7Sopenharmony_ci		case float_vec3
2092e5c31af7Sopenharmony_ci			version 300 es
2093e5c31af7Sopenharmony_ci			desc "varyings of type float and vec3 inside struct"
2094e5c31af7Sopenharmony_ci			values
2095e5c31af7Sopenharmony_ci			{
2096e5c31af7Sopenharmony_ci				input float in0		= [ -1.25 | -25.65 | 1.0 | 2.25 | 3.4 | 16.0 ];
2097e5c31af7Sopenharmony_ci				output float out0	= [ -1.25 | -25.65 | 1.0 | 2.25 | 3.4 | 16.0 ];
2098e5c31af7Sopenharmony_ci				input vec3 in1		= [ vec3(-1.25, 1.25, -9.5) | vec3(-25.65, -7.25, 14.21) | vec3(0.0, 1.0, -1.0) | vec3(2.25, 2.25, 22.5) | vec3(3.4, 9.5, 19.5) | vec3(16.0, 32.0, -64.0) ];
2099e5c31af7Sopenharmony_ci				output vec3 out1	= [ vec3(-1.25, 1.25, -9.5) | vec3(-25.65, -7.25, 14.21) | vec3(0.0, 1.0, -1.0) | vec3(2.25, 2.25, 22.5) | vec3(3.4, 9.5, 19.5) | vec3(16.0, 32.0, -64.0) ];
2100e5c31af7Sopenharmony_ci			}
2101e5c31af7Sopenharmony_ci			vertex ""
2102e5c31af7Sopenharmony_ci				#version 300 es
2103e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
2104e5c31af7Sopenharmony_ci				struct S { mediump float a; highp vec3 b; };
2105e5c31af7Sopenharmony_ci				out S var;
2106e5c31af7Sopenharmony_ci				void main()
2107e5c31af7Sopenharmony_ci				{
2108e5c31af7Sopenharmony_ci					var.a = in0;
2109e5c31af7Sopenharmony_ci					var.b = in1;
2110e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
2111e5c31af7Sopenharmony_ci				}
2112e5c31af7Sopenharmony_ci			""
2113e5c31af7Sopenharmony_ci			fragment ""
2114e5c31af7Sopenharmony_ci				#version 300 es
2115e5c31af7Sopenharmony_ci				precision mediump float;
2116e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
2117e5c31af7Sopenharmony_ci				struct S { mediump float a; highp vec3 b; };
2118e5c31af7Sopenharmony_ci				in S var;
2119e5c31af7Sopenharmony_ci				void main()
2120e5c31af7Sopenharmony_ci				{
2121e5c31af7Sopenharmony_ci					out0 = var.a;
2122e5c31af7Sopenharmony_ci					out1 = var.b;
2123e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
2124e5c31af7Sopenharmony_ci				}
2125e5c31af7Sopenharmony_ci			""
2126e5c31af7Sopenharmony_ci		end
2127e5c31af7Sopenharmony_ci
2128e5c31af7Sopenharmony_ci		case float_uvec2_vec3
2129e5c31af7Sopenharmony_ci			version 300 es
2130e5c31af7Sopenharmony_ci			desc "varyings of type float and vec3 inside struct"
2131e5c31af7Sopenharmony_ci			values
2132e5c31af7Sopenharmony_ci			{
2133e5c31af7Sopenharmony_ci				input float in0		= [ -1.25 | -25.65 | 1.0 | 2.25 | 3.4 | 16.0 ];
2134e5c31af7Sopenharmony_ci				output float out0	= [ -1.25 | -25.65 | 1.0 | 2.25 | 3.4 | 16.0 ];
2135e5c31af7Sopenharmony_ci				input uvec2 in1		= [ uvec2(1, 1) | uvec2(25, 25) | uvec2(1, 1) | uvec2(2, 3) | uvec2(16, 17) | uvec2(8, 7) ];
2136e5c31af7Sopenharmony_ci				output uvec2 out1	= [ uvec2(1, 1) | uvec2(25, 25) | uvec2(1, 1) | uvec2(2, 3) | uvec2(16, 17) | uvec2(8, 7) ];
2137e5c31af7Sopenharmony_ci				input vec3 in2		= [ vec3(-1.25, 1.25, -9.5) | vec3(-25.65, -7.25, 14.21) | vec3(0.0, 1.0, -1.0) | vec3(2.25, 2.25, 22.5) | vec3(3.4, 9.5, 19.5) | vec3(16.0, 32.0, -64.0) ];
2138e5c31af7Sopenharmony_ci				output vec3 out2	= [ vec3(-1.25, 1.25, -9.5) | vec3(-25.65, -7.25, 14.21) | vec3(0.0, 1.0, -1.0) | vec3(2.25, 2.25, 22.5) | vec3(3.4, 9.5, 19.5) | vec3(16.0, 32.0, -64.0) ];
2139e5c31af7Sopenharmony_ci			}
2140e5c31af7Sopenharmony_ci			vertex ""
2141e5c31af7Sopenharmony_ci				#version 300 es
2142e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
2143e5c31af7Sopenharmony_ci				struct S { mediump float a; highp uvec2 b; highp vec3 c; };
2144e5c31af7Sopenharmony_ci				flat out S var;
2145e5c31af7Sopenharmony_ci				void main()
2146e5c31af7Sopenharmony_ci				{
2147e5c31af7Sopenharmony_ci					${VERTEX_SETUP}
2148e5c31af7Sopenharmony_ci					var.a = in0;
2149e5c31af7Sopenharmony_ci					var.b = in1;
2150e5c31af7Sopenharmony_ci					var.c = in2;
2151e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
2152e5c31af7Sopenharmony_ci				}
2153e5c31af7Sopenharmony_ci			""
2154e5c31af7Sopenharmony_ci			fragment ""
2155e5c31af7Sopenharmony_ci				#version 300 es
2156e5c31af7Sopenharmony_ci				precision mediump float;
2157e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
2158e5c31af7Sopenharmony_ci				struct S { mediump float a; highp uvec2 b; highp vec3 c; };
2159e5c31af7Sopenharmony_ci				flat in S var;
2160e5c31af7Sopenharmony_ci				void main()
2161e5c31af7Sopenharmony_ci				{
2162e5c31af7Sopenharmony_ci					out0 = var.a;
2163e5c31af7Sopenharmony_ci					out1 = var.b;
2164e5c31af7Sopenharmony_ci					out2 = var.c;
2165e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
2166e5c31af7Sopenharmony_ci				}
2167e5c31af7Sopenharmony_ci			""
2168e5c31af7Sopenharmony_ci		end
2169e5c31af7Sopenharmony_ci	end
2170e5c31af7Sopenharmony_ci
2171e5c31af7Sopenharmony_ci	group interpolation "Varying interpolation modes"
2172e5c31af7Sopenharmony_ci		case smooth
2173e5c31af7Sopenharmony_ci			version 300 es
2174e5c31af7Sopenharmony_ci			desc "varying of type vec4"
2175e5c31af7Sopenharmony_ci			values
2176e5c31af7Sopenharmony_ci			{
2177e5c31af7Sopenharmony_ci				input vec4 in0		= [ vec4(-1.25, 1.25, -9.5, -12.2) | vec4(-25.65, -7.25, 14.21, -77.7) | vec4(0.0, 1.0, -1.0, 2.0) | vec4(2.25, 2.25, 22.5, 225.0) | vec4(3.4, 9.5, 19.5, 29.5) | vec4(16.0, 32.0, -64.0, -128.0) ];
2178e5c31af7Sopenharmony_ci				output vec4 out0	= [ vec4(-1.25, 1.25, -9.5, -12.2) | vec4(-25.65, -7.25, 14.21, -77.7) | vec4(0.0, 1.0, -1.0, 2.0) | vec4(2.25, 2.25, 22.5, 225.0) | vec4(3.4, 9.5, 19.5, 29.5) | vec4(16.0, 32.0, -64.0, -128.0) ];
2179e5c31af7Sopenharmony_ci			}
2180e5c31af7Sopenharmony_ci			vertex ""
2181e5c31af7Sopenharmony_ci				#version 300 es
2182e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
2183e5c31af7Sopenharmony_ci				smooth out mediump vec4 var;
2184e5c31af7Sopenharmony_ci				void main()
2185e5c31af7Sopenharmony_ci				{
2186e5c31af7Sopenharmony_ci					var = in0;
2187e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
2188e5c31af7Sopenharmony_ci				}
2189e5c31af7Sopenharmony_ci			""
2190e5c31af7Sopenharmony_ci			fragment ""
2191e5c31af7Sopenharmony_ci				#version 300 es
2192e5c31af7Sopenharmony_ci				precision mediump float;
2193e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
2194e5c31af7Sopenharmony_ci				smooth in vec4 var;
2195e5c31af7Sopenharmony_ci				void main()
2196e5c31af7Sopenharmony_ci				{
2197e5c31af7Sopenharmony_ci					out0 = var;
2198e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
2199e5c31af7Sopenharmony_ci				}
2200e5c31af7Sopenharmony_ci			""
2201e5c31af7Sopenharmony_ci		end
2202e5c31af7Sopenharmony_ci
2203e5c31af7Sopenharmony_ci		case centroid
2204e5c31af7Sopenharmony_ci			version 300 es
2205e5c31af7Sopenharmony_ci			desc "varying of type vec4"
2206e5c31af7Sopenharmony_ci			values
2207e5c31af7Sopenharmony_ci			{
2208e5c31af7Sopenharmony_ci				input vec4 in0		= [ vec4(-1.25, 1.25, -9.5, -12.2) | vec4(-25.65, -7.25, 14.21, -77.7) | vec4(0.0, 1.0, -1.0, 2.0) | vec4(2.25, 2.25, 22.5, 225.0) | vec4(3.4, 9.5, 19.5, 29.5) | vec4(16.0, 32.0, -64.0, -128.0) ];
2209e5c31af7Sopenharmony_ci				output vec4 out0	= [ vec4(-1.25, 1.25, -9.5, -12.2) | vec4(-25.65, -7.25, 14.21, -77.7) | vec4(0.0, 1.0, -1.0, 2.0) | vec4(2.25, 2.25, 22.5, 225.0) | vec4(3.4, 9.5, 19.5, 29.5) | vec4(16.0, 32.0, -64.0, -128.0) ];
2210e5c31af7Sopenharmony_ci			}
2211e5c31af7Sopenharmony_ci			vertex ""
2212e5c31af7Sopenharmony_ci				#version 300 es
2213e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
2214e5c31af7Sopenharmony_ci				centroid out mediump vec4 var;
2215e5c31af7Sopenharmony_ci				void main()
2216e5c31af7Sopenharmony_ci				{
2217e5c31af7Sopenharmony_ci					var = in0;
2218e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
2219e5c31af7Sopenharmony_ci				}
2220e5c31af7Sopenharmony_ci			""
2221e5c31af7Sopenharmony_ci			fragment ""
2222e5c31af7Sopenharmony_ci				#version 300 es
2223e5c31af7Sopenharmony_ci				precision mediump float;
2224e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
2225e5c31af7Sopenharmony_ci				centroid in vec4 var;
2226e5c31af7Sopenharmony_ci				void main()
2227e5c31af7Sopenharmony_ci				{
2228e5c31af7Sopenharmony_ci					out0 = var;
2229e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
2230e5c31af7Sopenharmony_ci				}
2231e5c31af7Sopenharmony_ci			""
2232e5c31af7Sopenharmony_ci		end
2233e5c31af7Sopenharmony_ci
2234e5c31af7Sopenharmony_ci		case flat
2235e5c31af7Sopenharmony_ci			version 300 es
2236e5c31af7Sopenharmony_ci			desc "varying of type vec4"
2237e5c31af7Sopenharmony_ci			values
2238e5c31af7Sopenharmony_ci			{
2239e5c31af7Sopenharmony_ci				input vec4 in0		= [ vec4(-1.25, 1.25, -9.5, -12.2) | vec4(-25.65, -7.25, 14.21, -77.7) | vec4(0.0, 1.0, -1.0, 2.0) | vec4(2.25, 2.25, 22.5, 225.0) | vec4(3.4, 9.5, 19.5, 29.5) | vec4(16.0, 32.0, -64.0, -128.0) ];
2240e5c31af7Sopenharmony_ci				output vec4 out0	= [ vec4(-1.25, 1.25, -9.5, -12.2) | vec4(-25.65, -7.25, 14.21, -77.7) | vec4(0.0, 1.0, -1.0, 2.0) | vec4(2.25, 2.25, 22.5, 225.0) | vec4(3.4, 9.5, 19.5, 29.5) | vec4(16.0, 32.0, -64.0, -128.0) ];
2241e5c31af7Sopenharmony_ci			}
2242e5c31af7Sopenharmony_ci			vertex ""
2243e5c31af7Sopenharmony_ci				#version 300 es
2244e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
2245e5c31af7Sopenharmony_ci				flat out mediump vec4 var;
2246e5c31af7Sopenharmony_ci				void main()
2247e5c31af7Sopenharmony_ci				{
2248e5c31af7Sopenharmony_ci					var = in0;
2249e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
2250e5c31af7Sopenharmony_ci				}
2251e5c31af7Sopenharmony_ci			""
2252e5c31af7Sopenharmony_ci			fragment ""
2253e5c31af7Sopenharmony_ci				#version 300 es
2254e5c31af7Sopenharmony_ci				precision mediump float;
2255e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
2256e5c31af7Sopenharmony_ci				flat in vec4 var;
2257e5c31af7Sopenharmony_ci				void main()
2258e5c31af7Sopenharmony_ci				{
2259e5c31af7Sopenharmony_ci					out0 = var;
2260e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
2261e5c31af7Sopenharmony_ci				}
2262e5c31af7Sopenharmony_ci			""
2263e5c31af7Sopenharmony_ci		end
2264e5c31af7Sopenharmony_ci	end
2265e5c31af7Sopenharmony_ci
2266e5c31af7Sopenharmony_ci	group usage "Varying usage in shaders"
2267e5c31af7Sopenharmony_ci		case readback_1
2268e5c31af7Sopenharmony_ci			version 300 es
2269e5c31af7Sopenharmony_ci			desc "read back (an already written) varying in the vertex shader"
2270e5c31af7Sopenharmony_ci			values
2271e5c31af7Sopenharmony_ci			{
2272e5c31af7Sopenharmony_ci				input float in0		= [ 1.0 | 0.0 | -2.0 | 10.0 ];
2273e5c31af7Sopenharmony_ci				output float out0	= [ 3.0 | 0.0 | -6.0 | 30.0 ];
2274e5c31af7Sopenharmony_ci			}
2275e5c31af7Sopenharmony_ci			vertex ""
2276e5c31af7Sopenharmony_ci				#version 300 es
2277e5c31af7Sopenharmony_ci				precision mediump float;
2278e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
2279e5c31af7Sopenharmony_ci				out float var1;
2280e5c31af7Sopenharmony_ci				out float var2;
2281e5c31af7Sopenharmony_ci
2282e5c31af7Sopenharmony_ci				void main()
2283e5c31af7Sopenharmony_ci				{
2284e5c31af7Sopenharmony_ci					var1 = in0;
2285e5c31af7Sopenharmony_ci					var2 = var1 + in0;
2286e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
2287e5c31af7Sopenharmony_ci				}
2288e5c31af7Sopenharmony_ci			""
2289e5c31af7Sopenharmony_ci			fragment ""
2290e5c31af7Sopenharmony_ci				#version 300 es
2291e5c31af7Sopenharmony_ci				precision mediump float;
2292e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
2293e5c31af7Sopenharmony_ci				in float var1;
2294e5c31af7Sopenharmony_ci				in float var2;
2295e5c31af7Sopenharmony_ci
2296e5c31af7Sopenharmony_ci				void main()
2297e5c31af7Sopenharmony_ci				{
2298e5c31af7Sopenharmony_ci					out0 = var1 + var2;
2299e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
2300e5c31af7Sopenharmony_ci				}
2301e5c31af7Sopenharmony_ci			""
2302e5c31af7Sopenharmony_ci		end
2303e5c31af7Sopenharmony_ci
2304e5c31af7Sopenharmony_ci		case writeback_1
2305e5c31af7Sopenharmony_ci			version 300 es
2306e5c31af7Sopenharmony_ci			desc "write back a varying in the fragment shader"
2307e5c31af7Sopenharmony_ci			values
2308e5c31af7Sopenharmony_ci			{
2309e5c31af7Sopenharmony_ci				input float in0		= [ 1.0 | 0.0 | -2.0 | 10.0 ];
2310e5c31af7Sopenharmony_ci			}
2311e5c31af7Sopenharmony_ci			expect compile_fail
2312e5c31af7Sopenharmony_ci			vertex ""
2313e5c31af7Sopenharmony_ci				#version 300 es
2314e5c31af7Sopenharmony_ci				precision mediump float;
2315e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
2316e5c31af7Sopenharmony_ci				out float var1;
2317e5c31af7Sopenharmony_ci				out float var2;
2318e5c31af7Sopenharmony_ci
2319e5c31af7Sopenharmony_ci				void main()
2320e5c31af7Sopenharmony_ci				{
2321e5c31af7Sopenharmony_ci					var1 = in0;
2322e5c31af7Sopenharmony_ci					var2 = var1 + in0;
2323e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
2324e5c31af7Sopenharmony_ci				}
2325e5c31af7Sopenharmony_ci			""
2326e5c31af7Sopenharmony_ci			fragment ""
2327e5c31af7Sopenharmony_ci				#version 300 es
2328e5c31af7Sopenharmony_ci				precision mediump float;
2329e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
2330e5c31af7Sopenharmony_ci				in float var1;
2331e5c31af7Sopenharmony_ci				in float var2;
2332e5c31af7Sopenharmony_ci
2333e5c31af7Sopenharmony_ci				void main()
2334e5c31af7Sopenharmony_ci				{
2335e5c31af7Sopenharmony_ci					var2 = var1;
2336e5c31af7Sopenharmony_ci					out0 = var1;
2337e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
2338e5c31af7Sopenharmony_ci				}
2339e5c31af7Sopenharmony_ci			""
2340e5c31af7Sopenharmony_ci		end
2341e5c31af7Sopenharmony_ci	end
2342e5c31af7Sopenharmony_ciend
2343e5c31af7Sopenharmony_ci
2344e5c31af7Sopenharmony_cigroup uniform "Uniform linkage"
2345e5c31af7Sopenharmony_ci	group basic "Default block uniforms of scalar and vector types"
2346e5c31af7Sopenharmony_ci		case precision_conflict_1
2347e5c31af7Sopenharmony_ci			version 300 es
2348e5c31af7Sopenharmony_ci			desc "Vertex side uniform has highp, fragment side uniform mediump."
2349e5c31af7Sopenharmony_ci			expect link_fail
2350e5c31af7Sopenharmony_ci			values {output float out0 = 3.0;}
2351e5c31af7Sopenharmony_ci			vertex ""
2352e5c31af7Sopenharmony_ci				#version 300 es
2353e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
2354e5c31af7Sopenharmony_ci				uniform highp float u_val;
2355e5c31af7Sopenharmony_ci				out mediump float res;
2356e5c31af7Sopenharmony_ci				void main()
2357e5c31af7Sopenharmony_ci				{
2358e5c31af7Sopenharmony_ci					res = u_val;
2359e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
2360e5c31af7Sopenharmony_ci				}
2361e5c31af7Sopenharmony_ci			""
2362e5c31af7Sopenharmony_ci			fragment ""
2363e5c31af7Sopenharmony_ci				#version 300 es
2364e5c31af7Sopenharmony_ci				precision mediump float;
2365e5c31af7Sopenharmony_ci				uniform float u_val;
2366e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
2367e5c31af7Sopenharmony_ci				in mediump float res;
2368e5c31af7Sopenharmony_ci				void main()
2369e5c31af7Sopenharmony_ci				{
2370e5c31af7Sopenharmony_ci					out0 = u_val + res;
2371e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
2372e5c31af7Sopenharmony_ci				}
2373e5c31af7Sopenharmony_ci			""
2374e5c31af7Sopenharmony_ci		end
2375e5c31af7Sopenharmony_ci		case precision_conflict_2
2376e5c31af7Sopenharmony_ci			version 300 es
2377e5c31af7Sopenharmony_ci			desc "Vertex side uniform has highp, fragment side uniform mediump."
2378e5c31af7Sopenharmony_ci			expect link_fail
2379e5c31af7Sopenharmony_ci			values {output float out0 = 3.0;}
2380e5c31af7Sopenharmony_ci			vertex ""
2381e5c31af7Sopenharmony_ci				#version 300 es
2382e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
2383e5c31af7Sopenharmony_ci				uniform highp float u_val;
2384e5c31af7Sopenharmony_ci				out mediump float res;
2385e5c31af7Sopenharmony_ci				void main()
2386e5c31af7Sopenharmony_ci				{
2387e5c31af7Sopenharmony_ci					res = u_val;
2388e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
2389e5c31af7Sopenharmony_ci				}
2390e5c31af7Sopenharmony_ci			""
2391e5c31af7Sopenharmony_ci			fragment ""
2392e5c31af7Sopenharmony_ci				#version 300 es
2393e5c31af7Sopenharmony_ci				precision highp float;
2394e5c31af7Sopenharmony_ci				uniform mediump float u_val;
2395e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
2396e5c31af7Sopenharmony_ci				in mediump float res;
2397e5c31af7Sopenharmony_ci				void main()
2398e5c31af7Sopenharmony_ci				{
2399e5c31af7Sopenharmony_ci					out0 = u_val + res;
2400e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
2401e5c31af7Sopenharmony_ci				}
2402e5c31af7Sopenharmony_ci			""
2403e5c31af7Sopenharmony_ci		end
2404e5c31af7Sopenharmony_ci		case precision_conflict_3
2405e5c31af7Sopenharmony_ci			version 300 es
2406e5c31af7Sopenharmony_ci			desc "Vertex side uniform has lowp, fragment side uniform highp."
2407e5c31af7Sopenharmony_ci			expect link_fail
2408e5c31af7Sopenharmony_ci			values {output float out0 = 3.0;}
2409e5c31af7Sopenharmony_ci			vertex ""
2410e5c31af7Sopenharmony_ci				#version 300 es
2411e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
2412e5c31af7Sopenharmony_ci				uniform lowp int u_val;
2413e5c31af7Sopenharmony_ci				out mediump float res;
2414e5c31af7Sopenharmony_ci				void main()
2415e5c31af7Sopenharmony_ci				{
2416e5c31af7Sopenharmony_ci					res = float(u_val);
2417e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
2418e5c31af7Sopenharmony_ci				}
2419e5c31af7Sopenharmony_ci			""
2420e5c31af7Sopenharmony_ci			fragment ""
2421e5c31af7Sopenharmony_ci				#version 300 es
2422e5c31af7Sopenharmony_ci				precision highp float;
2423e5c31af7Sopenharmony_ci				uniform highp int u_val;
2424e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
2425e5c31af7Sopenharmony_ci				in mediump float res;
2426e5c31af7Sopenharmony_ci				void main()
2427e5c31af7Sopenharmony_ci				{
2428e5c31af7Sopenharmony_ci					out0 = float(u_val) + res;
2429e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
2430e5c31af7Sopenharmony_ci				}
2431e5c31af7Sopenharmony_ci			""
2432e5c31af7Sopenharmony_ci		end
2433e5c31af7Sopenharmony_ci		case precision_conflict_4
2434e5c31af7Sopenharmony_ci			version 300 es
2435e5c31af7Sopenharmony_ci			desc "Vertex side uniform has lowp, fragment side uniform mediump."
2436e5c31af7Sopenharmony_ci			expect link_fail
2437e5c31af7Sopenharmony_ci			values {output float out0 = 3.0;}
2438e5c31af7Sopenharmony_ci			vertex ""
2439e5c31af7Sopenharmony_ci				#version 300 es
2440e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
2441e5c31af7Sopenharmony_ci				uniform lowp vec3 u_val;
2442e5c31af7Sopenharmony_ci				out mediump float res;
2443e5c31af7Sopenharmony_ci				void main()
2444e5c31af7Sopenharmony_ci				{
2445e5c31af7Sopenharmony_ci					res = u_val.y;
2446e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
2447e5c31af7Sopenharmony_ci				}
2448e5c31af7Sopenharmony_ci			""
2449e5c31af7Sopenharmony_ci			fragment ""
2450e5c31af7Sopenharmony_ci				#version 300 es
2451e5c31af7Sopenharmony_ci				precision highp float;
2452e5c31af7Sopenharmony_ci				uniform mediump vec3 u_val;
2453e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
2454e5c31af7Sopenharmony_ci				in mediump float res;
2455e5c31af7Sopenharmony_ci				void main()
2456e5c31af7Sopenharmony_ci				{
2457e5c31af7Sopenharmony_ci					out0 = u_val.z + res;
2458e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
2459e5c31af7Sopenharmony_ci				}
2460e5c31af7Sopenharmony_ci			""
2461e5c31af7Sopenharmony_ci		end
2462e5c31af7Sopenharmony_ci	end
2463e5c31af7Sopenharmony_ci
2464e5c31af7Sopenharmony_ci	group struct "Uniform structs"
2465e5c31af7Sopenharmony_ci		# Struct linkage handling
2466e5c31af7Sopenharmony_ci		case basic
2467e5c31af7Sopenharmony_ci			version 300 es
2468e5c31af7Sopenharmony_ci			desc "Same uniform struct in both shaders"
2469e5c31af7Sopenharmony_ci			values {
2470e5c31af7Sopenharmony_ci				uniform float val.a = 1.0;
2471e5c31af7Sopenharmony_ci				uniform float val.b = 2.0;
2472e5c31af7Sopenharmony_ci				output float out0 = 3.0;
2473e5c31af7Sopenharmony_ci			}
2474e5c31af7Sopenharmony_ci			vertex ""
2475e5c31af7Sopenharmony_ci				#version 300 es
2476e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
2477e5c31af7Sopenharmony_ci				struct Struct {mediump float a; mediump float b;};
2478e5c31af7Sopenharmony_ci				uniform Struct val;
2479e5c31af7Sopenharmony_ci				out mediump float dummy;
2480e5c31af7Sopenharmony_ci				void main()
2481e5c31af7Sopenharmony_ci				{
2482e5c31af7Sopenharmony_ci					dummy = val.a + val.b;
2483e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
2484e5c31af7Sopenharmony_ci				}
2485e5c31af7Sopenharmony_ci			""
2486e5c31af7Sopenharmony_ci			fragment ""
2487e5c31af7Sopenharmony_ci				#version 300 es
2488e5c31af7Sopenharmony_ci				precision mediump float;
2489e5c31af7Sopenharmony_ci				struct Struct {mediump float a; mediump float b;};
2490e5c31af7Sopenharmony_ci				uniform Struct val;
2491e5c31af7Sopenharmony_ci				in mediump float dummy;
2492e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
2493e5c31af7Sopenharmony_ci				void main()
2494e5c31af7Sopenharmony_ci				{
2495e5c31af7Sopenharmony_ci					out0 = val.b + val.a;
2496e5c31af7Sopenharmony_ci					out0 = out0 + dummy;
2497e5c31af7Sopenharmony_ci					out0 = out0 - dummy;
2498e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
2499e5c31af7Sopenharmony_ci				}
2500e5c31af7Sopenharmony_ci			""
2501e5c31af7Sopenharmony_ci		end
2502e5c31af7Sopenharmony_ci
2503e5c31af7Sopenharmony_ci		case vertex_only
2504e5c31af7Sopenharmony_ci			version 300 es
2505e5c31af7Sopenharmony_ci			desc "Uniform struct declared in both, used only in vertex."
2506e5c31af7Sopenharmony_ci			values {
2507e5c31af7Sopenharmony_ci				uniform float val.a = 1.0;
2508e5c31af7Sopenharmony_ci				uniform float val.b = 2.0;
2509e5c31af7Sopenharmony_ci				output float out0 = 3.0;
2510e5c31af7Sopenharmony_ci			}
2511e5c31af7Sopenharmony_ci			vertex ""
2512e5c31af7Sopenharmony_ci				#version 300 es
2513e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
2514e5c31af7Sopenharmony_ci				struct Struct {mediump float a; mediump float b;};
2515e5c31af7Sopenharmony_ci				uniform Struct val;
2516e5c31af7Sopenharmony_ci				out mediump float res;
2517e5c31af7Sopenharmony_ci				void main()
2518e5c31af7Sopenharmony_ci				{
2519e5c31af7Sopenharmony_ci					res = val.a + val.b;
2520e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
2521e5c31af7Sopenharmony_ci				}
2522e5c31af7Sopenharmony_ci			""
2523e5c31af7Sopenharmony_ci			fragment ""
2524e5c31af7Sopenharmony_ci				#version 300 es
2525e5c31af7Sopenharmony_ci				precision mediump float;
2526e5c31af7Sopenharmony_ci				struct Struct {mediump float a; mediump float b;};
2527e5c31af7Sopenharmony_ci				uniform Struct val;
2528e5c31af7Sopenharmony_ci				in mediump float res;
2529e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
2530e5c31af7Sopenharmony_ci				void main()
2531e5c31af7Sopenharmony_ci				{
2532e5c31af7Sopenharmony_ci					out0 = res;
2533e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
2534e5c31af7Sopenharmony_ci				}
2535e5c31af7Sopenharmony_ci			""
2536e5c31af7Sopenharmony_ci		end
2537e5c31af7Sopenharmony_ci
2538e5c31af7Sopenharmony_ci		case fragment_only
2539e5c31af7Sopenharmony_ci			version 300 es
2540e5c31af7Sopenharmony_ci			desc "Uniform struct declared in both, used only in fragment."
2541e5c31af7Sopenharmony_ci			values {
2542e5c31af7Sopenharmony_ci				uniform float val.a = 1.0;
2543e5c31af7Sopenharmony_ci				uniform float val.b = 2.0;
2544e5c31af7Sopenharmony_ci				output float out0 = 3.0;
2545e5c31af7Sopenharmony_ci			}
2546e5c31af7Sopenharmony_ci			vertex ""
2547e5c31af7Sopenharmony_ci				#version 300 es
2548e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
2549e5c31af7Sopenharmony_ci				struct Struct {mediump float a; mediump float b;};
2550e5c31af7Sopenharmony_ci				uniform Struct val;
2551e5c31af7Sopenharmony_ci				void main()
2552e5c31af7Sopenharmony_ci				{
2553e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
2554e5c31af7Sopenharmony_ci				}
2555e5c31af7Sopenharmony_ci			""
2556e5c31af7Sopenharmony_ci			fragment ""
2557e5c31af7Sopenharmony_ci				#version 300 es
2558e5c31af7Sopenharmony_ci				precision mediump float;
2559e5c31af7Sopenharmony_ci				struct Struct {mediump float a; mediump float b;};
2560e5c31af7Sopenharmony_ci				uniform Struct val;
2561e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
2562e5c31af7Sopenharmony_ci				void main()
2563e5c31af7Sopenharmony_ci				{
2564e5c31af7Sopenharmony_ci					out0 = val.a + val.b;
2565e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
2566e5c31af7Sopenharmony_ci				}
2567e5c31af7Sopenharmony_ci			""
2568e5c31af7Sopenharmony_ci		end
2569e5c31af7Sopenharmony_ci
2570e5c31af7Sopenharmony_ci		case partial
2571e5c31af7Sopenharmony_ci			version 300 es
2572e5c31af7Sopenharmony_ci			desc "Uniform struct declared in both, used partially in both."
2573e5c31af7Sopenharmony_ci			values {
2574e5c31af7Sopenharmony_ci				uniform float val.a = 1.0;
2575e5c31af7Sopenharmony_ci				uniform float val.b = 2.0;
2576e5c31af7Sopenharmony_ci				output float out0 = 3.0;
2577e5c31af7Sopenharmony_ci			}
2578e5c31af7Sopenharmony_ci			vertex ""
2579e5c31af7Sopenharmony_ci				#version 300 es
2580e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
2581e5c31af7Sopenharmony_ci				struct Struct {mediump float a; mediump float b;};
2582e5c31af7Sopenharmony_ci				uniform Struct val;
2583e5c31af7Sopenharmony_ci				out mediump float res;
2584e5c31af7Sopenharmony_ci				void main()
2585e5c31af7Sopenharmony_ci				{
2586e5c31af7Sopenharmony_ci					res = val.a;
2587e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
2588e5c31af7Sopenharmony_ci				}
2589e5c31af7Sopenharmony_ci			""
2590e5c31af7Sopenharmony_ci			fragment ""
2591e5c31af7Sopenharmony_ci				#version 300 es
2592e5c31af7Sopenharmony_ci				precision mediump float;
2593e5c31af7Sopenharmony_ci				struct Struct {mediump float a; mediump float b;};
2594e5c31af7Sopenharmony_ci				uniform Struct val;
2595e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
2596e5c31af7Sopenharmony_ci				in mediump float res;
2597e5c31af7Sopenharmony_ci				void main()
2598e5c31af7Sopenharmony_ci				{
2599e5c31af7Sopenharmony_ci					out0 = res + val.b;
2600e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
2601e5c31af7Sopenharmony_ci				}
2602e5c31af7Sopenharmony_ci			""
2603e5c31af7Sopenharmony_ci		end
2604e5c31af7Sopenharmony_ci
2605e5c31af7Sopenharmony_ci		case vec4
2606e5c31af7Sopenharmony_ci			version 300 es
2607e5c31af7Sopenharmony_ci			desc "Same uniform struct in both shaders. Datatype vec4"
2608e5c31af7Sopenharmony_ci			values {
2609e5c31af7Sopenharmony_ci				uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
2610e5c31af7Sopenharmony_ci				uniform vec4 val.b = vec4(1.0, 2.0, 3.0, 4.0);
2611e5c31af7Sopenharmony_ci				output float out0 = 3.0;
2612e5c31af7Sopenharmony_ci			}
2613e5c31af7Sopenharmony_ci			vertex ""
2614e5c31af7Sopenharmony_ci				#version 300 es
2615e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
2616e5c31af7Sopenharmony_ci				struct Struct {mediump vec4 a; mediump vec4 b;};
2617e5c31af7Sopenharmony_ci				uniform Struct val;
2618e5c31af7Sopenharmony_ci				out mediump float dummy;
2619e5c31af7Sopenharmony_ci				void main()
2620e5c31af7Sopenharmony_ci				{
2621e5c31af7Sopenharmony_ci					dummy = val.a.x + val.b.y;
2622e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
2623e5c31af7Sopenharmony_ci				}
2624e5c31af7Sopenharmony_ci			""
2625e5c31af7Sopenharmony_ci			fragment ""
2626e5c31af7Sopenharmony_ci				#version 300 es
2627e5c31af7Sopenharmony_ci				precision mediump float;
2628e5c31af7Sopenharmony_ci				struct Struct {mediump vec4 a; mediump vec4 b;};
2629e5c31af7Sopenharmony_ci				uniform Struct val;
2630e5c31af7Sopenharmony_ci				in mediump float dummy;
2631e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
2632e5c31af7Sopenharmony_ci				void main()
2633e5c31af7Sopenharmony_ci				{
2634e5c31af7Sopenharmony_ci					out0 = val.b.y + val.a.x;
2635e5c31af7Sopenharmony_ci					out0 = out0 + dummy;
2636e5c31af7Sopenharmony_ci					out0 = out0 - dummy;
2637e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
2638e5c31af7Sopenharmony_ci				}
2639e5c31af7Sopenharmony_ci			""
2640e5c31af7Sopenharmony_ci		end
2641e5c31af7Sopenharmony_ci
2642e5c31af7Sopenharmony_ci		case vertex_only_vec4
2643e5c31af7Sopenharmony_ci			version 300 es
2644e5c31af7Sopenharmony_ci			desc "Uniform struct declared in both, used only in vertex. Datatype vec4	"
2645e5c31af7Sopenharmony_ci			values {
2646e5c31af7Sopenharmony_ci				uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
2647e5c31af7Sopenharmony_ci				uniform vec4 val.b = vec4(1.0, 2.0, 3.0, 4.0);
2648e5c31af7Sopenharmony_ci				output float out0 = 3.0;
2649e5c31af7Sopenharmony_ci			}
2650e5c31af7Sopenharmony_ci			vertex ""
2651e5c31af7Sopenharmony_ci				#version 300 es
2652e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
2653e5c31af7Sopenharmony_ci				struct Struct {mediump vec4 a; mediump vec4 b;};
2654e5c31af7Sopenharmony_ci				uniform Struct val;
2655e5c31af7Sopenharmony_ci				out mediump float res;
2656e5c31af7Sopenharmony_ci				void main()
2657e5c31af7Sopenharmony_ci				{
2658e5c31af7Sopenharmony_ci					res = val.a.x + val.b.y;
2659e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
2660e5c31af7Sopenharmony_ci				}
2661e5c31af7Sopenharmony_ci			""
2662e5c31af7Sopenharmony_ci			fragment ""
2663e5c31af7Sopenharmony_ci				#version 300 es
2664e5c31af7Sopenharmony_ci				precision mediump float;
2665e5c31af7Sopenharmony_ci				struct Struct {mediump vec4 a; mediump vec4 b;};
2666e5c31af7Sopenharmony_ci				uniform Struct val;
2667e5c31af7Sopenharmony_ci				in mediump float res;
2668e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
2669e5c31af7Sopenharmony_ci				void main()
2670e5c31af7Sopenharmony_ci				{			out0 = res;
2671e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
2672e5c31af7Sopenharmony_ci				}
2673e5c31af7Sopenharmony_ci			""
2674e5c31af7Sopenharmony_ci		end
2675e5c31af7Sopenharmony_ci
2676e5c31af7Sopenharmony_ci		case fragment_only_vec4
2677e5c31af7Sopenharmony_ci			version 300 es
2678e5c31af7Sopenharmony_ci			desc "Uniform struct declared in both, used only in fragment. Datatype vec4"
2679e5c31af7Sopenharmony_ci			values {
2680e5c31af7Sopenharmony_ci				uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
2681e5c31af7Sopenharmony_ci				uniform vec4 val.b = vec4(1.0, 2.0, 3.0, 4.0);
2682e5c31af7Sopenharmony_ci				output float out0 = 3.0;
2683e5c31af7Sopenharmony_ci			}
2684e5c31af7Sopenharmony_ci			vertex ""
2685e5c31af7Sopenharmony_ci				#version 300 es
2686e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
2687e5c31af7Sopenharmony_ci				struct Struct {mediump vec4 a; mediump vec4 b;};
2688e5c31af7Sopenharmony_ci				uniform Struct val;
2689e5c31af7Sopenharmony_ci				void main()
2690e5c31af7Sopenharmony_ci				{
2691e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
2692e5c31af7Sopenharmony_ci				}
2693e5c31af7Sopenharmony_ci			""
2694e5c31af7Sopenharmony_ci			fragment ""
2695e5c31af7Sopenharmony_ci				#version 300 es
2696e5c31af7Sopenharmony_ci				precision mediump float;
2697e5c31af7Sopenharmony_ci				struct Struct {mediump vec4 a; mediump vec4 b;};
2698e5c31af7Sopenharmony_ci				uniform Struct val;
2699e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
2700e5c31af7Sopenharmony_ci				void main()
2701e5c31af7Sopenharmony_ci				{			out0 = val.a.x + val.b.y;
2702e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
2703e5c31af7Sopenharmony_ci				}
2704e5c31af7Sopenharmony_ci			""
2705e5c31af7Sopenharmony_ci		end
2706e5c31af7Sopenharmony_ci
2707e5c31af7Sopenharmony_ci		case partial_vec4
2708e5c31af7Sopenharmony_ci			version 300 es
2709e5c31af7Sopenharmony_ci			desc "Uniform struct declared in both, used partially in both. Datatype vec4"
2710e5c31af7Sopenharmony_ci			values {
2711e5c31af7Sopenharmony_ci				uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
2712e5c31af7Sopenharmony_ci				uniform vec4 val.b = vec4(1.0, 2.0, 3.0, 4.0);
2713e5c31af7Sopenharmony_ci				output float out0 = 3.0;
2714e5c31af7Sopenharmony_ci			}
2715e5c31af7Sopenharmony_ci			vertex ""
2716e5c31af7Sopenharmony_ci				#version 300 es
2717e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
2718e5c31af7Sopenharmony_ci				struct Struct {mediump vec4 a; mediump vec4 b;};
2719e5c31af7Sopenharmony_ci				uniform Struct val;
2720e5c31af7Sopenharmony_ci				out mediump float res;
2721e5c31af7Sopenharmony_ci				void main()
2722e5c31af7Sopenharmony_ci				{
2723e5c31af7Sopenharmony_ci					res = val.a.x;
2724e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
2725e5c31af7Sopenharmony_ci				}
2726e5c31af7Sopenharmony_ci			""
2727e5c31af7Sopenharmony_ci			fragment ""
2728e5c31af7Sopenharmony_ci				#version 300 es
2729e5c31af7Sopenharmony_ci				precision mediump float;
2730e5c31af7Sopenharmony_ci				struct Struct {mediump vec4 a; mediump vec4 b;};
2731e5c31af7Sopenharmony_ci				uniform Struct val;
2732e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
2733e5c31af7Sopenharmony_ci				in mediump float res;
2734e5c31af7Sopenharmony_ci				void main()
2735e5c31af7Sopenharmony_ci				{			out0 = res + val.b.y;
2736e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
2737e5c31af7Sopenharmony_ci				}
2738e5c31af7Sopenharmony_ci			""
2739e5c31af7Sopenharmony_ci		end
2740e5c31af7Sopenharmony_ci
2741e5c31af7Sopenharmony_ci		case vec4_vec3
2742e5c31af7Sopenharmony_ci			version 300 es
2743e5c31af7Sopenharmony_ci			desc "Same uniform struct in both shaders. Datatype vec4 and vec3"
2744e5c31af7Sopenharmony_ci			values {
2745e5c31af7Sopenharmony_ci				uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
2746e5c31af7Sopenharmony_ci				uniform vec3 val.b = vec3(1.0, 2.0, 3.0);
2747e5c31af7Sopenharmony_ci				output float out0 = 3.0;
2748e5c31af7Sopenharmony_ci			}
2749e5c31af7Sopenharmony_ci			vertex ""
2750e5c31af7Sopenharmony_ci				#version 300 es
2751e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
2752e5c31af7Sopenharmony_ci				struct Struct {mediump vec4 a; mediump vec3 b;};
2753e5c31af7Sopenharmony_ci				uniform Struct val;
2754e5c31af7Sopenharmony_ci				out mediump float dummy;
2755e5c31af7Sopenharmony_ci				void main()
2756e5c31af7Sopenharmony_ci				{
2757e5c31af7Sopenharmony_ci					dummy = val.a.x + val.b.y;
2758e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
2759e5c31af7Sopenharmony_ci				}
2760e5c31af7Sopenharmony_ci			""
2761e5c31af7Sopenharmony_ci			fragment ""
2762e5c31af7Sopenharmony_ci				#version 300 es
2763e5c31af7Sopenharmony_ci				precision mediump float;
2764e5c31af7Sopenharmony_ci				struct Struct {mediump vec4 a; mediump vec3 b;};
2765e5c31af7Sopenharmony_ci				uniform Struct val;
2766e5c31af7Sopenharmony_ci				in mediump float dummy;
2767e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
2768e5c31af7Sopenharmony_ci				void main()
2769e5c31af7Sopenharmony_ci				{			out0 = val.b.y + val.a.x;
2770e5c31af7Sopenharmony_ci					out0 = out0 + dummy;
2771e5c31af7Sopenharmony_ci					out0 = out0 - dummy;
2772e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
2773e5c31af7Sopenharmony_ci				}
2774e5c31af7Sopenharmony_ci			""
2775e5c31af7Sopenharmony_ci		end
2776e5c31af7Sopenharmony_ci
2777e5c31af7Sopenharmony_ci		case vertex_only_vec4_vec3
2778e5c31af7Sopenharmony_ci			version 300 es
2779e5c31af7Sopenharmony_ci			desc "Uniform struct declared in both, used only in vertex. Datatype vec4 and vec3"
2780e5c31af7Sopenharmony_ci			values {
2781e5c31af7Sopenharmony_ci				uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
2782e5c31af7Sopenharmony_ci				uniform vec3 val.b = vec3(1.0, 2.0, 3.0);
2783e5c31af7Sopenharmony_ci				output float out0 = 3.0;
2784e5c31af7Sopenharmony_ci			}
2785e5c31af7Sopenharmony_ci			vertex ""
2786e5c31af7Sopenharmony_ci				#version 300 es
2787e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
2788e5c31af7Sopenharmony_ci				struct Struct {mediump vec4 a; mediump vec3 b;};
2789e5c31af7Sopenharmony_ci				uniform Struct val;
2790e5c31af7Sopenharmony_ci				out mediump float res;
2791e5c31af7Sopenharmony_ci				void main()
2792e5c31af7Sopenharmony_ci				{
2793e5c31af7Sopenharmony_ci					res = val.a.x + val.b.y;
2794e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
2795e5c31af7Sopenharmony_ci				}
2796e5c31af7Sopenharmony_ci			""
2797e5c31af7Sopenharmony_ci			fragment ""
2798e5c31af7Sopenharmony_ci				#version 300 es
2799e5c31af7Sopenharmony_ci				precision mediump float;
2800e5c31af7Sopenharmony_ci				struct Struct {mediump vec4 a; mediump vec3 b;};
2801e5c31af7Sopenharmony_ci				uniform Struct val;
2802e5c31af7Sopenharmony_ci				in mediump float res;
2803e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
2804e5c31af7Sopenharmony_ci				void main()
2805e5c31af7Sopenharmony_ci				{			out0 = res;
2806e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
2807e5c31af7Sopenharmony_ci				}
2808e5c31af7Sopenharmony_ci			""
2809e5c31af7Sopenharmony_ci		end
2810e5c31af7Sopenharmony_ci
2811e5c31af7Sopenharmony_ci		case fragment_only_vec4_vec3
2812e5c31af7Sopenharmony_ci			version 300 es
2813e5c31af7Sopenharmony_ci			desc "Uniform struct declared in both, used only in fragment. Datatype vec4 and vec3"
2814e5c31af7Sopenharmony_ci			values {
2815e5c31af7Sopenharmony_ci				uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
2816e5c31af7Sopenharmony_ci				uniform vec3 val.b = vec3(1.0, 2.0, 3.0);
2817e5c31af7Sopenharmony_ci				output float out0 = 3.0;
2818e5c31af7Sopenharmony_ci			}
2819e5c31af7Sopenharmony_ci			vertex ""
2820e5c31af7Sopenharmony_ci				#version 300 es
2821e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
2822e5c31af7Sopenharmony_ci				struct Struct {mediump vec4 a; mediump vec3 b;};
2823e5c31af7Sopenharmony_ci				uniform Struct val;
2824e5c31af7Sopenharmony_ci				void main()
2825e5c31af7Sopenharmony_ci				{
2826e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
2827e5c31af7Sopenharmony_ci				}
2828e5c31af7Sopenharmony_ci			""
2829e5c31af7Sopenharmony_ci			fragment ""
2830e5c31af7Sopenharmony_ci				#version 300 es
2831e5c31af7Sopenharmony_ci				precision mediump float;
2832e5c31af7Sopenharmony_ci				struct Struct {mediump vec4 a; mediump vec3 b;};
2833e5c31af7Sopenharmony_ci				uniform Struct val;
2834e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
2835e5c31af7Sopenharmony_ci				void main()
2836e5c31af7Sopenharmony_ci				{			out0 = val.a.x + val.b.y;
2837e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
2838e5c31af7Sopenharmony_ci				}
2839e5c31af7Sopenharmony_ci			""
2840e5c31af7Sopenharmony_ci		end
2841e5c31af7Sopenharmony_ci
2842e5c31af7Sopenharmony_ci		case partial_vec4_vec3
2843e5c31af7Sopenharmony_ci			version 300 es
2844e5c31af7Sopenharmony_ci			desc "Uniform struct declared in both, used partially in both. Datatype vec4 and vec3"
2845e5c31af7Sopenharmony_ci			values {
2846e5c31af7Sopenharmony_ci				uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
2847e5c31af7Sopenharmony_ci				uniform vec3 val.b = vec3(1.0, 2.0, 3.0);
2848e5c31af7Sopenharmony_ci				output float out0 = 3.0;
2849e5c31af7Sopenharmony_ci			}
2850e5c31af7Sopenharmony_ci			vertex ""
2851e5c31af7Sopenharmony_ci				#version 300 es
2852e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
2853e5c31af7Sopenharmony_ci				struct Struct {mediump vec4 a; mediump vec3 b;};
2854e5c31af7Sopenharmony_ci				uniform Struct val;
2855e5c31af7Sopenharmony_ci				out mediump float res;
2856e5c31af7Sopenharmony_ci				void main()
2857e5c31af7Sopenharmony_ci				{
2858e5c31af7Sopenharmony_ci					res = val.a.x;
2859e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
2860e5c31af7Sopenharmony_ci				}
2861e5c31af7Sopenharmony_ci			""
2862e5c31af7Sopenharmony_ci			fragment ""
2863e5c31af7Sopenharmony_ci				#version 300 es
2864e5c31af7Sopenharmony_ci				precision mediump float;
2865e5c31af7Sopenharmony_ci				struct Struct {mediump vec4 a; mediump vec3 b;};
2866e5c31af7Sopenharmony_ci				uniform Struct val;
2867e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
2868e5c31af7Sopenharmony_ci				in mediump float res;
2869e5c31af7Sopenharmony_ci				void main()
2870e5c31af7Sopenharmony_ci				{			out0 = res + val.b.y;
2871e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
2872e5c31af7Sopenharmony_ci				}
2873e5c31af7Sopenharmony_ci			""
2874e5c31af7Sopenharmony_ci		end
2875e5c31af7Sopenharmony_ci
2876e5c31af7Sopenharmony_ci		case vec4_float
2877e5c31af7Sopenharmony_ci			version 300 es
2878e5c31af7Sopenharmony_ci			desc "Same uniform struct in both shaders. Datatype vec4 and float"
2879e5c31af7Sopenharmony_ci			values {
2880e5c31af7Sopenharmony_ci				uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
2881e5c31af7Sopenharmony_ci				uniform float val.b = 2.0;
2882e5c31af7Sopenharmony_ci				output float out0 = 3.0;
2883e5c31af7Sopenharmony_ci			}
2884e5c31af7Sopenharmony_ci			vertex ""
2885e5c31af7Sopenharmony_ci				#version 300 es
2886e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
2887e5c31af7Sopenharmony_ci				struct Struct {mediump vec4 a; mediump float b;};
2888e5c31af7Sopenharmony_ci				uniform Struct val;
2889e5c31af7Sopenharmony_ci				out mediump float dummy;
2890e5c31af7Sopenharmony_ci				void main()
2891e5c31af7Sopenharmony_ci				{
2892e5c31af7Sopenharmony_ci					dummy = val.a.x + val.b;
2893e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
2894e5c31af7Sopenharmony_ci				}
2895e5c31af7Sopenharmony_ci			""
2896e5c31af7Sopenharmony_ci			fragment ""
2897e5c31af7Sopenharmony_ci				#version 300 es
2898e5c31af7Sopenharmony_ci				precision mediump float;
2899e5c31af7Sopenharmony_ci				struct Struct {mediump vec4 a; mediump float b;};
2900e5c31af7Sopenharmony_ci				uniform Struct val;
2901e5c31af7Sopenharmony_ci				in mediump float dummy;
2902e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
2903e5c31af7Sopenharmony_ci				void main()
2904e5c31af7Sopenharmony_ci				{			out0 = val.b + val.a.x;
2905e5c31af7Sopenharmony_ci					out0 = out0 + dummy;
2906e5c31af7Sopenharmony_ci					out0 = out0 - dummy;
2907e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
2908e5c31af7Sopenharmony_ci				}
2909e5c31af7Sopenharmony_ci			""
2910e5c31af7Sopenharmony_ci		end
2911e5c31af7Sopenharmony_ci
2912e5c31af7Sopenharmony_ci		case vertex_only_vec4_float
2913e5c31af7Sopenharmony_ci			version 300 es
2914e5c31af7Sopenharmony_ci			desc "Uniform struct declared in both, used only in vertex. Datatype vec4 and float"
2915e5c31af7Sopenharmony_ci			values {
2916e5c31af7Sopenharmony_ci				uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
2917e5c31af7Sopenharmony_ci				uniform float val.b = 2.0;
2918e5c31af7Sopenharmony_ci				output float out0 = 3.0;
2919e5c31af7Sopenharmony_ci			}
2920e5c31af7Sopenharmony_ci			vertex ""
2921e5c31af7Sopenharmony_ci				#version 300 es
2922e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
2923e5c31af7Sopenharmony_ci				struct Struct {mediump vec4 a; mediump float b;};
2924e5c31af7Sopenharmony_ci				uniform Struct val;
2925e5c31af7Sopenharmony_ci				out mediump float res;
2926e5c31af7Sopenharmony_ci				void main()
2927e5c31af7Sopenharmony_ci				{
2928e5c31af7Sopenharmony_ci					res = val.a.x + val.b;
2929e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
2930e5c31af7Sopenharmony_ci				}
2931e5c31af7Sopenharmony_ci			""
2932e5c31af7Sopenharmony_ci			fragment ""
2933e5c31af7Sopenharmony_ci				#version 300 es
2934e5c31af7Sopenharmony_ci				precision mediump float;
2935e5c31af7Sopenharmony_ci				struct Struct {mediump vec4 a; mediump float b;};
2936e5c31af7Sopenharmony_ci				uniform Struct val;
2937e5c31af7Sopenharmony_ci				in mediump float res;
2938e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
2939e5c31af7Sopenharmony_ci				void main()
2940e5c31af7Sopenharmony_ci				{			out0 = res;
2941e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
2942e5c31af7Sopenharmony_ci				}
2943e5c31af7Sopenharmony_ci			""
2944e5c31af7Sopenharmony_ci		end
2945e5c31af7Sopenharmony_ci
2946e5c31af7Sopenharmony_ci		case fragment_only_vec4_float
2947e5c31af7Sopenharmony_ci			version 300 es
2948e5c31af7Sopenharmony_ci			desc "Uniform struct declared in both, used only in fragment. Datatype vec4 and float"
2949e5c31af7Sopenharmony_ci			values {
2950e5c31af7Sopenharmony_ci				uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
2951e5c31af7Sopenharmony_ci				uniform float val.b = 2.0;
2952e5c31af7Sopenharmony_ci				output float out0 = 3.0;
2953e5c31af7Sopenharmony_ci			}
2954e5c31af7Sopenharmony_ci			vertex ""
2955e5c31af7Sopenharmony_ci				#version 300 es
2956e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
2957e5c31af7Sopenharmony_ci				struct Struct {mediump vec4 a; mediump float b;};
2958e5c31af7Sopenharmony_ci				uniform Struct val;
2959e5c31af7Sopenharmony_ci				void main()
2960e5c31af7Sopenharmony_ci				{
2961e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
2962e5c31af7Sopenharmony_ci				}
2963e5c31af7Sopenharmony_ci			""
2964e5c31af7Sopenharmony_ci			fragment ""
2965e5c31af7Sopenharmony_ci				#version 300 es
2966e5c31af7Sopenharmony_ci				precision mediump float;
2967e5c31af7Sopenharmony_ci				struct Struct {mediump vec4 a; mediump float b;};
2968e5c31af7Sopenharmony_ci				uniform Struct val;
2969e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
2970e5c31af7Sopenharmony_ci				void main()
2971e5c31af7Sopenharmony_ci				{			out0 = val.a.x + val.b;
2972e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
2973e5c31af7Sopenharmony_ci				}
2974e5c31af7Sopenharmony_ci			""
2975e5c31af7Sopenharmony_ci		end
2976e5c31af7Sopenharmony_ci
2977e5c31af7Sopenharmony_ci		case partial_vec4_float
2978e5c31af7Sopenharmony_ci			version 300 es
2979e5c31af7Sopenharmony_ci			desc "Uniform struct declared in both, used partially in both. Datatype vec4 and float"
2980e5c31af7Sopenharmony_ci			values {
2981e5c31af7Sopenharmony_ci				uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
2982e5c31af7Sopenharmony_ci				uniform float val.b = 2.0;
2983e5c31af7Sopenharmony_ci				output float out0 = 3.0;
2984e5c31af7Sopenharmony_ci			}
2985e5c31af7Sopenharmony_ci			vertex ""
2986e5c31af7Sopenharmony_ci				#version 300 es
2987e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
2988e5c31af7Sopenharmony_ci				struct Struct {mediump vec4 a; mediump float b;};
2989e5c31af7Sopenharmony_ci				uniform Struct val;
2990e5c31af7Sopenharmony_ci				out mediump float res;
2991e5c31af7Sopenharmony_ci				void main()
2992e5c31af7Sopenharmony_ci				{
2993e5c31af7Sopenharmony_ci					res = val.a.x;
2994e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
2995e5c31af7Sopenharmony_ci				}
2996e5c31af7Sopenharmony_ci			""
2997e5c31af7Sopenharmony_ci			fragment ""
2998e5c31af7Sopenharmony_ci				#version 300 es
2999e5c31af7Sopenharmony_ci				precision mediump float;
3000e5c31af7Sopenharmony_ci				struct Struct {mediump vec4 a; mediump float b;};
3001e5c31af7Sopenharmony_ci				uniform Struct val;
3002e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
3003e5c31af7Sopenharmony_ci				in mediump float res;
3004e5c31af7Sopenharmony_ci				void main()
3005e5c31af7Sopenharmony_ci				{			out0 = res + val.b;
3006e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
3007e5c31af7Sopenharmony_ci				}
3008e5c31af7Sopenharmony_ci			""
3009e5c31af7Sopenharmony_ci		end
3010e5c31af7Sopenharmony_ci
3011e5c31af7Sopenharmony_ci		case partial_vec4_struct
3012e5c31af7Sopenharmony_ci			version 300 es
3013e5c31af7Sopenharmony_ci			desc "Uniform struct declared in both, used partially in both. Datatype vec4 and struct with vec4"
3014e5c31af7Sopenharmony_ci			values {
3015e5c31af7Sopenharmony_ci				uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
3016e5c31af7Sopenharmony_ci				uniform vec4 val.b.c = vec4(1.0, 2.0, 3.0, 4.0);
3017e5c31af7Sopenharmony_ci				output float out0 = 3.0;
3018e5c31af7Sopenharmony_ci			}
3019e5c31af7Sopenharmony_ci			vertex ""
3020e5c31af7Sopenharmony_ci				#version 300 es
3021e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
3022e5c31af7Sopenharmony_ci				struct Inner {mediump vec4 c;};
3023e5c31af7Sopenharmony_ci				struct Struct {mediump vec4 a; Inner b;};
3024e5c31af7Sopenharmony_ci				uniform Struct val;
3025e5c31af7Sopenharmony_ci				out mediump float res;
3026e5c31af7Sopenharmony_ci				void main()
3027e5c31af7Sopenharmony_ci				{
3028e5c31af7Sopenharmony_ci					res = val.a.x;
3029e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
3030e5c31af7Sopenharmony_ci				}
3031e5c31af7Sopenharmony_ci			""
3032e5c31af7Sopenharmony_ci			fragment ""
3033e5c31af7Sopenharmony_ci				#version 300 es
3034e5c31af7Sopenharmony_ci				precision mediump float;
3035e5c31af7Sopenharmony_ci				struct Inner {mediump vec4 c;};
3036e5c31af7Sopenharmony_ci				struct Struct {mediump vec4 a; Inner b;};
3037e5c31af7Sopenharmony_ci				uniform Struct val;
3038e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
3039e5c31af7Sopenharmony_ci				in mediump float res;
3040e5c31af7Sopenharmony_ci				void main()
3041e5c31af7Sopenharmony_ci				{			out0 = res + val.b.c.y;
3042e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
3043e5c31af7Sopenharmony_ci				}
3044e5c31af7Sopenharmony_ci			""
3045e5c31af7Sopenharmony_ci		end
3046e5c31af7Sopenharmony_ci
3047e5c31af7Sopenharmony_ci		case partial_vec4_vec3_struct
3048e5c31af7Sopenharmony_ci			version 300 es
3049e5c31af7Sopenharmony_ci			desc "Uniform struct declared in both, used partially in both. Datatype vec4 and struct with vec3"
3050e5c31af7Sopenharmony_ci			values {
3051e5c31af7Sopenharmony_ci				uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
3052e5c31af7Sopenharmony_ci				uniform vec3 val.b.c = vec3(1.0, 2.0, 3.0);
3053e5c31af7Sopenharmony_ci				output float out0 = 3.0;
3054e5c31af7Sopenharmony_ci			}
3055e5c31af7Sopenharmony_ci			vertex ""
3056e5c31af7Sopenharmony_ci				#version 300 es
3057e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
3058e5c31af7Sopenharmony_ci				struct Inner {mediump vec3 c;};
3059e5c31af7Sopenharmony_ci				struct Struct {mediump vec4 a; Inner b;};
3060e5c31af7Sopenharmony_ci				uniform Struct val;
3061e5c31af7Sopenharmony_ci				out mediump float res;
3062e5c31af7Sopenharmony_ci				void main()
3063e5c31af7Sopenharmony_ci				{
3064e5c31af7Sopenharmony_ci					res = val.a.x;
3065e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
3066e5c31af7Sopenharmony_ci				}
3067e5c31af7Sopenharmony_ci			""
3068e5c31af7Sopenharmony_ci			fragment ""
3069e5c31af7Sopenharmony_ci				#version 300 es
3070e5c31af7Sopenharmony_ci				precision mediump float;
3071e5c31af7Sopenharmony_ci				struct Inner {mediump vec3 c;};
3072e5c31af7Sopenharmony_ci				struct Struct {mediump vec4 a; Inner b;};
3073e5c31af7Sopenharmony_ci				uniform Struct val;
3074e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
3075e5c31af7Sopenharmony_ci				in mediump float res;
3076e5c31af7Sopenharmony_ci				void main()
3077e5c31af7Sopenharmony_ci				{			out0 = res + val.b.c.y;
3078e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
3079e5c31af7Sopenharmony_ci				}
3080e5c31af7Sopenharmony_ci			""
3081e5c31af7Sopenharmony_ci		end
3082e5c31af7Sopenharmony_ci
3083e5c31af7Sopenharmony_ci		case partial_vec2_vec3
3084e5c31af7Sopenharmony_ci			version 300 es
3085e5c31af7Sopenharmony_ci			desc "Uniform struct declared in both, used partially in both. Datatype vec2 and vec3"
3086e5c31af7Sopenharmony_ci			values {
3087e5c31af7Sopenharmony_ci				uniform vec2 val.a = vec2(1.0, 2.0);
3088e5c31af7Sopenharmony_ci				uniform vec3 val.b = vec3(1.0, 2.0, 3.0);
3089e5c31af7Sopenharmony_ci				output float out0 = 3.0;
3090e5c31af7Sopenharmony_ci			}
3091e5c31af7Sopenharmony_ci			vertex ""
3092e5c31af7Sopenharmony_ci				#version 300 es
3093e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
3094e5c31af7Sopenharmony_ci				struct Struct {mediump vec2 a; mediump vec3 b;};
3095e5c31af7Sopenharmony_ci				uniform Struct val;
3096e5c31af7Sopenharmony_ci				out mediump float res;
3097e5c31af7Sopenharmony_ci				void main()
3098e5c31af7Sopenharmony_ci				{
3099e5c31af7Sopenharmony_ci					res = val.a.x;
3100e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
3101e5c31af7Sopenharmony_ci				}
3102e5c31af7Sopenharmony_ci			""
3103e5c31af7Sopenharmony_ci			fragment ""
3104e5c31af7Sopenharmony_ci				#version 300 es
3105e5c31af7Sopenharmony_ci				precision mediump float;
3106e5c31af7Sopenharmony_ci				struct Struct {mediump vec2 a; mediump vec3 b;};
3107e5c31af7Sopenharmony_ci				uniform Struct val;
3108e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
3109e5c31af7Sopenharmony_ci				in mediump float res;
3110e5c31af7Sopenharmony_ci				void main()
3111e5c31af7Sopenharmony_ci				{			out0 = res + val.b.y;
3112e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
3113e5c31af7Sopenharmony_ci				}
3114e5c31af7Sopenharmony_ci			""
3115e5c31af7Sopenharmony_ci		end
3116e5c31af7Sopenharmony_ci
3117e5c31af7Sopenharmony_ci		case partial_vec2_int
3118e5c31af7Sopenharmony_ci			version 300 es
3119e5c31af7Sopenharmony_ci			desc "Uniform struct declared in both, used partially in both. Datatype vec2 and int"
3120e5c31af7Sopenharmony_ci			values {
3121e5c31af7Sopenharmony_ci				uniform vec2 val.a = vec2(1.0, 2.0);
3122e5c31af7Sopenharmony_ci				uniform int val.b = 2;
3123e5c31af7Sopenharmony_ci				output float out0 = 3.0;
3124e5c31af7Sopenharmony_ci			}
3125e5c31af7Sopenharmony_ci			vertex ""
3126e5c31af7Sopenharmony_ci				#version 300 es
3127e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
3128e5c31af7Sopenharmony_ci				struct Struct {mediump vec2 a; mediump int b;};
3129e5c31af7Sopenharmony_ci				uniform Struct val;
3130e5c31af7Sopenharmony_ci				out mediump float res;
3131e5c31af7Sopenharmony_ci				void main()
3132e5c31af7Sopenharmony_ci				{
3133e5c31af7Sopenharmony_ci					res = val.a.x;
3134e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
3135e5c31af7Sopenharmony_ci				}
3136e5c31af7Sopenharmony_ci			""
3137e5c31af7Sopenharmony_ci			fragment ""
3138e5c31af7Sopenharmony_ci				#version 300 es
3139e5c31af7Sopenharmony_ci				precision mediump float;
3140e5c31af7Sopenharmony_ci				struct Struct {mediump vec2 a; mediump int b;};
3141e5c31af7Sopenharmony_ci				uniform Struct val;
3142e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
3143e5c31af7Sopenharmony_ci				in mediump float res;
3144e5c31af7Sopenharmony_ci				void main()
3145e5c31af7Sopenharmony_ci				{			out0 = res + float(val.b);
3146e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
3147e5c31af7Sopenharmony_ci				}
3148e5c31af7Sopenharmony_ci			""
3149e5c31af7Sopenharmony_ci		end
3150e5c31af7Sopenharmony_ci
3151e5c31af7Sopenharmony_ci		case partial_int_float
3152e5c31af7Sopenharmony_ci			version 300 es
3153e5c31af7Sopenharmony_ci			desc "Uniform struct declared in both, used partially in both. Datatype int and float"
3154e5c31af7Sopenharmony_ci			values {
3155e5c31af7Sopenharmony_ci				uniform float val.a = 1.0;
3156e5c31af7Sopenharmony_ci				uniform int val.b = 2;
3157e5c31af7Sopenharmony_ci				output float out0 = 3.0;
3158e5c31af7Sopenharmony_ci			}
3159e5c31af7Sopenharmony_ci			vertex ""
3160e5c31af7Sopenharmony_ci				#version 300 es
3161e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
3162e5c31af7Sopenharmony_ci				struct Struct {mediump float a; mediump int b;};
3163e5c31af7Sopenharmony_ci				uniform Struct val;
3164e5c31af7Sopenharmony_ci				out mediump float res;
3165e5c31af7Sopenharmony_ci				void main()
3166e5c31af7Sopenharmony_ci				{
3167e5c31af7Sopenharmony_ci					res = val.a;
3168e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
3169e5c31af7Sopenharmony_ci				}
3170e5c31af7Sopenharmony_ci			""
3171e5c31af7Sopenharmony_ci			fragment ""
3172e5c31af7Sopenharmony_ci				#version 300 es
3173e5c31af7Sopenharmony_ci				precision mediump float;
3174e5c31af7Sopenharmony_ci				struct Struct {mediump float a; mediump int b;};
3175e5c31af7Sopenharmony_ci				uniform Struct val;
3176e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
3177e5c31af7Sopenharmony_ci				in mediump float res;
3178e5c31af7Sopenharmony_ci				void main()
3179e5c31af7Sopenharmony_ci				{			out0 = res + float(val.b);
3180e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
3181e5c31af7Sopenharmony_ci				}
3182e5c31af7Sopenharmony_ci			""
3183e5c31af7Sopenharmony_ci		end
3184e5c31af7Sopenharmony_ci
3185e5c31af7Sopenharmony_ci		case partial_bvec2_vec2
3186e5c31af7Sopenharmony_ci			version 300 es
3187e5c31af7Sopenharmony_ci			desc "Uniform struct declared in both, used partially in both. Datatype bvec2 and vec2"
3188e5c31af7Sopenharmony_ci			values {
3189e5c31af7Sopenharmony_ci				uniform bvec2 val.a = bvec2(true, true);
3190e5c31af7Sopenharmony_ci				uniform vec2 val.b = vec2(1.0, 2.0);
3191e5c31af7Sopenharmony_ci				output float out0 = 3.0;
3192e5c31af7Sopenharmony_ci			}
3193e5c31af7Sopenharmony_ci			vertex ""
3194e5c31af7Sopenharmony_ci				#version 300 es
3195e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
3196e5c31af7Sopenharmony_ci				struct Struct {bvec2 a; mediump vec2 b;};
3197e5c31af7Sopenharmony_ci				uniform Struct val;
3198e5c31af7Sopenharmony_ci				out mediump float res;
3199e5c31af7Sopenharmony_ci				void main()
3200e5c31af7Sopenharmony_ci				{
3201e5c31af7Sopenharmony_ci					res = float(val.a.x);
3202e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
3203e5c31af7Sopenharmony_ci				}
3204e5c31af7Sopenharmony_ci			""
3205e5c31af7Sopenharmony_ci			fragment ""
3206e5c31af7Sopenharmony_ci				#version 300 es
3207e5c31af7Sopenharmony_ci				precision mediump float;
3208e5c31af7Sopenharmony_ci				struct Struct {bvec2 a; mediump vec2 b;};
3209e5c31af7Sopenharmony_ci				uniform Struct val;
3210e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
3211e5c31af7Sopenharmony_ci				in mediump float res;
3212e5c31af7Sopenharmony_ci				void main()
3213e5c31af7Sopenharmony_ci				{			out0 = res + val.b.y;
3214e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
3215e5c31af7Sopenharmony_ci				}
3216e5c31af7Sopenharmony_ci			""
3217e5c31af7Sopenharmony_ci		end
3218e5c31af7Sopenharmony_ci
3219e5c31af7Sopenharmony_ci		case partial_ivec2_vec2
3220e5c31af7Sopenharmony_ci			version 300 es
3221e5c31af7Sopenharmony_ci			desc "Uniform struct declared in both, used partially in both. Datatype ivec2 and vec2"
3222e5c31af7Sopenharmony_ci			values {
3223e5c31af7Sopenharmony_ci				uniform ivec2 val.a = ivec2(1, 2);
3224e5c31af7Sopenharmony_ci				uniform vec2 val.b = vec2(1.0, 2.0);
3225e5c31af7Sopenharmony_ci				output float out0 = 3.0;
3226e5c31af7Sopenharmony_ci			}
3227e5c31af7Sopenharmony_ci			vertex ""
3228e5c31af7Sopenharmony_ci				#version 300 es
3229e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
3230e5c31af7Sopenharmony_ci				struct Struct {mediump ivec2 a; mediump vec2 b;};
3231e5c31af7Sopenharmony_ci				uniform Struct val;
3232e5c31af7Sopenharmony_ci				out mediump float res;
3233e5c31af7Sopenharmony_ci				void main()
3234e5c31af7Sopenharmony_ci				{
3235e5c31af7Sopenharmony_ci					res = vec2(val.a).x;
3236e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
3237e5c31af7Sopenharmony_ci				}
3238e5c31af7Sopenharmony_ci			""
3239e5c31af7Sopenharmony_ci			fragment ""
3240e5c31af7Sopenharmony_ci				#version 300 es
3241e5c31af7Sopenharmony_ci				precision mediump float;
3242e5c31af7Sopenharmony_ci				struct Struct {mediump ivec2 a; mediump vec2 b;};
3243e5c31af7Sopenharmony_ci				uniform Struct val;
3244e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
3245e5c31af7Sopenharmony_ci				in mediump float res;
3246e5c31af7Sopenharmony_ci				void main()
3247e5c31af7Sopenharmony_ci				{			out0 = res + val.b.y;
3248e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
3249e5c31af7Sopenharmony_ci				}
3250e5c31af7Sopenharmony_ci			""
3251e5c31af7Sopenharmony_ci		end
3252e5c31af7Sopenharmony_ci
3253e5c31af7Sopenharmony_ci		case partial_ivec2_ivec2
3254e5c31af7Sopenharmony_ci			version 300 es
3255e5c31af7Sopenharmony_ci			desc "Uniform struct declared in both, used partially in both. Datatype ivec2 and ivec2"
3256e5c31af7Sopenharmony_ci			values {
3257e5c31af7Sopenharmony_ci				uniform ivec2 val.a = ivec2(1, 2);
3258e5c31af7Sopenharmony_ci				uniform ivec2 val.b = ivec2(1, 2);
3259e5c31af7Sopenharmony_ci				output float out0 = 3.0;
3260e5c31af7Sopenharmony_ci			}
3261e5c31af7Sopenharmony_ci			vertex ""
3262e5c31af7Sopenharmony_ci				#version 300 es
3263e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
3264e5c31af7Sopenharmony_ci				struct Struct {mediump ivec2 a; mediump ivec2 b;};
3265e5c31af7Sopenharmony_ci				uniform Struct val;
3266e5c31af7Sopenharmony_ci				out mediump float res;
3267e5c31af7Sopenharmony_ci				void main()
3268e5c31af7Sopenharmony_ci				{
3269e5c31af7Sopenharmony_ci					res = vec2(val.a).x;
3270e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
3271e5c31af7Sopenharmony_ci				}
3272e5c31af7Sopenharmony_ci			""
3273e5c31af7Sopenharmony_ci			fragment ""
3274e5c31af7Sopenharmony_ci				#version 300 es
3275e5c31af7Sopenharmony_ci				precision mediump float;
3276e5c31af7Sopenharmony_ci				struct Struct {mediump ivec2 a; mediump ivec2 b;};
3277e5c31af7Sopenharmony_ci				uniform Struct val;
3278e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
3279e5c31af7Sopenharmony_ci				in mediump float res;
3280e5c31af7Sopenharmony_ci				void main()
3281e5c31af7Sopenharmony_ci				{			out0 = res + vec2(val.b).y;
3282e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
3283e5c31af7Sopenharmony_ci				}
3284e5c31af7Sopenharmony_ci			""
3285e5c31af7Sopenharmony_ci		end
3286e5c31af7Sopenharmony_ci
3287e5c31af7Sopenharmony_ci		case type_conflict_1
3288e5c31af7Sopenharmony_ci			version 300 es
3289e5c31af7Sopenharmony_ci			desc "Fragment struct has one less member than fragment version"
3290e5c31af7Sopenharmony_ci			expect link_fail
3291e5c31af7Sopenharmony_ci			values {output float out0 = 3.0;}
3292e5c31af7Sopenharmony_ci			vertex ""
3293e5c31af7Sopenharmony_ci				#version 300 es
3294e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
3295e5c31af7Sopenharmony_ci				struct Struct {mediump float a; mediump float b;};
3296e5c31af7Sopenharmony_ci				uniform Struct val;
3297e5c31af7Sopenharmony_ci				out mediump float res;
3298e5c31af7Sopenharmony_ci				void main()
3299e5c31af7Sopenharmony_ci				{
3300e5c31af7Sopenharmony_ci					res = val.a;
3301e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
3302e5c31af7Sopenharmony_ci				}
3303e5c31af7Sopenharmony_ci			""
3304e5c31af7Sopenharmony_ci			fragment ""
3305e5c31af7Sopenharmony_ci				#version 300 es
3306e5c31af7Sopenharmony_ci				precision mediump float;
3307e5c31af7Sopenharmony_ci				struct Struct {mediump float a;};
3308e5c31af7Sopenharmony_ci				uniform Struct val;
3309e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
3310e5c31af7Sopenharmony_ci				in mediump float res;
3311e5c31af7Sopenharmony_ci				void main()
3312e5c31af7Sopenharmony_ci				{			out0 = res + val.a;
3313e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
3314e5c31af7Sopenharmony_ci				}
3315e5c31af7Sopenharmony_ci			""
3316e5c31af7Sopenharmony_ci		end
3317e5c31af7Sopenharmony_ci
3318e5c31af7Sopenharmony_ci		case type_conflict_2
3319e5c31af7Sopenharmony_ci			version 300 es
3320e5c31af7Sopenharmony_ci			desc "Vertex struct has int, fragment struct has float."
3321e5c31af7Sopenharmony_ci			expect link_fail
3322e5c31af7Sopenharmony_ci			values {output float out0 = 3.0;}
3323e5c31af7Sopenharmony_ci			vertex ""
3324e5c31af7Sopenharmony_ci				#version 300 es
3325e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
3326e5c31af7Sopenharmony_ci				struct Struct {mediump int a;};
3327e5c31af7Sopenharmony_ci				uniform Struct val;
3328e5c31af7Sopenharmony_ci				out mediump float res;
3329e5c31af7Sopenharmony_ci				void main()
3330e5c31af7Sopenharmony_ci				{
3331e5c31af7Sopenharmony_ci					res = float(val.a);
3332e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
3333e5c31af7Sopenharmony_ci				}
3334e5c31af7Sopenharmony_ci			""
3335e5c31af7Sopenharmony_ci			fragment ""
3336e5c31af7Sopenharmony_ci				#version 300 es
3337e5c31af7Sopenharmony_ci				precision mediump float;
3338e5c31af7Sopenharmony_ci				struct Struct {mediump float a;};
3339e5c31af7Sopenharmony_ci				uniform Struct val;
3340e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
3341e5c31af7Sopenharmony_ci				in mediump float res;
3342e5c31af7Sopenharmony_ci				void main()
3343e5c31af7Sopenharmony_ci				{			out0 = val.a;
3344e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
3345e5c31af7Sopenharmony_ci				}
3346e5c31af7Sopenharmony_ci			""
3347e5c31af7Sopenharmony_ci		end
3348e5c31af7Sopenharmony_ci
3349e5c31af7Sopenharmony_ci		case type_conflict_3
3350e5c31af7Sopenharmony_ci			version 300 es
3351e5c31af7Sopenharmony_ci			desc "Vertex struct has vec3, fragment struct has vec4."
3352e5c31af7Sopenharmony_ci			expect link_fail
3353e5c31af7Sopenharmony_ci			values {output float out0 = 3.0;}
3354e5c31af7Sopenharmony_ci			vertex ""
3355e5c31af7Sopenharmony_ci				#version 300 es
3356e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
3357e5c31af7Sopenharmony_ci				struct Struct {mediump vec3 a;};
3358e5c31af7Sopenharmony_ci				uniform Struct val;
3359e5c31af7Sopenharmony_ci				out mediump float res;
3360e5c31af7Sopenharmony_ci				void main()
3361e5c31af7Sopenharmony_ci				{
3362e5c31af7Sopenharmony_ci					res = float(val.a.x);
3363e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
3364e5c31af7Sopenharmony_ci				}
3365e5c31af7Sopenharmony_ci			""
3366e5c31af7Sopenharmony_ci			fragment ""
3367e5c31af7Sopenharmony_ci				#version 300 es
3368e5c31af7Sopenharmony_ci				precision mediump float;
3369e5c31af7Sopenharmony_ci				struct Struct {mediump vec4 a;};
3370e5c31af7Sopenharmony_ci				uniform Struct val;
3371e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
3372e5c31af7Sopenharmony_ci				in mediump float res;
3373e5c31af7Sopenharmony_ci				void main()
3374e5c31af7Sopenharmony_ci				{			out0 = val.a.x;
3375e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
3376e5c31af7Sopenharmony_ci				}
3377e5c31af7Sopenharmony_ci			""
3378e5c31af7Sopenharmony_ci		end
3379e5c31af7Sopenharmony_ci
3380e5c31af7Sopenharmony_ci		case precision_conflict_1
3381e5c31af7Sopenharmony_ci			version 300 es
3382e5c31af7Sopenharmony_ci			desc "Vertex side struct has highp, fragment side struct mediump."
3383e5c31af7Sopenharmony_ci			expect link_fail
3384e5c31af7Sopenharmony_ci			values {output float out0 = 3.0;}
3385e5c31af7Sopenharmony_ci			vertex ""
3386e5c31af7Sopenharmony_ci				#version 300 es
3387e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
3388e5c31af7Sopenharmony_ci				struct Struct {highp float a;};
3389e5c31af7Sopenharmony_ci				uniform Struct val;
3390e5c31af7Sopenharmony_ci				out mediump float res;
3391e5c31af7Sopenharmony_ci				void main()
3392e5c31af7Sopenharmony_ci				{
3393e5c31af7Sopenharmony_ci					res = val.a;
3394e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
3395e5c31af7Sopenharmony_ci				}
3396e5c31af7Sopenharmony_ci			""
3397e5c31af7Sopenharmony_ci			fragment ""
3398e5c31af7Sopenharmony_ci				#version 300 es
3399e5c31af7Sopenharmony_ci				precision mediump float;
3400e5c31af7Sopenharmony_ci				struct Struct {mediump float a;};
3401e5c31af7Sopenharmony_ci				uniform Struct val;
3402e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
3403e5c31af7Sopenharmony_ci				in mediump float res;
3404e5c31af7Sopenharmony_ci				void main()
3405e5c31af7Sopenharmony_ci				{			out0 = val.a;
3406e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
3407e5c31af7Sopenharmony_ci				}
3408e5c31af7Sopenharmony_ci			""
3409e5c31af7Sopenharmony_ci		end
3410e5c31af7Sopenharmony_ci
3411e5c31af7Sopenharmony_ci		case precision_conflict_2
3412e5c31af7Sopenharmony_ci			version 300 es
3413e5c31af7Sopenharmony_ci			desc "Vertex side struct has mediump, fragment side struct lowp."
3414e5c31af7Sopenharmony_ci			expect link_fail
3415e5c31af7Sopenharmony_ci			values {output float out0 = 3.0;}
3416e5c31af7Sopenharmony_ci			vertex ""
3417e5c31af7Sopenharmony_ci				#version 300 es
3418e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
3419e5c31af7Sopenharmony_ci				struct Struct {mediump float a;};
3420e5c31af7Sopenharmony_ci				uniform Struct val;
3421e5c31af7Sopenharmony_ci				out mediump float res;
3422e5c31af7Sopenharmony_ci				void main()
3423e5c31af7Sopenharmony_ci				{
3424e5c31af7Sopenharmony_ci					res = val.a;
3425e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
3426e5c31af7Sopenharmony_ci				}
3427e5c31af7Sopenharmony_ci			""
3428e5c31af7Sopenharmony_ci			fragment ""
3429e5c31af7Sopenharmony_ci				#version 300 es
3430e5c31af7Sopenharmony_ci				precision mediump float;
3431e5c31af7Sopenharmony_ci				struct Struct {lowp float a;};
3432e5c31af7Sopenharmony_ci				uniform Struct val;
3433e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
3434e5c31af7Sopenharmony_ci				in mediump float res;
3435e5c31af7Sopenharmony_ci				void main()
3436e5c31af7Sopenharmony_ci				{			out0 = val.a;
3437e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
3438e5c31af7Sopenharmony_ci				}
3439e5c31af7Sopenharmony_ci			""
3440e5c31af7Sopenharmony_ci		end
3441e5c31af7Sopenharmony_ci
3442e5c31af7Sopenharmony_ci		case precision_conflict_3
3443e5c31af7Sopenharmony_ci			version 300 es
3444e5c31af7Sopenharmony_ci			desc "Vertex side struct has lowp, fragment side struct mediump."
3445e5c31af7Sopenharmony_ci			expect link_fail
3446e5c31af7Sopenharmony_ci			values {output float out0 = 3.0;}
3447e5c31af7Sopenharmony_ci			vertex ""
3448e5c31af7Sopenharmony_ci				#version 300 es
3449e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
3450e5c31af7Sopenharmony_ci				struct Struct {lowp float a;};
3451e5c31af7Sopenharmony_ci				uniform Struct val;
3452e5c31af7Sopenharmony_ci				out mediump float res;
3453e5c31af7Sopenharmony_ci				void main()
3454e5c31af7Sopenharmony_ci				{
3455e5c31af7Sopenharmony_ci					res = val.a;
3456e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
3457e5c31af7Sopenharmony_ci				}
3458e5c31af7Sopenharmony_ci			""
3459e5c31af7Sopenharmony_ci			fragment ""
3460e5c31af7Sopenharmony_ci				#version 300 es
3461e5c31af7Sopenharmony_ci				precision mediump float;
3462e5c31af7Sopenharmony_ci				struct Struct {mediump float a;};
3463e5c31af7Sopenharmony_ci				uniform Struct val;
3464e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
3465e5c31af7Sopenharmony_ci				in mediump float res;
3466e5c31af7Sopenharmony_ci				void main()
3467e5c31af7Sopenharmony_ci				{			out0 = val.a;
3468e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
3469e5c31af7Sopenharmony_ci				}
3470e5c31af7Sopenharmony_ci			""
3471e5c31af7Sopenharmony_ci		end
3472e5c31af7Sopenharmony_ci
3473e5c31af7Sopenharmony_ci		case precision_conflict_4
3474e5c31af7Sopenharmony_ci			version 300 es
3475e5c31af7Sopenharmony_ci			desc "Vertex side struct has lowp, fragment side struct implicit mediump."
3476e5c31af7Sopenharmony_ci			expect link_fail
3477e5c31af7Sopenharmony_ci			values {output float out0 = 3.0;}
3478e5c31af7Sopenharmony_ci			vertex ""
3479e5c31af7Sopenharmony_ci				#version 300 es
3480e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
3481e5c31af7Sopenharmony_ci				struct Struct {lowp float a;};
3482e5c31af7Sopenharmony_ci				uniform Struct val;
3483e5c31af7Sopenharmony_ci				out mediump float res;
3484e5c31af7Sopenharmony_ci				void main()
3485e5c31af7Sopenharmony_ci				{
3486e5c31af7Sopenharmony_ci					res = val.a;
3487e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
3488e5c31af7Sopenharmony_ci				}
3489e5c31af7Sopenharmony_ci			""
3490e5c31af7Sopenharmony_ci			fragment ""
3491e5c31af7Sopenharmony_ci				#version 300 es
3492e5c31af7Sopenharmony_ci				precision mediump float;
3493e5c31af7Sopenharmony_ci				struct Struct {float a;};
3494e5c31af7Sopenharmony_ci				uniform Struct val;
3495e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
3496e5c31af7Sopenharmony_ci				in mediump float res;
3497e5c31af7Sopenharmony_ci				void main()
3498e5c31af7Sopenharmony_ci				{			out0 = val.a;
3499e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
3500e5c31af7Sopenharmony_ci				}
3501e5c31af7Sopenharmony_ci			""
3502e5c31af7Sopenharmony_ci		end
3503e5c31af7Sopenharmony_ci
3504e5c31af7Sopenharmony_ci		case light_struct_highp
3505e5c31af7Sopenharmony_ci			version 300 es
3506e5c31af7Sopenharmony_ci			desc "Complex Light struct from use case tests."
3507e5c31af7Sopenharmony_ci			values {
3508e5c31af7Sopenharmony_ci				uniform float val.constantAttenuation = 1.0;
3509e5c31af7Sopenharmony_ci				uniform float val.quadraticAttenuation = 1.0;
3510e5c31af7Sopenharmony_ci				output float out0 = 2.0;
3511e5c31af7Sopenharmony_ci			}
3512e5c31af7Sopenharmony_ci			vertex ""
3513e5c31af7Sopenharmony_ci				#version 300 es
3514e5c31af7Sopenharmony_ci				struct Light
3515e5c31af7Sopenharmony_ci				{
3516e5c31af7Sopenharmony_ci					mediump vec3	color;
3517e5c31af7Sopenharmony_ci					highp vec4		position;
3518e5c31af7Sopenharmony_ci					highp vec3		direction;
3519e5c31af7Sopenharmony_ci					mediump float	constantAttenuation;
3520e5c31af7Sopenharmony_ci					mediump float	linearAttenuation;
3521e5c31af7Sopenharmony_ci					mediump float	quadraticAttenuation;
3522e5c31af7Sopenharmony_ci				};
3523e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
3524e5c31af7Sopenharmony_ci				uniform Light val;
3525e5c31af7Sopenharmony_ci				out mediump float res;
3526e5c31af7Sopenharmony_ci				void main()
3527e5c31af7Sopenharmony_ci				{
3528e5c31af7Sopenharmony_ci					res = val.constantAttenuation;
3529e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
3530e5c31af7Sopenharmony_ci				}
3531e5c31af7Sopenharmony_ci			""
3532e5c31af7Sopenharmony_ci			fragment ""
3533e5c31af7Sopenharmony_ci				#version 300 es
3534e5c31af7Sopenharmony_ci				precision mediump float;
3535e5c31af7Sopenharmony_ci				struct Light
3536e5c31af7Sopenharmony_ci				{
3537e5c31af7Sopenharmony_ci					mediump vec3	color;
3538e5c31af7Sopenharmony_ci					highp vec4		position;
3539e5c31af7Sopenharmony_ci					highp vec3		direction;
3540e5c31af7Sopenharmony_ci					mediump float	constantAttenuation;
3541e5c31af7Sopenharmony_ci					mediump float	linearAttenuation;
3542e5c31af7Sopenharmony_ci					mediump float	quadraticAttenuation;
3543e5c31af7Sopenharmony_ci				};
3544e5c31af7Sopenharmony_ci				struct Struct {float a;};
3545e5c31af7Sopenharmony_ci				uniform Light val;
3546e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
3547e5c31af7Sopenharmony_ci				in mediump float res;
3548e5c31af7Sopenharmony_ci				void main()
3549e5c31af7Sopenharmony_ci				{
3550e5c31af7Sopenharmony_ci					out0 = res + val.quadraticAttenuation;
3551e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
3552e5c31af7Sopenharmony_ci				}
3553e5c31af7Sopenharmony_ci			""
3554e5c31af7Sopenharmony_ci		end
3555e5c31af7Sopenharmony_ci
3556e5c31af7Sopenharmony_ci		case light_struct_mediump
3557e5c31af7Sopenharmony_ci			version 300 es
3558e5c31af7Sopenharmony_ci			desc "Complex Light struct from use case tests, without highp usage"
3559e5c31af7Sopenharmony_ci			values {
3560e5c31af7Sopenharmony_ci				uniform float val.constantAttenuation = 1.0;
3561e5c31af7Sopenharmony_ci				uniform float val.quadraticAttenuation = 1.0;
3562e5c31af7Sopenharmony_ci				output float out0 = 2.0;
3563e5c31af7Sopenharmony_ci			}
3564e5c31af7Sopenharmony_ci			vertex ""
3565e5c31af7Sopenharmony_ci				#version 300 es
3566e5c31af7Sopenharmony_ci				struct Light
3567e5c31af7Sopenharmony_ci				{
3568e5c31af7Sopenharmony_ci					mediump vec3	color;
3569e5c31af7Sopenharmony_ci					mediump vec4	position;
3570e5c31af7Sopenharmony_ci					mediump vec3	direction;
3571e5c31af7Sopenharmony_ci					mediump float	constantAttenuation;
3572e5c31af7Sopenharmony_ci					mediump float	linearAttenuation;
3573e5c31af7Sopenharmony_ci					mediump float	quadraticAttenuation;
3574e5c31af7Sopenharmony_ci				};
3575e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
3576e5c31af7Sopenharmony_ci				uniform Light val;
3577e5c31af7Sopenharmony_ci				out mediump float res;
3578e5c31af7Sopenharmony_ci				void main()
3579e5c31af7Sopenharmony_ci				{
3580e5c31af7Sopenharmony_ci					res = val.constantAttenuation;
3581e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
3582e5c31af7Sopenharmony_ci				}
3583e5c31af7Sopenharmony_ci			""
3584e5c31af7Sopenharmony_ci			fragment ""
3585e5c31af7Sopenharmony_ci				#version 300 es
3586e5c31af7Sopenharmony_ci				precision mediump float;
3587e5c31af7Sopenharmony_ci				struct Light
3588e5c31af7Sopenharmony_ci				{
3589e5c31af7Sopenharmony_ci					mediump vec3	color;
3590e5c31af7Sopenharmony_ci					mediump vec4	position;
3591e5c31af7Sopenharmony_ci					mediump vec3	direction;
3592e5c31af7Sopenharmony_ci					mediump float	constantAttenuation;
3593e5c31af7Sopenharmony_ci					mediump float	linearAttenuation;
3594e5c31af7Sopenharmony_ci					mediump float	quadraticAttenuation;
3595e5c31af7Sopenharmony_ci				};
3596e5c31af7Sopenharmony_ci				struct Struct {float a;};
3597e5c31af7Sopenharmony_ci				uniform Light val;
3598e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
3599e5c31af7Sopenharmony_ci				in mediump float res;
3600e5c31af7Sopenharmony_ci				void main()
3601e5c31af7Sopenharmony_ci				{
3602e5c31af7Sopenharmony_ci					out0 = res + val.quadraticAttenuation;
3603e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
3604e5c31af7Sopenharmony_ci				}
3605e5c31af7Sopenharmony_ci			""
3606e5c31af7Sopenharmony_ci		end
3607e5c31af7Sopenharmony_ci	end
3608e5c31af7Sopenharmony_ci
3609e5c31af7Sopenharmony_ci	group block "Uniform blocks"
3610e5c31af7Sopenharmony_ci		case type_mismatch
3611e5c31af7Sopenharmony_ci			version 300 es
3612e5c31af7Sopenharmony_ci			expect link_fail
3613e5c31af7Sopenharmony_ci			vertex ""
3614e5c31af7Sopenharmony_ci				#version 300 es
3615e5c31af7Sopenharmony_ci
3616e5c31af7Sopenharmony_ci				uniform Block
3617e5c31af7Sopenharmony_ci				{
3618e5c31af7Sopenharmony_ci					highp vec4 val;
3619e5c31af7Sopenharmony_ci				};
3620e5c31af7Sopenharmony_ci
3621e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
3622e5c31af7Sopenharmony_ci				out mediump float res;
3623e5c31af7Sopenharmony_ci				void main()
3624e5c31af7Sopenharmony_ci				{
3625e5c31af7Sopenharmony_ci					res = val.x;
3626e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
3627e5c31af7Sopenharmony_ci				}
3628e5c31af7Sopenharmony_ci			""
3629e5c31af7Sopenharmony_ci			fragment ""
3630e5c31af7Sopenharmony_ci				#version 300 es
3631e5c31af7Sopenharmony_ci
3632e5c31af7Sopenharmony_ci				uniform Block
3633e5c31af7Sopenharmony_ci				{
3634e5c31af7Sopenharmony_ci					highp vec3 val;
3635e5c31af7Sopenharmony_ci				};
3636e5c31af7Sopenharmony_ci
3637e5c31af7Sopenharmony_ci				precision mediump float;
3638e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
3639e5c31af7Sopenharmony_ci				in mediump float res;
3640e5c31af7Sopenharmony_ci				void main()
3641e5c31af7Sopenharmony_ci				{
3642e5c31af7Sopenharmony_ci					dEQP_FragColor = vec4(val, 1.0);
3643e5c31af7Sopenharmony_ci				}
3644e5c31af7Sopenharmony_ci			""
3645e5c31af7Sopenharmony_ci		end
3646e5c31af7Sopenharmony_ci
3647e5c31af7Sopenharmony_ci		case members_mismatch
3648e5c31af7Sopenharmony_ci			version 300 es
3649e5c31af7Sopenharmony_ci			expect link_fail
3650e5c31af7Sopenharmony_ci			vertex ""
3651e5c31af7Sopenharmony_ci				#version 300 es
3652e5c31af7Sopenharmony_ci
3653e5c31af7Sopenharmony_ci				uniform Block
3654e5c31af7Sopenharmony_ci				{
3655e5c31af7Sopenharmony_ci					highp vec4 val;
3656e5c31af7Sopenharmony_ci				};
3657e5c31af7Sopenharmony_ci
3658e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
3659e5c31af7Sopenharmony_ci				out mediump float res;
3660e5c31af7Sopenharmony_ci				void main()
3661e5c31af7Sopenharmony_ci				{
3662e5c31af7Sopenharmony_ci					res = val.x;
3663e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
3664e5c31af7Sopenharmony_ci				}
3665e5c31af7Sopenharmony_ci			""
3666e5c31af7Sopenharmony_ci			fragment ""
3667e5c31af7Sopenharmony_ci				#version 300 es
3668e5c31af7Sopenharmony_ci
3669e5c31af7Sopenharmony_ci				uniform Block
3670e5c31af7Sopenharmony_ci				{
3671e5c31af7Sopenharmony_ci					highp vec4 val;
3672e5c31af7Sopenharmony_ci					lowp uint u;
3673e5c31af7Sopenharmony_ci				};
3674e5c31af7Sopenharmony_ci
3675e5c31af7Sopenharmony_ci				precision mediump float;
3676e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
3677e5c31af7Sopenharmony_ci				in mediump float res;
3678e5c31af7Sopenharmony_ci				void main()
3679e5c31af7Sopenharmony_ci				{
3680e5c31af7Sopenharmony_ci					dEQP_FragColor = vec4(val);
3681e5c31af7Sopenharmony_ci				}
3682e5c31af7Sopenharmony_ci			""
3683e5c31af7Sopenharmony_ci		end
3684e5c31af7Sopenharmony_ci
3685e5c31af7Sopenharmony_ci		case layout_qualifier_mismatch_1
3686e5c31af7Sopenharmony_ci			version 300 es
3687e5c31af7Sopenharmony_ci			expect link_fail
3688e5c31af7Sopenharmony_ci			vertex ""
3689e5c31af7Sopenharmony_ci				#version 300 es
3690e5c31af7Sopenharmony_ci
3691e5c31af7Sopenharmony_ci				layout(std140) uniform Block
3692e5c31af7Sopenharmony_ci				{
3693e5c31af7Sopenharmony_ci					highp vec4 val;
3694e5c31af7Sopenharmony_ci				};
3695e5c31af7Sopenharmony_ci
3696e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
3697e5c31af7Sopenharmony_ci				out mediump float res;
3698e5c31af7Sopenharmony_ci				void main()
3699e5c31af7Sopenharmony_ci				{
3700e5c31af7Sopenharmony_ci					res = val.x;
3701e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
3702e5c31af7Sopenharmony_ci				}
3703e5c31af7Sopenharmony_ci			""
3704e5c31af7Sopenharmony_ci			fragment ""
3705e5c31af7Sopenharmony_ci				#version 300 es
3706e5c31af7Sopenharmony_ci
3707e5c31af7Sopenharmony_ci				uniform Block
3708e5c31af7Sopenharmony_ci				{
3709e5c31af7Sopenharmony_ci					highp vec4 val;
3710e5c31af7Sopenharmony_ci				};
3711e5c31af7Sopenharmony_ci
3712e5c31af7Sopenharmony_ci				precision mediump float;
3713e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
3714e5c31af7Sopenharmony_ci				in mediump float res;
3715e5c31af7Sopenharmony_ci				void main()
3716e5c31af7Sopenharmony_ci				{
3717e5c31af7Sopenharmony_ci					dEQP_FragColor = vec4(val);
3718e5c31af7Sopenharmony_ci				}
3719e5c31af7Sopenharmony_ci			""
3720e5c31af7Sopenharmony_ci		end
3721e5c31af7Sopenharmony_ci
3722e5c31af7Sopenharmony_ci		case layout_qualifier_mismatch_2
3723e5c31af7Sopenharmony_ci			version 300 es
3724e5c31af7Sopenharmony_ci			expect link_fail
3725e5c31af7Sopenharmony_ci			vertex ""
3726e5c31af7Sopenharmony_ci				#version 300 es
3727e5c31af7Sopenharmony_ci
3728e5c31af7Sopenharmony_ci				layout(shared) uniform Block
3729e5c31af7Sopenharmony_ci				{
3730e5c31af7Sopenharmony_ci					highp vec4 val;
3731e5c31af7Sopenharmony_ci				};
3732e5c31af7Sopenharmony_ci
3733e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
3734e5c31af7Sopenharmony_ci				out mediump float res;
3735e5c31af7Sopenharmony_ci				void main()
3736e5c31af7Sopenharmony_ci				{
3737e5c31af7Sopenharmony_ci					res = val.x;
3738e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
3739e5c31af7Sopenharmony_ci				}
3740e5c31af7Sopenharmony_ci			""
3741e5c31af7Sopenharmony_ci			fragment ""
3742e5c31af7Sopenharmony_ci				#version 300 es
3743e5c31af7Sopenharmony_ci
3744e5c31af7Sopenharmony_ci				layout(packed) uniform Block
3745e5c31af7Sopenharmony_ci				{
3746e5c31af7Sopenharmony_ci					highp vec4 val;
3747e5c31af7Sopenharmony_ci				};
3748e5c31af7Sopenharmony_ci
3749e5c31af7Sopenharmony_ci				precision mediump float;
3750e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
3751e5c31af7Sopenharmony_ci				in mediump float res;
3752e5c31af7Sopenharmony_ci				void main()
3753e5c31af7Sopenharmony_ci				{
3754e5c31af7Sopenharmony_ci					dEQP_FragColor = vec4(val);
3755e5c31af7Sopenharmony_ci				}
3756e5c31af7Sopenharmony_ci			""
3757e5c31af7Sopenharmony_ci		end
3758e5c31af7Sopenharmony_ci
3759e5c31af7Sopenharmony_ci		case layout_qualifier_mismatch_3
3760e5c31af7Sopenharmony_ci			version 300 es
3761e5c31af7Sopenharmony_ci			expect link_fail
3762e5c31af7Sopenharmony_ci			vertex ""
3763e5c31af7Sopenharmony_ci				#version 300 es
3764e5c31af7Sopenharmony_ci
3765e5c31af7Sopenharmony_ci				layout(row_major) uniform Block
3766e5c31af7Sopenharmony_ci				{
3767e5c31af7Sopenharmony_ci					highp vec4 val;
3768e5c31af7Sopenharmony_ci				};
3769e5c31af7Sopenharmony_ci
3770e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
3771e5c31af7Sopenharmony_ci				out mediump float res;
3772e5c31af7Sopenharmony_ci				void main()
3773e5c31af7Sopenharmony_ci				{
3774e5c31af7Sopenharmony_ci					res = val.x;
3775e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
3776e5c31af7Sopenharmony_ci				}
3777e5c31af7Sopenharmony_ci			""
3778e5c31af7Sopenharmony_ci			fragment ""
3779e5c31af7Sopenharmony_ci				#version 300 es
3780e5c31af7Sopenharmony_ci
3781e5c31af7Sopenharmony_ci				layout(column_major) uniform Block
3782e5c31af7Sopenharmony_ci				{
3783e5c31af7Sopenharmony_ci					highp vec4 val;
3784e5c31af7Sopenharmony_ci				};
3785e5c31af7Sopenharmony_ci
3786e5c31af7Sopenharmony_ci				precision mediump float;
3787e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
3788e5c31af7Sopenharmony_ci				in mediump float res;
3789e5c31af7Sopenharmony_ci				void main()
3790e5c31af7Sopenharmony_ci				{
3791e5c31af7Sopenharmony_ci					dEQP_FragColor = vec4(val);
3792e5c31af7Sopenharmony_ci				}
3793e5c31af7Sopenharmony_ci			""
3794e5c31af7Sopenharmony_ci		end
3795e5c31af7Sopenharmony_ci
3796e5c31af7Sopenharmony_ci		case layout_qualifier_mismatch_4
3797e5c31af7Sopenharmony_ci			version 300 es
3798e5c31af7Sopenharmony_ci			expect link_fail
3799e5c31af7Sopenharmony_ci			vertex ""
3800e5c31af7Sopenharmony_ci				#version 300 es
3801e5c31af7Sopenharmony_ci
3802e5c31af7Sopenharmony_ci				layout(row_major) uniform Block
3803e5c31af7Sopenharmony_ci				{
3804e5c31af7Sopenharmony_ci					highp mat3 val;
3805e5c31af7Sopenharmony_ci				};
3806e5c31af7Sopenharmony_ci
3807e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
3808e5c31af7Sopenharmony_ci				out mediump float res;
3809e5c31af7Sopenharmony_ci				void main()
3810e5c31af7Sopenharmony_ci				{
3811e5c31af7Sopenharmony_ci					res = val[0][1];
3812e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
3813e5c31af7Sopenharmony_ci				}
3814e5c31af7Sopenharmony_ci			""
3815e5c31af7Sopenharmony_ci			fragment ""
3816e5c31af7Sopenharmony_ci				#version 300 es
3817e5c31af7Sopenharmony_ci
3818e5c31af7Sopenharmony_ci				layout(column_major) uniform Block
3819e5c31af7Sopenharmony_ci				{
3820e5c31af7Sopenharmony_ci					highp mat3 val;
3821e5c31af7Sopenharmony_ci				};
3822e5c31af7Sopenharmony_ci
3823e5c31af7Sopenharmony_ci				precision mediump float;
3824e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
3825e5c31af7Sopenharmony_ci				in mediump float res;
3826e5c31af7Sopenharmony_ci				void main()
3827e5c31af7Sopenharmony_ci				{
3828e5c31af7Sopenharmony_ci					dEQP_FragColor = vec4(val[2], 1.0);
3829e5c31af7Sopenharmony_ci				}
3830e5c31af7Sopenharmony_ci			""
3831e5c31af7Sopenharmony_ci		end
3832e5c31af7Sopenharmony_ci
3833e5c31af7Sopenharmony_ci		case layout_qualifier_mismatch_5
3834e5c31af7Sopenharmony_ci			version 300 es
3835e5c31af7Sopenharmony_ci			expect link_fail
3836e5c31af7Sopenharmony_ci			vertex ""
3837e5c31af7Sopenharmony_ci				#version 300 es
3838e5c31af7Sopenharmony_ci
3839e5c31af7Sopenharmony_ci				uniform Block
3840e5c31af7Sopenharmony_ci				{
3841e5c31af7Sopenharmony_ci					layout(row_major) uniform highp mat3 val;
3842e5c31af7Sopenharmony_ci				};
3843e5c31af7Sopenharmony_ci
3844e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
3845e5c31af7Sopenharmony_ci				out mediump float res;
3846e5c31af7Sopenharmony_ci				void main()
3847e5c31af7Sopenharmony_ci				{
3848e5c31af7Sopenharmony_ci					res = val[0][1];
3849e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
3850e5c31af7Sopenharmony_ci				}
3851e5c31af7Sopenharmony_ci			""
3852e5c31af7Sopenharmony_ci			fragment ""
3853e5c31af7Sopenharmony_ci				#version 300 es
3854e5c31af7Sopenharmony_ci
3855e5c31af7Sopenharmony_ci				uniform Block
3856e5c31af7Sopenharmony_ci				{
3857e5c31af7Sopenharmony_ci					layout(column_major) uniform highp mat3 val;
3858e5c31af7Sopenharmony_ci				};
3859e5c31af7Sopenharmony_ci
3860e5c31af7Sopenharmony_ci				precision mediump float;
3861e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
3862e5c31af7Sopenharmony_ci				in mediump float res;
3863e5c31af7Sopenharmony_ci				void main()
3864e5c31af7Sopenharmony_ci				{
3865e5c31af7Sopenharmony_ci					dEQP_FragColor = vec4(val[2], 1.0);
3866e5c31af7Sopenharmony_ci				}
3867e5c31af7Sopenharmony_ci			""
3868e5c31af7Sopenharmony_ci		end
3869e5c31af7Sopenharmony_ci	end
3870e5c31af7Sopenharmony_ciend
3871