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		# declared in vertex shader, no reference in frag shader
8e5c31af7Sopenharmony_ci		case vertex_declare
9e5c31af7Sopenharmony_ci			version 310 es
10e5c31af7Sopenharmony_ci			desc "varying declared in vertex shader, no reference in fragment shader"
11e5c31af7Sopenharmony_ci			vertex ""
12e5c31af7Sopenharmony_ci				#version 310 es
13e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
14e5c31af7Sopenharmony_ci				layout(location = 0) out mediump float var;
15e5c31af7Sopenharmony_ci				void main()
16e5c31af7Sopenharmony_ci				{
17e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
18e5c31af7Sopenharmony_ci				}
19e5c31af7Sopenharmony_ci			""
20e5c31af7Sopenharmony_ci			fragment ""
21e5c31af7Sopenharmony_ci				#version 310 es
22e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
23e5c31af7Sopenharmony_ci				void main()
24e5c31af7Sopenharmony_ci				{
25e5c31af7Sopenharmony_ci					${FRAG_COLOR} = vec4(1.0);
26e5c31af7Sopenharmony_ci				}
27e5c31af7Sopenharmony_ci			""
28e5c31af7Sopenharmony_ci		end
29e5c31af7Sopenharmony_ci
30e5c31af7Sopenharmony_ci		# declared in vertex shader, declared in frag shader
31e5c31af7Sopenharmony_ci		case both_declare
32e5c31af7Sopenharmony_ci			version 310 es
33e5c31af7Sopenharmony_ci			desc "varying declared in both vertex and fragment shader, but not used"
34e5c31af7Sopenharmony_ci			vertex ""
35e5c31af7Sopenharmony_ci				#version 310 es
36e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
37e5c31af7Sopenharmony_ci				layout(location = 0) out mediump float var;
38e5c31af7Sopenharmony_ci				void main()
39e5c31af7Sopenharmony_ci				{
40e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
41e5c31af7Sopenharmony_ci				}
42e5c31af7Sopenharmony_ci			""
43e5c31af7Sopenharmony_ci			fragment ""
44e5c31af7Sopenharmony_ci				#version 310 es
45e5c31af7Sopenharmony_ci				layout(location = 0) in mediump float var;
46e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
47e5c31af7Sopenharmony_ci				void main()
48e5c31af7Sopenharmony_ci				{
49e5c31af7Sopenharmony_ci					${FRAG_COLOR} = vec4(1.0);
50e5c31af7Sopenharmony_ci				}
51e5c31af7Sopenharmony_ci			""
52e5c31af7Sopenharmony_ci		end
53e5c31af7Sopenharmony_ci
54e5c31af7Sopenharmony_ci		# vec4 vs vec3
55e5c31af7Sopenharmony_ci		case legal_mismatch_vec4_vec3
56e5c31af7Sopenharmony_ci			version 310 es
57e5c31af7Sopenharmony_ci			desc "legal vertex to fragment shader varying type mismatches (vec4 to vec3)"
58e5c31af7Sopenharmony_ci			vertex ""
59e5c31af7Sopenharmony_ci				#version 310 es
60e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
61e5c31af7Sopenharmony_ci				layout(location = 0) out mediump vec4 var;
62e5c31af7Sopenharmony_ci				void main()
63e5c31af7Sopenharmony_ci				{
64e5c31af7Sopenharmony_ci					var.x = 0.0;
65e5c31af7Sopenharmony_ci					var.y = 0.0;
66e5c31af7Sopenharmony_ci					var.z = 0.0;
67e5c31af7Sopenharmony_ci					var.w = 0.0;
68e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
69e5c31af7Sopenharmony_ci				}
70e5c31af7Sopenharmony_ci			""
71e5c31af7Sopenharmony_ci			fragment ""
72e5c31af7Sopenharmony_ci				#version 310 es
73e5c31af7Sopenharmony_ci				layout(location = 0) in mediump vec3 var;
74e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
75e5c31af7Sopenharmony_ci				void main()
76e5c31af7Sopenharmony_ci				{
77e5c31af7Sopenharmony_ci					${FRAG_COLOR} = vec4(1.0 + var.x + var.y + var.z);
78e5c31af7Sopenharmony_ci				}
79e5c31af7Sopenharmony_ci			""
80e5c31af7Sopenharmony_ci		end
81e5c31af7Sopenharmony_ci
82e5c31af7Sopenharmony_ci		# vec4 vs vec2
83e5c31af7Sopenharmony_ci		case legal_mismatch_vec4_vec2
84e5c31af7Sopenharmony_ci			version 310 es
85e5c31af7Sopenharmony_ci			desc "legal vertex to fragment shader varying type mismatches (vec4 to vec2)"
86e5c31af7Sopenharmony_ci			vertex ""
87e5c31af7Sopenharmony_ci				#version 310 es
88e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
89e5c31af7Sopenharmony_ci				layout(location = 0) out mediump vec4 var;
90e5c31af7Sopenharmony_ci				void main()
91e5c31af7Sopenharmony_ci				{
92e5c31af7Sopenharmony_ci					var.x = 0.0;
93e5c31af7Sopenharmony_ci					var.y = 0.0;
94e5c31af7Sopenharmony_ci					var.z = 0.0;
95e5c31af7Sopenharmony_ci					var.w = 0.0;
96e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
97e5c31af7Sopenharmony_ci				}
98e5c31af7Sopenharmony_ci			""
99e5c31af7Sopenharmony_ci			fragment ""
100e5c31af7Sopenharmony_ci				#version 310 es
101e5c31af7Sopenharmony_ci				layout(location = 0) in mediump vec2 var;
102e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
103e5c31af7Sopenharmony_ci				void main()
104e5c31af7Sopenharmony_ci				{
105e5c31af7Sopenharmony_ci					${FRAG_COLOR} = vec4(1.0 + var.x + var.y);
106e5c31af7Sopenharmony_ci				}
107e5c31af7Sopenharmony_ci			""
108e5c31af7Sopenharmony_ci		end
109e5c31af7Sopenharmony_ci
110e5c31af7Sopenharmony_ci		# vec4 vs float
111e5c31af7Sopenharmony_ci		case legal_mismatch_vec4_float
112e5c31af7Sopenharmony_ci			version 310 es
113e5c31af7Sopenharmony_ci			desc "legal vertex to fragment shader varying type mismatches (vec4 to float)"
114e5c31af7Sopenharmony_ci			vertex ""
115e5c31af7Sopenharmony_ci				#version 310 es
116e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
117e5c31af7Sopenharmony_ci				layout(location = 0) out mediump vec4 var;
118e5c31af7Sopenharmony_ci				void main()
119e5c31af7Sopenharmony_ci				{
120e5c31af7Sopenharmony_ci					var.x = 0.0;
121e5c31af7Sopenharmony_ci					var.y = 0.0;
122e5c31af7Sopenharmony_ci					var.z = 0.0;
123e5c31af7Sopenharmony_ci					var.w = 0.0;
124e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
125e5c31af7Sopenharmony_ci				}
126e5c31af7Sopenharmony_ci			""
127e5c31af7Sopenharmony_ci			fragment ""
128e5c31af7Sopenharmony_ci				#version 310 es
129e5c31af7Sopenharmony_ci				layout(location = 0) in mediump float var;
130e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
131e5c31af7Sopenharmony_ci				void main()
132e5c31af7Sopenharmony_ci				{
133e5c31af7Sopenharmony_ci					${FRAG_COLOR} = vec4(1.0 + var);
134e5c31af7Sopenharmony_ci				}
135e5c31af7Sopenharmony_ci			""
136e5c31af7Sopenharmony_ci		end
137e5c31af7Sopenharmony_ci
138e5c31af7Sopenharmony_ci		# vec3 vs vec2
139e5c31af7Sopenharmony_ci		case legal_mismatch_vec3_vec2
140e5c31af7Sopenharmony_ci			version 310 es
141e5c31af7Sopenharmony_ci			desc "legal vertex to fragment shader varying type mismatches (vec3 to vec2)"
142e5c31af7Sopenharmony_ci			vertex ""
143e5c31af7Sopenharmony_ci				#version 310 es
144e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
145e5c31af7Sopenharmony_ci				layout(location = 0) out mediump vec3 var;
146e5c31af7Sopenharmony_ci				void main()
147e5c31af7Sopenharmony_ci				{
148e5c31af7Sopenharmony_ci					var.x = 0.0;
149e5c31af7Sopenharmony_ci					var.y = 0.0;
150e5c31af7Sopenharmony_ci					var.z = 0.0;
151e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
152e5c31af7Sopenharmony_ci				}
153e5c31af7Sopenharmony_ci			""
154e5c31af7Sopenharmony_ci			fragment ""
155e5c31af7Sopenharmony_ci				#version 310 es
156e5c31af7Sopenharmony_ci				layout(location = 0) in mediump vec2 var;
157e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
158e5c31af7Sopenharmony_ci				void main()
159e5c31af7Sopenharmony_ci				{
160e5c31af7Sopenharmony_ci					${FRAG_COLOR} = vec4(1.0 + var.x + var.y);
161e5c31af7Sopenharmony_ci				}
162e5c31af7Sopenharmony_ci			""
163e5c31af7Sopenharmony_ci		end
164e5c31af7Sopenharmony_ci
165e5c31af7Sopenharmony_ci		# vec3 vs float
166e5c31af7Sopenharmony_ci		case legal_mismatch_vec3_float
167e5c31af7Sopenharmony_ci			version 310 es
168e5c31af7Sopenharmony_ci			desc "legal vertex to fragment shader varying type mismatches (vec3 to float)"
169e5c31af7Sopenharmony_ci			vertex ""
170e5c31af7Sopenharmony_ci				#version 310 es
171e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
172e5c31af7Sopenharmony_ci				layout(location = 0) out mediump vec3 var;
173e5c31af7Sopenharmony_ci				void main()
174e5c31af7Sopenharmony_ci				{
175e5c31af7Sopenharmony_ci					var.x = 0.0;
176e5c31af7Sopenharmony_ci					var.y = 0.0;
177e5c31af7Sopenharmony_ci					var.z = 0.0;
178e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
179e5c31af7Sopenharmony_ci				}
180e5c31af7Sopenharmony_ci			""
181e5c31af7Sopenharmony_ci			fragment ""
182e5c31af7Sopenharmony_ci				#version 310 es
183e5c31af7Sopenharmony_ci				layout(location = 0) in mediump float var;
184e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
185e5c31af7Sopenharmony_ci				void main()
186e5c31af7Sopenharmony_ci				{
187e5c31af7Sopenharmony_ci					${FRAG_COLOR} = vec4(1.0 + var);
188e5c31af7Sopenharmony_ci				}
189e5c31af7Sopenharmony_ci			""
190e5c31af7Sopenharmony_ci		end
191e5c31af7Sopenharmony_ci
192e5c31af7Sopenharmony_ci		# vec2 vs float
193e5c31af7Sopenharmony_ci		case legal_mismatch_vec2_float
194e5c31af7Sopenharmony_ci			version 310 es
195e5c31af7Sopenharmony_ci			desc "legal vertex to fragment shader varying type mismatches (vec2 to float)"
196e5c31af7Sopenharmony_ci			vertex ""
197e5c31af7Sopenharmony_ci				#version 310 es
198e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
199e5c31af7Sopenharmony_ci				layout(location = 0) out mediump vec2 var;
200e5c31af7Sopenharmony_ci				void main()
201e5c31af7Sopenharmony_ci				{
202e5c31af7Sopenharmony_ci					var.x = 0.0;
203e5c31af7Sopenharmony_ci					var.y = 0.0;
204e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
205e5c31af7Sopenharmony_ci				}
206e5c31af7Sopenharmony_ci			""
207e5c31af7Sopenharmony_ci			fragment ""
208e5c31af7Sopenharmony_ci				#version 310 es
209e5c31af7Sopenharmony_ci				layout(location = 0) in mediump float var;
210e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
211e5c31af7Sopenharmony_ci				void main()
212e5c31af7Sopenharmony_ci				{
213e5c31af7Sopenharmony_ci					${FRAG_COLOR} = vec4(1.0 + var);
214e5c31af7Sopenharmony_ci				}
215e5c31af7Sopenharmony_ci			""
216e5c31af7Sopenharmony_ci		end
217e5c31af7Sopenharmony_ci
218e5c31af7Sopenharmony_ci		# ivec4 vs ivec3
219e5c31af7Sopenharmony_ci		case legal_mismatch_ivec4_ivec3
220e5c31af7Sopenharmony_ci			version 310 es
221e5c31af7Sopenharmony_ci			desc "legal vertex to fragment shader varying type mismatches (ivec4 to ivec3)"
222e5c31af7Sopenharmony_ci			vertex ""
223e5c31af7Sopenharmony_ci				#version 310 es
224e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
225e5c31af7Sopenharmony_ci				layout(location = 0) out mediump ivec4 var;
226e5c31af7Sopenharmony_ci				void main()
227e5c31af7Sopenharmony_ci				{
228e5c31af7Sopenharmony_ci					var.x = 0;
229e5c31af7Sopenharmony_ci					var.y = 0;
230e5c31af7Sopenharmony_ci					var.z = 0;
231e5c31af7Sopenharmony_ci					var.w = 0;
232e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
233e5c31af7Sopenharmony_ci				}
234e5c31af7Sopenharmony_ci			""
235e5c31af7Sopenharmony_ci			fragment ""
236e5c31af7Sopenharmony_ci				#version 310 es
237e5c31af7Sopenharmony_ci				layout(location = 0) in mediump flat ivec3 var;
238e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
239e5c31af7Sopenharmony_ci				void main()
240e5c31af7Sopenharmony_ci				{
241e5c31af7Sopenharmony_ci					if (var.x + var.y + var.z == 0)
242e5c31af7Sopenharmony_ci						${FRAG_COLOR} = vec4(1.0);
243e5c31af7Sopenharmony_ci					else
244e5c31af7Sopenharmony_ci						${FRAG_COLOR} = vec4(0.0);
245e5c31af7Sopenharmony_ci				}
246e5c31af7Sopenharmony_ci			""
247e5c31af7Sopenharmony_ci		end
248e5c31af7Sopenharmony_ci
249e5c31af7Sopenharmony_ci		# ivec4 vs ivec2
250e5c31af7Sopenharmony_ci		case legal_mismatch_ivec4_ivec2
251e5c31af7Sopenharmony_ci			version 310 es
252e5c31af7Sopenharmony_ci			desc "legal vertex to fragment shader varying type mismatches (ivec4 to ivec2)"
253e5c31af7Sopenharmony_ci			vertex ""
254e5c31af7Sopenharmony_ci				#version 310 es
255e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
256e5c31af7Sopenharmony_ci				layout(location = 0) out mediump ivec4 var;
257e5c31af7Sopenharmony_ci				void main()
258e5c31af7Sopenharmony_ci				{
259e5c31af7Sopenharmony_ci					var.x = 0;
260e5c31af7Sopenharmony_ci					var.y = 0;
261e5c31af7Sopenharmony_ci					var.z = 0;
262e5c31af7Sopenharmony_ci					var.w = 0;
263e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
264e5c31af7Sopenharmony_ci				}
265e5c31af7Sopenharmony_ci			""
266e5c31af7Sopenharmony_ci			fragment ""
267e5c31af7Sopenharmony_ci				#version 310 es
268e5c31af7Sopenharmony_ci				layout(location = 0) in mediump flat ivec2 var;
269e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
270e5c31af7Sopenharmony_ci				void main()
271e5c31af7Sopenharmony_ci				{
272e5c31af7Sopenharmony_ci					if (var.x + var.y == 0)
273e5c31af7Sopenharmony_ci						${FRAG_COLOR} = vec4(1.0);
274e5c31af7Sopenharmony_ci					else
275e5c31af7Sopenharmony_ci						${FRAG_COLOR} = vec4(0.0);
276e5c31af7Sopenharmony_ci				}
277e5c31af7Sopenharmony_ci			""
278e5c31af7Sopenharmony_ci		end
279e5c31af7Sopenharmony_ci
280e5c31af7Sopenharmony_ci		# ivec4 vs int
281e5c31af7Sopenharmony_ci		case legal_mismatch_ivec4_int
282e5c31af7Sopenharmony_ci			version 310 es
283e5c31af7Sopenharmony_ci			desc "legal vertex to fragment shader varying type mismatches (ivec4 to int)"
284e5c31af7Sopenharmony_ci			vertex ""
285e5c31af7Sopenharmony_ci				#version 310 es
286e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
287e5c31af7Sopenharmony_ci				layout(location = 0) out mediump ivec4 var;
288e5c31af7Sopenharmony_ci				void main()
289e5c31af7Sopenharmony_ci				{
290e5c31af7Sopenharmony_ci					var.x = 0;
291e5c31af7Sopenharmony_ci					var.y = 0;
292e5c31af7Sopenharmony_ci					var.z = 0;
293e5c31af7Sopenharmony_ci					var.w = 0;
294e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
295e5c31af7Sopenharmony_ci				}
296e5c31af7Sopenharmony_ci			""
297e5c31af7Sopenharmony_ci			fragment ""
298e5c31af7Sopenharmony_ci				#version 310 es
299e5c31af7Sopenharmony_ci				layout(location = 0) in mediump flat int var;
300e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
301e5c31af7Sopenharmony_ci				void main()
302e5c31af7Sopenharmony_ci				{
303e5c31af7Sopenharmony_ci					if (var == 0)
304e5c31af7Sopenharmony_ci						${FRAG_COLOR} = vec4(1.0);
305e5c31af7Sopenharmony_ci					else
306e5c31af7Sopenharmony_ci						${FRAG_COLOR} = vec4(0.0);
307e5c31af7Sopenharmony_ci				}
308e5c31af7Sopenharmony_ci			""
309e5c31af7Sopenharmony_ci		end
310e5c31af7Sopenharmony_ci
311e5c31af7Sopenharmony_ci		# ivec3 vs ivec2
312e5c31af7Sopenharmony_ci		case legal_mismatch_ivec3_ivec2
313e5c31af7Sopenharmony_ci			version 310 es
314e5c31af7Sopenharmony_ci			desc "legal vertex to fragment shader varying type mismatches (ivec3 to ivec2)"
315e5c31af7Sopenharmony_ci			vertex ""
316e5c31af7Sopenharmony_ci				#version 310 es
317e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
318e5c31af7Sopenharmony_ci				layout(location = 0) out mediump ivec3 var;
319e5c31af7Sopenharmony_ci				void main()
320e5c31af7Sopenharmony_ci				{
321e5c31af7Sopenharmony_ci					var.x = 0;
322e5c31af7Sopenharmony_ci					var.y = 0;
323e5c31af7Sopenharmony_ci					var.z = 0;
324e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
325e5c31af7Sopenharmony_ci				}
326e5c31af7Sopenharmony_ci			""
327e5c31af7Sopenharmony_ci			fragment ""
328e5c31af7Sopenharmony_ci				#version 310 es
329e5c31af7Sopenharmony_ci				layout(location = 0) in mediump flat ivec2 var;
330e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
331e5c31af7Sopenharmony_ci				void main()
332e5c31af7Sopenharmony_ci				{
333e5c31af7Sopenharmony_ci					if (var.x + var.y == 0)
334e5c31af7Sopenharmony_ci						${FRAG_COLOR} = vec4(1.0);
335e5c31af7Sopenharmony_ci					else
336e5c31af7Sopenharmony_ci						${FRAG_COLOR} = vec4(0.0);
337e5c31af7Sopenharmony_ci				}
338e5c31af7Sopenharmony_ci			""
339e5c31af7Sopenharmony_ci		end
340e5c31af7Sopenharmony_ci
341e5c31af7Sopenharmony_ci		# ivec3 vs int
342e5c31af7Sopenharmony_ci		case legal_mismatch_ivec3_int
343e5c31af7Sopenharmony_ci			version 310 es
344e5c31af7Sopenharmony_ci			desc "legal vertex to fragment shader varying type mismatches (ivec3 to int)"
345e5c31af7Sopenharmony_ci			vertex ""
346e5c31af7Sopenharmony_ci				#version 310 es
347e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
348e5c31af7Sopenharmony_ci				layout(location = 0) out mediump ivec3 var;
349e5c31af7Sopenharmony_ci				void main()
350e5c31af7Sopenharmony_ci				{
351e5c31af7Sopenharmony_ci					var.x = 0;
352e5c31af7Sopenharmony_ci					var.y = 0;
353e5c31af7Sopenharmony_ci					var.z = 0;
354e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
355e5c31af7Sopenharmony_ci				}
356e5c31af7Sopenharmony_ci			""
357e5c31af7Sopenharmony_ci			fragment ""
358e5c31af7Sopenharmony_ci				#version 310 es
359e5c31af7Sopenharmony_ci				layout(location = 0) in mediump flat int var;
360e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
361e5c31af7Sopenharmony_ci				void main()
362e5c31af7Sopenharmony_ci				{
363e5c31af7Sopenharmony_ci					if (var == 0)
364e5c31af7Sopenharmony_ci						${FRAG_COLOR} = vec4(1.0);
365e5c31af7Sopenharmony_ci					else
366e5c31af7Sopenharmony_ci						${FRAG_COLOR} = vec4(0.0);
367e5c31af7Sopenharmony_ci				}
368e5c31af7Sopenharmony_ci			""
369e5c31af7Sopenharmony_ci		end
370e5c31af7Sopenharmony_ci
371e5c31af7Sopenharmony_ci		# ivec2 vs int
372e5c31af7Sopenharmony_ci		case legal_mismatch_ivec2_int
373e5c31af7Sopenharmony_ci			version 310 es
374e5c31af7Sopenharmony_ci			desc "legal vertex to fragment shader varying type mismatches (ivec2 to int)"
375e5c31af7Sopenharmony_ci			vertex ""
376e5c31af7Sopenharmony_ci				#version 310 es
377e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
378e5c31af7Sopenharmony_ci				layout(location = 0) out mediump ivec2 var;
379e5c31af7Sopenharmony_ci				void main()
380e5c31af7Sopenharmony_ci				{
381e5c31af7Sopenharmony_ci					var.x = 0;
382e5c31af7Sopenharmony_ci					var.y = 0;
383e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
384e5c31af7Sopenharmony_ci				}
385e5c31af7Sopenharmony_ci			""
386e5c31af7Sopenharmony_ci			fragment ""
387e5c31af7Sopenharmony_ci				#version 310 es
388e5c31af7Sopenharmony_ci				layout(location = 0) in mediump flat int var;
389e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
390e5c31af7Sopenharmony_ci				void main()
391e5c31af7Sopenharmony_ci				{
392e5c31af7Sopenharmony_ci					if (var == 0)
393e5c31af7Sopenharmony_ci						${FRAG_COLOR} = vec4(1.0);
394e5c31af7Sopenharmony_ci					else
395e5c31af7Sopenharmony_ci						${FRAG_COLOR} = vec4(0.0);
396e5c31af7Sopenharmony_ci				}
397e5c31af7Sopenharmony_ci			""
398e5c31af7Sopenharmony_ci		end
399e5c31af7Sopenharmony_ci
400e5c31af7Sopenharmony_ci		# declared in vertex shader, static use in frag shader
401e5c31af7Sopenharmony_ci		case vertex_declare_fragment_use
402e5c31af7Sopenharmony_ci			version 310 es
403e5c31af7Sopenharmony_ci			desc "varying declared in both shaders, statically used in fragment shader"
404e5c31af7Sopenharmony_ci			values { uniform bool u_false = false; }
405e5c31af7Sopenharmony_ci			vertex ""
406e5c31af7Sopenharmony_ci				#version 310 es
407e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
408e5c31af7Sopenharmony_ci				layout(location = 0) out mediump float var;
409e5c31af7Sopenharmony_ci				void main()
410e5c31af7Sopenharmony_ci				{
411e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
412e5c31af7Sopenharmony_ci				}
413e5c31af7Sopenharmony_ci			""
414e5c31af7Sopenharmony_ci			fragment ""
415e5c31af7Sopenharmony_ci				#version 310 es
416e5c31af7Sopenharmony_ci				layout(location = 0) in mediump float var;
417e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
418e5c31af7Sopenharmony_ci				void main()
419e5c31af7Sopenharmony_ci				{
420e5c31af7Sopenharmony_ci					if (u_false)
421e5c31af7Sopenharmony_ci						${FRAG_COLOR} = vec4(var);
422e5c31af7Sopenharmony_ci					else
423e5c31af7Sopenharmony_ci						${FRAG_COLOR} = vec4(1.0);
424e5c31af7Sopenharmony_ci				}
425e5c31af7Sopenharmony_ci			""
426e5c31af7Sopenharmony_ci		end
427e5c31af7Sopenharmony_ci
428e5c31af7Sopenharmony_ci		# static use in vertex shader, no reference in fragment shader
429e5c31af7Sopenharmony_ci		case vertex_use_fragment_declare
430e5c31af7Sopenharmony_ci			version 310 es
431e5c31af7Sopenharmony_ci			desc "varying declared and statically used in vertex shader, no reference in fragment shader"
432e5c31af7Sopenharmony_ci			values { uniform bool u_false = false; }
433e5c31af7Sopenharmony_ci			vertex ""
434e5c31af7Sopenharmony_ci				#version 310 es
435e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
436e5c31af7Sopenharmony_ci				layout(location = 0) out mediump float var;
437e5c31af7Sopenharmony_ci				void main()
438e5c31af7Sopenharmony_ci				{
439e5c31af7Sopenharmony_ci					if (u_false)
440e5c31af7Sopenharmony_ci						var = 1.0;
441e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
442e5c31af7Sopenharmony_ci				}
443e5c31af7Sopenharmony_ci			""
444e5c31af7Sopenharmony_ci			fragment ""
445e5c31af7Sopenharmony_ci				#version 310 es
446e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
447e5c31af7Sopenharmony_ci				void main()
448e5c31af7Sopenharmony_ci				{
449e5c31af7Sopenharmony_ci					${FRAG_COLOR} = vec4(1.0);
450e5c31af7Sopenharmony_ci				}
451e5c31af7Sopenharmony_ci			""
452e5c31af7Sopenharmony_ci		end
453e5c31af7Sopenharmony_ci
454e5c31af7Sopenharmony_ci		# static use in vertex shader, declared in fragment shader
455e5c31af7Sopenharmony_ci		case vertex_use_declare_fragment
456e5c31af7Sopenharmony_ci			version 310 es
457e5c31af7Sopenharmony_ci			desc "varying declared and statically used in vertex shader, only declared in fragment shader"
458e5c31af7Sopenharmony_ci			values { uniform bool u_false = false; }
459e5c31af7Sopenharmony_ci			vertex ""
460e5c31af7Sopenharmony_ci				#version 310 es
461e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
462e5c31af7Sopenharmony_ci				layout(location = 0) out mediump float var;
463e5c31af7Sopenharmony_ci				void main()
464e5c31af7Sopenharmony_ci				{
465e5c31af7Sopenharmony_ci					if (u_false)
466e5c31af7Sopenharmony_ci						var = 1.0;
467e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
468e5c31af7Sopenharmony_ci				}
469e5c31af7Sopenharmony_ci			""
470e5c31af7Sopenharmony_ci			fragment ""
471e5c31af7Sopenharmony_ci				#version 310 es
472e5c31af7Sopenharmony_ci				layout(location = 0) in mediump float var;
473e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
474e5c31af7Sopenharmony_ci				void main()
475e5c31af7Sopenharmony_ci				{
476e5c31af7Sopenharmony_ci					${FRAG_COLOR} = vec4(1.0);
477e5c31af7Sopenharmony_ci				}
478e5c31af7Sopenharmony_ci			""
479e5c31af7Sopenharmony_ci		end
480e5c31af7Sopenharmony_ci
481e5c31af7Sopenharmony_ci		# static use in vertex shader, used in fragment shader
482e5c31af7Sopenharmony_ci		case vertex_use_fragment_use
483e5c31af7Sopenharmony_ci			version 310 es
484e5c31af7Sopenharmony_ci			desc "varying statically used in both vertex and fragment shader"
485e5c31af7Sopenharmony_ci			values { uniform bool u_false = false; }
486e5c31af7Sopenharmony_ci			vertex ""
487e5c31af7Sopenharmony_ci				#version 310 es
488e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
489e5c31af7Sopenharmony_ci				layout(location = 0) out mediump float var;
490e5c31af7Sopenharmony_ci				void main()
491e5c31af7Sopenharmony_ci				{
492e5c31af7Sopenharmony_ci					if (u_false)
493e5c31af7Sopenharmony_ci						var = 1.0;
494e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
495e5c31af7Sopenharmony_ci				}
496e5c31af7Sopenharmony_ci			""
497e5c31af7Sopenharmony_ci			fragment ""
498e5c31af7Sopenharmony_ci				#version 310 es
499e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
500e5c31af7Sopenharmony_ci				layout(location = 0) in mediump float var;
501e5c31af7Sopenharmony_ci				void main()
502e5c31af7Sopenharmony_ci				{
503e5c31af7Sopenharmony_ci					if (u_false)
504e5c31af7Sopenharmony_ci						${FRAG_COLOR} = vec4(var);
505e5c31af7Sopenharmony_ci					else
506e5c31af7Sopenharmony_ci						${FRAG_COLOR} = vec4(1.0);
507e5c31af7Sopenharmony_ci				}
508e5c31af7Sopenharmony_ci			""
509e5c31af7Sopenharmony_ci		end
510e5c31af7Sopenharmony_ci
511e5c31af7Sopenharmony_ci		# different interpolation
512e5c31af7Sopenharmony_ci		case differing_interpolation_2
513e5c31af7Sopenharmony_ci			version 310 es
514e5c31af7Sopenharmony_ci			desc "varying interpolation different (smooth vs. centroid)"
515e5c31af7Sopenharmony_ci			values
516e5c31af7Sopenharmony_ci			{
517e5c31af7Sopenharmony_ci				input float in0		= [ -1.25 | -25.0 | 1.0 | 2.25 | 3.4 | 16.0 ];
518e5c31af7Sopenharmony_ci				output float out0	= [ -1.25 | -25.0 | 1.0 | 2.25 | 3.4 | 16.0 ];
519e5c31af7Sopenharmony_ci			}
520e5c31af7Sopenharmony_ci
521e5c31af7Sopenharmony_ci			vertex ""
522e5c31af7Sopenharmony_ci				#version 310 es
523e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
524e5c31af7Sopenharmony_ci				layout(location = 0) smooth out mediump float var;
525e5c31af7Sopenharmony_ci				void main()
526e5c31af7Sopenharmony_ci				{
527e5c31af7Sopenharmony_ci					var = in0;
528e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
529e5c31af7Sopenharmony_ci				}
530e5c31af7Sopenharmony_ci			""
531e5c31af7Sopenharmony_ci			fragment ""
532e5c31af7Sopenharmony_ci				#version 310 es
533e5c31af7Sopenharmony_ci				precision highp float;
534e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
535e5c31af7Sopenharmony_ci				layout(location = 0) centroid in mediump float var;
536e5c31af7Sopenharmony_ci				void main()
537e5c31af7Sopenharmony_ci				{
538e5c31af7Sopenharmony_ci					out0 = var;
539e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
540e5c31af7Sopenharmony_ci				}
541e5c31af7Sopenharmony_ci			""
542e5c31af7Sopenharmony_ci		end
543e5c31af7Sopenharmony_ci
544e5c31af7Sopenharmony_ci		# differing name (linking is done by location only in SPIR-V)
545e5c31af7Sopenharmony_ci		case differing_name_1
546e5c31af7Sopenharmony_ci			version 310 es
547e5c31af7Sopenharmony_ci			desc "varying declared with matching location but different name"
548e5c31af7Sopenharmony_ci			values
549e5c31af7Sopenharmony_ci			{
550e5c31af7Sopenharmony_ci				input float in0		= [ 2.0 | 5.0 | -3.0 | 4.0 ];
551e5c31af7Sopenharmony_ci				input float in1		= [ 4.0 | 1.0 | -0.5 | 2.0 ];
552e5c31af7Sopenharmony_ci				output float out0	= [ -2.0 | 4.0 | -2.5 | 2.0 ];
553e5c31af7Sopenharmony_ci			}
554e5c31af7Sopenharmony_ci
555e5c31af7Sopenharmony_ci			vertex ""
556e5c31af7Sopenharmony_ci				#version 310 es
557e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
558e5c31af7Sopenharmony_ci				layout(location = 0) out highp float vtxVarB;
559e5c31af7Sopenharmony_ci				layout(location = 2) out highp float vtxVarA;
560e5c31af7Sopenharmony_ci				void main()
561e5c31af7Sopenharmony_ci				{
562e5c31af7Sopenharmony_ci					vtxVarA = in0;
563e5c31af7Sopenharmony_ci					vtxVarB = in1;
564e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
565e5c31af7Sopenharmony_ci				}
566e5c31af7Sopenharmony_ci			""
567e5c31af7Sopenharmony_ci			fragment ""
568e5c31af7Sopenharmony_ci				#version 310 es
569e5c31af7Sopenharmony_ci				precision highp float;
570e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
571e5c31af7Sopenharmony_ci				layout(location = 2) in highp float fragVarA;
572e5c31af7Sopenharmony_ci				layout(location = 0) in highp float fragVarB;
573e5c31af7Sopenharmony_ci				void main()
574e5c31af7Sopenharmony_ci				{
575e5c31af7Sopenharmony_ci					out0 = fragVarA - fragVarB;
576e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
577e5c31af7Sopenharmony_ci				}
578e5c31af7Sopenharmony_ci			""
579e5c31af7Sopenharmony_ci		end
580e5c31af7Sopenharmony_ci
581e5c31af7Sopenharmony_ci		# differing name (linking is done by location only in SPIR-V)
582e5c31af7Sopenharmony_ci		case differing_name_2
583e5c31af7Sopenharmony_ci			version 310 es
584e5c31af7Sopenharmony_ci			desc "varying declared with matching location but different name"
585e5c31af7Sopenharmony_ci			values
586e5c31af7Sopenharmony_ci			{
587e5c31af7Sopenharmony_ci				input float in0		= [ 2.0 | 5.0 | -3.0 | 4.0 ];
588e5c31af7Sopenharmony_ci				input float in1		= [ 4.0 | 1.0 | -0.5 | 2.0 ];
589e5c31af7Sopenharmony_ci				output float out0	= [ -2.0 | 4.0 | -2.5 | 2.0 ];
590e5c31af7Sopenharmony_ci			}
591e5c31af7Sopenharmony_ci
592e5c31af7Sopenharmony_ci			vertex ""
593e5c31af7Sopenharmony_ci				#version 310 es
594e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
595e5c31af7Sopenharmony_ci				layout(location = 0) out highp float varA;
596e5c31af7Sopenharmony_ci				layout(location = 2) out highp float varB;
597e5c31af7Sopenharmony_ci				void main()
598e5c31af7Sopenharmony_ci				{
599e5c31af7Sopenharmony_ci					varA = in0;
600e5c31af7Sopenharmony_ci					varB = in1;
601e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
602e5c31af7Sopenharmony_ci				}
603e5c31af7Sopenharmony_ci			""
604e5c31af7Sopenharmony_ci			fragment ""
605e5c31af7Sopenharmony_ci				#version 310 es
606e5c31af7Sopenharmony_ci				precision highp float;
607e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
608e5c31af7Sopenharmony_ci				layout(location = 2) in highp float varA;
609e5c31af7Sopenharmony_ci				layout(location = 0) in highp float varB;
610e5c31af7Sopenharmony_ci				void main()
611e5c31af7Sopenharmony_ci				{
612e5c31af7Sopenharmony_ci					out0 = varB - varA;
613e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
614e5c31af7Sopenharmony_ci				}
615e5c31af7Sopenharmony_ci			""
616e5c31af7Sopenharmony_ci		end
617e5c31af7Sopenharmony_ci	end
618e5c31af7Sopenharmony_ci
619e5c31af7Sopenharmony_ci	group basic_types "Basic varying types"
620e5c31af7Sopenharmony_ci		case float
621e5c31af7Sopenharmony_ci			version 310 es
622e5c31af7Sopenharmony_ci			desc "varying of type float"
623e5c31af7Sopenharmony_ci			values
624e5c31af7Sopenharmony_ci			{
625e5c31af7Sopenharmony_ci				input float in0		= [ -1.25 | -25.65 | 1.0 | 2.25 | 3.4 | 16.0 ];
626e5c31af7Sopenharmony_ci				output float out0	= [ -1.25 | -25.65 | 1.0 | 2.25 | 3.4 | 16.0 ];
627e5c31af7Sopenharmony_ci			}
628e5c31af7Sopenharmony_ci			vertex ""
629e5c31af7Sopenharmony_ci				#version 310 es
630e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
631e5c31af7Sopenharmony_ci				layout(location = 0) out float var;
632e5c31af7Sopenharmony_ci				void main()
633e5c31af7Sopenharmony_ci				{
634e5c31af7Sopenharmony_ci					var = in0;
635e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
636e5c31af7Sopenharmony_ci				}
637e5c31af7Sopenharmony_ci			""
638e5c31af7Sopenharmony_ci			fragment ""
639e5c31af7Sopenharmony_ci				#version 310 es
640e5c31af7Sopenharmony_ci				precision highp float;
641e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
642e5c31af7Sopenharmony_ci				layout(location = 0) in float var;
643e5c31af7Sopenharmony_ci				void main()
644e5c31af7Sopenharmony_ci				{
645e5c31af7Sopenharmony_ci					out0 = var;
646e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
647e5c31af7Sopenharmony_ci				}
648e5c31af7Sopenharmony_ci			""
649e5c31af7Sopenharmony_ci		end
650e5c31af7Sopenharmony_ci
651e5c31af7Sopenharmony_ci		case vec2
652e5c31af7Sopenharmony_ci			version 310 es
653e5c31af7Sopenharmony_ci			desc "varying of type vec2"
654e5c31af7Sopenharmony_ci			values
655e5c31af7Sopenharmony_ci			{
656e5c31af7Sopenharmony_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) ];
657e5c31af7Sopenharmony_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) ];
658e5c31af7Sopenharmony_ci			}
659e5c31af7Sopenharmony_ci			vertex ""
660e5c31af7Sopenharmony_ci				#version 310 es
661e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
662e5c31af7Sopenharmony_ci				layout(location = 0) out vec2 var;
663e5c31af7Sopenharmony_ci				void main()
664e5c31af7Sopenharmony_ci				{
665e5c31af7Sopenharmony_ci					var = in0;
666e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
667e5c31af7Sopenharmony_ci				}
668e5c31af7Sopenharmony_ci			""
669e5c31af7Sopenharmony_ci			fragment ""
670e5c31af7Sopenharmony_ci				#version 310 es
671e5c31af7Sopenharmony_ci				precision highp float;
672e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
673e5c31af7Sopenharmony_ci				layout(location = 0) in vec2 var;
674e5c31af7Sopenharmony_ci				void main()
675e5c31af7Sopenharmony_ci				{
676e5c31af7Sopenharmony_ci					out0 = var;
677e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
678e5c31af7Sopenharmony_ci				}
679e5c31af7Sopenharmony_ci			""
680e5c31af7Sopenharmony_ci		end
681e5c31af7Sopenharmony_ci
682e5c31af7Sopenharmony_ci		case vec3
683e5c31af7Sopenharmony_ci			version 310 es
684e5c31af7Sopenharmony_ci			desc "varying of type vec3"
685e5c31af7Sopenharmony_ci			values
686e5c31af7Sopenharmony_ci			{
687e5c31af7Sopenharmony_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) ];
688e5c31af7Sopenharmony_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) ];
689e5c31af7Sopenharmony_ci			}
690e5c31af7Sopenharmony_ci			vertex ""
691e5c31af7Sopenharmony_ci				#version 310 es
692e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
693e5c31af7Sopenharmony_ci				layout(location = 0) out vec3 var;
694e5c31af7Sopenharmony_ci				void main()
695e5c31af7Sopenharmony_ci				{
696e5c31af7Sopenharmony_ci					var = in0;
697e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
698e5c31af7Sopenharmony_ci				}
699e5c31af7Sopenharmony_ci			""
700e5c31af7Sopenharmony_ci			fragment ""
701e5c31af7Sopenharmony_ci				#version 310 es
702e5c31af7Sopenharmony_ci				precision highp float;
703e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
704e5c31af7Sopenharmony_ci				layout(location = 0) in vec3 var;
705e5c31af7Sopenharmony_ci				void main()
706e5c31af7Sopenharmony_ci				{
707e5c31af7Sopenharmony_ci					out0 = var;
708e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
709e5c31af7Sopenharmony_ci				}
710e5c31af7Sopenharmony_ci			""
711e5c31af7Sopenharmony_ci		end
712e5c31af7Sopenharmony_ci
713e5c31af7Sopenharmony_ci		case vec4
714e5c31af7Sopenharmony_ci			version 310 es
715e5c31af7Sopenharmony_ci			desc "varying of type vec4"
716e5c31af7Sopenharmony_ci			values
717e5c31af7Sopenharmony_ci			{
718e5c31af7Sopenharmony_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) ];
719e5c31af7Sopenharmony_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) ];
720e5c31af7Sopenharmony_ci			}
721e5c31af7Sopenharmony_ci			vertex ""
722e5c31af7Sopenharmony_ci				#version 310 es
723e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
724e5c31af7Sopenharmony_ci				layout(location = 0) out vec4 var;
725e5c31af7Sopenharmony_ci				void main()
726e5c31af7Sopenharmony_ci				{
727e5c31af7Sopenharmony_ci					var = in0;
728e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
729e5c31af7Sopenharmony_ci				}
730e5c31af7Sopenharmony_ci			""
731e5c31af7Sopenharmony_ci			fragment ""
732e5c31af7Sopenharmony_ci				#version 310 es
733e5c31af7Sopenharmony_ci				precision highp float;
734e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
735e5c31af7Sopenharmony_ci				layout(location = 0) in vec4 var;
736e5c31af7Sopenharmony_ci				void main()
737e5c31af7Sopenharmony_ci				{
738e5c31af7Sopenharmony_ci					out0 = var;
739e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
740e5c31af7Sopenharmony_ci				}
741e5c31af7Sopenharmony_ci			""
742e5c31af7Sopenharmony_ci		end
743e5c31af7Sopenharmony_ci
744e5c31af7Sopenharmony_ci		case mat2
745e5c31af7Sopenharmony_ci			version 310 es
746e5c31af7Sopenharmony_ci			desc "varying of type mat2"
747e5c31af7Sopenharmony_ci			values
748e5c31af7Sopenharmony_ci			{
749e5c31af7Sopenharmony_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) ];
750e5c31af7Sopenharmony_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) ];
751e5c31af7Sopenharmony_ci			}
752e5c31af7Sopenharmony_ci			vertex ""
753e5c31af7Sopenharmony_ci				#version 310 es
754e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
755e5c31af7Sopenharmony_ci				layout(location = 0) out mat2 var;
756e5c31af7Sopenharmony_ci				void main()
757e5c31af7Sopenharmony_ci				{
758e5c31af7Sopenharmony_ci					var = in0;
759e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
760e5c31af7Sopenharmony_ci				}
761e5c31af7Sopenharmony_ci			""
762e5c31af7Sopenharmony_ci			fragment ""
763e5c31af7Sopenharmony_ci				#version 310 es
764e5c31af7Sopenharmony_ci				precision highp float;
765e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
766e5c31af7Sopenharmony_ci				layout(location = 0) in mat2 var;
767e5c31af7Sopenharmony_ci				void main()
768e5c31af7Sopenharmony_ci				{
769e5c31af7Sopenharmony_ci					out0 = var;
770e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
771e5c31af7Sopenharmony_ci				}
772e5c31af7Sopenharmony_ci			""
773e5c31af7Sopenharmony_ci		end
774e5c31af7Sopenharmony_ci
775e5c31af7Sopenharmony_ci		case mat2x3
776e5c31af7Sopenharmony_ci			version 310 es
777e5c31af7Sopenharmony_ci			desc "varying of type mat2x3"
778e5c31af7Sopenharmony_ci			values
779e5c31af7Sopenharmony_ci			{
780e5c31af7Sopenharmony_ci				input mat2x3 in0	= [ mat2x3(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25) ];
781e5c31af7Sopenharmony_ci				output mat2x3 out0	= [ mat2x3(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25) ];
782e5c31af7Sopenharmony_ci			}
783e5c31af7Sopenharmony_ci			vertex ""
784e5c31af7Sopenharmony_ci				#version 310 es
785e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
786e5c31af7Sopenharmony_ci				layout(location = 0) out mat2x3 var;
787e5c31af7Sopenharmony_ci				void main()
788e5c31af7Sopenharmony_ci				{
789e5c31af7Sopenharmony_ci					var = in0;
790e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
791e5c31af7Sopenharmony_ci				}
792e5c31af7Sopenharmony_ci			""
793e5c31af7Sopenharmony_ci			fragment ""
794e5c31af7Sopenharmony_ci				#version 310 es
795e5c31af7Sopenharmony_ci				precision highp float;
796e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
797e5c31af7Sopenharmony_ci				layout(location = 0) in mat2x3 var;
798e5c31af7Sopenharmony_ci				void main()
799e5c31af7Sopenharmony_ci				{
800e5c31af7Sopenharmony_ci					out0 = var;
801e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
802e5c31af7Sopenharmony_ci				}
803e5c31af7Sopenharmony_ci			""
804e5c31af7Sopenharmony_ci		end
805e5c31af7Sopenharmony_ci
806e5c31af7Sopenharmony_ci		case mat2x4
807e5c31af7Sopenharmony_ci			version 310 es
808e5c31af7Sopenharmony_ci			desc "varying of type mat2x4"
809e5c31af7Sopenharmony_ci			values
810e5c31af7Sopenharmony_ci			{
811e5c31af7Sopenharmony_ci				input mat2x4 in0	= [ mat2x4(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7) ];
812e5c31af7Sopenharmony_ci				output mat2x4 out0	= [ mat2x4(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7) ];
813e5c31af7Sopenharmony_ci			}
814e5c31af7Sopenharmony_ci			vertex ""
815e5c31af7Sopenharmony_ci				#version 310 es
816e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
817e5c31af7Sopenharmony_ci				layout(location = 0) out mat2x4 var;
818e5c31af7Sopenharmony_ci				void main()
819e5c31af7Sopenharmony_ci				{
820e5c31af7Sopenharmony_ci					var = in0;
821e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
822e5c31af7Sopenharmony_ci				}
823e5c31af7Sopenharmony_ci			""
824e5c31af7Sopenharmony_ci			fragment ""
825e5c31af7Sopenharmony_ci				#version 310 es
826e5c31af7Sopenharmony_ci				precision highp float;
827e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
828e5c31af7Sopenharmony_ci				layout(location = 0) in mat2x4 var;
829e5c31af7Sopenharmony_ci				void main()
830e5c31af7Sopenharmony_ci				{
831e5c31af7Sopenharmony_ci					out0 = var;
832e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
833e5c31af7Sopenharmony_ci				}
834e5c31af7Sopenharmony_ci			""
835e5c31af7Sopenharmony_ci		end
836e5c31af7Sopenharmony_ci
837e5c31af7Sopenharmony_ci		case mat3x2
838e5c31af7Sopenharmony_ci			version 310 es
839e5c31af7Sopenharmony_ci			desc "varying of type mat3x2"
840e5c31af7Sopenharmony_ci			values
841e5c31af7Sopenharmony_ci			{
842e5c31af7Sopenharmony_ci				input mat3x2 in0	= [ mat3x2(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25) ];
843e5c31af7Sopenharmony_ci				output mat3x2 out0	= [ mat3x2(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25) ];
844e5c31af7Sopenharmony_ci			}
845e5c31af7Sopenharmony_ci			vertex ""
846e5c31af7Sopenharmony_ci				#version 310 es
847e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
848e5c31af7Sopenharmony_ci				layout(location = 0) out mat3x2 var;
849e5c31af7Sopenharmony_ci				void main()
850e5c31af7Sopenharmony_ci				{
851e5c31af7Sopenharmony_ci					var = in0;
852e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
853e5c31af7Sopenharmony_ci				}
854e5c31af7Sopenharmony_ci			""
855e5c31af7Sopenharmony_ci			fragment ""
856e5c31af7Sopenharmony_ci				#version 310 es
857e5c31af7Sopenharmony_ci				precision highp float;
858e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
859e5c31af7Sopenharmony_ci				layout(location = 0) in mat3x2 var;
860e5c31af7Sopenharmony_ci				void main()
861e5c31af7Sopenharmony_ci				{
862e5c31af7Sopenharmony_ci					out0 = var;
863e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
864e5c31af7Sopenharmony_ci				}
865e5c31af7Sopenharmony_ci			""
866e5c31af7Sopenharmony_ci		end
867e5c31af7Sopenharmony_ci
868e5c31af7Sopenharmony_ci		case mat3
869e5c31af7Sopenharmony_ci			version 310 es
870e5c31af7Sopenharmony_ci			desc "varying of type mat3"
871e5c31af7Sopenharmony_ci			values
872e5c31af7Sopenharmony_ci			{
873e5c31af7Sopenharmony_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) ];
874e5c31af7Sopenharmony_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) ];
875e5c31af7Sopenharmony_ci			}
876e5c31af7Sopenharmony_ci			vertex ""
877e5c31af7Sopenharmony_ci				#version 310 es
878e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
879e5c31af7Sopenharmony_ci				layout(location = 0) out mat3 var;
880e5c31af7Sopenharmony_ci				void main()
881e5c31af7Sopenharmony_ci				{
882e5c31af7Sopenharmony_ci					var = in0;
883e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
884e5c31af7Sopenharmony_ci				}
885e5c31af7Sopenharmony_ci			""
886e5c31af7Sopenharmony_ci			fragment ""
887e5c31af7Sopenharmony_ci				#version 310 es
888e5c31af7Sopenharmony_ci				precision highp float;
889e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
890e5c31af7Sopenharmony_ci				layout(location = 0) in mat3 var;
891e5c31af7Sopenharmony_ci				void main()
892e5c31af7Sopenharmony_ci				{
893e5c31af7Sopenharmony_ci					out0 = var;
894e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
895e5c31af7Sopenharmony_ci				}
896e5c31af7Sopenharmony_ci			""
897e5c31af7Sopenharmony_ci		end
898e5c31af7Sopenharmony_ci
899e5c31af7Sopenharmony_ci		case mat3x4
900e5c31af7Sopenharmony_ci			version 310 es
901e5c31af7Sopenharmony_ci			desc "varying of type mat3x4"
902e5c31af7Sopenharmony_ci			values
903e5c31af7Sopenharmony_ci			{
904e5c31af7Sopenharmony_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) ];
905e5c31af7Sopenharmony_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) ];
906e5c31af7Sopenharmony_ci			}
907e5c31af7Sopenharmony_ci			vertex ""
908e5c31af7Sopenharmony_ci				#version 310 es
909e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
910e5c31af7Sopenharmony_ci				layout(location = 0) out mat3x4 var;
911e5c31af7Sopenharmony_ci				void main()
912e5c31af7Sopenharmony_ci				{
913e5c31af7Sopenharmony_ci					var = in0;
914e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
915e5c31af7Sopenharmony_ci				}
916e5c31af7Sopenharmony_ci			""
917e5c31af7Sopenharmony_ci			fragment ""
918e5c31af7Sopenharmony_ci				#version 310 es
919e5c31af7Sopenharmony_ci				precision highp float;
920e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
921e5c31af7Sopenharmony_ci				layout(location = 0) in mat3x4 var;
922e5c31af7Sopenharmony_ci				void main()
923e5c31af7Sopenharmony_ci				{
924e5c31af7Sopenharmony_ci					out0 = var;
925e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
926e5c31af7Sopenharmony_ci				}
927e5c31af7Sopenharmony_ci			""
928e5c31af7Sopenharmony_ci		end
929e5c31af7Sopenharmony_ci
930e5c31af7Sopenharmony_ci		case mat4x2
931e5c31af7Sopenharmony_ci			version 310 es
932e5c31af7Sopenharmony_ci			desc "varying of type mat4x2"
933e5c31af7Sopenharmony_ci			values
934e5c31af7Sopenharmony_ci			{
935e5c31af7Sopenharmony_ci				input mat4x2 in0	= [ mat4x2(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7) ];
936e5c31af7Sopenharmony_ci				output mat4x2 out0	= [ mat4x2(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7) ];
937e5c31af7Sopenharmony_ci			}
938e5c31af7Sopenharmony_ci			vertex ""
939e5c31af7Sopenharmony_ci				#version 310 es
940e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
941e5c31af7Sopenharmony_ci				layout(location = 0) out mat4x2 var;
942e5c31af7Sopenharmony_ci				void main()
943e5c31af7Sopenharmony_ci				{
944e5c31af7Sopenharmony_ci					var = in0;
945e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
946e5c31af7Sopenharmony_ci				}
947e5c31af7Sopenharmony_ci			""
948e5c31af7Sopenharmony_ci			fragment ""
949e5c31af7Sopenharmony_ci				#version 310 es
950e5c31af7Sopenharmony_ci				precision highp float;
951e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
952e5c31af7Sopenharmony_ci				layout(location = 0) in mat4x2 var;
953e5c31af7Sopenharmony_ci				void main()
954e5c31af7Sopenharmony_ci				{
955e5c31af7Sopenharmony_ci					out0 = var;
956e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
957e5c31af7Sopenharmony_ci				}
958e5c31af7Sopenharmony_ci			""
959e5c31af7Sopenharmony_ci		end
960e5c31af7Sopenharmony_ci
961e5c31af7Sopenharmony_ci		case mat4x3
962e5c31af7Sopenharmony_ci			version 310 es
963e5c31af7Sopenharmony_ci			desc "varying of type mat4x3"
964e5c31af7Sopenharmony_ci			values
965e5c31af7Sopenharmony_ci			{
966e5c31af7Sopenharmony_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) ];
967e5c31af7Sopenharmony_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) ];
968e5c31af7Sopenharmony_ci			}
969e5c31af7Sopenharmony_ci			vertex ""
970e5c31af7Sopenharmony_ci				#version 310 es
971e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
972e5c31af7Sopenharmony_ci				layout(location = 0) out mat4x3 var;
973e5c31af7Sopenharmony_ci				void main()
974e5c31af7Sopenharmony_ci				{
975e5c31af7Sopenharmony_ci					var = in0;
976e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
977e5c31af7Sopenharmony_ci				}
978e5c31af7Sopenharmony_ci			""
979e5c31af7Sopenharmony_ci			fragment ""
980e5c31af7Sopenharmony_ci				#version 310 es
981e5c31af7Sopenharmony_ci				precision highp float;
982e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
983e5c31af7Sopenharmony_ci				layout(location = 0) in mat4x3 var;
984e5c31af7Sopenharmony_ci				void main()
985e5c31af7Sopenharmony_ci				{
986e5c31af7Sopenharmony_ci					out0 = var;
987e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
988e5c31af7Sopenharmony_ci				}
989e5c31af7Sopenharmony_ci			""
990e5c31af7Sopenharmony_ci		end
991e5c31af7Sopenharmony_ci
992e5c31af7Sopenharmony_ci		case mat4
993e5c31af7Sopenharmony_ci			version 310 es
994e5c31af7Sopenharmony_ci			desc "varying of type mat4"
995e5c31af7Sopenharmony_ci			values
996e5c31af7Sopenharmony_ci			{
997e5c31af7Sopenharmony_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) ];
998e5c31af7Sopenharmony_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) ];
999e5c31af7Sopenharmony_ci			}
1000e5c31af7Sopenharmony_ci			vertex ""
1001e5c31af7Sopenharmony_ci				#version 310 es
1002e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
1003e5c31af7Sopenharmony_ci				layout(location = 0) out mat4 var;
1004e5c31af7Sopenharmony_ci				void main()
1005e5c31af7Sopenharmony_ci				{
1006e5c31af7Sopenharmony_ci					var = in0;
1007e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
1008e5c31af7Sopenharmony_ci				}
1009e5c31af7Sopenharmony_ci			""
1010e5c31af7Sopenharmony_ci			fragment ""
1011e5c31af7Sopenharmony_ci				#version 310 es
1012e5c31af7Sopenharmony_ci				precision highp float;
1013e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
1014e5c31af7Sopenharmony_ci				layout(location = 0) in mat4 var;
1015e5c31af7Sopenharmony_ci				void main()
1016e5c31af7Sopenharmony_ci				{
1017e5c31af7Sopenharmony_ci					out0 = var;
1018e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
1019e5c31af7Sopenharmony_ci				}
1020e5c31af7Sopenharmony_ci			""
1021e5c31af7Sopenharmony_ci		end
1022e5c31af7Sopenharmony_ci
1023e5c31af7Sopenharmony_ci		case int
1024e5c31af7Sopenharmony_ci			version 310 es
1025e5c31af7Sopenharmony_ci			desc "varying of type int"
1026e5c31af7Sopenharmony_ci			values
1027e5c31af7Sopenharmony_ci			{
1028e5c31af7Sopenharmony_ci				input int in0		= [ -1 | -25 | 1 | 2 | 3 | 16 ];
1029e5c31af7Sopenharmony_ci				output int out0		= [ -1 | -25 | 1 | 2 | 3 | 16 ];
1030e5c31af7Sopenharmony_ci			}
1031e5c31af7Sopenharmony_ci			vertex ""
1032e5c31af7Sopenharmony_ci				#version 310 es
1033e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
1034e5c31af7Sopenharmony_ci				layout(location = 0) flat out mediump int var;
1035e5c31af7Sopenharmony_ci				void main()
1036e5c31af7Sopenharmony_ci				{
1037e5c31af7Sopenharmony_ci					${VERTEX_SETUP}
1038e5c31af7Sopenharmony_ci					var = in0;
1039e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
1040e5c31af7Sopenharmony_ci				}
1041e5c31af7Sopenharmony_ci			""
1042e5c31af7Sopenharmony_ci			fragment ""
1043e5c31af7Sopenharmony_ci				#version 310 es
1044e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
1045e5c31af7Sopenharmony_ci				layout(location = 0) flat in int var;
1046e5c31af7Sopenharmony_ci				void main()
1047e5c31af7Sopenharmony_ci				{
1048e5c31af7Sopenharmony_ci					out0 = var;
1049e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
1050e5c31af7Sopenharmony_ci				}
1051e5c31af7Sopenharmony_ci			""
1052e5c31af7Sopenharmony_ci		end
1053e5c31af7Sopenharmony_ci
1054e5c31af7Sopenharmony_ci		case ivec2
1055e5c31af7Sopenharmony_ci			version 310 es
1056e5c31af7Sopenharmony_ci			desc "varying of type ivec2"
1057e5c31af7Sopenharmony_ci			values
1058e5c31af7Sopenharmony_ci			{
1059e5c31af7Sopenharmony_ci				input ivec2 in0		= [ ivec2(-1, 1) | ivec2(-25, 25) | ivec2(1, 1) | ivec2(2, 3) | ivec2(16, 17) ];
1060e5c31af7Sopenharmony_ci				output ivec2 out0	= [ ivec2(-1, 1) | ivec2(-25, 25) | ivec2(1, 1) | ivec2(2, 3) | ivec2(16, 17) ];
1061e5c31af7Sopenharmony_ci			}
1062e5c31af7Sopenharmony_ci			vertex ""
1063e5c31af7Sopenharmony_ci				#version 310 es
1064e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
1065e5c31af7Sopenharmony_ci				layout(location = 0) flat out mediump ivec2 var;
1066e5c31af7Sopenharmony_ci				void main()
1067e5c31af7Sopenharmony_ci				{
1068e5c31af7Sopenharmony_ci					${VERTEX_SETUP}
1069e5c31af7Sopenharmony_ci					var = in0;
1070e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
1071e5c31af7Sopenharmony_ci				}
1072e5c31af7Sopenharmony_ci			""
1073e5c31af7Sopenharmony_ci			fragment ""
1074e5c31af7Sopenharmony_ci				#version 310 es
1075e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
1076e5c31af7Sopenharmony_ci				layout(location = 0) flat in ivec2 var;
1077e5c31af7Sopenharmony_ci				void main()
1078e5c31af7Sopenharmony_ci				{
1079e5c31af7Sopenharmony_ci					out0 = var;
1080e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
1081e5c31af7Sopenharmony_ci				}
1082e5c31af7Sopenharmony_ci			""
1083e5c31af7Sopenharmony_ci		end
1084e5c31af7Sopenharmony_ci
1085e5c31af7Sopenharmony_ci		case ivec3
1086e5c31af7Sopenharmony_ci			version 310 es
1087e5c31af7Sopenharmony_ci			desc "varying of type ivec3"
1088e5c31af7Sopenharmony_ci			values
1089e5c31af7Sopenharmony_ci			{
1090e5c31af7Sopenharmony_ci				input ivec3 in0		= [ ivec3(-1, 1, -2) | ivec3(-25, 25, -3) | ivec3(1, 1, 1) | ivec3(2, 3, 4) | ivec3(16, 17, 18) ];
1091e5c31af7Sopenharmony_ci				output ivec3 out0	= [ ivec3(-1, 1, -2) | ivec3(-25, 25, -3) | ivec3(1, 1, 1) | ivec3(2, 3, 4) | ivec3(16, 17, 18) ];
1092e5c31af7Sopenharmony_ci			}
1093e5c31af7Sopenharmony_ci			vertex ""
1094e5c31af7Sopenharmony_ci				#version 310 es
1095e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
1096e5c31af7Sopenharmony_ci				layout(location = 0) flat out mediump ivec3 var;
1097e5c31af7Sopenharmony_ci				void main()
1098e5c31af7Sopenharmony_ci				{
1099e5c31af7Sopenharmony_ci					${VERTEX_SETUP}
1100e5c31af7Sopenharmony_ci					var = in0;
1101e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
1102e5c31af7Sopenharmony_ci				}
1103e5c31af7Sopenharmony_ci			""
1104e5c31af7Sopenharmony_ci			fragment ""
1105e5c31af7Sopenharmony_ci				#version 310 es
1106e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
1107e5c31af7Sopenharmony_ci				layout(location = 0) flat in ivec3 var;
1108e5c31af7Sopenharmony_ci				void main()
1109e5c31af7Sopenharmony_ci				{
1110e5c31af7Sopenharmony_ci					out0 = var;
1111e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
1112e5c31af7Sopenharmony_ci				}
1113e5c31af7Sopenharmony_ci			""
1114e5c31af7Sopenharmony_ci		end
1115e5c31af7Sopenharmony_ci
1116e5c31af7Sopenharmony_ci		case ivec4
1117e5c31af7Sopenharmony_ci			version 310 es
1118e5c31af7Sopenharmony_ci			desc "varying of type ivec4"
1119e5c31af7Sopenharmony_ci			values
1120e5c31af7Sopenharmony_ci			{
1121e5c31af7Sopenharmony_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) ];
1122e5c31af7Sopenharmony_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) ];
1123e5c31af7Sopenharmony_ci			}
1124e5c31af7Sopenharmony_ci			vertex ""
1125e5c31af7Sopenharmony_ci				#version 310 es
1126e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
1127e5c31af7Sopenharmony_ci				layout(location = 0) flat out mediump ivec4 var;
1128e5c31af7Sopenharmony_ci				void main()
1129e5c31af7Sopenharmony_ci				{
1130e5c31af7Sopenharmony_ci					${VERTEX_SETUP}
1131e5c31af7Sopenharmony_ci					var = in0;
1132e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
1133e5c31af7Sopenharmony_ci				}
1134e5c31af7Sopenharmony_ci			""
1135e5c31af7Sopenharmony_ci			fragment ""
1136e5c31af7Sopenharmony_ci				#version 310 es
1137e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
1138e5c31af7Sopenharmony_ci				layout(location = 0) flat in ivec4 var;
1139e5c31af7Sopenharmony_ci				void main()
1140e5c31af7Sopenharmony_ci				{
1141e5c31af7Sopenharmony_ci					out0 = var;
1142e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
1143e5c31af7Sopenharmony_ci				}
1144e5c31af7Sopenharmony_ci			""
1145e5c31af7Sopenharmony_ci		end
1146e5c31af7Sopenharmony_ci
1147e5c31af7Sopenharmony_ci		case uint
1148e5c31af7Sopenharmony_ci			version 310 es
1149e5c31af7Sopenharmony_ci			desc "varying of type int"
1150e5c31af7Sopenharmony_ci			values
1151e5c31af7Sopenharmony_ci			{
1152e5c31af7Sopenharmony_ci				input uint in0			= [ 1 | 2 | 3 | 16 ];
1153e5c31af7Sopenharmony_ci				output uint out0		= [ 1 | 2 | 3 | 16 ];
1154e5c31af7Sopenharmony_ci			}
1155e5c31af7Sopenharmony_ci			vertex ""
1156e5c31af7Sopenharmony_ci				#version 310 es
1157e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
1158e5c31af7Sopenharmony_ci				layout(location = 0) flat out mediump uint var;
1159e5c31af7Sopenharmony_ci				void main()
1160e5c31af7Sopenharmony_ci				{
1161e5c31af7Sopenharmony_ci					${VERTEX_SETUP}
1162e5c31af7Sopenharmony_ci					var = in0;
1163e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
1164e5c31af7Sopenharmony_ci				}
1165e5c31af7Sopenharmony_ci			""
1166e5c31af7Sopenharmony_ci			fragment ""
1167e5c31af7Sopenharmony_ci				#version 310 es
1168e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
1169e5c31af7Sopenharmony_ci				layout(location = 0) flat in uint var;
1170e5c31af7Sopenharmony_ci				void main()
1171e5c31af7Sopenharmony_ci				{
1172e5c31af7Sopenharmony_ci					out0 = var;
1173e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
1174e5c31af7Sopenharmony_ci				}
1175e5c31af7Sopenharmony_ci			""
1176e5c31af7Sopenharmony_ci		end
1177e5c31af7Sopenharmony_ci
1178e5c31af7Sopenharmony_ci		case uvec2
1179e5c31af7Sopenharmony_ci			version 310 es
1180e5c31af7Sopenharmony_ci			desc "varying of type uvec2"
1181e5c31af7Sopenharmony_ci			values
1182e5c31af7Sopenharmony_ci			{
1183e5c31af7Sopenharmony_ci				input uvec2 in0		= [ uvec2(1, 1) | uvec2(25, 25) | uvec2(1, 1) | uvec2(2, 3) | uvec2(16, 17) ];
1184e5c31af7Sopenharmony_ci				output uvec2 out0	= [ uvec2(1, 1) | uvec2(25, 25) | uvec2(1, 1) | uvec2(2, 3) | uvec2(16, 17) ];
1185e5c31af7Sopenharmony_ci			}
1186e5c31af7Sopenharmony_ci			vertex ""
1187e5c31af7Sopenharmony_ci				#version 310 es
1188e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
1189e5c31af7Sopenharmony_ci				layout(location = 0) flat out mediump uvec2 var;
1190e5c31af7Sopenharmony_ci				void main()
1191e5c31af7Sopenharmony_ci				{
1192e5c31af7Sopenharmony_ci					${VERTEX_SETUP}
1193e5c31af7Sopenharmony_ci					var = in0;
1194e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
1195e5c31af7Sopenharmony_ci				}
1196e5c31af7Sopenharmony_ci			""
1197e5c31af7Sopenharmony_ci			fragment ""
1198e5c31af7Sopenharmony_ci				#version 310 es
1199e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
1200e5c31af7Sopenharmony_ci				layout(location = 0) flat in uvec2 var;
1201e5c31af7Sopenharmony_ci				void main()
1202e5c31af7Sopenharmony_ci				{
1203e5c31af7Sopenharmony_ci					out0 = var;
1204e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
1205e5c31af7Sopenharmony_ci				}
1206e5c31af7Sopenharmony_ci			""
1207e5c31af7Sopenharmony_ci		end
1208e5c31af7Sopenharmony_ci
1209e5c31af7Sopenharmony_ci		case uvec3
1210e5c31af7Sopenharmony_ci			version 310 es
1211e5c31af7Sopenharmony_ci			desc "varying of type uvec3"
1212e5c31af7Sopenharmony_ci			values
1213e5c31af7Sopenharmony_ci			{
1214e5c31af7Sopenharmony_ci				input uvec3 in0		= [ uvec3(1, 1, 2) | uvec3(25, 25, 3) | uvec3(1, 1, 1) | uvec3(2, 3, 4) | uvec3(16, 17, 18) ];
1215e5c31af7Sopenharmony_ci				output uvec3 out0	= [ uvec3(1, 1, 2) | uvec3(25, 25, 3) | uvec3(1, 1, 1) | uvec3(2, 3, 4) | uvec3(16, 17, 18) ];
1216e5c31af7Sopenharmony_ci			}
1217e5c31af7Sopenharmony_ci			vertex ""
1218e5c31af7Sopenharmony_ci				#version 310 es
1219e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
1220e5c31af7Sopenharmony_ci				layout(location = 0) flat out mediump uvec3 var;
1221e5c31af7Sopenharmony_ci				void main()
1222e5c31af7Sopenharmony_ci				{
1223e5c31af7Sopenharmony_ci					${VERTEX_SETUP}
1224e5c31af7Sopenharmony_ci					var = in0;
1225e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
1226e5c31af7Sopenharmony_ci				}
1227e5c31af7Sopenharmony_ci			""
1228e5c31af7Sopenharmony_ci			fragment ""
1229e5c31af7Sopenharmony_ci				#version 310 es
1230e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
1231e5c31af7Sopenharmony_ci				layout(location = 0) flat in uvec3 var;
1232e5c31af7Sopenharmony_ci				void main()
1233e5c31af7Sopenharmony_ci				{
1234e5c31af7Sopenharmony_ci					out0 = var;
1235e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
1236e5c31af7Sopenharmony_ci				}
1237e5c31af7Sopenharmony_ci			""
1238e5c31af7Sopenharmony_ci		end
1239e5c31af7Sopenharmony_ci
1240e5c31af7Sopenharmony_ci		case uvec4
1241e5c31af7Sopenharmony_ci			version 310 es
1242e5c31af7Sopenharmony_ci			desc "varying of type uvec4"
1243e5c31af7Sopenharmony_ci			values
1244e5c31af7Sopenharmony_ci			{
1245e5c31af7Sopenharmony_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) ];
1246e5c31af7Sopenharmony_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) ];
1247e5c31af7Sopenharmony_ci			}
1248e5c31af7Sopenharmony_ci			vertex ""
1249e5c31af7Sopenharmony_ci				#version 310 es
1250e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
1251e5c31af7Sopenharmony_ci				layout(location = 0) flat out mediump uvec4 var;
1252e5c31af7Sopenharmony_ci				void main()
1253e5c31af7Sopenharmony_ci				{
1254e5c31af7Sopenharmony_ci					${VERTEX_SETUP}
1255e5c31af7Sopenharmony_ci					var = in0;
1256e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
1257e5c31af7Sopenharmony_ci				}
1258e5c31af7Sopenharmony_ci			""
1259e5c31af7Sopenharmony_ci			fragment ""
1260e5c31af7Sopenharmony_ci				#version 310 es
1261e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
1262e5c31af7Sopenharmony_ci				layout(location = 0) flat in uvec4 var;
1263e5c31af7Sopenharmony_ci				void main()
1264e5c31af7Sopenharmony_ci				{
1265e5c31af7Sopenharmony_ci					out0 = var;
1266e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
1267e5c31af7Sopenharmony_ci				}
1268e5c31af7Sopenharmony_ci			""
1269e5c31af7Sopenharmony_ci		end
1270e5c31af7Sopenharmony_ci	end
1271e5c31af7Sopenharmony_ci
1272e5c31af7Sopenharmony_ci	group struct "Structure varyings"
1273e5c31af7Sopenharmony_ci		case float
1274e5c31af7Sopenharmony_ci			version 310 es
1275e5c31af7Sopenharmony_ci			desc "varying of type float inside struct"
1276e5c31af7Sopenharmony_ci			values
1277e5c31af7Sopenharmony_ci			{
1278e5c31af7Sopenharmony_ci				input float in0		= [ -1.25 | -25.65 | 1.0 | 2.25 | 3.4 | 16.0 ];
1279e5c31af7Sopenharmony_ci				output float out0	= [ -1.25 | -25.65 | 1.0 | 2.25 | 3.4 | 16.0 ];
1280e5c31af7Sopenharmony_ci			}
1281e5c31af7Sopenharmony_ci			vertex ""
1282e5c31af7Sopenharmony_ci				#version 310 es
1283e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
1284e5c31af7Sopenharmony_ci				struct S { mediump float a; };
1285e5c31af7Sopenharmony_ci				layout(location = 0) out S var;
1286e5c31af7Sopenharmony_ci				void main()
1287e5c31af7Sopenharmony_ci				{
1288e5c31af7Sopenharmony_ci					var.a = in0;
1289e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
1290e5c31af7Sopenharmony_ci				}
1291e5c31af7Sopenharmony_ci			""
1292e5c31af7Sopenharmony_ci			fragment ""
1293e5c31af7Sopenharmony_ci				#version 310 es
1294e5c31af7Sopenharmony_ci				precision highp float;
1295e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
1296e5c31af7Sopenharmony_ci				struct S { mediump float a; };
1297e5c31af7Sopenharmony_ci				layout(location = 0) in S var;
1298e5c31af7Sopenharmony_ci				void main()
1299e5c31af7Sopenharmony_ci				{
1300e5c31af7Sopenharmony_ci					out0 = var.a;
1301e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
1302e5c31af7Sopenharmony_ci				}
1303e5c31af7Sopenharmony_ci			""
1304e5c31af7Sopenharmony_ci		end
1305e5c31af7Sopenharmony_ci
1306e5c31af7Sopenharmony_ci		case vec2
1307e5c31af7Sopenharmony_ci			version 310 es
1308e5c31af7Sopenharmony_ci			desc "varying of type vec2 inside struct"
1309e5c31af7Sopenharmony_ci			values
1310e5c31af7Sopenharmony_ci			{
1311e5c31af7Sopenharmony_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) ];
1312e5c31af7Sopenharmony_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) ];
1313e5c31af7Sopenharmony_ci			}
1314e5c31af7Sopenharmony_ci			vertex ""
1315e5c31af7Sopenharmony_ci				#version 310 es
1316e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
1317e5c31af7Sopenharmony_ci				struct S { mediump vec2 a; };
1318e5c31af7Sopenharmony_ci				layout(location = 0) out S var;
1319e5c31af7Sopenharmony_ci				void main()
1320e5c31af7Sopenharmony_ci				{
1321e5c31af7Sopenharmony_ci					var.a = in0;
1322e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
1323e5c31af7Sopenharmony_ci				}
1324e5c31af7Sopenharmony_ci			""
1325e5c31af7Sopenharmony_ci			fragment ""
1326e5c31af7Sopenharmony_ci				#version 310 es
1327e5c31af7Sopenharmony_ci				precision highp float;
1328e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
1329e5c31af7Sopenharmony_ci				struct S { mediump vec2 a; };
1330e5c31af7Sopenharmony_ci				layout(location = 0) in S var;
1331e5c31af7Sopenharmony_ci				void main()
1332e5c31af7Sopenharmony_ci				{
1333e5c31af7Sopenharmony_ci					out0 = var.a;
1334e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
1335e5c31af7Sopenharmony_ci				}
1336e5c31af7Sopenharmony_ci			""
1337e5c31af7Sopenharmony_ci		end
1338e5c31af7Sopenharmony_ci
1339e5c31af7Sopenharmony_ci		case vec3
1340e5c31af7Sopenharmony_ci			version 310 es
1341e5c31af7Sopenharmony_ci			desc "varying of type vec3 inside struct"
1342e5c31af7Sopenharmony_ci			values
1343e5c31af7Sopenharmony_ci			{
1344e5c31af7Sopenharmony_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) ];
1345e5c31af7Sopenharmony_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) ];
1346e5c31af7Sopenharmony_ci			}
1347e5c31af7Sopenharmony_ci			vertex ""
1348e5c31af7Sopenharmony_ci				#version 310 es
1349e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
1350e5c31af7Sopenharmony_ci				struct S { mediump vec3 a; };
1351e5c31af7Sopenharmony_ci				layout(location = 0) out S var;
1352e5c31af7Sopenharmony_ci				void main()
1353e5c31af7Sopenharmony_ci				{
1354e5c31af7Sopenharmony_ci					var.a = in0;
1355e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
1356e5c31af7Sopenharmony_ci				}
1357e5c31af7Sopenharmony_ci			""
1358e5c31af7Sopenharmony_ci			fragment ""
1359e5c31af7Sopenharmony_ci				#version 310 es
1360e5c31af7Sopenharmony_ci				precision highp float;
1361e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
1362e5c31af7Sopenharmony_ci				struct S { mediump vec3 a; };
1363e5c31af7Sopenharmony_ci				layout(location = 0) in S var;
1364e5c31af7Sopenharmony_ci				void main()
1365e5c31af7Sopenharmony_ci				{
1366e5c31af7Sopenharmony_ci					out0 = var.a;
1367e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
1368e5c31af7Sopenharmony_ci				}
1369e5c31af7Sopenharmony_ci			""
1370e5c31af7Sopenharmony_ci		end
1371e5c31af7Sopenharmony_ci
1372e5c31af7Sopenharmony_ci		case vec4
1373e5c31af7Sopenharmony_ci			version 310 es
1374e5c31af7Sopenharmony_ci			desc "varying of type vec4 inside struct"
1375e5c31af7Sopenharmony_ci			values
1376e5c31af7Sopenharmony_ci			{
1377e5c31af7Sopenharmony_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) ];
1378e5c31af7Sopenharmony_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) ];
1379e5c31af7Sopenharmony_ci			}
1380e5c31af7Sopenharmony_ci			vertex ""
1381e5c31af7Sopenharmony_ci				#version 310 es
1382e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
1383e5c31af7Sopenharmony_ci				struct S { mediump vec4 a; };
1384e5c31af7Sopenharmony_ci				layout(location = 0) out S var;
1385e5c31af7Sopenharmony_ci				void main()
1386e5c31af7Sopenharmony_ci				{
1387e5c31af7Sopenharmony_ci					var.a = in0;
1388e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
1389e5c31af7Sopenharmony_ci				}
1390e5c31af7Sopenharmony_ci			""
1391e5c31af7Sopenharmony_ci			fragment ""
1392e5c31af7Sopenharmony_ci				#version 310 es
1393e5c31af7Sopenharmony_ci				precision highp float;
1394e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
1395e5c31af7Sopenharmony_ci				struct S { mediump vec4 a; };
1396e5c31af7Sopenharmony_ci				layout(location = 0) in S var;
1397e5c31af7Sopenharmony_ci				void main()
1398e5c31af7Sopenharmony_ci				{
1399e5c31af7Sopenharmony_ci					out0 = var.a;
1400e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
1401e5c31af7Sopenharmony_ci				}
1402e5c31af7Sopenharmony_ci			""
1403e5c31af7Sopenharmony_ci		end
1404e5c31af7Sopenharmony_ci
1405e5c31af7Sopenharmony_ci		case mat2
1406e5c31af7Sopenharmony_ci			version 310 es
1407e5c31af7Sopenharmony_ci			desc "varying of type mat2 inside struct"
1408e5c31af7Sopenharmony_ci			values
1409e5c31af7Sopenharmony_ci			{
1410e5c31af7Sopenharmony_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) ];
1411e5c31af7Sopenharmony_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) ];
1412e5c31af7Sopenharmony_ci			}
1413e5c31af7Sopenharmony_ci			vertex ""
1414e5c31af7Sopenharmony_ci				#version 310 es
1415e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
1416e5c31af7Sopenharmony_ci				struct S { mediump mat2 a; };
1417e5c31af7Sopenharmony_ci				layout(location = 0) out S var;
1418e5c31af7Sopenharmony_ci				void main()
1419e5c31af7Sopenharmony_ci				{
1420e5c31af7Sopenharmony_ci					var.a = in0;
1421e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
1422e5c31af7Sopenharmony_ci				}
1423e5c31af7Sopenharmony_ci			""
1424e5c31af7Sopenharmony_ci			fragment ""
1425e5c31af7Sopenharmony_ci				#version 310 es
1426e5c31af7Sopenharmony_ci				precision highp float;
1427e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
1428e5c31af7Sopenharmony_ci				struct S { mediump mat2 a; };
1429e5c31af7Sopenharmony_ci				layout(location = 0) in S var;
1430e5c31af7Sopenharmony_ci				void main()
1431e5c31af7Sopenharmony_ci				{
1432e5c31af7Sopenharmony_ci					out0 = var.a;
1433e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
1434e5c31af7Sopenharmony_ci				}
1435e5c31af7Sopenharmony_ci			""
1436e5c31af7Sopenharmony_ci		end
1437e5c31af7Sopenharmony_ci
1438e5c31af7Sopenharmony_ci		case mat2x3
1439e5c31af7Sopenharmony_ci			version 310 es
1440e5c31af7Sopenharmony_ci			desc "varying of type mat2x3 inside struct"
1441e5c31af7Sopenharmony_ci			values
1442e5c31af7Sopenharmony_ci			{
1443e5c31af7Sopenharmony_ci				input mat2x3 in0	= [ mat2x3(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25) ];
1444e5c31af7Sopenharmony_ci				output mat2x3 out0	= [ mat2x3(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25) ];
1445e5c31af7Sopenharmony_ci			}
1446e5c31af7Sopenharmony_ci			vertex ""
1447e5c31af7Sopenharmony_ci				#version 310 es
1448e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
1449e5c31af7Sopenharmony_ci				struct S { mediump mat2x3 a; };
1450e5c31af7Sopenharmony_ci				layout(location = 0) out S var;
1451e5c31af7Sopenharmony_ci				void main()
1452e5c31af7Sopenharmony_ci				{
1453e5c31af7Sopenharmony_ci					var.a = in0;
1454e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
1455e5c31af7Sopenharmony_ci				}
1456e5c31af7Sopenharmony_ci			""
1457e5c31af7Sopenharmony_ci			fragment ""
1458e5c31af7Sopenharmony_ci				#version 310 es
1459e5c31af7Sopenharmony_ci				precision highp float;
1460e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
1461e5c31af7Sopenharmony_ci				struct S { mediump mat2x3 a; };
1462e5c31af7Sopenharmony_ci				layout(location = 0) in S var;
1463e5c31af7Sopenharmony_ci				void main()
1464e5c31af7Sopenharmony_ci				{
1465e5c31af7Sopenharmony_ci					out0 = var.a;
1466e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
1467e5c31af7Sopenharmony_ci				}
1468e5c31af7Sopenharmony_ci			""
1469e5c31af7Sopenharmony_ci		end
1470e5c31af7Sopenharmony_ci
1471e5c31af7Sopenharmony_ci		case mat2x4
1472e5c31af7Sopenharmony_ci			version 310 es
1473e5c31af7Sopenharmony_ci			desc "varying of type mat2x4 inside struct"
1474e5c31af7Sopenharmony_ci			values
1475e5c31af7Sopenharmony_ci			{
1476e5c31af7Sopenharmony_ci				input mat2x4 in0	= [ mat2x4(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7) ];
1477e5c31af7Sopenharmony_ci				output mat2x4 out0	= [ mat2x4(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7) ];
1478e5c31af7Sopenharmony_ci			}
1479e5c31af7Sopenharmony_ci			vertex ""
1480e5c31af7Sopenharmony_ci				#version 310 es
1481e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
1482e5c31af7Sopenharmony_ci				struct S { mediump mat2x4 a; };
1483e5c31af7Sopenharmony_ci				layout(location = 0) out S var;
1484e5c31af7Sopenharmony_ci				void main()
1485e5c31af7Sopenharmony_ci				{
1486e5c31af7Sopenharmony_ci					var.a = in0;
1487e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
1488e5c31af7Sopenharmony_ci				}
1489e5c31af7Sopenharmony_ci			""
1490e5c31af7Sopenharmony_ci			fragment ""
1491e5c31af7Sopenharmony_ci				#version 310 es
1492e5c31af7Sopenharmony_ci				precision highp float;
1493e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
1494e5c31af7Sopenharmony_ci				struct S { mediump mat2x4 a; };
1495e5c31af7Sopenharmony_ci				layout(location = 0) in S var;
1496e5c31af7Sopenharmony_ci				void main()
1497e5c31af7Sopenharmony_ci				{
1498e5c31af7Sopenharmony_ci					out0 = var.a;
1499e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
1500e5c31af7Sopenharmony_ci				}
1501e5c31af7Sopenharmony_ci			""
1502e5c31af7Sopenharmony_ci		end
1503e5c31af7Sopenharmony_ci
1504e5c31af7Sopenharmony_ci		case mat3x2
1505e5c31af7Sopenharmony_ci			version 310 es
1506e5c31af7Sopenharmony_ci			desc "varying of type mat3x2 inside struct"
1507e5c31af7Sopenharmony_ci			values
1508e5c31af7Sopenharmony_ci			{
1509e5c31af7Sopenharmony_ci				input mat3x2 in0	= [ mat3x2(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25) ];
1510e5c31af7Sopenharmony_ci				output mat3x2 out0	= [ mat3x2(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25) ];
1511e5c31af7Sopenharmony_ci			}
1512e5c31af7Sopenharmony_ci			vertex ""
1513e5c31af7Sopenharmony_ci				#version 310 es
1514e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
1515e5c31af7Sopenharmony_ci				struct S { mediump mat3x2 a; };
1516e5c31af7Sopenharmony_ci				layout(location = 0) out S var;
1517e5c31af7Sopenharmony_ci				void main()
1518e5c31af7Sopenharmony_ci				{
1519e5c31af7Sopenharmony_ci					var.a = in0;
1520e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
1521e5c31af7Sopenharmony_ci				}
1522e5c31af7Sopenharmony_ci			""
1523e5c31af7Sopenharmony_ci			fragment ""
1524e5c31af7Sopenharmony_ci				#version 310 es
1525e5c31af7Sopenharmony_ci				precision highp float;
1526e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
1527e5c31af7Sopenharmony_ci				struct S { mediump mat3x2 a; };
1528e5c31af7Sopenharmony_ci				layout(location = 0) in S var;
1529e5c31af7Sopenharmony_ci				void main()
1530e5c31af7Sopenharmony_ci				{
1531e5c31af7Sopenharmony_ci					out0 = var.a;
1532e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
1533e5c31af7Sopenharmony_ci				}
1534e5c31af7Sopenharmony_ci			""
1535e5c31af7Sopenharmony_ci		end
1536e5c31af7Sopenharmony_ci
1537e5c31af7Sopenharmony_ci		case mat3
1538e5c31af7Sopenharmony_ci			version 310 es
1539e5c31af7Sopenharmony_ci			desc "varying of type mat3 inside struct"
1540e5c31af7Sopenharmony_ci			values
1541e5c31af7Sopenharmony_ci			{
1542e5c31af7Sopenharmony_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) ];
1543e5c31af7Sopenharmony_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) ];
1544e5c31af7Sopenharmony_ci			}
1545e5c31af7Sopenharmony_ci			vertex ""
1546e5c31af7Sopenharmony_ci				#version 310 es
1547e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
1548e5c31af7Sopenharmony_ci				struct S { mediump mat3 a; };
1549e5c31af7Sopenharmony_ci				layout(location = 0) out S var;
1550e5c31af7Sopenharmony_ci				void main()
1551e5c31af7Sopenharmony_ci				{
1552e5c31af7Sopenharmony_ci					var.a = in0;
1553e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
1554e5c31af7Sopenharmony_ci				}
1555e5c31af7Sopenharmony_ci			""
1556e5c31af7Sopenharmony_ci			fragment ""
1557e5c31af7Sopenharmony_ci				#version 310 es
1558e5c31af7Sopenharmony_ci				precision highp float;
1559e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
1560e5c31af7Sopenharmony_ci				struct S { mediump mat3 a; };
1561e5c31af7Sopenharmony_ci				layout(location = 0) in S var;
1562e5c31af7Sopenharmony_ci				void main()
1563e5c31af7Sopenharmony_ci				{
1564e5c31af7Sopenharmony_ci					out0 = var.a;
1565e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
1566e5c31af7Sopenharmony_ci				}
1567e5c31af7Sopenharmony_ci			""
1568e5c31af7Sopenharmony_ci		end
1569e5c31af7Sopenharmony_ci
1570e5c31af7Sopenharmony_ci		case mat3x4
1571e5c31af7Sopenharmony_ci			version 310 es
1572e5c31af7Sopenharmony_ci			desc "varying of type mat3x4 inside struct"
1573e5c31af7Sopenharmony_ci			values
1574e5c31af7Sopenharmony_ci			{
1575e5c31af7Sopenharmony_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) ];
1576e5c31af7Sopenharmony_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) ];
1577e5c31af7Sopenharmony_ci			}
1578e5c31af7Sopenharmony_ci			vertex ""
1579e5c31af7Sopenharmony_ci				#version 310 es
1580e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
1581e5c31af7Sopenharmony_ci				struct S { mediump mat3x4 a; };
1582e5c31af7Sopenharmony_ci				layout(location = 0) out S var;
1583e5c31af7Sopenharmony_ci				void main()
1584e5c31af7Sopenharmony_ci				{
1585e5c31af7Sopenharmony_ci					var.a = in0;
1586e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
1587e5c31af7Sopenharmony_ci				}
1588e5c31af7Sopenharmony_ci			""
1589e5c31af7Sopenharmony_ci			fragment ""
1590e5c31af7Sopenharmony_ci				#version 310 es
1591e5c31af7Sopenharmony_ci				precision highp float;
1592e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
1593e5c31af7Sopenharmony_ci				struct S { mediump mat3x4 a; };
1594e5c31af7Sopenharmony_ci				layout(location = 0) in S var;
1595e5c31af7Sopenharmony_ci				void main()
1596e5c31af7Sopenharmony_ci				{
1597e5c31af7Sopenharmony_ci					out0 = var.a;
1598e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
1599e5c31af7Sopenharmony_ci				}
1600e5c31af7Sopenharmony_ci			""
1601e5c31af7Sopenharmony_ci		end
1602e5c31af7Sopenharmony_ci
1603e5c31af7Sopenharmony_ci		case mat4x2
1604e5c31af7Sopenharmony_ci			version 310 es
1605e5c31af7Sopenharmony_ci			desc "varying of type mat4x2 inside struct"
1606e5c31af7Sopenharmony_ci			values
1607e5c31af7Sopenharmony_ci			{
1608e5c31af7Sopenharmony_ci				input mat4x2 in0	= [ mat4x2(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7) ];
1609e5c31af7Sopenharmony_ci				output mat4x2 out0	= [ mat4x2(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7) ];
1610e5c31af7Sopenharmony_ci			}
1611e5c31af7Sopenharmony_ci			vertex ""
1612e5c31af7Sopenharmony_ci				#version 310 es
1613e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
1614e5c31af7Sopenharmony_ci				struct S { mediump mat4x2 a; };
1615e5c31af7Sopenharmony_ci				layout(location = 0) out S var;
1616e5c31af7Sopenharmony_ci				void main()
1617e5c31af7Sopenharmony_ci				{
1618e5c31af7Sopenharmony_ci					var.a = in0;
1619e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
1620e5c31af7Sopenharmony_ci				}
1621e5c31af7Sopenharmony_ci			""
1622e5c31af7Sopenharmony_ci			fragment ""
1623e5c31af7Sopenharmony_ci				#version 310 es
1624e5c31af7Sopenharmony_ci				precision highp float;
1625e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
1626e5c31af7Sopenharmony_ci				struct S { mediump mat4x2 a; };
1627e5c31af7Sopenharmony_ci				layout(location = 0) in S var;
1628e5c31af7Sopenharmony_ci				void main()
1629e5c31af7Sopenharmony_ci				{
1630e5c31af7Sopenharmony_ci					out0 = var.a;
1631e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
1632e5c31af7Sopenharmony_ci				}
1633e5c31af7Sopenharmony_ci			""
1634e5c31af7Sopenharmony_ci		end
1635e5c31af7Sopenharmony_ci
1636e5c31af7Sopenharmony_ci		case mat4x3
1637e5c31af7Sopenharmony_ci			version 310 es
1638e5c31af7Sopenharmony_ci			desc "varying of type mat4x3 inside struct"
1639e5c31af7Sopenharmony_ci			values
1640e5c31af7Sopenharmony_ci			{
1641e5c31af7Sopenharmony_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) ];
1642e5c31af7Sopenharmony_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) ];
1643e5c31af7Sopenharmony_ci			}
1644e5c31af7Sopenharmony_ci			vertex ""
1645e5c31af7Sopenharmony_ci				#version 310 es
1646e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
1647e5c31af7Sopenharmony_ci				struct S { mediump mat4x3 a; };
1648e5c31af7Sopenharmony_ci				layout(location = 0) out S var;
1649e5c31af7Sopenharmony_ci				void main()
1650e5c31af7Sopenharmony_ci				{
1651e5c31af7Sopenharmony_ci					var.a = in0;
1652e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
1653e5c31af7Sopenharmony_ci				}
1654e5c31af7Sopenharmony_ci			""
1655e5c31af7Sopenharmony_ci			fragment ""
1656e5c31af7Sopenharmony_ci				#version 310 es
1657e5c31af7Sopenharmony_ci				precision highp float;
1658e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
1659e5c31af7Sopenharmony_ci				struct S { mediump mat4x3 a; };
1660e5c31af7Sopenharmony_ci				layout(location = 0) in S var;
1661e5c31af7Sopenharmony_ci				void main()
1662e5c31af7Sopenharmony_ci				{
1663e5c31af7Sopenharmony_ci					out0 = var.a;
1664e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
1665e5c31af7Sopenharmony_ci				}
1666e5c31af7Sopenharmony_ci			""
1667e5c31af7Sopenharmony_ci		end
1668e5c31af7Sopenharmony_ci
1669e5c31af7Sopenharmony_ci		case mat4
1670e5c31af7Sopenharmony_ci			version 310 es
1671e5c31af7Sopenharmony_ci			desc "varying of type mat4 inside struct"
1672e5c31af7Sopenharmony_ci			values
1673e5c31af7Sopenharmony_ci			{
1674e5c31af7Sopenharmony_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) ];
1675e5c31af7Sopenharmony_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) ];
1676e5c31af7Sopenharmony_ci			}
1677e5c31af7Sopenharmony_ci			vertex ""
1678e5c31af7Sopenharmony_ci				#version 310 es
1679e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
1680e5c31af7Sopenharmony_ci				struct S { mediump mat4 a; };
1681e5c31af7Sopenharmony_ci				layout(location = 0) out S var;
1682e5c31af7Sopenharmony_ci				void main()
1683e5c31af7Sopenharmony_ci				{
1684e5c31af7Sopenharmony_ci					var.a = in0;
1685e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
1686e5c31af7Sopenharmony_ci				}
1687e5c31af7Sopenharmony_ci			""
1688e5c31af7Sopenharmony_ci			fragment ""
1689e5c31af7Sopenharmony_ci				#version 310 es
1690e5c31af7Sopenharmony_ci				precision highp float;
1691e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
1692e5c31af7Sopenharmony_ci				struct S { mediump mat4 a; };
1693e5c31af7Sopenharmony_ci				layout(location = 0) in S var;
1694e5c31af7Sopenharmony_ci				void main()
1695e5c31af7Sopenharmony_ci				{
1696e5c31af7Sopenharmony_ci					out0 = var.a;
1697e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
1698e5c31af7Sopenharmony_ci				}
1699e5c31af7Sopenharmony_ci			""
1700e5c31af7Sopenharmony_ci		end
1701e5c31af7Sopenharmony_ci
1702e5c31af7Sopenharmony_ci		case int
1703e5c31af7Sopenharmony_ci			version 310 es
1704e5c31af7Sopenharmony_ci			desc "varying of type int inside struct"
1705e5c31af7Sopenharmony_ci			values
1706e5c31af7Sopenharmony_ci			{
1707e5c31af7Sopenharmony_ci				input int in0		= [ -1 | -25 | 1 | 2 | 3 | 16 ];
1708e5c31af7Sopenharmony_ci				output int out0		= [ -1 | -25 | 1 | 2 | 3 | 16 ];
1709e5c31af7Sopenharmony_ci			}
1710e5c31af7Sopenharmony_ci			vertex ""
1711e5c31af7Sopenharmony_ci				#version 310 es
1712e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
1713e5c31af7Sopenharmony_ci				struct S { mediump int a; };
1714e5c31af7Sopenharmony_ci				layout(location = 0) flat out S var;
1715e5c31af7Sopenharmony_ci				void main()
1716e5c31af7Sopenharmony_ci				{
1717e5c31af7Sopenharmony_ci					${VERTEX_SETUP}
1718e5c31af7Sopenharmony_ci					var.a = in0;
1719e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
1720e5c31af7Sopenharmony_ci				}
1721e5c31af7Sopenharmony_ci			""
1722e5c31af7Sopenharmony_ci			fragment ""
1723e5c31af7Sopenharmony_ci				#version 310 es
1724e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
1725e5c31af7Sopenharmony_ci				struct S { mediump int a; };
1726e5c31af7Sopenharmony_ci				layout(location = 0) flat in S var;
1727e5c31af7Sopenharmony_ci				void main()
1728e5c31af7Sopenharmony_ci				{
1729e5c31af7Sopenharmony_ci					out0 = var.a;
1730e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
1731e5c31af7Sopenharmony_ci				}
1732e5c31af7Sopenharmony_ci			""
1733e5c31af7Sopenharmony_ci		end
1734e5c31af7Sopenharmony_ci
1735e5c31af7Sopenharmony_ci		case ivec2
1736e5c31af7Sopenharmony_ci			version 310 es
1737e5c31af7Sopenharmony_ci			desc "varying of type ivec2 inside struct"
1738e5c31af7Sopenharmony_ci			values
1739e5c31af7Sopenharmony_ci			{
1740e5c31af7Sopenharmony_ci				input ivec2 in0		= [ ivec2(-1, 1) | ivec2(-25, 25) | ivec2(1, 1) | ivec2(2, 3) | ivec2(16, 17) ];
1741e5c31af7Sopenharmony_ci				output ivec2 out0	= [ ivec2(-1, 1) | ivec2(-25, 25) | ivec2(1, 1) | ivec2(2, 3) | ivec2(16, 17) ];
1742e5c31af7Sopenharmony_ci			}
1743e5c31af7Sopenharmony_ci			vertex ""
1744e5c31af7Sopenharmony_ci				#version 310 es
1745e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
1746e5c31af7Sopenharmony_ci				struct S { mediump ivec2 a; };
1747e5c31af7Sopenharmony_ci				layout(location = 0) flat out S var;
1748e5c31af7Sopenharmony_ci				void main()
1749e5c31af7Sopenharmony_ci				{
1750e5c31af7Sopenharmony_ci					${VERTEX_SETUP}
1751e5c31af7Sopenharmony_ci					var.a = in0;
1752e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
1753e5c31af7Sopenharmony_ci				}
1754e5c31af7Sopenharmony_ci			""
1755e5c31af7Sopenharmony_ci			fragment ""
1756e5c31af7Sopenharmony_ci				#version 310 es
1757e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
1758e5c31af7Sopenharmony_ci				struct S { mediump ivec2 a; };
1759e5c31af7Sopenharmony_ci				layout(location = 0) flat in S var;
1760e5c31af7Sopenharmony_ci				void main()
1761e5c31af7Sopenharmony_ci				{
1762e5c31af7Sopenharmony_ci					out0 = var.a;
1763e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
1764e5c31af7Sopenharmony_ci				}
1765e5c31af7Sopenharmony_ci			""
1766e5c31af7Sopenharmony_ci		end
1767e5c31af7Sopenharmony_ci
1768e5c31af7Sopenharmony_ci		case ivec3
1769e5c31af7Sopenharmony_ci			version 310 es
1770e5c31af7Sopenharmony_ci			desc "varying of type ivec3 inside struct"
1771e5c31af7Sopenharmony_ci			values
1772e5c31af7Sopenharmony_ci			{
1773e5c31af7Sopenharmony_ci				input ivec3 in0		= [ ivec3(-1, 1, -2) | ivec3(-25, 25, -3) | ivec3(1, 1, 1) | ivec3(2, 3, 4) | ivec3(16, 17, 18) ];
1774e5c31af7Sopenharmony_ci				output ivec3 out0	= [ ivec3(-1, 1, -2) | ivec3(-25, 25, -3) | ivec3(1, 1, 1) | ivec3(2, 3, 4) | ivec3(16, 17, 18) ];
1775e5c31af7Sopenharmony_ci			}
1776e5c31af7Sopenharmony_ci			vertex ""
1777e5c31af7Sopenharmony_ci				#version 310 es
1778e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
1779e5c31af7Sopenharmony_ci				struct S { mediump ivec3 a; };
1780e5c31af7Sopenharmony_ci				layout(location = 0) flat out S var;
1781e5c31af7Sopenharmony_ci				void main()
1782e5c31af7Sopenharmony_ci				{
1783e5c31af7Sopenharmony_ci					${VERTEX_SETUP}
1784e5c31af7Sopenharmony_ci					var.a = in0;
1785e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
1786e5c31af7Sopenharmony_ci				}
1787e5c31af7Sopenharmony_ci			""
1788e5c31af7Sopenharmony_ci			fragment ""
1789e5c31af7Sopenharmony_ci				#version 310 es
1790e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
1791e5c31af7Sopenharmony_ci				struct S { mediump ivec3 a; };
1792e5c31af7Sopenharmony_ci				layout(location = 0) flat in S var;
1793e5c31af7Sopenharmony_ci				void main()
1794e5c31af7Sopenharmony_ci				{
1795e5c31af7Sopenharmony_ci					out0 = var.a;
1796e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
1797e5c31af7Sopenharmony_ci				}
1798e5c31af7Sopenharmony_ci			""
1799e5c31af7Sopenharmony_ci		end
1800e5c31af7Sopenharmony_ci
1801e5c31af7Sopenharmony_ci		case ivec4
1802e5c31af7Sopenharmony_ci			version 310 es
1803e5c31af7Sopenharmony_ci			desc "varying of type ivec4 inside struct"
1804e5c31af7Sopenharmony_ci			values
1805e5c31af7Sopenharmony_ci			{
1806e5c31af7Sopenharmony_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) ];
1807e5c31af7Sopenharmony_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) ];
1808e5c31af7Sopenharmony_ci			}
1809e5c31af7Sopenharmony_ci			vertex ""
1810e5c31af7Sopenharmony_ci				#version 310 es
1811e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
1812e5c31af7Sopenharmony_ci				struct S { mediump ivec4 a; };
1813e5c31af7Sopenharmony_ci				layout(location = 0) flat out S var;
1814e5c31af7Sopenharmony_ci				void main()
1815e5c31af7Sopenharmony_ci				{
1816e5c31af7Sopenharmony_ci					${VERTEX_SETUP}
1817e5c31af7Sopenharmony_ci					var.a = in0;
1818e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
1819e5c31af7Sopenharmony_ci				}
1820e5c31af7Sopenharmony_ci			""
1821e5c31af7Sopenharmony_ci			fragment ""
1822e5c31af7Sopenharmony_ci				#version 310 es
1823e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
1824e5c31af7Sopenharmony_ci				struct S { mediump ivec4 a; };
1825e5c31af7Sopenharmony_ci				layout(location = 0) flat in S var;
1826e5c31af7Sopenharmony_ci				void main()
1827e5c31af7Sopenharmony_ci				{
1828e5c31af7Sopenharmony_ci					out0 = var.a;
1829e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
1830e5c31af7Sopenharmony_ci				}
1831e5c31af7Sopenharmony_ci			""
1832e5c31af7Sopenharmony_ci		end
1833e5c31af7Sopenharmony_ci
1834e5c31af7Sopenharmony_ci		case uint
1835e5c31af7Sopenharmony_ci			version 310 es
1836e5c31af7Sopenharmony_ci			desc "varying of type uint in struct"
1837e5c31af7Sopenharmony_ci			values
1838e5c31af7Sopenharmony_ci			{
1839e5c31af7Sopenharmony_ci				input uint in0			= [ 1 | 2 | 3 | 16 ];
1840e5c31af7Sopenharmony_ci				output uint out0		= [ 1 | 2 | 3 | 16 ];
1841e5c31af7Sopenharmony_ci			}
1842e5c31af7Sopenharmony_ci			vertex ""
1843e5c31af7Sopenharmony_ci				#version 310 es
1844e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
1845e5c31af7Sopenharmony_ci				struct S { mediump uint a; };
1846e5c31af7Sopenharmony_ci				layout(location = 0) flat out S var;
1847e5c31af7Sopenharmony_ci				void main()
1848e5c31af7Sopenharmony_ci				{
1849e5c31af7Sopenharmony_ci					${VERTEX_SETUP}
1850e5c31af7Sopenharmony_ci					var.a = in0;
1851e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
1852e5c31af7Sopenharmony_ci				}
1853e5c31af7Sopenharmony_ci			""
1854e5c31af7Sopenharmony_ci			fragment ""
1855e5c31af7Sopenharmony_ci				#version 310 es
1856e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
1857e5c31af7Sopenharmony_ci				struct S { mediump uint a; };
1858e5c31af7Sopenharmony_ci				layout(location = 0) flat in S var;
1859e5c31af7Sopenharmony_ci				void main()
1860e5c31af7Sopenharmony_ci				{
1861e5c31af7Sopenharmony_ci					out0 = var.a;
1862e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
1863e5c31af7Sopenharmony_ci				}
1864e5c31af7Sopenharmony_ci			""
1865e5c31af7Sopenharmony_ci		end
1866e5c31af7Sopenharmony_ci
1867e5c31af7Sopenharmony_ci		case uvec2
1868e5c31af7Sopenharmony_ci			version 310 es
1869e5c31af7Sopenharmony_ci			desc "varying of type uvec2 inside struct"
1870e5c31af7Sopenharmony_ci			values
1871e5c31af7Sopenharmony_ci			{
1872e5c31af7Sopenharmony_ci				input uvec2 in0		= [ uvec2(1, 1) | uvec2(25, 25) | uvec2(1, 1) | uvec2(2, 3) | uvec2(16, 17) ];
1873e5c31af7Sopenharmony_ci				output uvec2 out0	= [ uvec2(1, 1) | uvec2(25, 25) | uvec2(1, 1) | uvec2(2, 3) | uvec2(16, 17) ];
1874e5c31af7Sopenharmony_ci			}
1875e5c31af7Sopenharmony_ci			vertex ""
1876e5c31af7Sopenharmony_ci				#version 310 es
1877e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
1878e5c31af7Sopenharmony_ci				struct S { mediump uvec2 a; };
1879e5c31af7Sopenharmony_ci				layout(location = 0) flat out S var;
1880e5c31af7Sopenharmony_ci				void main()
1881e5c31af7Sopenharmony_ci				{
1882e5c31af7Sopenharmony_ci					${VERTEX_SETUP}
1883e5c31af7Sopenharmony_ci					var.a = in0;
1884e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
1885e5c31af7Sopenharmony_ci				}
1886e5c31af7Sopenharmony_ci			""
1887e5c31af7Sopenharmony_ci			fragment ""
1888e5c31af7Sopenharmony_ci				#version 310 es
1889e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
1890e5c31af7Sopenharmony_ci				struct S { mediump uvec2 a; };
1891e5c31af7Sopenharmony_ci				layout(location = 0) flat in S var;
1892e5c31af7Sopenharmony_ci				void main()
1893e5c31af7Sopenharmony_ci				{
1894e5c31af7Sopenharmony_ci					out0 = var.a;
1895e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
1896e5c31af7Sopenharmony_ci				}
1897e5c31af7Sopenharmony_ci			""
1898e5c31af7Sopenharmony_ci		end
1899e5c31af7Sopenharmony_ci
1900e5c31af7Sopenharmony_ci		case uvec3
1901e5c31af7Sopenharmony_ci			version 310 es
1902e5c31af7Sopenharmony_ci			desc "varying of type uvec3 inside struct"
1903e5c31af7Sopenharmony_ci			values
1904e5c31af7Sopenharmony_ci			{
1905e5c31af7Sopenharmony_ci				input uvec3 in0		= [ uvec3(1, 1, 2) | uvec3(25, 25, 3) | uvec3(1, 1, 1) | uvec3(2, 3, 4) | uvec3(16, 17, 18) ];
1906e5c31af7Sopenharmony_ci				output uvec3 out0	= [ uvec3(1, 1, 2) | uvec3(25, 25, 3) | uvec3(1, 1, 1) | uvec3(2, 3, 4) | uvec3(16, 17, 18) ];
1907e5c31af7Sopenharmony_ci			}
1908e5c31af7Sopenharmony_ci			vertex ""
1909e5c31af7Sopenharmony_ci				#version 310 es
1910e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
1911e5c31af7Sopenharmony_ci				struct S { mediump uvec3 a; };
1912e5c31af7Sopenharmony_ci				layout(location = 0) flat out S var;
1913e5c31af7Sopenharmony_ci				void main()
1914e5c31af7Sopenharmony_ci				{
1915e5c31af7Sopenharmony_ci					${VERTEX_SETUP}
1916e5c31af7Sopenharmony_ci					var.a = in0;
1917e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
1918e5c31af7Sopenharmony_ci				}
1919e5c31af7Sopenharmony_ci			""
1920e5c31af7Sopenharmony_ci			fragment ""
1921e5c31af7Sopenharmony_ci				#version 310 es
1922e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
1923e5c31af7Sopenharmony_ci				struct S { mediump uvec3 a; };
1924e5c31af7Sopenharmony_ci				layout(location = 0) flat in S var;
1925e5c31af7Sopenharmony_ci				void main()
1926e5c31af7Sopenharmony_ci				{
1927e5c31af7Sopenharmony_ci					out0 = var.a;
1928e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
1929e5c31af7Sopenharmony_ci				}
1930e5c31af7Sopenharmony_ci			""
1931e5c31af7Sopenharmony_ci		end
1932e5c31af7Sopenharmony_ci
1933e5c31af7Sopenharmony_ci		case uvec4
1934e5c31af7Sopenharmony_ci			version 310 es
1935e5c31af7Sopenharmony_ci			desc "varying of type uvec4 inside struct"
1936e5c31af7Sopenharmony_ci			values
1937e5c31af7Sopenharmony_ci			{
1938e5c31af7Sopenharmony_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) ];
1939e5c31af7Sopenharmony_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) ];
1940e5c31af7Sopenharmony_ci			}
1941e5c31af7Sopenharmony_ci			vertex ""
1942e5c31af7Sopenharmony_ci				#version 310 es
1943e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
1944e5c31af7Sopenharmony_ci				struct S { mediump uvec4 a; };
1945e5c31af7Sopenharmony_ci				layout(location = 0) flat out S var;
1946e5c31af7Sopenharmony_ci				void main()
1947e5c31af7Sopenharmony_ci				{
1948e5c31af7Sopenharmony_ci					${VERTEX_SETUP}
1949e5c31af7Sopenharmony_ci					var.a = in0;
1950e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
1951e5c31af7Sopenharmony_ci				}
1952e5c31af7Sopenharmony_ci			""
1953e5c31af7Sopenharmony_ci			fragment ""
1954e5c31af7Sopenharmony_ci				#version 310 es
1955e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
1956e5c31af7Sopenharmony_ci				struct S { mediump uvec4 a; };
1957e5c31af7Sopenharmony_ci				layout(location = 0) flat in S var;
1958e5c31af7Sopenharmony_ci				void main()
1959e5c31af7Sopenharmony_ci				{
1960e5c31af7Sopenharmony_ci					out0 = var.a;
1961e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
1962e5c31af7Sopenharmony_ci				}
1963e5c31af7Sopenharmony_ci			""
1964e5c31af7Sopenharmony_ci		end
1965e5c31af7Sopenharmony_ci
1966e5c31af7Sopenharmony_ci		case float_vec3
1967e5c31af7Sopenharmony_ci			version 310 es
1968e5c31af7Sopenharmony_ci			desc "varyings of type float and vec3 inside struct"
1969e5c31af7Sopenharmony_ci			values
1970e5c31af7Sopenharmony_ci			{
1971e5c31af7Sopenharmony_ci				input float in0		= [ -1.25 | -25.65 | 1.0 | 2.25 | 3.4 | 16.0 ];
1972e5c31af7Sopenharmony_ci				output float out0	= [ -1.25 | -25.65 | 1.0 | 2.25 | 3.4 | 16.0 ];
1973e5c31af7Sopenharmony_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) ];
1974e5c31af7Sopenharmony_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) ];
1975e5c31af7Sopenharmony_ci			}
1976e5c31af7Sopenharmony_ci			vertex ""
1977e5c31af7Sopenharmony_ci				#version 310 es
1978e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
1979e5c31af7Sopenharmony_ci				struct S { mediump float a; highp vec3 b; };
1980e5c31af7Sopenharmony_ci				layout(location = 0) out S var;
1981e5c31af7Sopenharmony_ci				void main()
1982e5c31af7Sopenharmony_ci				{
1983e5c31af7Sopenharmony_ci					var.a = in0;
1984e5c31af7Sopenharmony_ci					var.b = in1;
1985e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
1986e5c31af7Sopenharmony_ci				}
1987e5c31af7Sopenharmony_ci			""
1988e5c31af7Sopenharmony_ci			fragment ""
1989e5c31af7Sopenharmony_ci				#version 310 es
1990e5c31af7Sopenharmony_ci				precision highp float;
1991e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
1992e5c31af7Sopenharmony_ci				struct S { mediump float a; highp vec3 b; };
1993e5c31af7Sopenharmony_ci				layout(location = 0) in S var;
1994e5c31af7Sopenharmony_ci				void main()
1995e5c31af7Sopenharmony_ci				{
1996e5c31af7Sopenharmony_ci					out0 = var.a;
1997e5c31af7Sopenharmony_ci					out1 = var.b;
1998e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
1999e5c31af7Sopenharmony_ci				}
2000e5c31af7Sopenharmony_ci			""
2001e5c31af7Sopenharmony_ci		end
2002e5c31af7Sopenharmony_ci
2003e5c31af7Sopenharmony_ci		case float_uvec2_vec3
2004e5c31af7Sopenharmony_ci			version 310 es
2005e5c31af7Sopenharmony_ci			desc "varyings of type float and vec3 inside struct"
2006e5c31af7Sopenharmony_ci			values
2007e5c31af7Sopenharmony_ci			{
2008e5c31af7Sopenharmony_ci				input float in0		= [ -1.25 | -25.65 | 1.0 | 2.25 | 3.4 | 16.0 ];
2009e5c31af7Sopenharmony_ci				output float out0	= [ -1.25 | -25.65 | 1.0 | 2.25 | 3.4 | 16.0 ];
2010e5c31af7Sopenharmony_ci				input uvec2 in1		= [ uvec2(1, 1) | uvec2(25, 25) | uvec2(1, 1) | uvec2(2, 3) | uvec2(16, 17) | uvec2(8, 7) ];
2011e5c31af7Sopenharmony_ci				output uvec2 out1	= [ uvec2(1, 1) | uvec2(25, 25) | uvec2(1, 1) | uvec2(2, 3) | uvec2(16, 17) | uvec2(8, 7) ];
2012e5c31af7Sopenharmony_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) ];
2013e5c31af7Sopenharmony_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) ];
2014e5c31af7Sopenharmony_ci			}
2015e5c31af7Sopenharmony_ci			vertex ""
2016e5c31af7Sopenharmony_ci				#version 310 es
2017e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
2018e5c31af7Sopenharmony_ci				struct S { mediump float a; highp uvec2 b; highp vec3 c; };
2019e5c31af7Sopenharmony_ci				layout(location = 0) flat out S var;
2020e5c31af7Sopenharmony_ci				void main()
2021e5c31af7Sopenharmony_ci				{
2022e5c31af7Sopenharmony_ci					${VERTEX_SETUP}
2023e5c31af7Sopenharmony_ci					var.a = in0;
2024e5c31af7Sopenharmony_ci					var.b = in1;
2025e5c31af7Sopenharmony_ci					var.c = in2;
2026e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
2027e5c31af7Sopenharmony_ci				}
2028e5c31af7Sopenharmony_ci			""
2029e5c31af7Sopenharmony_ci			fragment ""
2030e5c31af7Sopenharmony_ci				#version 310 es
2031e5c31af7Sopenharmony_ci				precision highp float;
2032e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
2033e5c31af7Sopenharmony_ci				struct S { mediump float a; highp uvec2 b; highp vec3 c; };
2034e5c31af7Sopenharmony_ci				layout(location = 0) flat in S var;
2035e5c31af7Sopenharmony_ci				void main()
2036e5c31af7Sopenharmony_ci				{
2037e5c31af7Sopenharmony_ci					out0 = var.a;
2038e5c31af7Sopenharmony_ci					out1 = var.b;
2039e5c31af7Sopenharmony_ci					out2 = var.c;
2040e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
2041e5c31af7Sopenharmony_ci				}
2042e5c31af7Sopenharmony_ci			""
2043e5c31af7Sopenharmony_ci		end
2044e5c31af7Sopenharmony_ci	end
2045e5c31af7Sopenharmony_ci
2046e5c31af7Sopenharmony_ci	group interpolation "Varying interpolation modes"
2047e5c31af7Sopenharmony_ci		case smooth
2048e5c31af7Sopenharmony_ci			version 310 es
2049e5c31af7Sopenharmony_ci			desc "varying of type vec4"
2050e5c31af7Sopenharmony_ci			values
2051e5c31af7Sopenharmony_ci			{
2052e5c31af7Sopenharmony_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) ];
2053e5c31af7Sopenharmony_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) ];
2054e5c31af7Sopenharmony_ci			}
2055e5c31af7Sopenharmony_ci			vertex ""
2056e5c31af7Sopenharmony_ci				#version 310 es
2057e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
2058e5c31af7Sopenharmony_ci				layout(location = 0) smooth out vec4 var;
2059e5c31af7Sopenharmony_ci				void main()
2060e5c31af7Sopenharmony_ci				{
2061e5c31af7Sopenharmony_ci					var = in0;
2062e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
2063e5c31af7Sopenharmony_ci				}
2064e5c31af7Sopenharmony_ci			""
2065e5c31af7Sopenharmony_ci			fragment ""
2066e5c31af7Sopenharmony_ci				#version 310 es
2067e5c31af7Sopenharmony_ci				precision highp float;
2068e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
2069e5c31af7Sopenharmony_ci				layout(location = 0) smooth in vec4 var;
2070e5c31af7Sopenharmony_ci				void main()
2071e5c31af7Sopenharmony_ci				{
2072e5c31af7Sopenharmony_ci					out0 = var;
2073e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
2074e5c31af7Sopenharmony_ci				}
2075e5c31af7Sopenharmony_ci			""
2076e5c31af7Sopenharmony_ci		end
2077e5c31af7Sopenharmony_ci
2078e5c31af7Sopenharmony_ci		case centroid
2079e5c31af7Sopenharmony_ci			version 310 es
2080e5c31af7Sopenharmony_ci			desc "varying of type vec4"
2081e5c31af7Sopenharmony_ci			values
2082e5c31af7Sopenharmony_ci			{
2083e5c31af7Sopenharmony_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) ];
2084e5c31af7Sopenharmony_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) ];
2085e5c31af7Sopenharmony_ci			}
2086e5c31af7Sopenharmony_ci			vertex ""
2087e5c31af7Sopenharmony_ci				#version 310 es
2088e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
2089e5c31af7Sopenharmony_ci				layout(location = 0) centroid out vec4 var;
2090e5c31af7Sopenharmony_ci				void main()
2091e5c31af7Sopenharmony_ci				{
2092e5c31af7Sopenharmony_ci					var = in0;
2093e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
2094e5c31af7Sopenharmony_ci				}
2095e5c31af7Sopenharmony_ci			""
2096e5c31af7Sopenharmony_ci			fragment ""
2097e5c31af7Sopenharmony_ci				#version 310 es
2098e5c31af7Sopenharmony_ci				precision highp float;
2099e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
2100e5c31af7Sopenharmony_ci				layout(location = 0) centroid in vec4 var;
2101e5c31af7Sopenharmony_ci				void main()
2102e5c31af7Sopenharmony_ci				{
2103e5c31af7Sopenharmony_ci					out0 = var;
2104e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
2105e5c31af7Sopenharmony_ci				}
2106e5c31af7Sopenharmony_ci			""
2107e5c31af7Sopenharmony_ci		end
2108e5c31af7Sopenharmony_ci
2109e5c31af7Sopenharmony_ci		case flat
2110e5c31af7Sopenharmony_ci			version 310 es
2111e5c31af7Sopenharmony_ci			desc "varying of type vec4"
2112e5c31af7Sopenharmony_ci			values
2113e5c31af7Sopenharmony_ci			{
2114e5c31af7Sopenharmony_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) ];
2115e5c31af7Sopenharmony_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) ];
2116e5c31af7Sopenharmony_ci			}
2117e5c31af7Sopenharmony_ci			vertex ""
2118e5c31af7Sopenharmony_ci				#version 310 es
2119e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
2120e5c31af7Sopenharmony_ci				layout(location = 0) flat out vec4 var;
2121e5c31af7Sopenharmony_ci				void main()
2122e5c31af7Sopenharmony_ci				{
2123e5c31af7Sopenharmony_ci					var = in0;
2124e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
2125e5c31af7Sopenharmony_ci				}
2126e5c31af7Sopenharmony_ci			""
2127e5c31af7Sopenharmony_ci			fragment ""
2128e5c31af7Sopenharmony_ci				#version 310 es
2129e5c31af7Sopenharmony_ci				precision highp float;
2130e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
2131e5c31af7Sopenharmony_ci				layout(location = 0) flat in vec4 var;
2132e5c31af7Sopenharmony_ci				void main()
2133e5c31af7Sopenharmony_ci				{
2134e5c31af7Sopenharmony_ci					out0 = var;
2135e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
2136e5c31af7Sopenharmony_ci				}
2137e5c31af7Sopenharmony_ci			""
2138e5c31af7Sopenharmony_ci		end
2139e5c31af7Sopenharmony_ci	end
2140e5c31af7Sopenharmony_ci
2141e5c31af7Sopenharmony_ci	group usage "Varying usage in shaders"
2142e5c31af7Sopenharmony_ci		case readback_1
2143e5c31af7Sopenharmony_ci			version 310 es
2144e5c31af7Sopenharmony_ci			desc "read back (an already written) varying in the vertex shader"
2145e5c31af7Sopenharmony_ci			values
2146e5c31af7Sopenharmony_ci			{
2147e5c31af7Sopenharmony_ci				input float in0		= [ 1.0 | 0.0 | -2.0 | 10.0 ];
2148e5c31af7Sopenharmony_ci				output float out0	= [ 3.0 | 0.0 | -6.0 | 30.0 ];
2149e5c31af7Sopenharmony_ci			}
2150e5c31af7Sopenharmony_ci			vertex ""
2151e5c31af7Sopenharmony_ci				#version 310 es
2152e5c31af7Sopenharmony_ci				precision highp float;
2153e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
2154e5c31af7Sopenharmony_ci				layout(location = 0) out float var1;
2155e5c31af7Sopenharmony_ci				layout(location = 1) out float var2;
2156e5c31af7Sopenharmony_ci
2157e5c31af7Sopenharmony_ci				void main()
2158e5c31af7Sopenharmony_ci				{
2159e5c31af7Sopenharmony_ci					var1 = in0;
2160e5c31af7Sopenharmony_ci					var2 = var1 + in0;
2161e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
2162e5c31af7Sopenharmony_ci				}
2163e5c31af7Sopenharmony_ci			""
2164e5c31af7Sopenharmony_ci			fragment ""
2165e5c31af7Sopenharmony_ci				#version 310 es
2166e5c31af7Sopenharmony_ci				precision highp float;
2167e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
2168e5c31af7Sopenharmony_ci				layout(location = 0) in float var1;
2169e5c31af7Sopenharmony_ci				layout(location = 1) in float var2;
2170e5c31af7Sopenharmony_ci
2171e5c31af7Sopenharmony_ci				void main()
2172e5c31af7Sopenharmony_ci				{
2173e5c31af7Sopenharmony_ci					out0 = var1 + var2;
2174e5c31af7Sopenharmony_ci					${FRAGMENT_OUTPUT}
2175e5c31af7Sopenharmony_ci				}
2176e5c31af7Sopenharmony_ci			""
2177e5c31af7Sopenharmony_ci		end
2178e5c31af7Sopenharmony_ci	end
2179e5c31af7Sopenharmony_ciend
2180