1e5c31af7Sopenharmony_ci# Tests todo:
2e5c31af7Sopenharmony_ci# - inout with varyings, attributes, uniforms (and arrays of 'em)
3e5c31af7Sopenharmony_ci# - inout with arrays, array elements
4e5c31af7Sopenharmony_ci# - inout with array elements
5e5c31af7Sopenharmony_ci# - inout by-value semantics (arrays & elements & structs)
6e5c31af7Sopenharmony_ci
7e5c31af7Sopenharmony_ci# Done:
8e5c31af7Sopenharmony_ci# - control flow: return, return in loop, etc.
9e5c31af7Sopenharmony_ci
10e5c31af7Sopenharmony_cigroup datatypes "Function Parameter Data Types"
11e5c31af7Sopenharmony_ci
12e5c31af7Sopenharmony_ci	case float_float
13e5c31af7Sopenharmony_ci		version 300 es
14e5c31af7Sopenharmony_ci		values
15e5c31af7Sopenharmony_ci		{
16e5c31af7Sopenharmony_ci			input float in0		= [ 0.0 | 1.0 | -2.0 | 2.5 ];
17e5c31af7Sopenharmony_ci			output float out0	= [ 0.0 | -1.0 | 2.0 | -2.5 ];
18e5c31af7Sopenharmony_ci		}
19e5c31af7Sopenharmony_ci
20e5c31af7Sopenharmony_ci		both ""
21e5c31af7Sopenharmony_ci			#version 300 es
22e5c31af7Sopenharmony_ci			precision mediump float;
23e5c31af7Sopenharmony_ci			${DECLARATIONS}
24e5c31af7Sopenharmony_ci
25e5c31af7Sopenharmony_ci			float func (float a)
26e5c31af7Sopenharmony_ci			{
27e5c31af7Sopenharmony_ci				return -a;
28e5c31af7Sopenharmony_ci			}
29e5c31af7Sopenharmony_ci
30e5c31af7Sopenharmony_ci			void main()
31e5c31af7Sopenharmony_ci			{
32e5c31af7Sopenharmony_ci				out0 = func(in0);
33e5c31af7Sopenharmony_ci				${OUTPUT}
34e5c31af7Sopenharmony_ci			}
35e5c31af7Sopenharmony_ci		""
36e5c31af7Sopenharmony_ci	end
37e5c31af7Sopenharmony_ci
38e5c31af7Sopenharmony_ci	case float_vec2
39e5c31af7Sopenharmony_ci		version 300 es
40e5c31af7Sopenharmony_ci		values
41e5c31af7Sopenharmony_ci		{
42e5c31af7Sopenharmony_ci			input vec2 in0		= [ vec2(0.0, 1.0) | vec2(2.0, 2.5) ];
43e5c31af7Sopenharmony_ci			output float out0	= [ -1.0 | -4.5 ];
44e5c31af7Sopenharmony_ci		}
45e5c31af7Sopenharmony_ci
46e5c31af7Sopenharmony_ci		both ""
47e5c31af7Sopenharmony_ci			#version 300 es
48e5c31af7Sopenharmony_ci			precision mediump float;
49e5c31af7Sopenharmony_ci			${DECLARATIONS}
50e5c31af7Sopenharmony_ci
51e5c31af7Sopenharmony_ci			float func (vec2 a)
52e5c31af7Sopenharmony_ci			{
53e5c31af7Sopenharmony_ci				return -(a.x + a.y);
54e5c31af7Sopenharmony_ci			}
55e5c31af7Sopenharmony_ci
56e5c31af7Sopenharmony_ci			void main()
57e5c31af7Sopenharmony_ci			{
58e5c31af7Sopenharmony_ci				out0 = func(in0);
59e5c31af7Sopenharmony_ci				${OUTPUT}
60e5c31af7Sopenharmony_ci			}
61e5c31af7Sopenharmony_ci		""
62e5c31af7Sopenharmony_ci	end
63e5c31af7Sopenharmony_ci
64e5c31af7Sopenharmony_ci	case float_vec3
65e5c31af7Sopenharmony_ci		version 300 es
66e5c31af7Sopenharmony_ci		values
67e5c31af7Sopenharmony_ci		{
68e5c31af7Sopenharmony_ci			input vec3 in0		= [ vec3(0.0, 1.0, -2.0) | vec3(2.0, 2.5, -4.0) ];
69e5c31af7Sopenharmony_ci			output float out0	= [ 1.0 | -0.5 ];
70e5c31af7Sopenharmony_ci		}
71e5c31af7Sopenharmony_ci
72e5c31af7Sopenharmony_ci		both ""
73e5c31af7Sopenharmony_ci			#version 300 es
74e5c31af7Sopenharmony_ci			precision mediump float;
75e5c31af7Sopenharmony_ci			${DECLARATIONS}
76e5c31af7Sopenharmony_ci
77e5c31af7Sopenharmony_ci			float func (vec3 a)
78e5c31af7Sopenharmony_ci			{
79e5c31af7Sopenharmony_ci				return -(a.x + a.y + a.z);
80e5c31af7Sopenharmony_ci			}
81e5c31af7Sopenharmony_ci
82e5c31af7Sopenharmony_ci			void main()
83e5c31af7Sopenharmony_ci			{
84e5c31af7Sopenharmony_ci				out0 = func(in0);
85e5c31af7Sopenharmony_ci				${OUTPUT}
86e5c31af7Sopenharmony_ci			}
87e5c31af7Sopenharmony_ci		""
88e5c31af7Sopenharmony_ci	end
89e5c31af7Sopenharmony_ci
90e5c31af7Sopenharmony_ci	case float_vec4
91e5c31af7Sopenharmony_ci		version 300 es
92e5c31af7Sopenharmony_ci		values
93e5c31af7Sopenharmony_ci		{
94e5c31af7Sopenharmony_ci			input vec4 in0		= [ vec4(0.0, 1.0, -2.0, 0.5) | vec4(2.0, 2.5, 4.0, -7.0) ];
95e5c31af7Sopenharmony_ci			output float out0	= [ 0.5 | -1.5 ];
96e5c31af7Sopenharmony_ci		}
97e5c31af7Sopenharmony_ci
98e5c31af7Sopenharmony_ci		both ""
99e5c31af7Sopenharmony_ci			#version 300 es
100e5c31af7Sopenharmony_ci			precision mediump float;
101e5c31af7Sopenharmony_ci			${DECLARATIONS}
102e5c31af7Sopenharmony_ci
103e5c31af7Sopenharmony_ci			float func (vec4 a)
104e5c31af7Sopenharmony_ci			{
105e5c31af7Sopenharmony_ci				return -(a.x + a.y + a.z + a.w);
106e5c31af7Sopenharmony_ci			}
107e5c31af7Sopenharmony_ci
108e5c31af7Sopenharmony_ci			void main()
109e5c31af7Sopenharmony_ci			{
110e5c31af7Sopenharmony_ci				out0 = func(in0);
111e5c31af7Sopenharmony_ci				${OUTPUT}
112e5c31af7Sopenharmony_ci			}
113e5c31af7Sopenharmony_ci		""
114e5c31af7Sopenharmony_ci	end
115e5c31af7Sopenharmony_ci
116e5c31af7Sopenharmony_ci	case float_mat2
117e5c31af7Sopenharmony_ci		version 300 es
118e5c31af7Sopenharmony_ci		values
119e5c31af7Sopenharmony_ci		{
120e5c31af7Sopenharmony_ci			input mat2 in0		= [ mat2(0.0, 1.0, -2.0, 0.5) | mat2(2.0, 2.5, 4.0, -7.0) ];
121e5c31af7Sopenharmony_ci			output float out0	= [ 0.5 | -1.5 ];
122e5c31af7Sopenharmony_ci		}
123e5c31af7Sopenharmony_ci
124e5c31af7Sopenharmony_ci		both ""
125e5c31af7Sopenharmony_ci			#version 300 es
126e5c31af7Sopenharmony_ci			precision mediump float;
127e5c31af7Sopenharmony_ci			${DECLARATIONS}
128e5c31af7Sopenharmony_ci
129e5c31af7Sopenharmony_ci			float func (mat2 a)
130e5c31af7Sopenharmony_ci			{
131e5c31af7Sopenharmony_ci				return -(a[0][0] + a[0][1] + a[1][0] + a[1][1]);
132e5c31af7Sopenharmony_ci			}
133e5c31af7Sopenharmony_ci
134e5c31af7Sopenharmony_ci			void main()
135e5c31af7Sopenharmony_ci			{
136e5c31af7Sopenharmony_ci				out0 = func(in0);
137e5c31af7Sopenharmony_ci				${OUTPUT}
138e5c31af7Sopenharmony_ci			}
139e5c31af7Sopenharmony_ci		""
140e5c31af7Sopenharmony_ci	end
141e5c31af7Sopenharmony_ci
142e5c31af7Sopenharmony_ci	case float_mat3
143e5c31af7Sopenharmony_ci		version 300 es
144e5c31af7Sopenharmony_ci		values
145e5c31af7Sopenharmony_ci		{
146e5c31af7Sopenharmony_ci			input mat3 in0		= [ mat3(0.0, 1.0, -2.0, 0.5, 1.0, -1.0, 2.0, 4.0, -1.0) | mat3(2.0, 2.5, 4.0, -7.0, 2.5, 3.0, 0.5, -3.5, 1.0) ];
147e5c31af7Sopenharmony_ci			output float out0	= [ -4.5 | -5.0 ];
148e5c31af7Sopenharmony_ci		}
149e5c31af7Sopenharmony_ci
150e5c31af7Sopenharmony_ci		both ""
151e5c31af7Sopenharmony_ci			#version 300 es
152e5c31af7Sopenharmony_ci			precision mediump float;
153e5c31af7Sopenharmony_ci			${DECLARATIONS}
154e5c31af7Sopenharmony_ci
155e5c31af7Sopenharmony_ci			float func (mat3 a)
156e5c31af7Sopenharmony_ci			{
157e5c31af7Sopenharmony_ci				return -(a[0][0] + a[0][1] + a[0][2] + a[1][0] + a[1][1] + a[1][2] + a[2][0] + a[2][1] + a[2][2]);
158e5c31af7Sopenharmony_ci			}
159e5c31af7Sopenharmony_ci
160e5c31af7Sopenharmony_ci			void main()
161e5c31af7Sopenharmony_ci			{
162e5c31af7Sopenharmony_ci				out0 = func(in0);
163e5c31af7Sopenharmony_ci				${OUTPUT}
164e5c31af7Sopenharmony_ci			}
165e5c31af7Sopenharmony_ci		""
166e5c31af7Sopenharmony_ci	end
167e5c31af7Sopenharmony_ci
168e5c31af7Sopenharmony_ci	case float_mat4
169e5c31af7Sopenharmony_ci		version 300 es
170e5c31af7Sopenharmony_ci		values
171e5c31af7Sopenharmony_ci		{
172e5c31af7Sopenharmony_ci			input mat4 in0		= [ mat4(0.0, 1.0, -2.0, 0.5, 1.0, -1.0, 2.0, 4.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -2.0, -2.0) | mat4(2.0, 2.5, 4.0, -7.0, 2.5, 3.0, 0.5, -3.5, 1.0, 0.0, 2.0, -1.0, 1.0, 0.0, -1.0, 3.0) ];
173e5c31af7Sopenharmony_ci			output float out0	= [ -5.5 | -9.0 ];
174e5c31af7Sopenharmony_ci		}
175e5c31af7Sopenharmony_ci
176e5c31af7Sopenharmony_ci		both ""
177e5c31af7Sopenharmony_ci			#version 300 es
178e5c31af7Sopenharmony_ci			precision mediump float;
179e5c31af7Sopenharmony_ci			${DECLARATIONS}
180e5c31af7Sopenharmony_ci
181e5c31af7Sopenharmony_ci			float func (mat4 a)
182e5c31af7Sopenharmony_ci			{
183e5c31af7Sopenharmony_ci				return -(a[0][0] + a[0][1] + a[0][2] + a[0][3] + a[1][0] + a[1][1] + a[1][2] + a[1][3] + a[2][0] + a[2][1] + a[2][2] + a[2][3] + a[3][0] + a[3][1] + a[3][2] + a[3][3]);
184e5c31af7Sopenharmony_ci			}
185e5c31af7Sopenharmony_ci
186e5c31af7Sopenharmony_ci			void main()
187e5c31af7Sopenharmony_ci			{
188e5c31af7Sopenharmony_ci				out0 = func(in0);
189e5c31af7Sopenharmony_ci				${OUTPUT}
190e5c31af7Sopenharmony_ci			}
191e5c31af7Sopenharmony_ci		""
192e5c31af7Sopenharmony_ci	end
193e5c31af7Sopenharmony_ci
194e5c31af7Sopenharmony_ci	case int_int
195e5c31af7Sopenharmony_ci		version 300 es
196e5c31af7Sopenharmony_ci		values
197e5c31af7Sopenharmony_ci		{
198e5c31af7Sopenharmony_ci			input int in0		= [ -1 | 0 | 1 | 4 ];
199e5c31af7Sopenharmony_ci			output int out0		= [ 1 | 0 | -1 | -4 ];
200e5c31af7Sopenharmony_ci		}
201e5c31af7Sopenharmony_ci
202e5c31af7Sopenharmony_ci		both ""
203e5c31af7Sopenharmony_ci			#version 300 es
204e5c31af7Sopenharmony_ci			precision mediump float;
205e5c31af7Sopenharmony_ci			precision mediump int;
206e5c31af7Sopenharmony_ci			${DECLARATIONS}
207e5c31af7Sopenharmony_ci
208e5c31af7Sopenharmony_ci			int func (int a)
209e5c31af7Sopenharmony_ci			{
210e5c31af7Sopenharmony_ci				return -a;
211e5c31af7Sopenharmony_ci			}
212e5c31af7Sopenharmony_ci
213e5c31af7Sopenharmony_ci			void main()
214e5c31af7Sopenharmony_ci			{
215e5c31af7Sopenharmony_ci				${SETUP}
216e5c31af7Sopenharmony_ci				out0 = func(in0);
217e5c31af7Sopenharmony_ci				${OUTPUT}
218e5c31af7Sopenharmony_ci			}
219e5c31af7Sopenharmony_ci		""
220e5c31af7Sopenharmony_ci	end
221e5c31af7Sopenharmony_ci
222e5c31af7Sopenharmony_ci	case int_ivec2
223e5c31af7Sopenharmony_ci		version 300 es
224e5c31af7Sopenharmony_ci		values
225e5c31af7Sopenharmony_ci		{
226e5c31af7Sopenharmony_ci			input ivec2 in0		= [ ivec2(-1, 0) | ivec2(1, 4) ];
227e5c31af7Sopenharmony_ci			output int out0		= [ 1 | -5 ];
228e5c31af7Sopenharmony_ci		}
229e5c31af7Sopenharmony_ci
230e5c31af7Sopenharmony_ci		both ""
231e5c31af7Sopenharmony_ci			#version 300 es
232e5c31af7Sopenharmony_ci			precision mediump float;
233e5c31af7Sopenharmony_ci			precision mediump int;
234e5c31af7Sopenharmony_ci			${DECLARATIONS}
235e5c31af7Sopenharmony_ci
236e5c31af7Sopenharmony_ci			int func (ivec2 a)
237e5c31af7Sopenharmony_ci			{
238e5c31af7Sopenharmony_ci				return -(a.x + a.y);
239e5c31af7Sopenharmony_ci			}
240e5c31af7Sopenharmony_ci
241e5c31af7Sopenharmony_ci			void main()
242e5c31af7Sopenharmony_ci			{
243e5c31af7Sopenharmony_ci				${SETUP}
244e5c31af7Sopenharmony_ci				out0 = func(in0);
245e5c31af7Sopenharmony_ci				${OUTPUT}
246e5c31af7Sopenharmony_ci			}
247e5c31af7Sopenharmony_ci		""
248e5c31af7Sopenharmony_ci	end
249e5c31af7Sopenharmony_ci
250e5c31af7Sopenharmony_ci	case int_ivec3
251e5c31af7Sopenharmony_ci		version 300 es
252e5c31af7Sopenharmony_ci		values
253e5c31af7Sopenharmony_ci		{
254e5c31af7Sopenharmony_ci			input ivec3 in0		= [ ivec3(-1, 0, 2) | ivec3(1, 4, -8) ];
255e5c31af7Sopenharmony_ci			output int out0		= [ -1 | 3 ];
256e5c31af7Sopenharmony_ci		}
257e5c31af7Sopenharmony_ci
258e5c31af7Sopenharmony_ci		both ""
259e5c31af7Sopenharmony_ci			#version 300 es
260e5c31af7Sopenharmony_ci			precision mediump float;
261e5c31af7Sopenharmony_ci			precision mediump int;
262e5c31af7Sopenharmony_ci			${DECLARATIONS}
263e5c31af7Sopenharmony_ci
264e5c31af7Sopenharmony_ci			int func (ivec3 a)
265e5c31af7Sopenharmony_ci			{
266e5c31af7Sopenharmony_ci				return -(a.x + a.y + a.z);
267e5c31af7Sopenharmony_ci			}
268e5c31af7Sopenharmony_ci
269e5c31af7Sopenharmony_ci			void main()
270e5c31af7Sopenharmony_ci			{
271e5c31af7Sopenharmony_ci				${SETUP}
272e5c31af7Sopenharmony_ci				out0 = func(in0);
273e5c31af7Sopenharmony_ci				${OUTPUT}
274e5c31af7Sopenharmony_ci			}
275e5c31af7Sopenharmony_ci		""
276e5c31af7Sopenharmony_ci	end
277e5c31af7Sopenharmony_ci
278e5c31af7Sopenharmony_ci	case int_ivec4
279e5c31af7Sopenharmony_ci		version 300 es
280e5c31af7Sopenharmony_ci		values
281e5c31af7Sopenharmony_ci		{
282e5c31af7Sopenharmony_ci			input ivec4 in0		= [ ivec4(-1, 0, 2, 2) | ivec4(1, 4, -8, 2) ];
283e5c31af7Sopenharmony_ci			output int out0		= [ -3 | 1 ];
284e5c31af7Sopenharmony_ci		}
285e5c31af7Sopenharmony_ci
286e5c31af7Sopenharmony_ci		both ""
287e5c31af7Sopenharmony_ci			#version 300 es
288e5c31af7Sopenharmony_ci			precision mediump float;
289e5c31af7Sopenharmony_ci			precision mediump int;
290e5c31af7Sopenharmony_ci			${DECLARATIONS}
291e5c31af7Sopenharmony_ci
292e5c31af7Sopenharmony_ci			int func (ivec4 a)
293e5c31af7Sopenharmony_ci			{
294e5c31af7Sopenharmony_ci				return -(a.x + a.y + a.z + a.w);
295e5c31af7Sopenharmony_ci			}
296e5c31af7Sopenharmony_ci
297e5c31af7Sopenharmony_ci			void main()
298e5c31af7Sopenharmony_ci			{
299e5c31af7Sopenharmony_ci				${SETUP}
300e5c31af7Sopenharmony_ci				out0 = func(in0);
301e5c31af7Sopenharmony_ci				${OUTPUT}
302e5c31af7Sopenharmony_ci			}
303e5c31af7Sopenharmony_ci		""
304e5c31af7Sopenharmony_ci	end
305e5c31af7Sopenharmony_ci
306e5c31af7Sopenharmony_ci	case uint_uint
307e5c31af7Sopenharmony_ci		version 300 es
308e5c31af7Sopenharmony_ci		values
309e5c31af7Sopenharmony_ci		{
310e5c31af7Sopenharmony_ci			input uint in0		= [ 1 | 0 | 2 | 4 ];
311e5c31af7Sopenharmony_ci			output uint out0	= [ 1 | 0 | 4 | 16 ];
312e5c31af7Sopenharmony_ci		}
313e5c31af7Sopenharmony_ci
314e5c31af7Sopenharmony_ci		both ""
315e5c31af7Sopenharmony_ci			#version 300 es
316e5c31af7Sopenharmony_ci			precision mediump float;
317e5c31af7Sopenharmony_ci			precision mediump int;
318e5c31af7Sopenharmony_ci			${DECLARATIONS}
319e5c31af7Sopenharmony_ci
320e5c31af7Sopenharmony_ci			uint func (uint a)
321e5c31af7Sopenharmony_ci			{
322e5c31af7Sopenharmony_ci				return a*a;
323e5c31af7Sopenharmony_ci			}
324e5c31af7Sopenharmony_ci
325e5c31af7Sopenharmony_ci			void main()
326e5c31af7Sopenharmony_ci			{
327e5c31af7Sopenharmony_ci				${SETUP}
328e5c31af7Sopenharmony_ci				out0 = func(in0);
329e5c31af7Sopenharmony_ci				${OUTPUT}
330e5c31af7Sopenharmony_ci			}
331e5c31af7Sopenharmony_ci		""
332e5c31af7Sopenharmony_ci	end
333e5c31af7Sopenharmony_ci
334e5c31af7Sopenharmony_ci	case uint_uvec2
335e5c31af7Sopenharmony_ci		version 300 es
336e5c31af7Sopenharmony_ci		values
337e5c31af7Sopenharmony_ci		{
338e5c31af7Sopenharmony_ci			input uvec2 in0		= [ uvec2(1, 0) | uvec2(2, 4) ];
339e5c31af7Sopenharmony_ci			output uint out0	= [ 1 | 6 ];
340e5c31af7Sopenharmony_ci		}
341e5c31af7Sopenharmony_ci
342e5c31af7Sopenharmony_ci		both ""
343e5c31af7Sopenharmony_ci			#version 300 es
344e5c31af7Sopenharmony_ci			precision mediump float;
345e5c31af7Sopenharmony_ci			precision mediump int;
346e5c31af7Sopenharmony_ci			${DECLARATIONS}
347e5c31af7Sopenharmony_ci
348e5c31af7Sopenharmony_ci			uint func (uvec2 a)
349e5c31af7Sopenharmony_ci			{
350e5c31af7Sopenharmony_ci				return (a.x + a.y);
351e5c31af7Sopenharmony_ci			}
352e5c31af7Sopenharmony_ci
353e5c31af7Sopenharmony_ci			void main()
354e5c31af7Sopenharmony_ci			{
355e5c31af7Sopenharmony_ci				${SETUP}
356e5c31af7Sopenharmony_ci				out0 = func(in0);
357e5c31af7Sopenharmony_ci				${OUTPUT}
358e5c31af7Sopenharmony_ci			}
359e5c31af7Sopenharmony_ci		""
360e5c31af7Sopenharmony_ci	end
361e5c31af7Sopenharmony_ci
362e5c31af7Sopenharmony_ci	case uint_uvec3
363e5c31af7Sopenharmony_ci		version 300 es
364e5c31af7Sopenharmony_ci		values
365e5c31af7Sopenharmony_ci		{
366e5c31af7Sopenharmony_ci			input uvec3 in0		= [ uvec3(1, 0, 2) | uvec3(1, 4, 8) ];
367e5c31af7Sopenharmony_ci			output uint out0		= [ 3 | 13 ];
368e5c31af7Sopenharmony_ci		}
369e5c31af7Sopenharmony_ci
370e5c31af7Sopenharmony_ci		both ""
371e5c31af7Sopenharmony_ci			#version 300 es
372e5c31af7Sopenharmony_ci			precision mediump float;
373e5c31af7Sopenharmony_ci			precision mediump int;
374e5c31af7Sopenharmony_ci			${DECLARATIONS}
375e5c31af7Sopenharmony_ci
376e5c31af7Sopenharmony_ci			uint func (uvec3 a)
377e5c31af7Sopenharmony_ci			{
378e5c31af7Sopenharmony_ci				return (a.x + a.y + a.z);
379e5c31af7Sopenharmony_ci			}
380e5c31af7Sopenharmony_ci
381e5c31af7Sopenharmony_ci			void main()
382e5c31af7Sopenharmony_ci			{
383e5c31af7Sopenharmony_ci				${SETUP}
384e5c31af7Sopenharmony_ci				out0 = func(in0);
385e5c31af7Sopenharmony_ci				${OUTPUT}
386e5c31af7Sopenharmony_ci			}
387e5c31af7Sopenharmony_ci		""
388e5c31af7Sopenharmony_ci	end
389e5c31af7Sopenharmony_ci
390e5c31af7Sopenharmony_ci	case uint_uvec4
391e5c31af7Sopenharmony_ci		version 300 es
392e5c31af7Sopenharmony_ci		values
393e5c31af7Sopenharmony_ci		{
394e5c31af7Sopenharmony_ci			input uvec4 in0		= [ uvec4(1, 0, 2, 2) | uvec4(1, 4, 8, 2) ];
395e5c31af7Sopenharmony_ci			output uint out0	= [ 5 | 15 ];
396e5c31af7Sopenharmony_ci		}
397e5c31af7Sopenharmony_ci
398e5c31af7Sopenharmony_ci		both ""
399e5c31af7Sopenharmony_ci			#version 300 es
400e5c31af7Sopenharmony_ci			precision mediump float;
401e5c31af7Sopenharmony_ci			precision mediump int;
402e5c31af7Sopenharmony_ci			${DECLARATIONS}
403e5c31af7Sopenharmony_ci
404e5c31af7Sopenharmony_ci			uint func (uvec4 a)
405e5c31af7Sopenharmony_ci			{
406e5c31af7Sopenharmony_ci				return (a.x + a.y + a.z + a.w);
407e5c31af7Sopenharmony_ci			}
408e5c31af7Sopenharmony_ci
409e5c31af7Sopenharmony_ci			void main()
410e5c31af7Sopenharmony_ci			{
411e5c31af7Sopenharmony_ci				${SETUP}
412e5c31af7Sopenharmony_ci				out0 = func(in0);
413e5c31af7Sopenharmony_ci				${OUTPUT}
414e5c31af7Sopenharmony_ci			}
415e5c31af7Sopenharmony_ci		""
416e5c31af7Sopenharmony_ci	end
417e5c31af7Sopenharmony_ci
418e5c31af7Sopenharmony_ci	case bool_bool
419e5c31af7Sopenharmony_ci		version 300 es
420e5c31af7Sopenharmony_ci		values
421e5c31af7Sopenharmony_ci		{
422e5c31af7Sopenharmony_ci			input bool in0		= [ true | false ];
423e5c31af7Sopenharmony_ci			output bool out0	= [ false | true ];
424e5c31af7Sopenharmony_ci		}
425e5c31af7Sopenharmony_ci
426e5c31af7Sopenharmony_ci		both ""
427e5c31af7Sopenharmony_ci			#version 300 es
428e5c31af7Sopenharmony_ci			precision mediump float;
429e5c31af7Sopenharmony_ci			${DECLARATIONS}
430e5c31af7Sopenharmony_ci
431e5c31af7Sopenharmony_ci			bool func (bool a)
432e5c31af7Sopenharmony_ci			{
433e5c31af7Sopenharmony_ci				return !a;
434e5c31af7Sopenharmony_ci			}
435e5c31af7Sopenharmony_ci
436e5c31af7Sopenharmony_ci			void main()
437e5c31af7Sopenharmony_ci			{
438e5c31af7Sopenharmony_ci				${SETUP}
439e5c31af7Sopenharmony_ci				out0 = func(in0);
440e5c31af7Sopenharmony_ci				${OUTPUT}
441e5c31af7Sopenharmony_ci			}
442e5c31af7Sopenharmony_ci		""
443e5c31af7Sopenharmony_ci	end
444e5c31af7Sopenharmony_ci
445e5c31af7Sopenharmony_ci	case bool_bvec2
446e5c31af7Sopenharmony_ci		version 300 es
447e5c31af7Sopenharmony_ci		values
448e5c31af7Sopenharmony_ci		{
449e5c31af7Sopenharmony_ci			input bvec2 in0		= [ bvec2(true, true) | bvec2(false, true) ];
450e5c31af7Sopenharmony_ci			output bool out0	= [ false | true ];
451e5c31af7Sopenharmony_ci		}
452e5c31af7Sopenharmony_ci
453e5c31af7Sopenharmony_ci		both ""
454e5c31af7Sopenharmony_ci			#version 300 es
455e5c31af7Sopenharmony_ci			precision mediump float;
456e5c31af7Sopenharmony_ci			${DECLARATIONS}
457e5c31af7Sopenharmony_ci
458e5c31af7Sopenharmony_ci			bool func (bvec2 a)
459e5c31af7Sopenharmony_ci			{
460e5c31af7Sopenharmony_ci				return !(a.x == a.y);
461e5c31af7Sopenharmony_ci			}
462e5c31af7Sopenharmony_ci
463e5c31af7Sopenharmony_ci			void main()
464e5c31af7Sopenharmony_ci			{
465e5c31af7Sopenharmony_ci				${SETUP}
466e5c31af7Sopenharmony_ci				out0 = func(in0);
467e5c31af7Sopenharmony_ci				${OUTPUT}
468e5c31af7Sopenharmony_ci			}
469e5c31af7Sopenharmony_ci		""
470e5c31af7Sopenharmony_ci	end
471e5c31af7Sopenharmony_ci
472e5c31af7Sopenharmony_ci	case bool_bvec3
473e5c31af7Sopenharmony_ci		version 300 es
474e5c31af7Sopenharmony_ci		values
475e5c31af7Sopenharmony_ci		{
476e5c31af7Sopenharmony_ci			input bvec3 in0		= [ bvec3(true, true, false) | bvec3(true, false, false) ];
477e5c31af7Sopenharmony_ci			output bool out0	= [ false | true ];
478e5c31af7Sopenharmony_ci		}
479e5c31af7Sopenharmony_ci
480e5c31af7Sopenharmony_ci		both ""
481e5c31af7Sopenharmony_ci			#version 300 es
482e5c31af7Sopenharmony_ci			precision mediump float;
483e5c31af7Sopenharmony_ci			${DECLARATIONS}
484e5c31af7Sopenharmony_ci
485e5c31af7Sopenharmony_ci			bool func (bvec3 a)
486e5c31af7Sopenharmony_ci			{
487e5c31af7Sopenharmony_ci				return (a.x == a.y) == a.z;
488e5c31af7Sopenharmony_ci			}
489e5c31af7Sopenharmony_ci
490e5c31af7Sopenharmony_ci			void main()
491e5c31af7Sopenharmony_ci			{
492e5c31af7Sopenharmony_ci				${SETUP}
493e5c31af7Sopenharmony_ci				out0 = func(in0);
494e5c31af7Sopenharmony_ci				${OUTPUT}
495e5c31af7Sopenharmony_ci			}
496e5c31af7Sopenharmony_ci		""
497e5c31af7Sopenharmony_ci	end
498e5c31af7Sopenharmony_ci
499e5c31af7Sopenharmony_ci	case bool_bvec4
500e5c31af7Sopenharmony_ci		version 300 es
501e5c31af7Sopenharmony_ci		values
502e5c31af7Sopenharmony_ci		{
503e5c31af7Sopenharmony_ci			input bvec4 in0		= [ bvec4(true, true, true, false) | bvec4(false, false, true, true) | bvec4(true, false, false, true) ];
504e5c31af7Sopenharmony_ci			output bool out0	= [ false | true | true ];
505e5c31af7Sopenharmony_ci		}
506e5c31af7Sopenharmony_ci
507e5c31af7Sopenharmony_ci		both ""
508e5c31af7Sopenharmony_ci			#version 300 es
509e5c31af7Sopenharmony_ci			precision mediump float;
510e5c31af7Sopenharmony_ci			${DECLARATIONS}
511e5c31af7Sopenharmony_ci
512e5c31af7Sopenharmony_ci			bool func (bvec4 a)
513e5c31af7Sopenharmony_ci			{
514e5c31af7Sopenharmony_ci				return ((a.x == a.y) == (a.z == a.w));
515e5c31af7Sopenharmony_ci			}
516e5c31af7Sopenharmony_ci
517e5c31af7Sopenharmony_ci			void main()
518e5c31af7Sopenharmony_ci			{
519e5c31af7Sopenharmony_ci				${SETUP}
520e5c31af7Sopenharmony_ci				out0 = func(in0);
521e5c31af7Sopenharmony_ci				${OUTPUT}
522e5c31af7Sopenharmony_ci			}
523e5c31af7Sopenharmony_ci		""
524e5c31af7Sopenharmony_ci	end
525e5c31af7Sopenharmony_ci
526e5c31af7Sopenharmony_ci	case mat2
527e5c31af7Sopenharmony_ci		version 300 es
528e5c31af7Sopenharmony_ci		values
529e5c31af7Sopenharmony_ci		{
530e5c31af7Sopenharmony_ci			input mat2 in0	= [ mat2(-2.0, 0.5, -1.0, 1.0) | mat2(1.0, -3.5, -3.5, 2.5) | mat2(-2.0, -2.0, 3.5, 0.0) ];
531e5c31af7Sopenharmony_ci			output mat2 out0	= [ mat2(4.0, -1.0, 2.0, -2.0) | mat2(-2.0, 7.0, 7.0, -5.0) | mat2(4.0, 4.0, -7.0, -0.0) ];
532e5c31af7Sopenharmony_ci		}
533e5c31af7Sopenharmony_ci
534e5c31af7Sopenharmony_ci		both ""
535e5c31af7Sopenharmony_ci			#version 300 es
536e5c31af7Sopenharmony_ci			precision mediump float;
537e5c31af7Sopenharmony_ci			${DECLARATIONS}
538e5c31af7Sopenharmony_ci
539e5c31af7Sopenharmony_ci			mat2 func (mat2 a)
540e5c31af7Sopenharmony_ci			{
541e5c31af7Sopenharmony_ci				return -2.0*a;
542e5c31af7Sopenharmony_ci			}
543e5c31af7Sopenharmony_ci
544e5c31af7Sopenharmony_ci			void main()
545e5c31af7Sopenharmony_ci			{
546e5c31af7Sopenharmony_ci				${SETUP}
547e5c31af7Sopenharmony_ci				out0 = func(in0);
548e5c31af7Sopenharmony_ci				${OUTPUT}
549e5c31af7Sopenharmony_ci			}
550e5c31af7Sopenharmony_ci		""
551e5c31af7Sopenharmony_ci	end
552e5c31af7Sopenharmony_ci
553e5c31af7Sopenharmony_ci
554e5c31af7Sopenharmony_ci	case mat2x3
555e5c31af7Sopenharmony_ci		version 300 es
556e5c31af7Sopenharmony_ci		values
557e5c31af7Sopenharmony_ci		{
558e5c31af7Sopenharmony_ci			input mat2x3 in0	= [ mat2x3(2.5, 0.0, 1.0, -2.5, 1.0, 3.0) | mat2x3(0.0, 2.0, 1.5, -3.5, 2.0, 0.5) | mat2x3(-1.5, -3.5, 2.5, 0.0, 1.5, 3.0) ];
559e5c31af7Sopenharmony_ci			output mat2x3 out0	= [ mat2x3(-5.0, -0.0, -2.0, 5.0, -2.0, -6.0) | mat2x3(-0.0, -4.0, -3.0, 7.0, -4.0, -1.0) | mat2x3(3.0, 7.0, -5.0, -0.0, -3.0, -6.0) ];
560e5c31af7Sopenharmony_ci		}
561e5c31af7Sopenharmony_ci
562e5c31af7Sopenharmony_ci		both ""
563e5c31af7Sopenharmony_ci			#version 300 es
564e5c31af7Sopenharmony_ci			precision mediump float;
565e5c31af7Sopenharmony_ci			${DECLARATIONS}
566e5c31af7Sopenharmony_ci
567e5c31af7Sopenharmony_ci			mat2x3 func (mat2x3 a)
568e5c31af7Sopenharmony_ci			{
569e5c31af7Sopenharmony_ci				return -2.0*a;
570e5c31af7Sopenharmony_ci			}
571e5c31af7Sopenharmony_ci
572e5c31af7Sopenharmony_ci			void main()
573e5c31af7Sopenharmony_ci			{
574e5c31af7Sopenharmony_ci				${SETUP}
575e5c31af7Sopenharmony_ci				out0 = func(in0);
576e5c31af7Sopenharmony_ci				${OUTPUT}
577e5c31af7Sopenharmony_ci			}
578e5c31af7Sopenharmony_ci		""
579e5c31af7Sopenharmony_ci	end
580e5c31af7Sopenharmony_ci
581e5c31af7Sopenharmony_ci
582e5c31af7Sopenharmony_ci	case mat2x4
583e5c31af7Sopenharmony_ci		version 300 es
584e5c31af7Sopenharmony_ci		values
585e5c31af7Sopenharmony_ci		{
586e5c31af7Sopenharmony_ci			input mat2x4 in0	= [ mat2x4(1.5, 3.0, -1.0, 2.5, -0.5, 3.5, 3.0, -3.0) | mat2x4(-2.5, -2.0, 3.5, -0.5, 1.0, -1.5, 0.0, -1.0) | mat2x4(-1.0, 0.5, 0.5, 3.0, 1.5, 3.0, 2.5, 3.5) ];
587e5c31af7Sopenharmony_ci			output mat2x4 out0	= [ mat2x4(-3.0, -6.0, 2.0, -5.0, 1.0, -7.0, -6.0, 6.0) | mat2x4(5.0, 4.0, -7.0, 1.0, -2.0, 3.0, -0.0, 2.0) | mat2x4(2.0, -1.0, -1.0, -6.0, -3.0, -6.0, -5.0, -7.0) ];
588e5c31af7Sopenharmony_ci		}
589e5c31af7Sopenharmony_ci
590e5c31af7Sopenharmony_ci		both ""
591e5c31af7Sopenharmony_ci			#version 300 es
592e5c31af7Sopenharmony_ci			precision mediump float;
593e5c31af7Sopenharmony_ci			${DECLARATIONS}
594e5c31af7Sopenharmony_ci
595e5c31af7Sopenharmony_ci			mat2x4 func (mat2x4 a)
596e5c31af7Sopenharmony_ci			{
597e5c31af7Sopenharmony_ci				return -2.0*a;
598e5c31af7Sopenharmony_ci			}
599e5c31af7Sopenharmony_ci
600e5c31af7Sopenharmony_ci			void main()
601e5c31af7Sopenharmony_ci			{
602e5c31af7Sopenharmony_ci				${SETUP}
603e5c31af7Sopenharmony_ci				out0 = func(in0);
604e5c31af7Sopenharmony_ci				${OUTPUT}
605e5c31af7Sopenharmony_ci			}
606e5c31af7Sopenharmony_ci		""
607e5c31af7Sopenharmony_ci	end
608e5c31af7Sopenharmony_ci
609e5c31af7Sopenharmony_ci
610e5c31af7Sopenharmony_ci	case mat3x2
611e5c31af7Sopenharmony_ci		version 300 es
612e5c31af7Sopenharmony_ci		values
613e5c31af7Sopenharmony_ci		{
614e5c31af7Sopenharmony_ci			input mat3x2 in0	= [ mat3x2(1.5, -2.5, 2.5, 3.5, 3.0, 0.5) | mat3x2(1.5, -2.0, 2.5, 0.5, -1.5, -3.5) | mat3x2(2.5, 3.5, -3.0, 2.5, -0.5, -2.5) ];
615e5c31af7Sopenharmony_ci			output mat3x2 out0	= [ mat3x2(-3.0, 5.0, -5.0, -7.0, -6.0, -1.0) | mat3x2(-3.0, 4.0, -5.0, -1.0, 3.0, 7.0) | mat3x2(-5.0, -7.0, 6.0, -5.0, 1.0, 5.0) ];
616e5c31af7Sopenharmony_ci		}
617e5c31af7Sopenharmony_ci
618e5c31af7Sopenharmony_ci		both ""
619e5c31af7Sopenharmony_ci			#version 300 es
620e5c31af7Sopenharmony_ci			precision mediump float;
621e5c31af7Sopenharmony_ci			${DECLARATIONS}
622e5c31af7Sopenharmony_ci
623e5c31af7Sopenharmony_ci			mat3x2 func (mat3x2 a)
624e5c31af7Sopenharmony_ci			{
625e5c31af7Sopenharmony_ci				return -2.0*a;
626e5c31af7Sopenharmony_ci			}
627e5c31af7Sopenharmony_ci
628e5c31af7Sopenharmony_ci			void main()
629e5c31af7Sopenharmony_ci			{
630e5c31af7Sopenharmony_ci				${SETUP}
631e5c31af7Sopenharmony_ci				out0 = func(in0);
632e5c31af7Sopenharmony_ci				${OUTPUT}
633e5c31af7Sopenharmony_ci			}
634e5c31af7Sopenharmony_ci		""
635e5c31af7Sopenharmony_ci	end
636e5c31af7Sopenharmony_ci
637e5c31af7Sopenharmony_ci
638e5c31af7Sopenharmony_ci	case mat3
639e5c31af7Sopenharmony_ci		version 300 es
640e5c31af7Sopenharmony_ci		values
641e5c31af7Sopenharmony_ci		{
642e5c31af7Sopenharmony_ci			input mat3 in0	= [ mat3(-1.5, 2.0, 3.0, -3.5, 1.0, -3.5, 1.5, -1.5, 3.0) | mat3(3.5, 0.0, 3.5, -1.5, -3.0, 0.5, -3.5, -2.5, -0.5) | mat3(1.0, -2.5, -3.5, 3.0, -1.5, 3.5, 3.0, -1.0, -0.5) ];
643e5c31af7Sopenharmony_ci			output mat3 out0	= [ mat3(3.0, -4.0, -6.0, 7.0, -2.0, 7.0, -3.0, 3.0, -6.0) | mat3(-7.0, -0.0, -7.0, 3.0, 6.0, -1.0, 7.0, 5.0, 1.0) | mat3(-2.0, 5.0, 7.0, -6.0, 3.0, -7.0, -6.0, 2.0, 1.0) ];
644e5c31af7Sopenharmony_ci		}
645e5c31af7Sopenharmony_ci
646e5c31af7Sopenharmony_ci		both ""
647e5c31af7Sopenharmony_ci			#version 300 es
648e5c31af7Sopenharmony_ci			precision mediump float;
649e5c31af7Sopenharmony_ci			${DECLARATIONS}
650e5c31af7Sopenharmony_ci
651e5c31af7Sopenharmony_ci			mat3 func (mat3 a)
652e5c31af7Sopenharmony_ci			{
653e5c31af7Sopenharmony_ci				return -2.0*a;
654e5c31af7Sopenharmony_ci			}
655e5c31af7Sopenharmony_ci
656e5c31af7Sopenharmony_ci			void main()
657e5c31af7Sopenharmony_ci			{
658e5c31af7Sopenharmony_ci				${SETUP}
659e5c31af7Sopenharmony_ci				out0 = func(in0);
660e5c31af7Sopenharmony_ci				${OUTPUT}
661e5c31af7Sopenharmony_ci			}
662e5c31af7Sopenharmony_ci		""
663e5c31af7Sopenharmony_ci	end
664e5c31af7Sopenharmony_ci
665e5c31af7Sopenharmony_ci
666e5c31af7Sopenharmony_ci	case mat3x4
667e5c31af7Sopenharmony_ci		version 300 es
668e5c31af7Sopenharmony_ci		values
669e5c31af7Sopenharmony_ci		{
670e5c31af7Sopenharmony_ci			input mat3x4 in0	= [ mat3x4(0.0, 1.0, 0.5, 0.5, 1.0, 3.5, 0.0, -0.5, 1.5, -2.0, -1.5, 3.5) | mat3x4(0.0, 0.5, -3.5, -0.5, 0.5, -3.5, 1.0, 1.0, -3.5, 1.0, -0.5, 1.5) | mat3x4(-1.0, 1.5, 2.0, -3.5, -3.5, 1.5, 3.5, -2.0, -0.5, 0.5, -1.5, -1.0) ];
671e5c31af7Sopenharmony_ci			output mat3x4 out0	= [ mat3x4(-0.0, -2.0, -1.0, -1.0, -2.0, -7.0, -0.0, 1.0, -3.0, 4.0, 3.0, -7.0) | mat3x4(-0.0, -1.0, 7.0, 1.0, -1.0, 7.0, -2.0, -2.0, 7.0, -2.0, 1.0, -3.0) | mat3x4(2.0, -3.0, -4.0, 7.0, 7.0, -3.0, -7.0, 4.0, 1.0, -1.0, 3.0, 2.0) ];
672e5c31af7Sopenharmony_ci		}
673e5c31af7Sopenharmony_ci
674e5c31af7Sopenharmony_ci		both ""
675e5c31af7Sopenharmony_ci			#version 300 es
676e5c31af7Sopenharmony_ci			precision mediump float;
677e5c31af7Sopenharmony_ci			${DECLARATIONS}
678e5c31af7Sopenharmony_ci
679e5c31af7Sopenharmony_ci			mat3x4 func (mat3x4 a)
680e5c31af7Sopenharmony_ci			{
681e5c31af7Sopenharmony_ci				return -2.0*a;
682e5c31af7Sopenharmony_ci			}
683e5c31af7Sopenharmony_ci
684e5c31af7Sopenharmony_ci			void main()
685e5c31af7Sopenharmony_ci			{
686e5c31af7Sopenharmony_ci				${SETUP}
687e5c31af7Sopenharmony_ci				out0 = func(in0);
688e5c31af7Sopenharmony_ci				${OUTPUT}
689e5c31af7Sopenharmony_ci			}
690e5c31af7Sopenharmony_ci		""
691e5c31af7Sopenharmony_ci	end
692e5c31af7Sopenharmony_ci
693e5c31af7Sopenharmony_ci
694e5c31af7Sopenharmony_ci	case mat4x2
695e5c31af7Sopenharmony_ci		version 300 es
696e5c31af7Sopenharmony_ci		values
697e5c31af7Sopenharmony_ci		{
698e5c31af7Sopenharmony_ci			input mat4x2 in0	= [ mat4x2(-1.5, -1.0, 0.5, -1.5, -1.0, 2.0, -3.5, 0.5) | mat4x2(2.0, -1.5, -2.0, 2.5, -2.0, -2.5, -0.5, 1.5) | mat4x2(-3.0, -1.5, -1.0, 2.5, -0.5, 2.5, -2.5, -1.0) ];
699e5c31af7Sopenharmony_ci			output mat4x2 out0	= [ mat4x2(3.0, 2.0, -1.0, 3.0, 2.0, -4.0, 7.0, -1.0) | mat4x2(-4.0, 3.0, 4.0, -5.0, 4.0, 5.0, 1.0, -3.0) | mat4x2(6.0, 3.0, 2.0, -5.0, 1.0, -5.0, 5.0, 2.0) ];
700e5c31af7Sopenharmony_ci		}
701e5c31af7Sopenharmony_ci
702e5c31af7Sopenharmony_ci		both ""
703e5c31af7Sopenharmony_ci			#version 300 es
704e5c31af7Sopenharmony_ci			precision mediump float;
705e5c31af7Sopenharmony_ci			${DECLARATIONS}
706e5c31af7Sopenharmony_ci
707e5c31af7Sopenharmony_ci			mat4x2 func (mat4x2 a)
708e5c31af7Sopenharmony_ci			{
709e5c31af7Sopenharmony_ci				return -2.0*a;
710e5c31af7Sopenharmony_ci			}
711e5c31af7Sopenharmony_ci
712e5c31af7Sopenharmony_ci			void main()
713e5c31af7Sopenharmony_ci			{
714e5c31af7Sopenharmony_ci				${SETUP}
715e5c31af7Sopenharmony_ci				out0 = func(in0);
716e5c31af7Sopenharmony_ci				${OUTPUT}
717e5c31af7Sopenharmony_ci			}
718e5c31af7Sopenharmony_ci		""
719e5c31af7Sopenharmony_ci	end
720e5c31af7Sopenharmony_ci
721e5c31af7Sopenharmony_ci
722e5c31af7Sopenharmony_ci	case mat4x3
723e5c31af7Sopenharmony_ci		version 300 es
724e5c31af7Sopenharmony_ci		values
725e5c31af7Sopenharmony_ci		{
726e5c31af7Sopenharmony_ci			input mat4x3 in0	= [ mat4x3(1.0, 3.0, -0.5, -2.0, -3.0, 0.0, -2.5, 2.5, 2.5, -2.5, -1.5, 2.5) | mat4x3(1.0, 2.5, -1.0, -3.0, -1.5, 2.0, -1.5, -1.0, -0.5, -0.5, -0.5, 3.0) | mat4x3(-2.5, -3.5, 3.5, 3.0, 3.5, -0.5, 3.5, 3.0, -2.0, 2.0, 2.5, 1.0) ];
727e5c31af7Sopenharmony_ci			output mat4x3 out0	= [ mat4x3(-2.0, -6.0, 1.0, 4.0, 6.0, -0.0, 5.0, -5.0, -5.0, 5.0, 3.0, -5.0) | mat4x3(-2.0, -5.0, 2.0, 6.0, 3.0, -4.0, 3.0, 2.0, 1.0, 1.0, 1.0, -6.0) | mat4x3(5.0, 7.0, -7.0, -6.0, -7.0, 1.0, -7.0, -6.0, 4.0, -4.0, -5.0, -2.0) ];
728e5c31af7Sopenharmony_ci		}
729e5c31af7Sopenharmony_ci
730e5c31af7Sopenharmony_ci		both ""
731e5c31af7Sopenharmony_ci			#version 300 es
732e5c31af7Sopenharmony_ci			precision mediump float;
733e5c31af7Sopenharmony_ci			${DECLARATIONS}
734e5c31af7Sopenharmony_ci
735e5c31af7Sopenharmony_ci			mat4x3 func (mat4x3 a)
736e5c31af7Sopenharmony_ci			{
737e5c31af7Sopenharmony_ci				return -2.0*a;
738e5c31af7Sopenharmony_ci			}
739e5c31af7Sopenharmony_ci
740e5c31af7Sopenharmony_ci			void main()
741e5c31af7Sopenharmony_ci			{
742e5c31af7Sopenharmony_ci				${SETUP}
743e5c31af7Sopenharmony_ci				out0 = func(in0);
744e5c31af7Sopenharmony_ci				${OUTPUT}
745e5c31af7Sopenharmony_ci			}
746e5c31af7Sopenharmony_ci		""
747e5c31af7Sopenharmony_ci	end
748e5c31af7Sopenharmony_ci
749e5c31af7Sopenharmony_ci
750e5c31af7Sopenharmony_ci	case mat4
751e5c31af7Sopenharmony_ci		version 300 es
752e5c31af7Sopenharmony_ci		values
753e5c31af7Sopenharmony_ci		{
754e5c31af7Sopenharmony_ci			input mat4 in0	= [ mat4(0.0, -1.5, -1.0, -2.0, -3.0, 0.5, -1.5, 2.5, -3.5, 3.0, 1.5, 3.0, 3.0, 3.0, 0.5, -3.5) | mat4(2.0, -2.5, -1.5, 1.0, 0.0, -0.5, 3.5, 1.0, -1.0, -2.0, 2.5, 0.0, 2.0, -1.0, -2.5, 0.5) | mat4(2.5, -2.5, 2.0, 3.0, 2.5, 2.5, -3.5, 1.0, 2.5, -3.5, -1.5, -1.5, 0.0, -0.5, 0.0, 2.0) ];
755e5c31af7Sopenharmony_ci			output mat4 out0	= [ mat4(-0.0, 3.0, 2.0, 4.0, 6.0, -1.0, 3.0, -5.0, 7.0, -6.0, -3.0, -6.0, -6.0, -6.0, -1.0, 7.0) | mat4(-4.0, 5.0, 3.0, -2.0, -0.0, 1.0, -7.0, -2.0, 2.0, 4.0, -5.0, -0.0, -4.0, 2.0, 5.0, -1.0) | mat4(-5.0, 5.0, -4.0, -6.0, -5.0, -5.0, 7.0, -2.0, -5.0, 7.0, 3.0, 3.0, -0.0, 1.0, -0.0, -4.0) ];
756e5c31af7Sopenharmony_ci		}
757e5c31af7Sopenharmony_ci
758e5c31af7Sopenharmony_ci		both ""
759e5c31af7Sopenharmony_ci			#version 300 es
760e5c31af7Sopenharmony_ci			precision mediump float;
761e5c31af7Sopenharmony_ci			${DECLARATIONS}
762e5c31af7Sopenharmony_ci
763e5c31af7Sopenharmony_ci			mat4 func (mat4 a)
764e5c31af7Sopenharmony_ci			{
765e5c31af7Sopenharmony_ci				return -2.0*a;
766e5c31af7Sopenharmony_ci			}
767e5c31af7Sopenharmony_ci
768e5c31af7Sopenharmony_ci			void main()
769e5c31af7Sopenharmony_ci			{
770e5c31af7Sopenharmony_ci				${SETUP}
771e5c31af7Sopenharmony_ci				out0 = func(in0);
772e5c31af7Sopenharmony_ci				${OUTPUT}
773e5c31af7Sopenharmony_ci			}
774e5c31af7Sopenharmony_ci		""
775e5c31af7Sopenharmony_ci	end
776e5c31af7Sopenharmony_ci
777e5c31af7Sopenharmony_ci	case float_struct
778e5c31af7Sopenharmony_ci		version 300 es
779e5c31af7Sopenharmony_ci		values
780e5c31af7Sopenharmony_ci		{
781e5c31af7Sopenharmony_ci			input vec3 in0		= [ vec3(0.0, 1.0, -2.0) | vec3(2.0, 2.5, -4.0) ];
782e5c31af7Sopenharmony_ci			output float out0	= [ 1.0 | -0.5 ];
783e5c31af7Sopenharmony_ci		}
784e5c31af7Sopenharmony_ci
785e5c31af7Sopenharmony_ci		both ""
786e5c31af7Sopenharmony_ci			#version 300 es
787e5c31af7Sopenharmony_ci			precision mediump float;
788e5c31af7Sopenharmony_ci			${DECLARATIONS}
789e5c31af7Sopenharmony_ci
790e5c31af7Sopenharmony_ci			struct Pos { float a, b, c; };
791e5c31af7Sopenharmony_ci
792e5c31af7Sopenharmony_ci			float func (Pos p)
793e5c31af7Sopenharmony_ci			{
794e5c31af7Sopenharmony_ci				return -(p.a + p.b + p.c);
795e5c31af7Sopenharmony_ci			}
796e5c31af7Sopenharmony_ci
797e5c31af7Sopenharmony_ci			void main()
798e5c31af7Sopenharmony_ci			{
799e5c31af7Sopenharmony_ci				Pos p = Pos(in0.x, in0.y, in0.z);
800e5c31af7Sopenharmony_ci				out0 = func(p);
801e5c31af7Sopenharmony_ci				${OUTPUT}
802e5c31af7Sopenharmony_ci			}
803e5c31af7Sopenharmony_ci		""
804e5c31af7Sopenharmony_ci	end
805e5c31af7Sopenharmony_ci
806e5c31af7Sopenharmony_ci	case struct_struct
807e5c31af7Sopenharmony_ci		version 300 es
808e5c31af7Sopenharmony_ci		values
809e5c31af7Sopenharmony_ci		{
810e5c31af7Sopenharmony_ci			input vec3 in0		= [ vec3(0.0, 1.0, -2.0) | vec3(2.0, 2.5, -4.0) ];
811e5c31af7Sopenharmony_ci			output float out0	= [ 1.0 | -0.5 ];
812e5c31af7Sopenharmony_ci		}
813e5c31af7Sopenharmony_ci
814e5c31af7Sopenharmony_ci		both ""
815e5c31af7Sopenharmony_ci			#version 300 es
816e5c31af7Sopenharmony_ci			precision mediump float;
817e5c31af7Sopenharmony_ci			${DECLARATIONS}
818e5c31af7Sopenharmony_ci
819e5c31af7Sopenharmony_ci			struct Pos { float a, b, c; };
820e5c31af7Sopenharmony_ci
821e5c31af7Sopenharmony_ci			Pos func (Pos p)
822e5c31af7Sopenharmony_ci			{
823e5c31af7Sopenharmony_ci				return Pos(-p.a, -p.b, -p.c);
824e5c31af7Sopenharmony_ci			}
825e5c31af7Sopenharmony_ci
826e5c31af7Sopenharmony_ci			void main()
827e5c31af7Sopenharmony_ci			{
828e5c31af7Sopenharmony_ci				Pos p = Pos(in0.x, in0.y, in0.z);
829e5c31af7Sopenharmony_ci				p = func(p);
830e5c31af7Sopenharmony_ci				out0 = p.a + p.b + p.c;
831e5c31af7Sopenharmony_ci				${OUTPUT}
832e5c31af7Sopenharmony_ci			}
833e5c31af7Sopenharmony_ci		""
834e5c31af7Sopenharmony_ci	end
835e5c31af7Sopenharmony_ci
836e5c31af7Sopenharmony_ci	case struct_nested_struct
837e5c31af7Sopenharmony_ci		version 300 es
838e5c31af7Sopenharmony_ci		values
839e5c31af7Sopenharmony_ci		{
840e5c31af7Sopenharmony_ci			input vec3 in0		= [ vec3(0.0, 1.0, -2.0) | vec3(2.0, 2.5, -4.0) ];
841e5c31af7Sopenharmony_ci			output float out0	= [ 1.0 | -0.5 ];
842e5c31af7Sopenharmony_ci		}
843e5c31af7Sopenharmony_ci
844e5c31af7Sopenharmony_ci		both ""
845e5c31af7Sopenharmony_ci			#version 300 es
846e5c31af7Sopenharmony_ci			precision mediump float;
847e5c31af7Sopenharmony_ci			${DECLARATIONS}
848e5c31af7Sopenharmony_ci
849e5c31af7Sopenharmony_ci			struct Pos { float a, b, c; };
850e5c31af7Sopenharmony_ci			struct Line { Pos start, end; };
851e5c31af7Sopenharmony_ci
852e5c31af7Sopenharmony_ci			Line func (Pos p)
853e5c31af7Sopenharmony_ci			{
854e5c31af7Sopenharmony_ci				return Line(p, Pos(-p.a, -p.b, -p.c));
855e5c31af7Sopenharmony_ci			}
856e5c31af7Sopenharmony_ci
857e5c31af7Sopenharmony_ci			float sum (Pos p)
858e5c31af7Sopenharmony_ci			{
859e5c31af7Sopenharmony_ci				return (p.a + p.b + p.c);
860e5c31af7Sopenharmony_ci			}
861e5c31af7Sopenharmony_ci
862e5c31af7Sopenharmony_ci			void main()
863e5c31af7Sopenharmony_ci			{
864e5c31af7Sopenharmony_ci				Pos p = Pos(in0.x, in0.y, in0.z);
865e5c31af7Sopenharmony_ci				Line line = func(p);
866e5c31af7Sopenharmony_ci				out0 = sum(line.start) + (2.0 * sum(line.end));
867e5c31af7Sopenharmony_ci				${OUTPUT}
868e5c31af7Sopenharmony_ci			}
869e5c31af7Sopenharmony_ci		""
870e5c31af7Sopenharmony_ci	end
871e5c31af7Sopenharmony_ci
872e5c31af7Sopenharmony_ci	case struct_constructor_highp_in_fragment
873e5c31af7Sopenharmony_ci		version 300 es
874e5c31af7Sopenharmony_ci		desc "passing highp vector to struct constructor in fragment shader yields all zeros"
875e5c31af7Sopenharmony_ci		vertex ""
876e5c31af7Sopenharmony_ci			#version 300 es
877e5c31af7Sopenharmony_ci			${VERTEX_DECLARATIONS}
878e5c31af7Sopenharmony_ci			void main()
879e5c31af7Sopenharmony_ci			{
880e5c31af7Sopenharmony_ci				${VERTEX_OUTPUT}
881e5c31af7Sopenharmony_ci			}
882e5c31af7Sopenharmony_ci		""
883e5c31af7Sopenharmony_ci		fragment ""
884e5c31af7Sopenharmony_ci			#version 300 es
885e5c31af7Sopenharmony_ci			${FRAGMENT_DECLARATIONS}
886e5c31af7Sopenharmony_ci			#ifdef GL_FRAGMENT_PRECISION_HIGH
887e5c31af7Sopenharmony_ci			#define PRECISION highp
888e5c31af7Sopenharmony_ci			#else
889e5c31af7Sopenharmony_ci			#define PRECISION mediump
890e5c31af7Sopenharmony_ci			#endif
891e5c31af7Sopenharmony_ci			struct Test {
892e5c31af7Sopenharmony_ci				PRECISION vec3 color;
893e5c31af7Sopenharmony_ci			} ;
894e5c31af7Sopenharmony_ci			void main() {
895e5c31af7Sopenharmony_ci				PRECISION vec3 color = vec3(0.2, 2.0, 0.1);
896e5c31af7Sopenharmony_ci				Test test = Test(color);
897e5c31af7Sopenharmony_ci				// Bias the color so all components are guaranteed > 1.0.
898e5c31af7Sopenharmony_ci				${FRAG_COLOR} = vec4(vec3(0.25, 0.55, 0.65) + vec3(4.0, 0.25, 4.0) * test.color, 1.0);
899e5c31af7Sopenharmony_ci			}
900e5c31af7Sopenharmony_ci		""
901e5c31af7Sopenharmony_ci	end
902e5c31af7Sopenharmony_ci
903e5c31af7Sopenharmony_ci
904e5c31af7Sopenharmony_ciend # datatypes
905e5c31af7Sopenharmony_ci
906e5c31af7Sopenharmony_cigroup qualifiers "Function Parameter Qualifiers"
907e5c31af7Sopenharmony_ci
908e5c31af7Sopenharmony_ci	case in_float
909e5c31af7Sopenharmony_ci		version 300 es
910e5c31af7Sopenharmony_ci		values
911e5c31af7Sopenharmony_ci		{
912e5c31af7Sopenharmony_ci			input float in0		= [ 0.0 | 1.0 | -2.0 | 2.5 ];
913e5c31af7Sopenharmony_ci			output float out0	= [ 0.0 | -1.0 | 2.0 | -2.5 ];
914e5c31af7Sopenharmony_ci		}
915e5c31af7Sopenharmony_ci
916e5c31af7Sopenharmony_ci		both ""
917e5c31af7Sopenharmony_ci			#version 300 es
918e5c31af7Sopenharmony_ci			precision mediump float;
919e5c31af7Sopenharmony_ci			precision mediump int;
920e5c31af7Sopenharmony_ci			${DECLARATIONS}
921e5c31af7Sopenharmony_ci
922e5c31af7Sopenharmony_ci			float func (in float a)
923e5c31af7Sopenharmony_ci			{
924e5c31af7Sopenharmony_ci				a = -a;
925e5c31af7Sopenharmony_ci				return 2.0 * a;
926e5c31af7Sopenharmony_ci			}
927e5c31af7Sopenharmony_ci
928e5c31af7Sopenharmony_ci			void main()
929e5c31af7Sopenharmony_ci			{
930e5c31af7Sopenharmony_ci				${SETUP}
931e5c31af7Sopenharmony_ci				float f = in0;
932e5c31af7Sopenharmony_ci				float g = func(f);
933e5c31af7Sopenharmony_ci				out0 = f + g;
934e5c31af7Sopenharmony_ci				${OUTPUT}
935e5c31af7Sopenharmony_ci			}
936e5c31af7Sopenharmony_ci		""
937e5c31af7Sopenharmony_ci	end
938e5c31af7Sopenharmony_ci
939e5c31af7Sopenharmony_ci	case out_float
940e5c31af7Sopenharmony_ci		version 300 es
941e5c31af7Sopenharmony_ci		values
942e5c31af7Sopenharmony_ci		{
943e5c31af7Sopenharmony_ci			input float in0		= [ 0.0 | 1.0 | -2.0 | 2.5 ];
944e5c31af7Sopenharmony_ci			output float out0	= [ 0.0 | -1.0 | 2.0 | -2.5 ];
945e5c31af7Sopenharmony_ci		}
946e5c31af7Sopenharmony_ci
947e5c31af7Sopenharmony_ci		both ""
948e5c31af7Sopenharmony_ci			#version 300 es
949e5c31af7Sopenharmony_ci			precision mediump float;
950e5c31af7Sopenharmony_ci			precision mediump int;
951e5c31af7Sopenharmony_ci			${DECLARATIONS}
952e5c31af7Sopenharmony_ci
953e5c31af7Sopenharmony_ci			void func (out float a)
954e5c31af7Sopenharmony_ci			{
955e5c31af7Sopenharmony_ci				a = -1.0;
956e5c31af7Sopenharmony_ci			}
957e5c31af7Sopenharmony_ci
958e5c31af7Sopenharmony_ci			void main()
959e5c31af7Sopenharmony_ci			{
960e5c31af7Sopenharmony_ci				${SETUP}
961e5c31af7Sopenharmony_ci				float f = 1.0;
962e5c31af7Sopenharmony_ci				func(f);
963e5c31af7Sopenharmony_ci				out0 = f * in0;
964e5c31af7Sopenharmony_ci				${OUTPUT}
965e5c31af7Sopenharmony_ci			}
966e5c31af7Sopenharmony_ci		""
967e5c31af7Sopenharmony_ci	end
968e5c31af7Sopenharmony_ci
969e5c31af7Sopenharmony_ci	case inout_float
970e5c31af7Sopenharmony_ci		version 300 es
971e5c31af7Sopenharmony_ci		values
972e5c31af7Sopenharmony_ci		{
973e5c31af7Sopenharmony_ci			input float in0		= [ 0.0 | 1.0 | -2.0 | 2.5 ];
974e5c31af7Sopenharmony_ci			output float out0	= [ 0.0 | -1.0 | 2.0 | -2.5 ];
975e5c31af7Sopenharmony_ci		}
976e5c31af7Sopenharmony_ci
977e5c31af7Sopenharmony_ci		both ""
978e5c31af7Sopenharmony_ci			#version 300 es
979e5c31af7Sopenharmony_ci			precision mediump float;
980e5c31af7Sopenharmony_ci			precision mediump int;
981e5c31af7Sopenharmony_ci			${DECLARATIONS}
982e5c31af7Sopenharmony_ci
983e5c31af7Sopenharmony_ci			void func (inout float a)
984e5c31af7Sopenharmony_ci			{
985e5c31af7Sopenharmony_ci				a = -a;
986e5c31af7Sopenharmony_ci			}
987e5c31af7Sopenharmony_ci
988e5c31af7Sopenharmony_ci			void main()
989e5c31af7Sopenharmony_ci			{
990e5c31af7Sopenharmony_ci				${SETUP}
991e5c31af7Sopenharmony_ci				float f = 1.0;
992e5c31af7Sopenharmony_ci				func(f);
993e5c31af7Sopenharmony_ci				out0 = f * in0;
994e5c31af7Sopenharmony_ci				${OUTPUT}
995e5c31af7Sopenharmony_ci			}
996e5c31af7Sopenharmony_ci		""
997e5c31af7Sopenharmony_ci	end
998e5c31af7Sopenharmony_ci
999e5c31af7Sopenharmony_ci	case in_lowp_float
1000e5c31af7Sopenharmony_ci		version 300 es
1001e5c31af7Sopenharmony_ci		values
1002e5c31af7Sopenharmony_ci		{
1003e5c31af7Sopenharmony_ci			input float in0		= [ 0.0 | 1.0 | -2.0 | 2.5 ];
1004e5c31af7Sopenharmony_ci			output float out0	= [ 0.0 | -1.0 | 2.0 | -2.5 ];
1005e5c31af7Sopenharmony_ci		}
1006e5c31af7Sopenharmony_ci
1007e5c31af7Sopenharmony_ci		both ""
1008e5c31af7Sopenharmony_ci			#version 300 es
1009e5c31af7Sopenharmony_ci			precision mediump float;
1010e5c31af7Sopenharmony_ci			precision mediump int;
1011e5c31af7Sopenharmony_ci			${DECLARATIONS}
1012e5c31af7Sopenharmony_ci
1013e5c31af7Sopenharmony_ci			float func (in lowp float a)
1014e5c31af7Sopenharmony_ci			{
1015e5c31af7Sopenharmony_ci				a = -a;
1016e5c31af7Sopenharmony_ci				return 2.0 * a;
1017e5c31af7Sopenharmony_ci			}
1018e5c31af7Sopenharmony_ci
1019e5c31af7Sopenharmony_ci			void main()
1020e5c31af7Sopenharmony_ci			{
1021e5c31af7Sopenharmony_ci				${SETUP}
1022e5c31af7Sopenharmony_ci				float f = in0;
1023e5c31af7Sopenharmony_ci				float g = func(f);
1024e5c31af7Sopenharmony_ci				out0 = f + g;
1025e5c31af7Sopenharmony_ci				${OUTPUT}
1026e5c31af7Sopenharmony_ci			}
1027e5c31af7Sopenharmony_ci		""
1028e5c31af7Sopenharmony_ci	end
1029e5c31af7Sopenharmony_ci
1030e5c31af7Sopenharmony_ci	case out_lowp_float
1031e5c31af7Sopenharmony_ci		version 300 es
1032e5c31af7Sopenharmony_ci		values
1033e5c31af7Sopenharmony_ci		{
1034e5c31af7Sopenharmony_ci			input float in0		= [ 0.0 | 1.0 | -2.0 | 2.5 ];
1035e5c31af7Sopenharmony_ci			output float out0	= [ 0.0 | -1.0 | 2.0 | -2.5 ];
1036e5c31af7Sopenharmony_ci		}
1037e5c31af7Sopenharmony_ci
1038e5c31af7Sopenharmony_ci		both ""
1039e5c31af7Sopenharmony_ci			#version 300 es
1040e5c31af7Sopenharmony_ci			precision mediump float;
1041e5c31af7Sopenharmony_ci			precision mediump int;
1042e5c31af7Sopenharmony_ci			${DECLARATIONS}
1043e5c31af7Sopenharmony_ci
1044e5c31af7Sopenharmony_ci			void func (out lowp float a)
1045e5c31af7Sopenharmony_ci			{
1046e5c31af7Sopenharmony_ci				a = -1.0;
1047e5c31af7Sopenharmony_ci			}
1048e5c31af7Sopenharmony_ci
1049e5c31af7Sopenharmony_ci			void main()
1050e5c31af7Sopenharmony_ci			{
1051e5c31af7Sopenharmony_ci				${SETUP}
1052e5c31af7Sopenharmony_ci				float f = 1.0;
1053e5c31af7Sopenharmony_ci				func(f);
1054e5c31af7Sopenharmony_ci				out0 = f * in0;
1055e5c31af7Sopenharmony_ci				${OUTPUT}
1056e5c31af7Sopenharmony_ci			}
1057e5c31af7Sopenharmony_ci		""
1058e5c31af7Sopenharmony_ci	end
1059e5c31af7Sopenharmony_ci
1060e5c31af7Sopenharmony_ci	case inout_lowp_float
1061e5c31af7Sopenharmony_ci		version 300 es
1062e5c31af7Sopenharmony_ci		values
1063e5c31af7Sopenharmony_ci		{
1064e5c31af7Sopenharmony_ci			input float in0		= [ 0.0 | 1.0 | -2.0 | 2.5 ];
1065e5c31af7Sopenharmony_ci			output float out0	= [ 0.0 | -1.0 | 2.0 | -2.5 ];
1066e5c31af7Sopenharmony_ci		}
1067e5c31af7Sopenharmony_ci
1068e5c31af7Sopenharmony_ci		both ""
1069e5c31af7Sopenharmony_ci			#version 300 es
1070e5c31af7Sopenharmony_ci			precision mediump float;
1071e5c31af7Sopenharmony_ci			precision mediump int;
1072e5c31af7Sopenharmony_ci			${DECLARATIONS}
1073e5c31af7Sopenharmony_ci
1074e5c31af7Sopenharmony_ci			void func (inout lowp float a)
1075e5c31af7Sopenharmony_ci			{
1076e5c31af7Sopenharmony_ci				a = -a;
1077e5c31af7Sopenharmony_ci			}
1078e5c31af7Sopenharmony_ci
1079e5c31af7Sopenharmony_ci			void main()
1080e5c31af7Sopenharmony_ci			{
1081e5c31af7Sopenharmony_ci				${SETUP}
1082e5c31af7Sopenharmony_ci				float f = 1.0;
1083e5c31af7Sopenharmony_ci				func(f);
1084e5c31af7Sopenharmony_ci				out0 = f * in0;
1085e5c31af7Sopenharmony_ci				${OUTPUT}
1086e5c31af7Sopenharmony_ci			}
1087e5c31af7Sopenharmony_ci		""
1088e5c31af7Sopenharmony_ci	end
1089e5c31af7Sopenharmony_ci
1090e5c31af7Sopenharmony_ci	case in_highp_float
1091e5c31af7Sopenharmony_ci		version 300 es
1092e5c31af7Sopenharmony_ci		values
1093e5c31af7Sopenharmony_ci		{
1094e5c31af7Sopenharmony_ci			input float in0		= [ 0.0 | 1.0 | -2.0 | 2.5 ];
1095e5c31af7Sopenharmony_ci			output float out0	= [ 0.0 | -1.0 | 2.0 | -2.5 ];
1096e5c31af7Sopenharmony_ci		}
1097e5c31af7Sopenharmony_ci
1098e5c31af7Sopenharmony_ci		both ""
1099e5c31af7Sopenharmony_ci			#version 300 es
1100e5c31af7Sopenharmony_ci			precision mediump float;
1101e5c31af7Sopenharmony_ci			precision mediump int;
1102e5c31af7Sopenharmony_ci			${DECLARATIONS}
1103e5c31af7Sopenharmony_ci
1104e5c31af7Sopenharmony_ci			float func (in highp float a)
1105e5c31af7Sopenharmony_ci			{
1106e5c31af7Sopenharmony_ci				a = -a;
1107e5c31af7Sopenharmony_ci				return 2.0 * a;
1108e5c31af7Sopenharmony_ci			}
1109e5c31af7Sopenharmony_ci
1110e5c31af7Sopenharmony_ci			void main()
1111e5c31af7Sopenharmony_ci			{
1112e5c31af7Sopenharmony_ci				${SETUP}
1113e5c31af7Sopenharmony_ci				float f = in0;
1114e5c31af7Sopenharmony_ci				float g = func(f);
1115e5c31af7Sopenharmony_ci				out0 = f + g;
1116e5c31af7Sopenharmony_ci				${OUTPUT}
1117e5c31af7Sopenharmony_ci			}
1118e5c31af7Sopenharmony_ci		""
1119e5c31af7Sopenharmony_ci	end
1120e5c31af7Sopenharmony_ci
1121e5c31af7Sopenharmony_ci	case out_highp_float
1122e5c31af7Sopenharmony_ci		version 300 es
1123e5c31af7Sopenharmony_ci		values
1124e5c31af7Sopenharmony_ci		{
1125e5c31af7Sopenharmony_ci			input float in0		= [ 0.0 | 1.0 | -2.0 | 2.5 ];
1126e5c31af7Sopenharmony_ci			output float out0	= [ 0.0 | -1.0 | 2.0 | -2.5 ];
1127e5c31af7Sopenharmony_ci		}
1128e5c31af7Sopenharmony_ci
1129e5c31af7Sopenharmony_ci		both ""
1130e5c31af7Sopenharmony_ci			#version 300 es
1131e5c31af7Sopenharmony_ci			precision mediump float;
1132e5c31af7Sopenharmony_ci			precision mediump int;
1133e5c31af7Sopenharmony_ci			${DECLARATIONS}
1134e5c31af7Sopenharmony_ci
1135e5c31af7Sopenharmony_ci			void func (out highp float a)
1136e5c31af7Sopenharmony_ci			{
1137e5c31af7Sopenharmony_ci				a = -1.0;
1138e5c31af7Sopenharmony_ci			}
1139e5c31af7Sopenharmony_ci
1140e5c31af7Sopenharmony_ci			void main()
1141e5c31af7Sopenharmony_ci			{
1142e5c31af7Sopenharmony_ci				${SETUP}
1143e5c31af7Sopenharmony_ci				float f = 1.0;
1144e5c31af7Sopenharmony_ci				func(f);
1145e5c31af7Sopenharmony_ci				out0 = f * in0;
1146e5c31af7Sopenharmony_ci				${OUTPUT}
1147e5c31af7Sopenharmony_ci			}
1148e5c31af7Sopenharmony_ci		""
1149e5c31af7Sopenharmony_ci	end
1150e5c31af7Sopenharmony_ci
1151e5c31af7Sopenharmony_ci	case inout_highp_float
1152e5c31af7Sopenharmony_ci		version 300 es
1153e5c31af7Sopenharmony_ci		values
1154e5c31af7Sopenharmony_ci		{
1155e5c31af7Sopenharmony_ci			input float in0		= [ 0.0 | 1.0 | -2.0 | 2.5 ];
1156e5c31af7Sopenharmony_ci			output float out0	= [ 0.0 | -1.0 | 2.0 | -2.5 ];
1157e5c31af7Sopenharmony_ci		}
1158e5c31af7Sopenharmony_ci
1159e5c31af7Sopenharmony_ci		both ""
1160e5c31af7Sopenharmony_ci			#version 300 es
1161e5c31af7Sopenharmony_ci			precision mediump float;
1162e5c31af7Sopenharmony_ci			precision mediump int;
1163e5c31af7Sopenharmony_ci			${DECLARATIONS}
1164e5c31af7Sopenharmony_ci
1165e5c31af7Sopenharmony_ci			void func (inout highp float a)
1166e5c31af7Sopenharmony_ci			{
1167e5c31af7Sopenharmony_ci				a = -a;
1168e5c31af7Sopenharmony_ci			}
1169e5c31af7Sopenharmony_ci
1170e5c31af7Sopenharmony_ci			void main()
1171e5c31af7Sopenharmony_ci			{
1172e5c31af7Sopenharmony_ci				${SETUP}
1173e5c31af7Sopenharmony_ci				float f = 1.0;
1174e5c31af7Sopenharmony_ci				func(f);
1175e5c31af7Sopenharmony_ci				out0 = f * in0;
1176e5c31af7Sopenharmony_ci				${OUTPUT}
1177e5c31af7Sopenharmony_ci			}
1178e5c31af7Sopenharmony_ci		""
1179e5c31af7Sopenharmony_ci	end
1180e5c31af7Sopenharmony_ci
1181e5c31af7Sopenharmony_ci	case const_float
1182e5c31af7Sopenharmony_ci		version 300 es
1183e5c31af7Sopenharmony_ci		values
1184e5c31af7Sopenharmony_ci		{
1185e5c31af7Sopenharmony_ci			input float in0		= [ 0.0 | 1.0 | -2.0 | 2.5 ];
1186e5c31af7Sopenharmony_ci			output float out0	= [ 0.0 | -1.0 | 2.0 | -2.5 ];
1187e5c31af7Sopenharmony_ci		}
1188e5c31af7Sopenharmony_ci
1189e5c31af7Sopenharmony_ci		both ""
1190e5c31af7Sopenharmony_ci			#version 300 es
1191e5c31af7Sopenharmony_ci			precision mediump float;
1192e5c31af7Sopenharmony_ci			precision mediump int;
1193e5c31af7Sopenharmony_ci			${DECLARATIONS}
1194e5c31af7Sopenharmony_ci
1195e5c31af7Sopenharmony_ci			float func (const float a)
1196e5c31af7Sopenharmony_ci			{
1197e5c31af7Sopenharmony_ci				float b = -a;
1198e5c31af7Sopenharmony_ci				return 2.0 * b;
1199e5c31af7Sopenharmony_ci			}
1200e5c31af7Sopenharmony_ci
1201e5c31af7Sopenharmony_ci			void main()
1202e5c31af7Sopenharmony_ci			{
1203e5c31af7Sopenharmony_ci				${SETUP}
1204e5c31af7Sopenharmony_ci				float f = in0;
1205e5c31af7Sopenharmony_ci				float g = func(f);
1206e5c31af7Sopenharmony_ci				out0 = f + g;
1207e5c31af7Sopenharmony_ci				${OUTPUT}
1208e5c31af7Sopenharmony_ci			}
1209e5c31af7Sopenharmony_ci		""
1210e5c31af7Sopenharmony_ci	end
1211e5c31af7Sopenharmony_ci
1212e5c31af7Sopenharmony_ci	case const_in_float
1213e5c31af7Sopenharmony_ci		version 300 es
1214e5c31af7Sopenharmony_ci		values
1215e5c31af7Sopenharmony_ci		{
1216e5c31af7Sopenharmony_ci			input float in0		= [ 0.0 | 1.0 | -2.0 | 2.5 ];
1217e5c31af7Sopenharmony_ci			output float out0	= [ 0.0 | -1.0 | 2.0 | -2.5 ];
1218e5c31af7Sopenharmony_ci		}
1219e5c31af7Sopenharmony_ci
1220e5c31af7Sopenharmony_ci		both ""
1221e5c31af7Sopenharmony_ci			#version 300 es
1222e5c31af7Sopenharmony_ci			precision mediump float;
1223e5c31af7Sopenharmony_ci			precision mediump int;
1224e5c31af7Sopenharmony_ci			${DECLARATIONS}
1225e5c31af7Sopenharmony_ci
1226e5c31af7Sopenharmony_ci			float func (const in float a)
1227e5c31af7Sopenharmony_ci			{
1228e5c31af7Sopenharmony_ci				float b = -a;
1229e5c31af7Sopenharmony_ci				return 2.0 * b;
1230e5c31af7Sopenharmony_ci			}
1231e5c31af7Sopenharmony_ci
1232e5c31af7Sopenharmony_ci			void main()
1233e5c31af7Sopenharmony_ci			{
1234e5c31af7Sopenharmony_ci				${SETUP}
1235e5c31af7Sopenharmony_ci				float f = in0;
1236e5c31af7Sopenharmony_ci				float g = func(f);
1237e5c31af7Sopenharmony_ci				out0 = f + g;
1238e5c31af7Sopenharmony_ci				${OUTPUT}
1239e5c31af7Sopenharmony_ci			}
1240e5c31af7Sopenharmony_ci		""
1241e5c31af7Sopenharmony_ci	end
1242e5c31af7Sopenharmony_ci
1243e5c31af7Sopenharmony_ci	case in_int
1244e5c31af7Sopenharmony_ci		version 300 es
1245e5c31af7Sopenharmony_ci		values
1246e5c31af7Sopenharmony_ci		{
1247e5c31af7Sopenharmony_ci			input int in0		= [ 0 | 1 | -2 | 4 ];
1248e5c31af7Sopenharmony_ci			output int out0		= [ 0 | -1 | 2 | -4 ];
1249e5c31af7Sopenharmony_ci		}
1250e5c31af7Sopenharmony_ci
1251e5c31af7Sopenharmony_ci		both ""
1252e5c31af7Sopenharmony_ci			#version 300 es
1253e5c31af7Sopenharmony_ci			precision mediump float;
1254e5c31af7Sopenharmony_ci			precision mediump int;
1255e5c31af7Sopenharmony_ci			${DECLARATIONS}
1256e5c31af7Sopenharmony_ci
1257e5c31af7Sopenharmony_ci			int func (in int a)
1258e5c31af7Sopenharmony_ci			{
1259e5c31af7Sopenharmony_ci				a = -a;
1260e5c31af7Sopenharmony_ci				return 2 * a;
1261e5c31af7Sopenharmony_ci			}
1262e5c31af7Sopenharmony_ci
1263e5c31af7Sopenharmony_ci			void main()
1264e5c31af7Sopenharmony_ci			{
1265e5c31af7Sopenharmony_ci				${SETUP}
1266e5c31af7Sopenharmony_ci				int f = in0;
1267e5c31af7Sopenharmony_ci				int g = func(f);
1268e5c31af7Sopenharmony_ci				out0 = f + g;
1269e5c31af7Sopenharmony_ci				${OUTPUT}
1270e5c31af7Sopenharmony_ci			}
1271e5c31af7Sopenharmony_ci		""
1272e5c31af7Sopenharmony_ci	end
1273e5c31af7Sopenharmony_ci
1274e5c31af7Sopenharmony_ci	case out_int
1275e5c31af7Sopenharmony_ci		version 300 es
1276e5c31af7Sopenharmony_ci		values
1277e5c31af7Sopenharmony_ci		{
1278e5c31af7Sopenharmony_ci			input int in0		= [ 0 | 1 | -2 | 6 ];
1279e5c31af7Sopenharmony_ci			output int out0		= [ 0 | -1 | 2 | -6 ];
1280e5c31af7Sopenharmony_ci		}
1281e5c31af7Sopenharmony_ci
1282e5c31af7Sopenharmony_ci		both ""
1283e5c31af7Sopenharmony_ci			#version 300 es
1284e5c31af7Sopenharmony_ci			precision mediump float;
1285e5c31af7Sopenharmony_ci			precision mediump int;
1286e5c31af7Sopenharmony_ci			${DECLARATIONS}
1287e5c31af7Sopenharmony_ci
1288e5c31af7Sopenharmony_ci			void func (out int a)
1289e5c31af7Sopenharmony_ci			{
1290e5c31af7Sopenharmony_ci				a = -1;
1291e5c31af7Sopenharmony_ci			}
1292e5c31af7Sopenharmony_ci
1293e5c31af7Sopenharmony_ci			void main()
1294e5c31af7Sopenharmony_ci			{
1295e5c31af7Sopenharmony_ci				${SETUP}
1296e5c31af7Sopenharmony_ci				int f = 1;
1297e5c31af7Sopenharmony_ci				func(f);
1298e5c31af7Sopenharmony_ci				out0 = f * in0;
1299e5c31af7Sopenharmony_ci				${OUTPUT}
1300e5c31af7Sopenharmony_ci			}
1301e5c31af7Sopenharmony_ci		""
1302e5c31af7Sopenharmony_ci	end
1303e5c31af7Sopenharmony_ci
1304e5c31af7Sopenharmony_ci	case inout_int
1305e5c31af7Sopenharmony_ci		version 300 es
1306e5c31af7Sopenharmony_ci		values
1307e5c31af7Sopenharmony_ci		{
1308e5c31af7Sopenharmony_ci			input int in0		= [ 0 | 1 | -2 | 6 ];
1309e5c31af7Sopenharmony_ci			output int out0		= [ 0 | -1 | 2 | -6 ];
1310e5c31af7Sopenharmony_ci		}
1311e5c31af7Sopenharmony_ci
1312e5c31af7Sopenharmony_ci		both ""
1313e5c31af7Sopenharmony_ci			#version 300 es
1314e5c31af7Sopenharmony_ci			precision mediump float;
1315e5c31af7Sopenharmony_ci			precision mediump int;
1316e5c31af7Sopenharmony_ci			${DECLARATIONS}
1317e5c31af7Sopenharmony_ci
1318e5c31af7Sopenharmony_ci			void func (inout int a)
1319e5c31af7Sopenharmony_ci			{
1320e5c31af7Sopenharmony_ci				a = -a;
1321e5c31af7Sopenharmony_ci			}
1322e5c31af7Sopenharmony_ci
1323e5c31af7Sopenharmony_ci			void main()
1324e5c31af7Sopenharmony_ci			{
1325e5c31af7Sopenharmony_ci				${SETUP}
1326e5c31af7Sopenharmony_ci				int f = 1;
1327e5c31af7Sopenharmony_ci				func(f);
1328e5c31af7Sopenharmony_ci				out0 = f * in0;
1329e5c31af7Sopenharmony_ci				${OUTPUT}
1330e5c31af7Sopenharmony_ci			}
1331e5c31af7Sopenharmony_ci		""
1332e5c31af7Sopenharmony_ci	end
1333e5c31af7Sopenharmony_ci
1334e5c31af7Sopenharmony_ci	case in_lowp_int
1335e5c31af7Sopenharmony_ci		version 300 es
1336e5c31af7Sopenharmony_ci		values
1337e5c31af7Sopenharmony_ci		{
1338e5c31af7Sopenharmony_ci			input int in0		= [ 0 | 1 | -2 | 4 ];
1339e5c31af7Sopenharmony_ci			output int out0		= [ 0 | -1 | 2 | -4 ];
1340e5c31af7Sopenharmony_ci		}
1341e5c31af7Sopenharmony_ci
1342e5c31af7Sopenharmony_ci		both ""
1343e5c31af7Sopenharmony_ci			#version 300 es
1344e5c31af7Sopenharmony_ci			precision mediump float;
1345e5c31af7Sopenharmony_ci			precision mediump int;
1346e5c31af7Sopenharmony_ci			${DECLARATIONS}
1347e5c31af7Sopenharmony_ci
1348e5c31af7Sopenharmony_ci			int func (in lowp int a)
1349e5c31af7Sopenharmony_ci			{
1350e5c31af7Sopenharmony_ci				a = -a;
1351e5c31af7Sopenharmony_ci				return 2 * a;
1352e5c31af7Sopenharmony_ci			}
1353e5c31af7Sopenharmony_ci
1354e5c31af7Sopenharmony_ci			void main()
1355e5c31af7Sopenharmony_ci			{
1356e5c31af7Sopenharmony_ci				${SETUP}
1357e5c31af7Sopenharmony_ci				int f = in0;
1358e5c31af7Sopenharmony_ci				int g = func(f);
1359e5c31af7Sopenharmony_ci				out0 = f + g;
1360e5c31af7Sopenharmony_ci				${OUTPUT}
1361e5c31af7Sopenharmony_ci			}
1362e5c31af7Sopenharmony_ci		""
1363e5c31af7Sopenharmony_ci	end
1364e5c31af7Sopenharmony_ci
1365e5c31af7Sopenharmony_ci	case out_lowp_int
1366e5c31af7Sopenharmony_ci		version 300 es
1367e5c31af7Sopenharmony_ci		values
1368e5c31af7Sopenharmony_ci		{
1369e5c31af7Sopenharmony_ci			input int in0		= [ 0 | 1 | -2 | 6 ];
1370e5c31af7Sopenharmony_ci			output int out0		= [ 0 | -1 | 2 | -6 ];
1371e5c31af7Sopenharmony_ci		}
1372e5c31af7Sopenharmony_ci
1373e5c31af7Sopenharmony_ci		both ""
1374e5c31af7Sopenharmony_ci			#version 300 es
1375e5c31af7Sopenharmony_ci			precision mediump float;
1376e5c31af7Sopenharmony_ci			precision mediump int;
1377e5c31af7Sopenharmony_ci			${DECLARATIONS}
1378e5c31af7Sopenharmony_ci
1379e5c31af7Sopenharmony_ci			void func (out lowp int a)
1380e5c31af7Sopenharmony_ci			{
1381e5c31af7Sopenharmony_ci				a = -1;
1382e5c31af7Sopenharmony_ci			}
1383e5c31af7Sopenharmony_ci
1384e5c31af7Sopenharmony_ci			void main()
1385e5c31af7Sopenharmony_ci			{
1386e5c31af7Sopenharmony_ci				${SETUP}
1387e5c31af7Sopenharmony_ci				int f = 1;
1388e5c31af7Sopenharmony_ci				func(f);
1389e5c31af7Sopenharmony_ci				out0 = f * in0;
1390e5c31af7Sopenharmony_ci				${OUTPUT}
1391e5c31af7Sopenharmony_ci			}
1392e5c31af7Sopenharmony_ci		""
1393e5c31af7Sopenharmony_ci	end
1394e5c31af7Sopenharmony_ci
1395e5c31af7Sopenharmony_ci	case inout_lowp_int
1396e5c31af7Sopenharmony_ci		version 300 es
1397e5c31af7Sopenharmony_ci		values
1398e5c31af7Sopenharmony_ci		{
1399e5c31af7Sopenharmony_ci			input int in0		= [ 0 | 1 | -2 | 6 ];
1400e5c31af7Sopenharmony_ci			output int out0		= [ 0 | -1 | 2 | -6 ];
1401e5c31af7Sopenharmony_ci		}
1402e5c31af7Sopenharmony_ci
1403e5c31af7Sopenharmony_ci		both ""
1404e5c31af7Sopenharmony_ci			#version 300 es
1405e5c31af7Sopenharmony_ci			precision mediump float;
1406e5c31af7Sopenharmony_ci			precision mediump int;
1407e5c31af7Sopenharmony_ci			${DECLARATIONS}
1408e5c31af7Sopenharmony_ci
1409e5c31af7Sopenharmony_ci			void func (inout lowp int a)
1410e5c31af7Sopenharmony_ci			{
1411e5c31af7Sopenharmony_ci				a = -a;
1412e5c31af7Sopenharmony_ci			}
1413e5c31af7Sopenharmony_ci
1414e5c31af7Sopenharmony_ci			void main()
1415e5c31af7Sopenharmony_ci			{
1416e5c31af7Sopenharmony_ci				${SETUP}
1417e5c31af7Sopenharmony_ci				int f = 1;
1418e5c31af7Sopenharmony_ci				func(f);
1419e5c31af7Sopenharmony_ci				out0 = f * in0;
1420e5c31af7Sopenharmony_ci				${OUTPUT}
1421e5c31af7Sopenharmony_ci			}
1422e5c31af7Sopenharmony_ci		""
1423e5c31af7Sopenharmony_ci	end
1424e5c31af7Sopenharmony_ci
1425e5c31af7Sopenharmony_ci	case in_highp_int
1426e5c31af7Sopenharmony_ci		version 300 es
1427e5c31af7Sopenharmony_ci		values
1428e5c31af7Sopenharmony_ci		{
1429e5c31af7Sopenharmony_ci			input int in0		= [ 0 | 1 | -2 | 4 ];
1430e5c31af7Sopenharmony_ci			output int out0		= [ 0 | -1 | 2 | -4 ];
1431e5c31af7Sopenharmony_ci		}
1432e5c31af7Sopenharmony_ci
1433e5c31af7Sopenharmony_ci		both ""
1434e5c31af7Sopenharmony_ci			#version 300 es
1435e5c31af7Sopenharmony_ci			precision mediump float;
1436e5c31af7Sopenharmony_ci			precision mediump int;
1437e5c31af7Sopenharmony_ci			${DECLARATIONS}
1438e5c31af7Sopenharmony_ci
1439e5c31af7Sopenharmony_ci			int func (in highp int a)
1440e5c31af7Sopenharmony_ci			{
1441e5c31af7Sopenharmony_ci				a = -a;
1442e5c31af7Sopenharmony_ci				return 2 * a;
1443e5c31af7Sopenharmony_ci			}
1444e5c31af7Sopenharmony_ci
1445e5c31af7Sopenharmony_ci			void main()
1446e5c31af7Sopenharmony_ci			{
1447e5c31af7Sopenharmony_ci				${SETUP}
1448e5c31af7Sopenharmony_ci				int f = in0;
1449e5c31af7Sopenharmony_ci				int g = func(f);
1450e5c31af7Sopenharmony_ci				out0 = f + g;
1451e5c31af7Sopenharmony_ci				${OUTPUT}
1452e5c31af7Sopenharmony_ci			}
1453e5c31af7Sopenharmony_ci		""
1454e5c31af7Sopenharmony_ci	end
1455e5c31af7Sopenharmony_ci
1456e5c31af7Sopenharmony_ci	case out_highp_int
1457e5c31af7Sopenharmony_ci		version 300 es
1458e5c31af7Sopenharmony_ci		values
1459e5c31af7Sopenharmony_ci		{
1460e5c31af7Sopenharmony_ci			input int in0		= [ 0 | 1 | -2 | 6 ];
1461e5c31af7Sopenharmony_ci			output int out0		= [ 0 | -1 | 2 | -6 ];
1462e5c31af7Sopenharmony_ci		}
1463e5c31af7Sopenharmony_ci
1464e5c31af7Sopenharmony_ci		both ""
1465e5c31af7Sopenharmony_ci			#version 300 es
1466e5c31af7Sopenharmony_ci			precision mediump float;
1467e5c31af7Sopenharmony_ci			precision mediump int;
1468e5c31af7Sopenharmony_ci			${DECLARATIONS}
1469e5c31af7Sopenharmony_ci
1470e5c31af7Sopenharmony_ci			void func (out highp int a)
1471e5c31af7Sopenharmony_ci			{
1472e5c31af7Sopenharmony_ci				a = -1;
1473e5c31af7Sopenharmony_ci			}
1474e5c31af7Sopenharmony_ci
1475e5c31af7Sopenharmony_ci			void main()
1476e5c31af7Sopenharmony_ci			{
1477e5c31af7Sopenharmony_ci				${SETUP}
1478e5c31af7Sopenharmony_ci				int f = 1;
1479e5c31af7Sopenharmony_ci				func(f);
1480e5c31af7Sopenharmony_ci				out0 = f * in0;
1481e5c31af7Sopenharmony_ci				${OUTPUT}
1482e5c31af7Sopenharmony_ci			}
1483e5c31af7Sopenharmony_ci		""
1484e5c31af7Sopenharmony_ci	end
1485e5c31af7Sopenharmony_ci
1486e5c31af7Sopenharmony_ci	case inout_highp_int
1487e5c31af7Sopenharmony_ci		version 300 es
1488e5c31af7Sopenharmony_ci		values
1489e5c31af7Sopenharmony_ci		{
1490e5c31af7Sopenharmony_ci			input int in0		= [ 0 | 1 | -2 | 6 ];
1491e5c31af7Sopenharmony_ci			output int out0		= [ 0 | -1 | 2 | -6 ];
1492e5c31af7Sopenharmony_ci		}
1493e5c31af7Sopenharmony_ci
1494e5c31af7Sopenharmony_ci		both ""
1495e5c31af7Sopenharmony_ci			#version 300 es
1496e5c31af7Sopenharmony_ci			precision mediump float;
1497e5c31af7Sopenharmony_ci			precision mediump int;
1498e5c31af7Sopenharmony_ci			${DECLARATIONS}
1499e5c31af7Sopenharmony_ci
1500e5c31af7Sopenharmony_ci			void func (inout highp int a)
1501e5c31af7Sopenharmony_ci			{
1502e5c31af7Sopenharmony_ci				a = -a;
1503e5c31af7Sopenharmony_ci			}
1504e5c31af7Sopenharmony_ci
1505e5c31af7Sopenharmony_ci			void main()
1506e5c31af7Sopenharmony_ci			{
1507e5c31af7Sopenharmony_ci				${SETUP}
1508e5c31af7Sopenharmony_ci				int f = 1;
1509e5c31af7Sopenharmony_ci				func(f);
1510e5c31af7Sopenharmony_ci				out0 = f * in0;
1511e5c31af7Sopenharmony_ci				${OUTPUT}
1512e5c31af7Sopenharmony_ci			}
1513e5c31af7Sopenharmony_ci		""
1514e5c31af7Sopenharmony_ci	end
1515e5c31af7Sopenharmony_ci
1516e5c31af7Sopenharmony_ci	case const_int
1517e5c31af7Sopenharmony_ci		version 300 es
1518e5c31af7Sopenharmony_ci		values
1519e5c31af7Sopenharmony_ci		{
1520e5c31af7Sopenharmony_ci			input int in0		= [ 0 | 1 | -2 | 4 ];
1521e5c31af7Sopenharmony_ci			output int out0		= [ 0 | -1 | 2 | -4 ];
1522e5c31af7Sopenharmony_ci		}
1523e5c31af7Sopenharmony_ci
1524e5c31af7Sopenharmony_ci		both ""
1525e5c31af7Sopenharmony_ci			#version 300 es
1526e5c31af7Sopenharmony_ci			precision mediump float;
1527e5c31af7Sopenharmony_ci			precision mediump int;
1528e5c31af7Sopenharmony_ci			${DECLARATIONS}
1529e5c31af7Sopenharmony_ci
1530e5c31af7Sopenharmony_ci			int func (const int a)
1531e5c31af7Sopenharmony_ci			{
1532e5c31af7Sopenharmony_ci				int b = -a;
1533e5c31af7Sopenharmony_ci				return 2 * b;
1534e5c31af7Sopenharmony_ci			}
1535e5c31af7Sopenharmony_ci
1536e5c31af7Sopenharmony_ci			void main()
1537e5c31af7Sopenharmony_ci			{
1538e5c31af7Sopenharmony_ci				${SETUP}
1539e5c31af7Sopenharmony_ci				int f = in0;
1540e5c31af7Sopenharmony_ci				int g = func(f);
1541e5c31af7Sopenharmony_ci				out0 = f + g;
1542e5c31af7Sopenharmony_ci				${OUTPUT}
1543e5c31af7Sopenharmony_ci			}
1544e5c31af7Sopenharmony_ci		""
1545e5c31af7Sopenharmony_ci	end
1546e5c31af7Sopenharmony_ci
1547e5c31af7Sopenharmony_ci	case const_in_int
1548e5c31af7Sopenharmony_ci		version 300 es
1549e5c31af7Sopenharmony_ci		values
1550e5c31af7Sopenharmony_ci		{
1551e5c31af7Sopenharmony_ci			input int in0		= [ 0 | 1 | -2 | 4 ];
1552e5c31af7Sopenharmony_ci			output int out0		= [ 0 | -1 | 2 | -4 ];
1553e5c31af7Sopenharmony_ci		}
1554e5c31af7Sopenharmony_ci
1555e5c31af7Sopenharmony_ci		both ""
1556e5c31af7Sopenharmony_ci			#version 300 es
1557e5c31af7Sopenharmony_ci			precision mediump float;
1558e5c31af7Sopenharmony_ci			precision mediump int;
1559e5c31af7Sopenharmony_ci			${DECLARATIONS}
1560e5c31af7Sopenharmony_ci
1561e5c31af7Sopenharmony_ci			int func (const in int a)
1562e5c31af7Sopenharmony_ci			{
1563e5c31af7Sopenharmony_ci				int b = -a;
1564e5c31af7Sopenharmony_ci				return 2 * b;
1565e5c31af7Sopenharmony_ci			}
1566e5c31af7Sopenharmony_ci
1567e5c31af7Sopenharmony_ci			void main()
1568e5c31af7Sopenharmony_ci			{
1569e5c31af7Sopenharmony_ci				${SETUP}
1570e5c31af7Sopenharmony_ci				int f = in0;
1571e5c31af7Sopenharmony_ci				int g = func(f);
1572e5c31af7Sopenharmony_ci				out0 = f + g;
1573e5c31af7Sopenharmony_ci				${OUTPUT}
1574e5c31af7Sopenharmony_ci			}
1575e5c31af7Sopenharmony_ci		""
1576e5c31af7Sopenharmony_ci	end
1577e5c31af7Sopenharmony_ci
1578e5c31af7Sopenharmony_ci	case in_bool
1579e5c31af7Sopenharmony_ci		version 300 es
1580e5c31af7Sopenharmony_ci		values
1581e5c31af7Sopenharmony_ci		{
1582e5c31af7Sopenharmony_ci			input bool in0		= [ true | false ];
1583e5c31af7Sopenharmony_ci			output bool out0	= [ true | true ];
1584e5c31af7Sopenharmony_ci		}
1585e5c31af7Sopenharmony_ci
1586e5c31af7Sopenharmony_ci		both ""
1587e5c31af7Sopenharmony_ci			#version 300 es
1588e5c31af7Sopenharmony_ci			precision mediump float;
1589e5c31af7Sopenharmony_ci			${DECLARATIONS}
1590e5c31af7Sopenharmony_ci
1591e5c31af7Sopenharmony_ci			bool func (in bool a)
1592e5c31af7Sopenharmony_ci			{
1593e5c31af7Sopenharmony_ci				a = !a;
1594e5c31af7Sopenharmony_ci				return a;
1595e5c31af7Sopenharmony_ci			}
1596e5c31af7Sopenharmony_ci
1597e5c31af7Sopenharmony_ci			void main()
1598e5c31af7Sopenharmony_ci			{
1599e5c31af7Sopenharmony_ci				${SETUP}
1600e5c31af7Sopenharmony_ci				bool f = in0;
1601e5c31af7Sopenharmony_ci				bool g = func(f);
1602e5c31af7Sopenharmony_ci				out0 = (f != g);
1603e5c31af7Sopenharmony_ci				${OUTPUT}
1604e5c31af7Sopenharmony_ci			}
1605e5c31af7Sopenharmony_ci		""
1606e5c31af7Sopenharmony_ci	end
1607e5c31af7Sopenharmony_ci
1608e5c31af7Sopenharmony_ci	case out_bool
1609e5c31af7Sopenharmony_ci		version 300 es
1610e5c31af7Sopenharmony_ci		values
1611e5c31af7Sopenharmony_ci		{
1612e5c31af7Sopenharmony_ci			input bool in0		= [ true | false ];
1613e5c31af7Sopenharmony_ci			output bool out0	= [ false | true ];
1614e5c31af7Sopenharmony_ci		}
1615e5c31af7Sopenharmony_ci
1616e5c31af7Sopenharmony_ci		both ""
1617e5c31af7Sopenharmony_ci			#version 300 es
1618e5c31af7Sopenharmony_ci			precision mediump float;
1619e5c31af7Sopenharmony_ci			${DECLARATIONS}
1620e5c31af7Sopenharmony_ci
1621e5c31af7Sopenharmony_ci			void func (out bool a)
1622e5c31af7Sopenharmony_ci			{
1623e5c31af7Sopenharmony_ci				a = false;
1624e5c31af7Sopenharmony_ci			}
1625e5c31af7Sopenharmony_ci
1626e5c31af7Sopenharmony_ci			void main()
1627e5c31af7Sopenharmony_ci			{
1628e5c31af7Sopenharmony_ci				${SETUP}
1629e5c31af7Sopenharmony_ci				bool f = true;
1630e5c31af7Sopenharmony_ci				func(f);
1631e5c31af7Sopenharmony_ci				out0 = (in0 == f);
1632e5c31af7Sopenharmony_ci				${OUTPUT}
1633e5c31af7Sopenharmony_ci			}
1634e5c31af7Sopenharmony_ci		""
1635e5c31af7Sopenharmony_ci	end
1636e5c31af7Sopenharmony_ci
1637e5c31af7Sopenharmony_ci	case inout_bool
1638e5c31af7Sopenharmony_ci		version 300 es
1639e5c31af7Sopenharmony_ci		values
1640e5c31af7Sopenharmony_ci		{
1641e5c31af7Sopenharmony_ci			input bool in0		= [ true | false ];
1642e5c31af7Sopenharmony_ci			output bool out0	= [ false | true ];
1643e5c31af7Sopenharmony_ci		}
1644e5c31af7Sopenharmony_ci
1645e5c31af7Sopenharmony_ci		both ""
1646e5c31af7Sopenharmony_ci			#version 300 es
1647e5c31af7Sopenharmony_ci			precision mediump float;
1648e5c31af7Sopenharmony_ci			${DECLARATIONS}
1649e5c31af7Sopenharmony_ci
1650e5c31af7Sopenharmony_ci			void func (inout bool a)
1651e5c31af7Sopenharmony_ci			{
1652e5c31af7Sopenharmony_ci				a = !a;
1653e5c31af7Sopenharmony_ci			}
1654e5c31af7Sopenharmony_ci
1655e5c31af7Sopenharmony_ci			void main()
1656e5c31af7Sopenharmony_ci			{
1657e5c31af7Sopenharmony_ci				${SETUP}
1658e5c31af7Sopenharmony_ci				bool f = true;
1659e5c31af7Sopenharmony_ci				func(f);
1660e5c31af7Sopenharmony_ci				out0 = (in0 == f);
1661e5c31af7Sopenharmony_ci				${OUTPUT}
1662e5c31af7Sopenharmony_ci			}
1663e5c31af7Sopenharmony_ci		""
1664e5c31af7Sopenharmony_ci	end
1665e5c31af7Sopenharmony_ci
1666e5c31af7Sopenharmony_ci	case const_bool
1667e5c31af7Sopenharmony_ci		version 300 es
1668e5c31af7Sopenharmony_ci		values
1669e5c31af7Sopenharmony_ci		{
1670e5c31af7Sopenharmony_ci			input bool in0		= [ true | false ];
1671e5c31af7Sopenharmony_ci			output bool out0	= [ true | true ];
1672e5c31af7Sopenharmony_ci		}
1673e5c31af7Sopenharmony_ci
1674e5c31af7Sopenharmony_ci		both ""
1675e5c31af7Sopenharmony_ci			#version 300 es
1676e5c31af7Sopenharmony_ci			precision mediump float;
1677e5c31af7Sopenharmony_ci			${DECLARATIONS}
1678e5c31af7Sopenharmony_ci
1679e5c31af7Sopenharmony_ci			bool func (const bool a)
1680e5c31af7Sopenharmony_ci			{
1681e5c31af7Sopenharmony_ci				bool b = !a;
1682e5c31af7Sopenharmony_ci				return b;
1683e5c31af7Sopenharmony_ci			}
1684e5c31af7Sopenharmony_ci
1685e5c31af7Sopenharmony_ci			void main()
1686e5c31af7Sopenharmony_ci			{
1687e5c31af7Sopenharmony_ci				${SETUP}
1688e5c31af7Sopenharmony_ci				bool f = in0;
1689e5c31af7Sopenharmony_ci				bool g = func(f);
1690e5c31af7Sopenharmony_ci				out0 = (f != g);
1691e5c31af7Sopenharmony_ci				${OUTPUT}
1692e5c31af7Sopenharmony_ci			}
1693e5c31af7Sopenharmony_ci		""
1694e5c31af7Sopenharmony_ci	end
1695e5c31af7Sopenharmony_ci
1696e5c31af7Sopenharmony_ciend # qualifiers
1697e5c31af7Sopenharmony_ci
1698e5c31af7Sopenharmony_cigroup declarations "Function Declarations"
1699e5c31af7Sopenharmony_ci
1700e5c31af7Sopenharmony_ci	case basic
1701e5c31af7Sopenharmony_ci		version 300 es
1702e5c31af7Sopenharmony_ci		values
1703e5c31af7Sopenharmony_ci		{
1704e5c31af7Sopenharmony_ci			input float in0		= [ 0.0 | 1.0 | -2.0 | 2.5 ];
1705e5c31af7Sopenharmony_ci			output float out0	= [ 0.0 | -1.0 | 2.0 | -2.5 ];
1706e5c31af7Sopenharmony_ci		}
1707e5c31af7Sopenharmony_ci
1708e5c31af7Sopenharmony_ci		both ""
1709e5c31af7Sopenharmony_ci			#version 300 es
1710e5c31af7Sopenharmony_ci			precision mediump float;
1711e5c31af7Sopenharmony_ci			${DECLARATIONS}
1712e5c31af7Sopenharmony_ci
1713e5c31af7Sopenharmony_ci			float func (void);
1714e5c31af7Sopenharmony_ci
1715e5c31af7Sopenharmony_ci			float func (void)
1716e5c31af7Sopenharmony_ci			{
1717e5c31af7Sopenharmony_ci				return -1.0;
1718e5c31af7Sopenharmony_ci			}
1719e5c31af7Sopenharmony_ci
1720e5c31af7Sopenharmony_ci			void main()
1721e5c31af7Sopenharmony_ci			{
1722e5c31af7Sopenharmony_ci				out0 = func() * in0;
1723e5c31af7Sopenharmony_ci				${OUTPUT}
1724e5c31af7Sopenharmony_ci			}
1725e5c31af7Sopenharmony_ci		""
1726e5c31af7Sopenharmony_ci	end
1727e5c31af7Sopenharmony_ci
1728e5c31af7Sopenharmony_ci	case basic_arg
1729e5c31af7Sopenharmony_ci		version 300 es
1730e5c31af7Sopenharmony_ci		values
1731e5c31af7Sopenharmony_ci		{
1732e5c31af7Sopenharmony_ci			input float in0		= [ 0.0 | 1.0 | -2.0 | 2.5 ];
1733e5c31af7Sopenharmony_ci			output float out0	= [ 0.0 | -1.0 | 2.0 | -2.5 ];
1734e5c31af7Sopenharmony_ci		}
1735e5c31af7Sopenharmony_ci
1736e5c31af7Sopenharmony_ci		both ""
1737e5c31af7Sopenharmony_ci			#version 300 es
1738e5c31af7Sopenharmony_ci			precision mediump float;
1739e5c31af7Sopenharmony_ci			${DECLARATIONS}
1740e5c31af7Sopenharmony_ci
1741e5c31af7Sopenharmony_ci			float func (float f);
1742e5c31af7Sopenharmony_ci
1743e5c31af7Sopenharmony_ci			float func (float f)
1744e5c31af7Sopenharmony_ci			{
1745e5c31af7Sopenharmony_ci				return -f;
1746e5c31af7Sopenharmony_ci			}
1747e5c31af7Sopenharmony_ci
1748e5c31af7Sopenharmony_ci			void main()
1749e5c31af7Sopenharmony_ci			{
1750e5c31af7Sopenharmony_ci				out0 = func(in0);
1751e5c31af7Sopenharmony_ci				${OUTPUT}
1752e5c31af7Sopenharmony_ci			}
1753e5c31af7Sopenharmony_ci		""
1754e5c31af7Sopenharmony_ci	end
1755e5c31af7Sopenharmony_ci
1756e5c31af7Sopenharmony_ci	case define_after_use
1757e5c31af7Sopenharmony_ci		version 300 es
1758e5c31af7Sopenharmony_ci		values
1759e5c31af7Sopenharmony_ci		{
1760e5c31af7Sopenharmony_ci			input float in0		= [ 0.0 | 1.0 | -2.0 | 2.5 ];
1761e5c31af7Sopenharmony_ci			output float out0	= [ 0.0 | -1.0 | 2.0 | -2.5 ];
1762e5c31af7Sopenharmony_ci		}
1763e5c31af7Sopenharmony_ci
1764e5c31af7Sopenharmony_ci		both ""
1765e5c31af7Sopenharmony_ci			#version 300 es
1766e5c31af7Sopenharmony_ci			precision mediump float;
1767e5c31af7Sopenharmony_ci			${DECLARATIONS}
1768e5c31af7Sopenharmony_ci
1769e5c31af7Sopenharmony_ci			float func (void);
1770e5c31af7Sopenharmony_ci
1771e5c31af7Sopenharmony_ci			void main()
1772e5c31af7Sopenharmony_ci			{
1773e5c31af7Sopenharmony_ci				out0 = func() * in0;
1774e5c31af7Sopenharmony_ci				${OUTPUT}
1775e5c31af7Sopenharmony_ci			}
1776e5c31af7Sopenharmony_ci
1777e5c31af7Sopenharmony_ci			float func (void)
1778e5c31af7Sopenharmony_ci			{
1779e5c31af7Sopenharmony_ci				return -1.0;
1780e5c31af7Sopenharmony_ci			}
1781e5c31af7Sopenharmony_ci		""
1782e5c31af7Sopenharmony_ci	end
1783e5c31af7Sopenharmony_ci
1784e5c31af7Sopenharmony_ci	case double_declare
1785e5c31af7Sopenharmony_ci		version 300 es
1786e5c31af7Sopenharmony_ci		values
1787e5c31af7Sopenharmony_ci		{
1788e5c31af7Sopenharmony_ci			input float in0		= [ 0.0 | 1.0 | -2.0 | 2.5 ];
1789e5c31af7Sopenharmony_ci			output float out0	= [ 0.0 | -1.0 | 2.0 | -2.5 ];
1790e5c31af7Sopenharmony_ci		}
1791e5c31af7Sopenharmony_ci
1792e5c31af7Sopenharmony_ci		both ""
1793e5c31af7Sopenharmony_ci			#version 300 es
1794e5c31af7Sopenharmony_ci			precision mediump float;
1795e5c31af7Sopenharmony_ci			${DECLARATIONS}
1796e5c31af7Sopenharmony_ci
1797e5c31af7Sopenharmony_ci			float func (void);
1798e5c31af7Sopenharmony_ci
1799e5c31af7Sopenharmony_ci			float func (void);
1800e5c31af7Sopenharmony_ci
1801e5c31af7Sopenharmony_ci			float func (void)
1802e5c31af7Sopenharmony_ci			{
1803e5c31af7Sopenharmony_ci				return -1.0;
1804e5c31af7Sopenharmony_ci			}
1805e5c31af7Sopenharmony_ci
1806e5c31af7Sopenharmony_ci			void main()
1807e5c31af7Sopenharmony_ci			{
1808e5c31af7Sopenharmony_ci				out0 = func() * in0;
1809e5c31af7Sopenharmony_ci				${OUTPUT}
1810e5c31af7Sopenharmony_ci			}
1811e5c31af7Sopenharmony_ci		""
1812e5c31af7Sopenharmony_ci	end
1813e5c31af7Sopenharmony_ci
1814e5c31af7Sopenharmony_ci	case declare_after_define
1815e5c31af7Sopenharmony_ci		version 300 es
1816e5c31af7Sopenharmony_ci		values
1817e5c31af7Sopenharmony_ci		{
1818e5c31af7Sopenharmony_ci			input float in0		= [ 0.0 | 1.0 | -2.0 | 2.5 ];
1819e5c31af7Sopenharmony_ci			output float out0	= [ 0.0 | -1.0 | 2.0 | -2.5 ];
1820e5c31af7Sopenharmony_ci		}
1821e5c31af7Sopenharmony_ci
1822e5c31af7Sopenharmony_ci		both ""
1823e5c31af7Sopenharmony_ci			#version 300 es
1824e5c31af7Sopenharmony_ci			precision mediump float;
1825e5c31af7Sopenharmony_ci			${DECLARATIONS}
1826e5c31af7Sopenharmony_ci
1827e5c31af7Sopenharmony_ci			float func (void)
1828e5c31af7Sopenharmony_ci			{
1829e5c31af7Sopenharmony_ci				return -1.0;
1830e5c31af7Sopenharmony_ci			}
1831e5c31af7Sopenharmony_ci
1832e5c31af7Sopenharmony_ci			float func (void);
1833e5c31af7Sopenharmony_ci
1834e5c31af7Sopenharmony_ci			void main()
1835e5c31af7Sopenharmony_ci			{
1836e5c31af7Sopenharmony_ci				out0 = func() * in0;
1837e5c31af7Sopenharmony_ci				${OUTPUT}
1838e5c31af7Sopenharmony_ci			}
1839e5c31af7Sopenharmony_ci		""
1840e5c31af7Sopenharmony_ci	end
1841e5c31af7Sopenharmony_ci
1842e5c31af7Sopenharmony_ci	case void_vs_no_void
1843e5c31af7Sopenharmony_ci		version 300 es
1844e5c31af7Sopenharmony_ci		values
1845e5c31af7Sopenharmony_ci		{
1846e5c31af7Sopenharmony_ci			input float in0		= [ 0.0 | 1.0 | -2.0 | 2.5 ];
1847e5c31af7Sopenharmony_ci			output float out0	= [ 0.0 | -1.0 | 2.0 | -2.5 ];
1848e5c31af7Sopenharmony_ci		}
1849e5c31af7Sopenharmony_ci
1850e5c31af7Sopenharmony_ci		both ""
1851e5c31af7Sopenharmony_ci			#version 300 es
1852e5c31af7Sopenharmony_ci			precision mediump float;
1853e5c31af7Sopenharmony_ci			${DECLARATIONS}
1854e5c31af7Sopenharmony_ci
1855e5c31af7Sopenharmony_ci			float func ();
1856e5c31af7Sopenharmony_ci
1857e5c31af7Sopenharmony_ci			void main()
1858e5c31af7Sopenharmony_ci			{
1859e5c31af7Sopenharmony_ci				out0 = func() * in0;
1860e5c31af7Sopenharmony_ci				${OUTPUT}
1861e5c31af7Sopenharmony_ci			}
1862e5c31af7Sopenharmony_ci
1863e5c31af7Sopenharmony_ci			float func (void)
1864e5c31af7Sopenharmony_ci			{
1865e5c31af7Sopenharmony_ci				return -1.0;
1866e5c31af7Sopenharmony_ci			}
1867e5c31af7Sopenharmony_ci		""
1868e5c31af7Sopenharmony_ci	end
1869e5c31af7Sopenharmony_ci
1870e5c31af7Sopenharmony_ci	case in_vs_no_in
1871e5c31af7Sopenharmony_ci		version 300 es
1872e5c31af7Sopenharmony_ci		values
1873e5c31af7Sopenharmony_ci		{
1874e5c31af7Sopenharmony_ci			input float in0		= [ 0.0 | 1.0 | -2.0 | 2.5 ];
1875e5c31af7Sopenharmony_ci			output float out0	= [ 0.0 | -1.0 | 2.0 | -2.5 ];
1876e5c31af7Sopenharmony_ci		}
1877e5c31af7Sopenharmony_ci
1878e5c31af7Sopenharmony_ci		both ""
1879e5c31af7Sopenharmony_ci			#version 300 es
1880e5c31af7Sopenharmony_ci			precision mediump float;
1881e5c31af7Sopenharmony_ci			${DECLARATIONS}
1882e5c31af7Sopenharmony_ci
1883e5c31af7Sopenharmony_ci			float func (float f);
1884e5c31af7Sopenharmony_ci
1885e5c31af7Sopenharmony_ci			void main()
1886e5c31af7Sopenharmony_ci			{
1887e5c31af7Sopenharmony_ci				out0 = func(in0);
1888e5c31af7Sopenharmony_ci				${OUTPUT}
1889e5c31af7Sopenharmony_ci			}
1890e5c31af7Sopenharmony_ci
1891e5c31af7Sopenharmony_ci			float func (in float f)
1892e5c31af7Sopenharmony_ci			{
1893e5c31af7Sopenharmony_ci				return -f;
1894e5c31af7Sopenharmony_ci			}
1895e5c31af7Sopenharmony_ci		""
1896e5c31af7Sopenharmony_ci	end
1897e5c31af7Sopenharmony_ci
1898e5c31af7Sopenharmony_ci	case default_vs_explicit_precision
1899e5c31af7Sopenharmony_ci		version 300 es
1900e5c31af7Sopenharmony_ci		values
1901e5c31af7Sopenharmony_ci		{
1902e5c31af7Sopenharmony_ci			input float in0		= [ 0.0 | 1.0 | -2.0 | 2.5 ];
1903e5c31af7Sopenharmony_ci			output float out0	= [ 0.0 | -1.0 | 2.0 | -2.5 ];
1904e5c31af7Sopenharmony_ci		}
1905e5c31af7Sopenharmony_ci
1906e5c31af7Sopenharmony_ci		both ""
1907e5c31af7Sopenharmony_ci			#version 300 es
1908e5c31af7Sopenharmony_ci			precision mediump float;
1909e5c31af7Sopenharmony_ci			${DECLARATIONS}
1910e5c31af7Sopenharmony_ci
1911e5c31af7Sopenharmony_ci			float func (float f);
1912e5c31af7Sopenharmony_ci
1913e5c31af7Sopenharmony_ci			void main()
1914e5c31af7Sopenharmony_ci			{
1915e5c31af7Sopenharmony_ci				out0 = func(in0);
1916e5c31af7Sopenharmony_ci				${OUTPUT}
1917e5c31af7Sopenharmony_ci			}
1918e5c31af7Sopenharmony_ci
1919e5c31af7Sopenharmony_ci			float func (mediump float f)
1920e5c31af7Sopenharmony_ci			{
1921e5c31af7Sopenharmony_ci				return -f;
1922e5c31af7Sopenharmony_ci			}
1923e5c31af7Sopenharmony_ci		""
1924e5c31af7Sopenharmony_ci	end
1925e5c31af7Sopenharmony_ci
1926e5c31af7Sopenharmony_ci
1927e5c31af7Sopenharmony_ciend # declarations
1928e5c31af7Sopenharmony_ci
1929e5c31af7Sopenharmony_cigroup overloading "Function Overloading"
1930e5c31af7Sopenharmony_ci
1931e5c31af7Sopenharmony_ci	case user_func_arg_type_simple
1932e5c31af7Sopenharmony_ci		version 300 es
1933e5c31af7Sopenharmony_ci		values
1934e5c31af7Sopenharmony_ci		{
1935e5c31af7Sopenharmony_ci			input float in0		= [ 0.0 | 1.0 | -2.0 | 2.5 ];
1936e5c31af7Sopenharmony_ci			output float out0	= [ 0.0 | -1.0 | 2.0 | -2.5 ];
1937e5c31af7Sopenharmony_ci		}
1938e5c31af7Sopenharmony_ci
1939e5c31af7Sopenharmony_ci		both ""
1940e5c31af7Sopenharmony_ci			#version 300 es
1941e5c31af7Sopenharmony_ci			precision mediump float;
1942e5c31af7Sopenharmony_ci			precision mediump int;
1943e5c31af7Sopenharmony_ci			${DECLARATIONS}
1944e5c31af7Sopenharmony_ci
1945e5c31af7Sopenharmony_ci			float func (float a)
1946e5c31af7Sopenharmony_ci			{
1947e5c31af7Sopenharmony_ci				return -a;
1948e5c31af7Sopenharmony_ci			}
1949e5c31af7Sopenharmony_ci
1950e5c31af7Sopenharmony_ci			int func (int a)
1951e5c31af7Sopenharmony_ci			{
1952e5c31af7Sopenharmony_ci				return -a;
1953e5c31af7Sopenharmony_ci			}
1954e5c31af7Sopenharmony_ci
1955e5c31af7Sopenharmony_ci			void main()
1956e5c31af7Sopenharmony_ci			{
1957e5c31af7Sopenharmony_ci				out0 = func(in0) * float(func(-1));
1958e5c31af7Sopenharmony_ci				${OUTPUT}
1959e5c31af7Sopenharmony_ci			}
1960e5c31af7Sopenharmony_ci		""
1961e5c31af7Sopenharmony_ci	end
1962e5c31af7Sopenharmony_ci
1963e5c31af7Sopenharmony_ci	case user_func_arg_float_types
1964e5c31af7Sopenharmony_ci		version 300 es
1965e5c31af7Sopenharmony_ci		values
1966e5c31af7Sopenharmony_ci		{
1967e5c31af7Sopenharmony_ci			input float in0		= [ 0.0 | 1.0 | -2.0 | 2.5 ];
1968e5c31af7Sopenharmony_ci			output float out0	= [ 0.0 | -1.0 | 2.0 | -2.5 ];
1969e5c31af7Sopenharmony_ci		}
1970e5c31af7Sopenharmony_ci
1971e5c31af7Sopenharmony_ci		both ""
1972e5c31af7Sopenharmony_ci			#version 300 es
1973e5c31af7Sopenharmony_ci			precision mediump float;
1974e5c31af7Sopenharmony_ci			precision mediump int;
1975e5c31af7Sopenharmony_ci			${DECLARATIONS}
1976e5c31af7Sopenharmony_ci
1977e5c31af7Sopenharmony_ci			float func (float a) { return -a; }
1978e5c31af7Sopenharmony_ci			vec2 func (vec2 a) { return a.yx; }
1979e5c31af7Sopenharmony_ci			vec3 func (vec3 a) { return a.xxx; }
1980e5c31af7Sopenharmony_ci			vec4 func (vec4 a) { return a.wwww; }
1981e5c31af7Sopenharmony_ci
1982e5c31af7Sopenharmony_ci			void main()
1983e5c31af7Sopenharmony_ci			{
1984e5c31af7Sopenharmony_ci				out0 = func(func(func(func(vec4(in0)).xyz).xy).x);
1985e5c31af7Sopenharmony_ci				${OUTPUT}
1986e5c31af7Sopenharmony_ci			}
1987e5c31af7Sopenharmony_ci		""
1988e5c31af7Sopenharmony_ci	end
1989e5c31af7Sopenharmony_ci
1990e5c31af7Sopenharmony_ci	case user_func_arg_int_types
1991e5c31af7Sopenharmony_ci		version 300 es
1992e5c31af7Sopenharmony_ci		values
1993e5c31af7Sopenharmony_ci		{
1994e5c31af7Sopenharmony_ci			input int in0		= [ 0 | 1 | -2 | 6 ];
1995e5c31af7Sopenharmony_ci			output int out0		= [ 0 | -1 | 2 | -6 ];
1996e5c31af7Sopenharmony_ci		}
1997e5c31af7Sopenharmony_ci
1998e5c31af7Sopenharmony_ci		both ""
1999e5c31af7Sopenharmony_ci			#version 300 es
2000e5c31af7Sopenharmony_ci			precision mediump float;
2001e5c31af7Sopenharmony_ci			precision mediump int;
2002e5c31af7Sopenharmony_ci			${DECLARATIONS}
2003e5c31af7Sopenharmony_ci
2004e5c31af7Sopenharmony_ci			int func (int a) { return -a; }
2005e5c31af7Sopenharmony_ci			ivec2 func (ivec2 a) { return a.yx; }
2006e5c31af7Sopenharmony_ci			ivec3 func (ivec3 a) { return a.xxx; }
2007e5c31af7Sopenharmony_ci			ivec4 func (ivec4 a) { return a.wwww; }
2008e5c31af7Sopenharmony_ci
2009e5c31af7Sopenharmony_ci			void main()
2010e5c31af7Sopenharmony_ci			{
2011e5c31af7Sopenharmony_ci				${SETUP}
2012e5c31af7Sopenharmony_ci				out0 = func(func(func(func(ivec4(in0)).xyz).xy).x);
2013e5c31af7Sopenharmony_ci				${OUTPUT}
2014e5c31af7Sopenharmony_ci			}
2015e5c31af7Sopenharmony_ci		""
2016e5c31af7Sopenharmony_ci	end
2017e5c31af7Sopenharmony_ci
2018e5c31af7Sopenharmony_ci	case user_func_arg_bool_types
2019e5c31af7Sopenharmony_ci		version 300 es
2020e5c31af7Sopenharmony_ci		values
2021e5c31af7Sopenharmony_ci		{
2022e5c31af7Sopenharmony_ci			input bool in0		= [ true | false ];
2023e5c31af7Sopenharmony_ci			output bool out0	= [ false | true ];
2024e5c31af7Sopenharmony_ci		}
2025e5c31af7Sopenharmony_ci
2026e5c31af7Sopenharmony_ci		both ""
2027e5c31af7Sopenharmony_ci			#version 300 es
2028e5c31af7Sopenharmony_ci			precision mediump float;
2029e5c31af7Sopenharmony_ci			${DECLARATIONS}
2030e5c31af7Sopenharmony_ci
2031e5c31af7Sopenharmony_ci			bool func (bool a) { return !a; }
2032e5c31af7Sopenharmony_ci			bvec2 func (bvec2 a) { return a.yx; }
2033e5c31af7Sopenharmony_ci			bvec3 func (bvec3 a) { return a.xxx; }
2034e5c31af7Sopenharmony_ci			bvec4 func (bvec4 a) { return a.wwww; }
2035e5c31af7Sopenharmony_ci
2036e5c31af7Sopenharmony_ci			void main()
2037e5c31af7Sopenharmony_ci			{
2038e5c31af7Sopenharmony_ci				${SETUP}
2039e5c31af7Sopenharmony_ci				out0 = func(func(func(func(bvec4(in0)).xyz).xy).x);
2040e5c31af7Sopenharmony_ci				${OUTPUT}
2041e5c31af7Sopenharmony_ci			}
2042e5c31af7Sopenharmony_ci		""
2043e5c31af7Sopenharmony_ci	end
2044e5c31af7Sopenharmony_ci
2045e5c31af7Sopenharmony_ci	case user_func_arg_basic_types
2046e5c31af7Sopenharmony_ci		version 300 es
2047e5c31af7Sopenharmony_ci		values
2048e5c31af7Sopenharmony_ci		{
2049e5c31af7Sopenharmony_ci			input float in0		= [ 0.0 | 1.0 | -2.0 | 2.5 ];
2050e5c31af7Sopenharmony_ci			output float out0	= [ 0.0 | -1.0 | 2.0 | -2.5 ];
2051e5c31af7Sopenharmony_ci		}
2052e5c31af7Sopenharmony_ci
2053e5c31af7Sopenharmony_ci		both ""
2054e5c31af7Sopenharmony_ci			#version 300 es
2055e5c31af7Sopenharmony_ci			precision mediump float;
2056e5c31af7Sopenharmony_ci			precision mediump int;
2057e5c31af7Sopenharmony_ci			${DECLARATIONS}
2058e5c31af7Sopenharmony_ci
2059e5c31af7Sopenharmony_ci			float func (float a) { return -a; }
2060e5c31af7Sopenharmony_ci			vec2 func (vec2 a) { return a.yx; }
2061e5c31af7Sopenharmony_ci			vec3 func (vec3 a) { return a.xxx; }
2062e5c31af7Sopenharmony_ci			vec4 func (vec4 a) { return a.wwww; }
2063e5c31af7Sopenharmony_ci			int func (int a) { return -a; }
2064e5c31af7Sopenharmony_ci			ivec2 func (ivec2 a) { return a.yx; }
2065e5c31af7Sopenharmony_ci			ivec3 func (ivec3 a) { return a.xxx; }
2066e5c31af7Sopenharmony_ci			ivec4 func (ivec4 a) { return a.wwww; }
2067e5c31af7Sopenharmony_ci			bool func (bool a) { return !a; }
2068e5c31af7Sopenharmony_ci			bvec2 func (bvec2 a) { return a.yx; }
2069e5c31af7Sopenharmony_ci			bvec3 func (bvec3 a) { return a.xxx; }
2070e5c31af7Sopenharmony_ci			bvec4 func (bvec4 a) { return a.wwww; }
2071e5c31af7Sopenharmony_ci
2072e5c31af7Sopenharmony_ci			void main()
2073e5c31af7Sopenharmony_ci			{
2074e5c31af7Sopenharmony_ci				${SETUP}
2075e5c31af7Sopenharmony_ci				if (func(func(bvec4(false)).x))
2076e5c31af7Sopenharmony_ci					out0 = func(in0) * float(func(-1));
2077e5c31af7Sopenharmony_ci				else
2078e5c31af7Sopenharmony_ci					out0 = float(func(func(ivec4(func(func(func(vec4(0.5)).xyz).xy).xxxx)).xy).x);
2079e5c31af7Sopenharmony_ci				${OUTPUT}
2080e5c31af7Sopenharmony_ci			}
2081e5c31af7Sopenharmony_ci		""
2082e5c31af7Sopenharmony_ci	end
2083e5c31af7Sopenharmony_ci
2084e5c31af7Sopenharmony_ci	case user_func_arg_complex_types
2085e5c31af7Sopenharmony_ci		version 300 es
2086e5c31af7Sopenharmony_ci		values
2087e5c31af7Sopenharmony_ci		{
2088e5c31af7Sopenharmony_ci			input float in0		= [ 0.0 | 1.0 | -2.0 | 2.5 ];
2089e5c31af7Sopenharmony_ci			output float out0	= [ 0.0 | -1.0 | 2.0 | -2.5 ];
2090e5c31af7Sopenharmony_ci		}
2091e5c31af7Sopenharmony_ci
2092e5c31af7Sopenharmony_ci		both ""
2093e5c31af7Sopenharmony_ci			#version 300 es
2094e5c31af7Sopenharmony_ci			precision mediump float;
2095e5c31af7Sopenharmony_ci			precision mediump int;
2096e5c31af7Sopenharmony_ci			${DECLARATIONS}
2097e5c31af7Sopenharmony_ci
2098e5c31af7Sopenharmony_ci			struct Pos { float a, b, c; };
2099e5c31af7Sopenharmony_ci			struct Line { Pos start, end; };
2100e5c31af7Sopenharmony_ci
2101e5c31af7Sopenharmony_ci			float func (float a) { return -a; }
2102e5c31af7Sopenharmony_ci			float func (float a[4]) { return a[0] + a[3]; }
2103e5c31af7Sopenharmony_ci			vec2 func (vec2 a) { return a.yx; }
2104e5c31af7Sopenharmony_ci			vec3 func (vec3 a) { return a.xxx; }
2105e5c31af7Sopenharmony_ci			vec4 func (vec4 a) { return a.wwww; }
2106e5c31af7Sopenharmony_ci			vec4 func (vec4 a[4]) { return a[1] + a[2]; }
2107e5c31af7Sopenharmony_ci			int func (int a) { return -a; }
2108e5c31af7Sopenharmony_ci			ivec2 func (ivec2 a) { return a.yx; }
2109e5c31af7Sopenharmony_ci			ivec3 func (ivec3 a) { return a.xxx; }
2110e5c31af7Sopenharmony_ci			ivec4 func (ivec4 a) { return a.wwww; }
2111e5c31af7Sopenharmony_ci			bool func (bool a) { return !a; }
2112e5c31af7Sopenharmony_ci			bvec2 func (bvec2 a) { return a.yx; }
2113e5c31af7Sopenharmony_ci			bvec3 func (bvec3 a) { return a.xxx; }
2114e5c31af7Sopenharmony_ci			bvec4 func (bvec4 a) { return a.wwww; }
2115e5c31af7Sopenharmony_ci			Pos func (Pos a) { return a; }
2116e5c31af7Sopenharmony_ci			Line func (Line a) { return Line(a.end, a.start); }
2117e5c31af7Sopenharmony_ci
2118e5c31af7Sopenharmony_ci			void main()
2119e5c31af7Sopenharmony_ci			{
2120e5c31af7Sopenharmony_ci				${SETUP}
2121e5c31af7Sopenharmony_ci				float arr[4];
2122e5c31af7Sopenharmony_ci				vec4 arr2[4];
2123e5c31af7Sopenharmony_ci				out0 = func(arr) + func(arr2).x;
2124e5c31af7Sopenharmony_ci				if (func(func(bvec4(false)).x))
2125e5c31af7Sopenharmony_ci					out0 = func(in0) * float(func(-1));
2126e5c31af7Sopenharmony_ci				else
2127e5c31af7Sopenharmony_ci					out0 = float(func(func(ivec4(func(func(func(vec4(0.5)).xyz).xy).xxxx)).xy).x);
2128e5c31af7Sopenharmony_ci				${OUTPUT}
2129e5c31af7Sopenharmony_ci			}
2130e5c31af7Sopenharmony_ci		""
2131e5c31af7Sopenharmony_ci	end
2132e5c31af7Sopenharmony_ci
2133e5c31af7Sopenharmony_ci	case user_func_arguments
2134e5c31af7Sopenharmony_ci		version 300 es
2135e5c31af7Sopenharmony_ci		values
2136e5c31af7Sopenharmony_ci		{
2137e5c31af7Sopenharmony_ci			input float in0		= [ 0.0 | 1.0 | -2.0 | 2.5 ];
2138e5c31af7Sopenharmony_ci			output float out0	= [ 0.0 | -1.0 | 2.0 | -2.5 ];
2139e5c31af7Sopenharmony_ci		}
2140e5c31af7Sopenharmony_ci
2141e5c31af7Sopenharmony_ci		both ""
2142e5c31af7Sopenharmony_ci			#version 300 es
2143e5c31af7Sopenharmony_ci			precision mediump float;
2144e5c31af7Sopenharmony_ci			${DECLARATIONS}
2145e5c31af7Sopenharmony_ci
2146e5c31af7Sopenharmony_ci			float func (float a)
2147e5c31af7Sopenharmony_ci			{
2148e5c31af7Sopenharmony_ci				return -a;
2149e5c31af7Sopenharmony_ci			}
2150e5c31af7Sopenharmony_ci
2151e5c31af7Sopenharmony_ci			float func (float a, float b)
2152e5c31af7Sopenharmony_ci			{
2153e5c31af7Sopenharmony_ci				return a * b;
2154e5c31af7Sopenharmony_ci			}
2155e5c31af7Sopenharmony_ci
2156e5c31af7Sopenharmony_ci			void main()
2157e5c31af7Sopenharmony_ci			{
2158e5c31af7Sopenharmony_ci				out0 = func(in0) * func(-0.5, -2.0);
2159e5c31af7Sopenharmony_ci				${OUTPUT}
2160e5c31af7Sopenharmony_ci			}
2161e5c31af7Sopenharmony_ci		""
2162e5c31af7Sopenharmony_ci	end
2163e5c31af7Sopenharmony_ci
2164e5c31af7Sopenharmony_ci	case array_size
2165e5c31af7Sopenharmony_ci		version 300 es
2166e5c31af7Sopenharmony_ci		values
2167e5c31af7Sopenharmony_ci		{
2168e5c31af7Sopenharmony_ci			output float out0	= [ 1.0 ];
2169e5c31af7Sopenharmony_ci		}
2170e5c31af7Sopenharmony_ci
2171e5c31af7Sopenharmony_ci		both ""
2172e5c31af7Sopenharmony_ci			#version 300 es
2173e5c31af7Sopenharmony_ci			precision mediump float;
2174e5c31af7Sopenharmony_ci			${DECLARATIONS}
2175e5c31af7Sopenharmony_ci
2176e5c31af7Sopenharmony_ci			float func (float f[3])
2177e5c31af7Sopenharmony_ci			{
2178e5c31af7Sopenharmony_ci				return f[0];
2179e5c31af7Sopenharmony_ci			}
2180e5c31af7Sopenharmony_ci
2181e5c31af7Sopenharmony_ci			float func (float f[4])
2182e5c31af7Sopenharmony_ci			{
2183e5c31af7Sopenharmony_ci				return f[1];
2184e5c31af7Sopenharmony_ci			}
2185e5c31af7Sopenharmony_ci
2186e5c31af7Sopenharmony_ci			void main ()
2187e5c31af7Sopenharmony_ci			{
2188e5c31af7Sopenharmony_ci				${SETUP}
2189e5c31af7Sopenharmony_ci				float[4] x = float[4] (-1.0, 1.0, 0.0, 0.0);
2190e5c31af7Sopenharmony_ci				out0 = func(x);
2191e5c31af7Sopenharmony_ci				${OUTPUT}
2192e5c31af7Sopenharmony_ci			}
2193e5c31af7Sopenharmony_ci		""
2194e5c31af7Sopenharmony_ci	end
2195e5c31af7Sopenharmony_ci
2196e5c31af7Sopenharmony_ciend # overloading
2197e5c31af7Sopenharmony_ci
2198e5c31af7Sopenharmony_cigroup array_arguments "Arrays as Arguments"
2199e5c31af7Sopenharmony_ci
2200e5c31af7Sopenharmony_ci	case local_in_float
2201e5c31af7Sopenharmony_ci		version 300 es
2202e5c31af7Sopenharmony_ci		values
2203e5c31af7Sopenharmony_ci		{
2204e5c31af7Sopenharmony_ci			input vec4 in0		= [ vec4(0.0, 1.0, 2.0, -4.0) | vec4(-7.5, 12.125, -0.25, 16.0) ];
2205e5c31af7Sopenharmony_ci			output vec4 out0	= [ vec4(0.0, -1.0, -2.0, 4.0) | vec4(7.5, -12.125, 0.25, -16.0) ];
2206e5c31af7Sopenharmony_ci		}
2207e5c31af7Sopenharmony_ci
2208e5c31af7Sopenharmony_ci		both ""
2209e5c31af7Sopenharmony_ci			#version 300 es
2210e5c31af7Sopenharmony_ci			precision mediump float;
2211e5c31af7Sopenharmony_ci			${DECLARATIONS}
2212e5c31af7Sopenharmony_ci
2213e5c31af7Sopenharmony_ci			float func (in float a[4])
2214e5c31af7Sopenharmony_ci			{
2215e5c31af7Sopenharmony_ci				a[0] = -1.0;
2216e5c31af7Sopenharmony_ci				a[2] = -4.0;
2217e5c31af7Sopenharmony_ci				a[3] = -3.0 * a[1];
2218e5c31af7Sopenharmony_ci				return a[0];
2219e5c31af7Sopenharmony_ci			}
2220e5c31af7Sopenharmony_ci
2221e5c31af7Sopenharmony_ci			void main()
2222e5c31af7Sopenharmony_ci			{
2223e5c31af7Sopenharmony_ci				float arr[4];
2224e5c31af7Sopenharmony_ci				arr[0] = in0.x;
2225e5c31af7Sopenharmony_ci				arr[1] = in0.y;
2226e5c31af7Sopenharmony_ci				arr[2] = in0.z;
2227e5c31af7Sopenharmony_ci				arr[3] = in0.w;
2228e5c31af7Sopenharmony_ci				float f = func(arr);
2229e5c31af7Sopenharmony_ci				out0 = f * vec4(arr[0], arr[1], arr[2], arr[3]);
2230e5c31af7Sopenharmony_ci				${OUTPUT}
2231e5c31af7Sopenharmony_ci			}
2232e5c31af7Sopenharmony_ci		""
2233e5c31af7Sopenharmony_ci	end
2234e5c31af7Sopenharmony_ci
2235e5c31af7Sopenharmony_ci	case global_in_float
2236e5c31af7Sopenharmony_ci		version 300 es
2237e5c31af7Sopenharmony_ci		values
2238e5c31af7Sopenharmony_ci		{
2239e5c31af7Sopenharmony_ci			input vec4 in0		= [ vec4(0.0, 1.0, 2.0, -4.0) | vec4(-7.5, 12.125, -0.25, 16.0) ];
2240e5c31af7Sopenharmony_ci			output vec4 out0	= [ vec4(0.0, -1.0, -2.0, 4.0) | vec4(7.5, -12.125, 0.25, -16.0) ];
2241e5c31af7Sopenharmony_ci		}
2242e5c31af7Sopenharmony_ci
2243e5c31af7Sopenharmony_ci		both ""
2244e5c31af7Sopenharmony_ci			#version 300 es
2245e5c31af7Sopenharmony_ci			precision mediump float;
2246e5c31af7Sopenharmony_ci			${DECLARATIONS}
2247e5c31af7Sopenharmony_ci
2248e5c31af7Sopenharmony_ci			float func (in float a[4])
2249e5c31af7Sopenharmony_ci			{
2250e5c31af7Sopenharmony_ci				a[0] = -1.0;
2251e5c31af7Sopenharmony_ci				a[2] = -4.0;
2252e5c31af7Sopenharmony_ci				a[3] = -3.0 * a[1];
2253e5c31af7Sopenharmony_ci				return a[0];
2254e5c31af7Sopenharmony_ci			}
2255e5c31af7Sopenharmony_ci
2256e5c31af7Sopenharmony_ci			float arr[4];
2257e5c31af7Sopenharmony_ci
2258e5c31af7Sopenharmony_ci			void main()
2259e5c31af7Sopenharmony_ci			{
2260e5c31af7Sopenharmony_ci				arr[0] = in0.x;
2261e5c31af7Sopenharmony_ci				arr[1] = in0.y;
2262e5c31af7Sopenharmony_ci				arr[2] = in0.z;
2263e5c31af7Sopenharmony_ci				arr[3] = in0.w;
2264e5c31af7Sopenharmony_ci				float f = func(arr);
2265e5c31af7Sopenharmony_ci				out0 = f * vec4(arr[0], arr[1], arr[2], arr[3]);
2266e5c31af7Sopenharmony_ci				${OUTPUT}
2267e5c31af7Sopenharmony_ci			}
2268e5c31af7Sopenharmony_ci		""
2269e5c31af7Sopenharmony_ci	end
2270e5c31af7Sopenharmony_ci
2271e5c31af7Sopenharmony_ci	case local_in_int
2272e5c31af7Sopenharmony_ci		version 300 es
2273e5c31af7Sopenharmony_ci		values
2274e5c31af7Sopenharmony_ci		{
2275e5c31af7Sopenharmony_ci			input ivec4 in0		= [ ivec4(0, 1, 2, -4) | ivec4(-7, -11, 13, 19) ];
2276e5c31af7Sopenharmony_ci			output ivec4 out0	= [ ivec4(0, -1, -2, 4) | ivec4(7, 11, -13, -19) ];
2277e5c31af7Sopenharmony_ci		}
2278e5c31af7Sopenharmony_ci
2279e5c31af7Sopenharmony_ci		both ""
2280e5c31af7Sopenharmony_ci			#version 300 es
2281e5c31af7Sopenharmony_ci			precision mediump float;
2282e5c31af7Sopenharmony_ci			precision mediump int;
2283e5c31af7Sopenharmony_ci			${DECLARATIONS}
2284e5c31af7Sopenharmony_ci
2285e5c31af7Sopenharmony_ci			int func (in int a[4])
2286e5c31af7Sopenharmony_ci			{
2287e5c31af7Sopenharmony_ci				a[0] = -1;
2288e5c31af7Sopenharmony_ci				a[2] = -4;
2289e5c31af7Sopenharmony_ci				a[3] = -3 * a[1];
2290e5c31af7Sopenharmony_ci				return a[0];
2291e5c31af7Sopenharmony_ci			}
2292e5c31af7Sopenharmony_ci
2293e5c31af7Sopenharmony_ci			void main()
2294e5c31af7Sopenharmony_ci			{
2295e5c31af7Sopenharmony_ci				${SETUP}
2296e5c31af7Sopenharmony_ci				int arr[4];
2297e5c31af7Sopenharmony_ci				arr[0] = in0.x;
2298e5c31af7Sopenharmony_ci				arr[1] = in0.y;
2299e5c31af7Sopenharmony_ci				arr[2] = in0.z;
2300e5c31af7Sopenharmony_ci				arr[3] = in0.w;
2301e5c31af7Sopenharmony_ci				int f = func(arr);
2302e5c31af7Sopenharmony_ci				out0 = f * ivec4(arr[0], arr[1], arr[2], arr[3]);
2303e5c31af7Sopenharmony_ci				${OUTPUT}
2304e5c31af7Sopenharmony_ci			}
2305e5c31af7Sopenharmony_ci		""
2306e5c31af7Sopenharmony_ci	end
2307e5c31af7Sopenharmony_ci
2308e5c31af7Sopenharmony_ci	case global_in_int
2309e5c31af7Sopenharmony_ci		version 300 es
2310e5c31af7Sopenharmony_ci		values
2311e5c31af7Sopenharmony_ci		{
2312e5c31af7Sopenharmony_ci			input ivec4 in0		= [ ivec4(0, 1, 2, 4) | ivec4(-7, -11, 13, 19) ];
2313e5c31af7Sopenharmony_ci			output ivec4 out0	= [ ivec4(0, -1, -2, -4) | ivec4(7, 11, -13, -19) ];
2314e5c31af7Sopenharmony_ci		}
2315e5c31af7Sopenharmony_ci
2316e5c31af7Sopenharmony_ci		both ""
2317e5c31af7Sopenharmony_ci			#version 300 es
2318e5c31af7Sopenharmony_ci			precision mediump float;
2319e5c31af7Sopenharmony_ci			precision mediump int;
2320e5c31af7Sopenharmony_ci			${DECLARATIONS}
2321e5c31af7Sopenharmony_ci
2322e5c31af7Sopenharmony_ci			int func (in int a[4])
2323e5c31af7Sopenharmony_ci			{
2324e5c31af7Sopenharmony_ci				a[0] = -1;
2325e5c31af7Sopenharmony_ci				a[2] = -4;
2326e5c31af7Sopenharmony_ci				a[3] = -3 * a[1];
2327e5c31af7Sopenharmony_ci				return a[0];
2328e5c31af7Sopenharmony_ci			}
2329e5c31af7Sopenharmony_ci
2330e5c31af7Sopenharmony_ci			int arr[4];
2331e5c31af7Sopenharmony_ci
2332e5c31af7Sopenharmony_ci			void main()
2333e5c31af7Sopenharmony_ci			{
2334e5c31af7Sopenharmony_ci				${SETUP}
2335e5c31af7Sopenharmony_ci				arr[0] = in0.x;
2336e5c31af7Sopenharmony_ci				arr[1] = in0.y;
2337e5c31af7Sopenharmony_ci				arr[2] = in0.z;
2338e5c31af7Sopenharmony_ci				arr[3] = in0.w;
2339e5c31af7Sopenharmony_ci				int f = func(arr);
2340e5c31af7Sopenharmony_ci				out0 = f * ivec4(arr[0], arr[1], arr[2], arr[3]);
2341e5c31af7Sopenharmony_ci				${OUTPUT}
2342e5c31af7Sopenharmony_ci			}
2343e5c31af7Sopenharmony_ci
2344e5c31af7Sopenharmony_ci		""
2345e5c31af7Sopenharmony_ci	end
2346e5c31af7Sopenharmony_ci
2347e5c31af7Sopenharmony_ci	case local_in_bool
2348e5c31af7Sopenharmony_ci		version 300 es
2349e5c31af7Sopenharmony_ci		values
2350e5c31af7Sopenharmony_ci		{
2351e5c31af7Sopenharmony_ci			input bvec4 in0		= [ bvec4(true, true, false, true) | bvec4(false, false, false, false) ];
2352e5c31af7Sopenharmony_ci			output bvec4 out0	= [ bvec4(false, false, true, false) | bvec4(true, true, true, true) ];
2353e5c31af7Sopenharmony_ci		}
2354e5c31af7Sopenharmony_ci
2355e5c31af7Sopenharmony_ci		both ""
2356e5c31af7Sopenharmony_ci			#version 300 es
2357e5c31af7Sopenharmony_ci			precision mediump float;
2358e5c31af7Sopenharmony_ci			${DECLARATIONS}
2359e5c31af7Sopenharmony_ci
2360e5c31af7Sopenharmony_ci			bool func (in bool a[4])
2361e5c31af7Sopenharmony_ci			{
2362e5c31af7Sopenharmony_ci				a[0] = false;
2363e5c31af7Sopenharmony_ci				a[2] = true;
2364e5c31af7Sopenharmony_ci				a[3] = !a[1];
2365e5c31af7Sopenharmony_ci				return a[0];
2366e5c31af7Sopenharmony_ci			}
2367e5c31af7Sopenharmony_ci
2368e5c31af7Sopenharmony_ci			void main()
2369e5c31af7Sopenharmony_ci			{
2370e5c31af7Sopenharmony_ci				${SETUP}
2371e5c31af7Sopenharmony_ci				bool arr[4];
2372e5c31af7Sopenharmony_ci				arr[0] = !in0.x;
2373e5c31af7Sopenharmony_ci				arr[1] = !in0.y;
2374e5c31af7Sopenharmony_ci				arr[2] = !in0.z;
2375e5c31af7Sopenharmony_ci				arr[3] = !in0.w;
2376e5c31af7Sopenharmony_ci				func(arr);
2377e5c31af7Sopenharmony_ci				out0 = bvec4(arr[0], arr[1], arr[2], arr[3]);
2378e5c31af7Sopenharmony_ci				${OUTPUT}
2379e5c31af7Sopenharmony_ci			}
2380e5c31af7Sopenharmony_ci		""
2381e5c31af7Sopenharmony_ci	end
2382e5c31af7Sopenharmony_ci
2383e5c31af7Sopenharmony_ci	case global_in_bool
2384e5c31af7Sopenharmony_ci		version 300 es
2385e5c31af7Sopenharmony_ci		values
2386e5c31af7Sopenharmony_ci		{
2387e5c31af7Sopenharmony_ci			input bvec4 in0		= [ bvec4(true, true, false, true) | bvec4(false, false, false, false) ];
2388e5c31af7Sopenharmony_ci			output bvec4 out0	= [ bvec4(false, false, true, false) | bvec4(true, true, true, true) ];
2389e5c31af7Sopenharmony_ci		}
2390e5c31af7Sopenharmony_ci
2391e5c31af7Sopenharmony_ci		both ""
2392e5c31af7Sopenharmony_ci			#version 300 es
2393e5c31af7Sopenharmony_ci			precision mediump float;
2394e5c31af7Sopenharmony_ci			${DECLARATIONS}
2395e5c31af7Sopenharmony_ci
2396e5c31af7Sopenharmony_ci			bool func (in bool a[4])
2397e5c31af7Sopenharmony_ci			{
2398e5c31af7Sopenharmony_ci				a[0] = false;
2399e5c31af7Sopenharmony_ci				a[2] = true;
2400e5c31af7Sopenharmony_ci				a[3] = !a[1];
2401e5c31af7Sopenharmony_ci				return a[0];
2402e5c31af7Sopenharmony_ci			}
2403e5c31af7Sopenharmony_ci
2404e5c31af7Sopenharmony_ci			bool arr[4];
2405e5c31af7Sopenharmony_ci
2406e5c31af7Sopenharmony_ci			void main()
2407e5c31af7Sopenharmony_ci			{
2408e5c31af7Sopenharmony_ci				${SETUP}
2409e5c31af7Sopenharmony_ci				arr[0] = !in0.x;
2410e5c31af7Sopenharmony_ci				arr[1] = !in0.y;
2411e5c31af7Sopenharmony_ci				arr[2] = !in0.z;
2412e5c31af7Sopenharmony_ci				arr[3] = !in0.w;
2413e5c31af7Sopenharmony_ci				func(arr);
2414e5c31af7Sopenharmony_ci				out0 = bvec4(arr[0], arr[1], arr[2], arr[3]);
2415e5c31af7Sopenharmony_ci				${OUTPUT}
2416e5c31af7Sopenharmony_ci			}
2417e5c31af7Sopenharmony_ci		""
2418e5c31af7Sopenharmony_ci	end
2419e5c31af7Sopenharmony_ci
2420e5c31af7Sopenharmony_ci	case test_helpers
2421e5c31af7Sopenharmony_ci		version 300 es
2422e5c31af7Sopenharmony_ci		desc "Check that helper functions are supported properly."
2423e5c31af7Sopenharmony_ci		values
2424e5c31af7Sopenharmony_ci		{
2425e5c31af7Sopenharmony_ci			input vec4 in0		= [ vec4(0.0, 1.0, 2.0, -4.0) | vec4(-7.5, 12.125, -0.25, 16.0) ];
2426e5c31af7Sopenharmony_ci			output float out0	= [ 1.0 | 1.0 ];
2427e5c31af7Sopenharmony_ci		}
2428e5c31af7Sopenharmony_ci
2429e5c31af7Sopenharmony_ci		both ""
2430e5c31af7Sopenharmony_ci			#version 300 es
2431e5c31af7Sopenharmony_ci			precision mediump float;
2432e5c31af7Sopenharmony_ci			${DECLARATIONS}
2433e5c31af7Sopenharmony_ci
2434e5c31af7Sopenharmony_ci			vec4 get (in float arr[4]);
2435e5c31af7Sopenharmony_ci			void set (out float arr[4], vec4 val);
2436e5c31af7Sopenharmony_ci			void negate (inout float arr[4]);
2437e5c31af7Sopenharmony_ci			bool test (in float arr[4], vec4 ref);
2438e5c31af7Sopenharmony_ci			bool isEqual (in float a[4], in float b[4]);
2439e5c31af7Sopenharmony_ci
2440e5c31af7Sopenharmony_ci			void main()
2441e5c31af7Sopenharmony_ci			{
2442e5c31af7Sopenharmony_ci				float arr[4];
2443e5c31af7Sopenharmony_ci				set(arr, in0);
2444e5c31af7Sopenharmony_ci				negate(arr);
2445e5c31af7Sopenharmony_ci				out0 = float(test(arr, -in0));
2446e5c31af7Sopenharmony_ci				${OUTPUT}
2447e5c31af7Sopenharmony_ci			}
2448e5c31af7Sopenharmony_ci
2449e5c31af7Sopenharmony_ci			float absDiff (vec4 a, vec4 b) { vec4 d = abs(a - b); return max(max(d.x, d.y), max(d.z, d.w)); }
2450e5c31af7Sopenharmony_ci			vec4 get (in float arr[4]) { return vec4(arr[0], arr[1], arr[2], arr[3]); }
2451e5c31af7Sopenharmony_ci			void set (out float arr[4], vec4 val) { arr[0] = val.x; arr[1] = val.y; arr[2] = val.z; arr[3] = val.w; }
2452e5c31af7Sopenharmony_ci			void negate (inout float arr[4]) { set(arr, -get(arr)); }
2453e5c31af7Sopenharmony_ci			bool test (in float arr[4], vec4 ref) { return (absDiff(get(arr), ref) < 0.1); }
2454e5c31af7Sopenharmony_ci			bool isEqual (in float a[4], in float b[4]) { return (absDiff(get(a), get(b)) < 0.1); }
2455e5c31af7Sopenharmony_ci		""
2456e5c31af7Sopenharmony_ci	end
2457e5c31af7Sopenharmony_ci
2458e5c31af7Sopenharmony_ci	case copy_local_in_on_call
2459e5c31af7Sopenharmony_ci		version 300 es
2460e5c31af7Sopenharmony_ci		desc "Check that local 'in' arguments are copied on call and don't alias."
2461e5c31af7Sopenharmony_ci		values
2462e5c31af7Sopenharmony_ci		{
2463e5c31af7Sopenharmony_ci			input vec4 in0		= [ vec4(0.0, 1.0, 2.0, -4.0) | vec4(-7.5, 12.125, -0.25, 16.0) ];
2464e5c31af7Sopenharmony_ci			output vec4 out0	= [ vec4(0.0, -1.0, -2.0, 4.0) | vec4(7.5, -12.125, 0.25, -16.0) ];
2465e5c31af7Sopenharmony_ci		}
2466e5c31af7Sopenharmony_ci
2467e5c31af7Sopenharmony_ci		both ""
2468e5c31af7Sopenharmony_ci			#version 300 es
2469e5c31af7Sopenharmony_ci			precision mediump float;
2470e5c31af7Sopenharmony_ci			${DECLARATIONS}
2471e5c31af7Sopenharmony_ci
2472e5c31af7Sopenharmony_ci			vec4 get (in float arr[4]);
2473e5c31af7Sopenharmony_ci			void set (out float arr[4], vec4 val);
2474e5c31af7Sopenharmony_ci			void negate (inout float arr[4]);
2475e5c31af7Sopenharmony_ci			bool test (in float arr[4], vec4 ref);
2476e5c31af7Sopenharmony_ci			bool isEqual (in float a[4], in float b[4]);
2477e5c31af7Sopenharmony_ci
2478e5c31af7Sopenharmony_ci			float func (in float a[4], in float b[4])
2479e5c31af7Sopenharmony_ci			{
2480e5c31af7Sopenharmony_ci				a[0] = 2.123;
2481e5c31af7Sopenharmony_ci				a[2] = -4.123;
2482e5c31af7Sopenharmony_ci				return isEqual(a, b) ? 1.0 : -1.0;
2483e5c31af7Sopenharmony_ci			}
2484e5c31af7Sopenharmony_ci
2485e5c31af7Sopenharmony_ci			void main()
2486e5c31af7Sopenharmony_ci			{
2487e5c31af7Sopenharmony_ci				float arr[4];
2488e5c31af7Sopenharmony_ci				set(arr, in0);
2489e5c31af7Sopenharmony_ci				out0 = in0 * func(arr, arr);
2490e5c31af7Sopenharmony_ci				${OUTPUT}
2491e5c31af7Sopenharmony_ci			}
2492e5c31af7Sopenharmony_ci
2493e5c31af7Sopenharmony_ci			float absDiff (vec4 a, vec4 b) { vec4 d = abs(a - b); return max(max(d.x, d.y), max(d.z, d.w)); }
2494e5c31af7Sopenharmony_ci			vec4 get (in float arr[4]) { return vec4(arr[0], arr[1], arr[2], arr[3]); }
2495e5c31af7Sopenharmony_ci			void set (out float arr[4], vec4 val) { arr[0] = val.x; arr[1] = val.y; arr[2] = val.z; arr[3] = val.w; }
2496e5c31af7Sopenharmony_ci			void negate (inout float arr[4]) { set(arr, -get(arr)); }
2497e5c31af7Sopenharmony_ci			bool test (in float arr[4], vec4 ref) { return (absDiff(get(arr), ref) < 0.1); }
2498e5c31af7Sopenharmony_ci			bool isEqual (in float a[4], in float b[4]) { return (absDiff(get(a), get(b)) < 0.1); }
2499e5c31af7Sopenharmony_ci		""
2500e5c31af7Sopenharmony_ci	end
2501e5c31af7Sopenharmony_ci
2502e5c31af7Sopenharmony_ci	case copy_global_in_on_call
2503e5c31af7Sopenharmony_ci		version 300 es
2504e5c31af7Sopenharmony_ci		desc "Check that global 'in' arguments are copied on call and don't alias."
2505e5c31af7Sopenharmony_ci		values
2506e5c31af7Sopenharmony_ci		{
2507e5c31af7Sopenharmony_ci			input vec4 in0		= [ vec4(0.0, 1.0, 2.0, -4.0) | vec4(-7.5, 12.125, -0.25, 16.0) ];
2508e5c31af7Sopenharmony_ci			output vec4 out0	= [ vec4(0.0, -1.0, -2.0, 4.0) | vec4(7.5, -12.125, 0.25, -16.0) ];
2509e5c31af7Sopenharmony_ci		}
2510e5c31af7Sopenharmony_ci
2511e5c31af7Sopenharmony_ci		both ""
2512e5c31af7Sopenharmony_ci			#version 300 es
2513e5c31af7Sopenharmony_ci			precision mediump float;
2514e5c31af7Sopenharmony_ci			${DECLARATIONS}
2515e5c31af7Sopenharmony_ci
2516e5c31af7Sopenharmony_ci			vec4 get (in float arr[4]);
2517e5c31af7Sopenharmony_ci			void set (out float arr[4], vec4 val);
2518e5c31af7Sopenharmony_ci			void negate (inout float arr[4]);
2519e5c31af7Sopenharmony_ci			bool test (in float arr[4], vec4 ref);
2520e5c31af7Sopenharmony_ci			bool isEqual (in float a[4], in float b[4]);
2521e5c31af7Sopenharmony_ci
2522e5c31af7Sopenharmony_ci			float func (in float a[4], in float b[4])
2523e5c31af7Sopenharmony_ci			{
2524e5c31af7Sopenharmony_ci				a[0] = 2.123;
2525e5c31af7Sopenharmony_ci				a[2] = -4.123;
2526e5c31af7Sopenharmony_ci				return isEqual(a, b) ? 1.0 : -1.0;
2527e5c31af7Sopenharmony_ci			}
2528e5c31af7Sopenharmony_ci
2529e5c31af7Sopenharmony_ci			float arr[4];
2530e5c31af7Sopenharmony_ci
2531e5c31af7Sopenharmony_ci			void main()
2532e5c31af7Sopenharmony_ci			{
2533e5c31af7Sopenharmony_ci				set(arr, in0);
2534e5c31af7Sopenharmony_ci				out0 = in0 * func(arr, arr);
2535e5c31af7Sopenharmony_ci				${OUTPUT}
2536e5c31af7Sopenharmony_ci			}
2537e5c31af7Sopenharmony_ci
2538e5c31af7Sopenharmony_ci			float absDiff (vec4 a, vec4 b) { vec4 d = abs(a - b); return max(max(d.x, d.y), max(d.z, d.w)); }
2539e5c31af7Sopenharmony_ci			vec4 get (in float arr[4]) { return vec4(arr[0], arr[1], arr[2], arr[3]); }
2540e5c31af7Sopenharmony_ci			void set (out float arr[4], vec4 val) { arr[0] = val.x; arr[1] = val.y; arr[2] = val.z; arr[3] = val.w; }
2541e5c31af7Sopenharmony_ci			void negate (inout float arr[4]) { set(arr, -get(arr)); }
2542e5c31af7Sopenharmony_ci			bool test (in float arr[4], vec4 ref) { return (absDiff(get(arr), ref) < 0.1); }
2543e5c31af7Sopenharmony_ci			bool isEqual (in float a[4], in float b[4]) { return (absDiff(get(a), get(b)) < 0.1); }
2544e5c31af7Sopenharmony_ci		""
2545e5c31af7Sopenharmony_ci	end
2546e5c31af7Sopenharmony_ci
2547e5c31af7Sopenharmony_ci	case copy_local_inout_on_call
2548e5c31af7Sopenharmony_ci		version 300 es
2549e5c31af7Sopenharmony_ci		desc "Check that local 'in' arguments are copied on call and don't alias."
2550e5c31af7Sopenharmony_ci		values
2551e5c31af7Sopenharmony_ci		{
2552e5c31af7Sopenharmony_ci			input vec4 in0		= [ vec4(0.0, 1.0, 2.0, -4.0) | vec4(-7.5, 12.125, -0.25, 16.0) ];
2553e5c31af7Sopenharmony_ci			output vec4 out0	= [ vec4(0.0, -1.0, -2.0, 4.0) | vec4(7.5, -12.125, 0.25, -16.0) ];
2554e5c31af7Sopenharmony_ci		}
2555e5c31af7Sopenharmony_ci
2556e5c31af7Sopenharmony_ci		both ""
2557e5c31af7Sopenharmony_ci			#version 300 es
2558e5c31af7Sopenharmony_ci			precision mediump float;
2559e5c31af7Sopenharmony_ci			${DECLARATIONS}
2560e5c31af7Sopenharmony_ci
2561e5c31af7Sopenharmony_ci			vec4 get (in float arr[4]);
2562e5c31af7Sopenharmony_ci			void set (out float arr[4], vec4 val);
2563e5c31af7Sopenharmony_ci			void negate (inout float arr[4]);
2564e5c31af7Sopenharmony_ci			bool test (in float arr[4], vec4 ref);
2565e5c31af7Sopenharmony_ci			bool isEqual (in float a[4], in float b[4]);
2566e5c31af7Sopenharmony_ci
2567e5c31af7Sopenharmony_ci			float func (inout float a[4], inout float b[4])
2568e5c31af7Sopenharmony_ci			{
2569e5c31af7Sopenharmony_ci				negate(a);
2570e5c31af7Sopenharmony_ci				return isEqual(a, b) ? 1.0 : -1.0;
2571e5c31af7Sopenharmony_ci			}
2572e5c31af7Sopenharmony_ci
2573e5c31af7Sopenharmony_ci			void main()
2574e5c31af7Sopenharmony_ci			{
2575e5c31af7Sopenharmony_ci				float arr[4];
2576e5c31af7Sopenharmony_ci				set(arr, in0);
2577e5c31af7Sopenharmony_ci				float m = func(arr, arr); // returns -1.0
2578e5c31af7Sopenharmony_ci				float n = float(test(arr, in0) || test(arr, -in0));
2579e5c31af7Sopenharmony_ci				out0 = in0 * m * n;
2580e5c31af7Sopenharmony_ci				${OUTPUT}
2581e5c31af7Sopenharmony_ci			}
2582e5c31af7Sopenharmony_ci
2583e5c31af7Sopenharmony_ci			float absDiff (vec4 a, vec4 b) { vec4 d = abs(a - b); return max(max(d.x, d.y), max(d.z, d.w)); }
2584e5c31af7Sopenharmony_ci			vec4 get (in float arr[4]) { return vec4(arr[0], arr[1], arr[2], arr[3]); }
2585e5c31af7Sopenharmony_ci			void set (out float arr[4], vec4 val) { arr[0] = val.x; arr[1] = val.y; arr[2] = val.z; arr[3] = val.w; }
2586e5c31af7Sopenharmony_ci			void negate (inout float arr[4]) { set(arr, -get(arr)); }
2587e5c31af7Sopenharmony_ci			bool test (in float arr[4], vec4 ref) { return (absDiff(get(arr), ref) < 0.1); }
2588e5c31af7Sopenharmony_ci			bool isEqual (in float a[4], in float b[4]) { return (absDiff(get(a), get(b)) < 0.1); }
2589e5c31af7Sopenharmony_ci		""
2590e5c31af7Sopenharmony_ci	end
2591e5c31af7Sopenharmony_ci
2592e5c31af7Sopenharmony_ci	case copy_global_inout_on_call
2593e5c31af7Sopenharmony_ci		version 300 es
2594e5c31af7Sopenharmony_ci		desc "Check that global 'in' arguments are copied on call and don't alias."
2595e5c31af7Sopenharmony_ci		values
2596e5c31af7Sopenharmony_ci		{
2597e5c31af7Sopenharmony_ci			input vec4 in0		= [ vec4(0.0, 1.0, 2.0, -4.0) | vec4(-7.5, 12.125, -0.25, 16.0) ];
2598e5c31af7Sopenharmony_ci			output vec4 out0	= [ vec4(0.0, -1.0, -2.0, 4.0) | vec4(7.5, -12.125, 0.25, -16.0) ];
2599e5c31af7Sopenharmony_ci		}
2600e5c31af7Sopenharmony_ci
2601e5c31af7Sopenharmony_ci		both ""
2602e5c31af7Sopenharmony_ci			#version 300 es
2603e5c31af7Sopenharmony_ci			precision mediump float;
2604e5c31af7Sopenharmony_ci			${DECLARATIONS}
2605e5c31af7Sopenharmony_ci
2606e5c31af7Sopenharmony_ci			vec4 get (in float arr[4]);
2607e5c31af7Sopenharmony_ci			void set (out float arr[4], vec4 val);
2608e5c31af7Sopenharmony_ci			void negate (inout float arr[4]);
2609e5c31af7Sopenharmony_ci			bool test (in float arr[4], vec4 ref);
2610e5c31af7Sopenharmony_ci			bool isEqual (in float a[4], in float b[4]);
2611e5c31af7Sopenharmony_ci
2612e5c31af7Sopenharmony_ci			float func (in float a[4], in float b[4])
2613e5c31af7Sopenharmony_ci			{
2614e5c31af7Sopenharmony_ci				negate(a);
2615e5c31af7Sopenharmony_ci				return isEqual(a, b) ? 1.0 : -1.0;
2616e5c31af7Sopenharmony_ci			}
2617e5c31af7Sopenharmony_ci
2618e5c31af7Sopenharmony_ci			float arr[4];
2619e5c31af7Sopenharmony_ci
2620e5c31af7Sopenharmony_ci			void main()
2621e5c31af7Sopenharmony_ci			{
2622e5c31af7Sopenharmony_ci				set(arr, in0);
2623e5c31af7Sopenharmony_ci				float m = func(arr, arr); // returns -1.0
2624e5c31af7Sopenharmony_ci				float n = float(test(arr, in0) || test(arr, -in0));
2625e5c31af7Sopenharmony_ci				out0 = in0 * m * n;
2626e5c31af7Sopenharmony_ci				${OUTPUT}
2627e5c31af7Sopenharmony_ci			}
2628e5c31af7Sopenharmony_ci
2629e5c31af7Sopenharmony_ci			float absDiff (vec4 a, vec4 b) { vec4 d = abs(a - b); return max(max(d.x, d.y), max(d.z, d.w)); }
2630e5c31af7Sopenharmony_ci			vec4 get (in float arr[4]) { return vec4(arr[0], arr[1], arr[2], arr[3]); }
2631e5c31af7Sopenharmony_ci			void set (out float arr[4], vec4 val) { arr[0] = val.x; arr[1] = val.y; arr[2] = val.z; arr[3] = val.w; }
2632e5c31af7Sopenharmony_ci			void negate (inout float arr[4]) { set(arr, -get(arr)); }
2633e5c31af7Sopenharmony_ci			bool test (in float arr[4], vec4 ref) { return (absDiff(get(arr), ref) < 0.1); }
2634e5c31af7Sopenharmony_ci			bool isEqual (in float a[4], in float b[4]) { return (absDiff(get(a), get(b)) < 0.1); }
2635e5c31af7Sopenharmony_ci		""
2636e5c31af7Sopenharmony_ci	end
2637e5c31af7Sopenharmony_ci
2638e5c31af7Sopenharmony_ci#			vec4 get (in float arr[4]);
2639e5c31af7Sopenharmony_ci#			void set (out float arr[4], vec4 val);
2640e5c31af7Sopenharmony_ci#			void negate (inout float arr[4]);
2641e5c31af7Sopenharmony_ci#			bool test (in float arr[4], vec4 ref);
2642e5c31af7Sopenharmony_ci#			bool isEqual (in float a[4], in float b[4]);
2643e5c31af7Sopenharmony_ci
2644e5c31af7Sopenharmony_ci#			float absDiff (vec4 a, vec4 b) { vec4 d = abs(a - b); return max(max(d.x, d.y), max(d.z, d.w)); }
2645e5c31af7Sopenharmony_ci#			vec4 get (in float arr[4]) { return vec4(arr[0], arr[1], arr[2], arr[3]); }
2646e5c31af7Sopenharmony_ci#			void set (out float arr[4], vec4 val) { arr[0] = val.x; arr[1] = val.y; arr[2] = val.z; arr[3] = val.w; }
2647e5c31af7Sopenharmony_ci#			void negate (inout float arr[4]) { set(arr, -get(arr)); }
2648e5c31af7Sopenharmony_ci#			bool test (in float arr[4], vec4 ref) { return (absDiff(get(arr), ref) < 0.1); }
2649e5c31af7Sopenharmony_ci#			bool isEqual (in float a[4], in float b[4]) { return (absDiff(get(a), get(b)) < 0.1); }
2650e5c31af7Sopenharmony_ci
2651e5c31af7Sopenharmony_ciend # array_arguments
2652e5c31af7Sopenharmony_ci
2653e5c31af7Sopenharmony_ci#group qualifiers "Function Parameter Qualifiers"
2654e5c31af7Sopenharmony_ci#
2655e5c31af7Sopenharmony_ci#end # qualifiers
2656e5c31af7Sopenharmony_ci
2657e5c31af7Sopenharmony_cigroup control_flow "Control Flow In Functions"
2658e5c31af7Sopenharmony_ci
2659e5c31af7Sopenharmony_ci	case simple_return
2660e5c31af7Sopenharmony_ci		version 300 es
2661e5c31af7Sopenharmony_ci		values
2662e5c31af7Sopenharmony_ci		{
2663e5c31af7Sopenharmony_ci			input float in0		= [ -0.5 | 1.5 ];
2664e5c31af7Sopenharmony_ci			output float out0	= [ 0.5 | -1.5 ];
2665e5c31af7Sopenharmony_ci		}
2666e5c31af7Sopenharmony_ci
2667e5c31af7Sopenharmony_ci		both ""
2668e5c31af7Sopenharmony_ci			#version 300 es
2669e5c31af7Sopenharmony_ci			precision mediump float;
2670e5c31af7Sopenharmony_ci			${DECLARATIONS}
2671e5c31af7Sopenharmony_ci
2672e5c31af7Sopenharmony_ci			float func (float a)
2673e5c31af7Sopenharmony_ci			{
2674e5c31af7Sopenharmony_ci				return -a;
2675e5c31af7Sopenharmony_ci				a = a * -1.0;
2676e5c31af7Sopenharmony_ci				return 1.0;
2677e5c31af7Sopenharmony_ci			}
2678e5c31af7Sopenharmony_ci
2679e5c31af7Sopenharmony_ci			void main()
2680e5c31af7Sopenharmony_ci			{
2681e5c31af7Sopenharmony_ci				${SETUP}
2682e5c31af7Sopenharmony_ci				out0 = func(in0);
2683e5c31af7Sopenharmony_ci				${OUTPUT}
2684e5c31af7Sopenharmony_ci			}
2685e5c31af7Sopenharmony_ci		""
2686e5c31af7Sopenharmony_ci	end
2687e5c31af7Sopenharmony_ci
2688e5c31af7Sopenharmony_ci	case return_in_if
2689e5c31af7Sopenharmony_ci		version 300 es
2690e5c31af7Sopenharmony_ci		values
2691e5c31af7Sopenharmony_ci		{
2692e5c31af7Sopenharmony_ci			input float in0		= [ -0.5 | 1.5 ];
2693e5c31af7Sopenharmony_ci			output float out0	= [ 0.5 | -1.5 ];
2694e5c31af7Sopenharmony_ci		}
2695e5c31af7Sopenharmony_ci
2696e5c31af7Sopenharmony_ci		both ""
2697e5c31af7Sopenharmony_ci			#version 300 es
2698e5c31af7Sopenharmony_ci			precision mediump float;
2699e5c31af7Sopenharmony_ci			${DECLARATIONS}
2700e5c31af7Sopenharmony_ci
2701e5c31af7Sopenharmony_ci			float func (float a)
2702e5c31af7Sopenharmony_ci			{
2703e5c31af7Sopenharmony_ci				if (a != 0.0)
2704e5c31af7Sopenharmony_ci					return -a;
2705e5c31af7Sopenharmony_ci				return 1.0;
2706e5c31af7Sopenharmony_ci			}
2707e5c31af7Sopenharmony_ci
2708e5c31af7Sopenharmony_ci			void main()
2709e5c31af7Sopenharmony_ci			{
2710e5c31af7Sopenharmony_ci				${SETUP}
2711e5c31af7Sopenharmony_ci				out0 = func(in0);
2712e5c31af7Sopenharmony_ci				${OUTPUT}
2713e5c31af7Sopenharmony_ci			}
2714e5c31af7Sopenharmony_ci		""
2715e5c31af7Sopenharmony_ci	end
2716e5c31af7Sopenharmony_ci
2717e5c31af7Sopenharmony_ci	case return_in_else
2718e5c31af7Sopenharmony_ci		version 300 es
2719e5c31af7Sopenharmony_ci		values
2720e5c31af7Sopenharmony_ci		{
2721e5c31af7Sopenharmony_ci			input float in0		= [ -0.5 | 1.5 ];
2722e5c31af7Sopenharmony_ci			output float out0	= [ 0.5 | -1.5 ];
2723e5c31af7Sopenharmony_ci		}
2724e5c31af7Sopenharmony_ci
2725e5c31af7Sopenharmony_ci		both ""
2726e5c31af7Sopenharmony_ci			#version 300 es
2727e5c31af7Sopenharmony_ci			precision mediump float;
2728e5c31af7Sopenharmony_ci			${DECLARATIONS}
2729e5c31af7Sopenharmony_ci
2730e5c31af7Sopenharmony_ci			float func (float a)
2731e5c31af7Sopenharmony_ci			{
2732e5c31af7Sopenharmony_ci				if (a == 0.0)
2733e5c31af7Sopenharmony_ci					return 1.0;
2734e5c31af7Sopenharmony_ci				else
2735e5c31af7Sopenharmony_ci					return -a;
2736e5c31af7Sopenharmony_ci				return 1.0;
2737e5c31af7Sopenharmony_ci			}
2738e5c31af7Sopenharmony_ci
2739e5c31af7Sopenharmony_ci			void main()
2740e5c31af7Sopenharmony_ci			{
2741e5c31af7Sopenharmony_ci				${SETUP}
2742e5c31af7Sopenharmony_ci				out0 = func(in0);
2743e5c31af7Sopenharmony_ci				${OUTPUT}
2744e5c31af7Sopenharmony_ci			}
2745e5c31af7Sopenharmony_ci		""
2746e5c31af7Sopenharmony_ci	end
2747e5c31af7Sopenharmony_ci
2748e5c31af7Sopenharmony_ci	case return_in_loop
2749e5c31af7Sopenharmony_ci		version 300 es
2750e5c31af7Sopenharmony_ci		values
2751e5c31af7Sopenharmony_ci		{
2752e5c31af7Sopenharmony_ci			input float in0		= [ -0.5 | 1.5 ];
2753e5c31af7Sopenharmony_ci			output float out0	= [ 0.5 | -1.5 ];
2754e5c31af7Sopenharmony_ci		}
2755e5c31af7Sopenharmony_ci
2756e5c31af7Sopenharmony_ci		both ""
2757e5c31af7Sopenharmony_ci			#version 300 es
2758e5c31af7Sopenharmony_ci			precision mediump float;
2759e5c31af7Sopenharmony_ci			${DECLARATIONS}
2760e5c31af7Sopenharmony_ci
2761e5c31af7Sopenharmony_ci			float func (float a)
2762e5c31af7Sopenharmony_ci			{
2763e5c31af7Sopenharmony_ci				while (a < 100.0)
2764e5c31af7Sopenharmony_ci					return -a;
2765e5c31af7Sopenharmony_ci				return 1.0;
2766e5c31af7Sopenharmony_ci			}
2767e5c31af7Sopenharmony_ci
2768e5c31af7Sopenharmony_ci			void main()
2769e5c31af7Sopenharmony_ci			{
2770e5c31af7Sopenharmony_ci				${SETUP}
2771e5c31af7Sopenharmony_ci				out0 = func(in0);
2772e5c31af7Sopenharmony_ci				${OUTPUT}
2773e5c31af7Sopenharmony_ci			}
2774e5c31af7Sopenharmony_ci		""
2775e5c31af7Sopenharmony_ci	end
2776e5c31af7Sopenharmony_ci
2777e5c31af7Sopenharmony_ci	case return_in_loop_if
2778e5c31af7Sopenharmony_ci		version 300 es
2779e5c31af7Sopenharmony_ci		values
2780e5c31af7Sopenharmony_ci		{
2781e5c31af7Sopenharmony_ci			input float in0		= [ -0.5 | 1.5 ];
2782e5c31af7Sopenharmony_ci			output float out0	= [ 0.5 | -1.5 ];
2783e5c31af7Sopenharmony_ci		}
2784e5c31af7Sopenharmony_ci
2785e5c31af7Sopenharmony_ci		both ""
2786e5c31af7Sopenharmony_ci			#version 300 es
2787e5c31af7Sopenharmony_ci			precision mediump float;
2788e5c31af7Sopenharmony_ci			${DECLARATIONS}
2789e5c31af7Sopenharmony_ci
2790e5c31af7Sopenharmony_ci			float func (float a)
2791e5c31af7Sopenharmony_ci			{
2792e5c31af7Sopenharmony_ci				while (a < 100.0)
2793e5c31af7Sopenharmony_ci				{
2794e5c31af7Sopenharmony_ci					a = -a;
2795e5c31af7Sopenharmony_ci					if (a != 0.0)
2796e5c31af7Sopenharmony_ci						return a;
2797e5c31af7Sopenharmony_ci					else
2798e5c31af7Sopenharmony_ci						return -1.0;
2799e5c31af7Sopenharmony_ci				}
2800e5c31af7Sopenharmony_ci				return 1.0;
2801e5c31af7Sopenharmony_ci			}
2802e5c31af7Sopenharmony_ci
2803e5c31af7Sopenharmony_ci			void main()
2804e5c31af7Sopenharmony_ci			{
2805e5c31af7Sopenharmony_ci				${SETUP}
2806e5c31af7Sopenharmony_ci				out0 = func(in0);
2807e5c31af7Sopenharmony_ci				${OUTPUT}
2808e5c31af7Sopenharmony_ci			}
2809e5c31af7Sopenharmony_ci		""
2810e5c31af7Sopenharmony_ci	end
2811e5c31af7Sopenharmony_ci
2812e5c31af7Sopenharmony_ci	case return_after_loop
2813e5c31af7Sopenharmony_ci		version 300 es
2814e5c31af7Sopenharmony_ci		values
2815e5c31af7Sopenharmony_ci		{
2816e5c31af7Sopenharmony_ci			input float in0		= [ -0.5 | 1.5 ];
2817e5c31af7Sopenharmony_ci			output float out0	= [ 0.5 | -1.5 ];
2818e5c31af7Sopenharmony_ci		}
2819e5c31af7Sopenharmony_ci
2820e5c31af7Sopenharmony_ci		both ""
2821e5c31af7Sopenharmony_ci			#version 300 es
2822e5c31af7Sopenharmony_ci			precision mediump float;
2823e5c31af7Sopenharmony_ci			${DECLARATIONS}
2824e5c31af7Sopenharmony_ci
2825e5c31af7Sopenharmony_ci			float func (float a)
2826e5c31af7Sopenharmony_ci			{
2827e5c31af7Sopenharmony_ci				for (int i = 0; i < 5; i++)
2828e5c31af7Sopenharmony_ci					a = -a;
2829e5c31af7Sopenharmony_ci				return a;
2830e5c31af7Sopenharmony_ci			}
2831e5c31af7Sopenharmony_ci
2832e5c31af7Sopenharmony_ci			void main()
2833e5c31af7Sopenharmony_ci			{
2834e5c31af7Sopenharmony_ci				${SETUP}
2835e5c31af7Sopenharmony_ci				out0 = func(in0);
2836e5c31af7Sopenharmony_ci				${OUTPUT}
2837e5c31af7Sopenharmony_ci			}
2838e5c31af7Sopenharmony_ci		""
2839e5c31af7Sopenharmony_ci	end
2840e5c31af7Sopenharmony_ci
2841e5c31af7Sopenharmony_ci	case return_after_break
2842e5c31af7Sopenharmony_ci		version 300 es
2843e5c31af7Sopenharmony_ci		values
2844e5c31af7Sopenharmony_ci		{
2845e5c31af7Sopenharmony_ci			input float in0		= [ -0.5 | 1.5 ];
2846e5c31af7Sopenharmony_ci			output float out0	= [ 0.5 | -1.5 ];
2847e5c31af7Sopenharmony_ci		}
2848e5c31af7Sopenharmony_ci
2849e5c31af7Sopenharmony_ci		both ""
2850e5c31af7Sopenharmony_ci			#version 300 es
2851e5c31af7Sopenharmony_ci			precision mediump float;
2852e5c31af7Sopenharmony_ci			${DECLARATIONS}
2853e5c31af7Sopenharmony_ci
2854e5c31af7Sopenharmony_ci			float func (float a)
2855e5c31af7Sopenharmony_ci			{
2856e5c31af7Sopenharmony_ci				for (int i = 0; i < 6; i++)
2857e5c31af7Sopenharmony_ci				{
2858e5c31af7Sopenharmony_ci					a = -a;
2859e5c31af7Sopenharmony_ci					if (i == 4)
2860e5c31af7Sopenharmony_ci						break;
2861e5c31af7Sopenharmony_ci				}
2862e5c31af7Sopenharmony_ci				return a;
2863e5c31af7Sopenharmony_ci			}
2864e5c31af7Sopenharmony_ci
2865e5c31af7Sopenharmony_ci			void main()
2866e5c31af7Sopenharmony_ci			{
2867e5c31af7Sopenharmony_ci				${SETUP}
2868e5c31af7Sopenharmony_ci				out0 = func(in0);
2869e5c31af7Sopenharmony_ci				${OUTPUT}
2870e5c31af7Sopenharmony_ci			}
2871e5c31af7Sopenharmony_ci		""
2872e5c31af7Sopenharmony_ci	end
2873e5c31af7Sopenharmony_ci
2874e5c31af7Sopenharmony_ci	case return_after_continue
2875e5c31af7Sopenharmony_ci		version 300 es
2876e5c31af7Sopenharmony_ci		values
2877e5c31af7Sopenharmony_ci		{
2878e5c31af7Sopenharmony_ci			input float in0		= [ -0.5 | 1.5 ];
2879e5c31af7Sopenharmony_ci			output float out0	= [ 0.5 | -1.5 ];
2880e5c31af7Sopenharmony_ci		}
2881e5c31af7Sopenharmony_ci
2882e5c31af7Sopenharmony_ci		both ""
2883e5c31af7Sopenharmony_ci			#version 300 es
2884e5c31af7Sopenharmony_ci			precision mediump float;
2885e5c31af7Sopenharmony_ci			${DECLARATIONS}
2886e5c31af7Sopenharmony_ci
2887e5c31af7Sopenharmony_ci			float func (float a)
2888e5c31af7Sopenharmony_ci			{
2889e5c31af7Sopenharmony_ci				for (int i = 0; i < 6; i++)
2890e5c31af7Sopenharmony_ci				{
2891e5c31af7Sopenharmony_ci					if (i == 4)
2892e5c31af7Sopenharmony_ci						continue;
2893e5c31af7Sopenharmony_ci					a = -a;
2894e5c31af7Sopenharmony_ci				}
2895e5c31af7Sopenharmony_ci				return a;
2896e5c31af7Sopenharmony_ci			}
2897e5c31af7Sopenharmony_ci
2898e5c31af7Sopenharmony_ci			void main()
2899e5c31af7Sopenharmony_ci			{
2900e5c31af7Sopenharmony_ci				${SETUP}
2901e5c31af7Sopenharmony_ci				out0 = func(in0);
2902e5c31af7Sopenharmony_ci				${OUTPUT}
2903e5c31af7Sopenharmony_ci			}
2904e5c31af7Sopenharmony_ci		""
2905e5c31af7Sopenharmony_ci	end
2906e5c31af7Sopenharmony_ci
2907e5c31af7Sopenharmony_ci	case return_in_nested_loop
2908e5c31af7Sopenharmony_ci		version 300 es
2909e5c31af7Sopenharmony_ci		values
2910e5c31af7Sopenharmony_ci		{
2911e5c31af7Sopenharmony_ci			input float in0		= [ -0.5 | 1.5 ];
2912e5c31af7Sopenharmony_ci			output float out0	= [ 0.5 | -1.5 ];
2913e5c31af7Sopenharmony_ci		}
2914e5c31af7Sopenharmony_ci
2915e5c31af7Sopenharmony_ci		both ""
2916e5c31af7Sopenharmony_ci			#version 300 es
2917e5c31af7Sopenharmony_ci			precision mediump float;
2918e5c31af7Sopenharmony_ci			${DECLARATIONS}
2919e5c31af7Sopenharmony_ci
2920e5c31af7Sopenharmony_ci			float func (float a)
2921e5c31af7Sopenharmony_ci			{
2922e5c31af7Sopenharmony_ci				for (int i = 0; i < 6; i++)
2923e5c31af7Sopenharmony_ci				{
2924e5c31af7Sopenharmony_ci					a = -a;
2925e5c31af7Sopenharmony_ci					for (int j = 0; j < 4; j++)
2926e5c31af7Sopenharmony_ci					{
2927e5c31af7Sopenharmony_ci						a = -a;
2928e5c31af7Sopenharmony_ci						if (i == 1)
2929e5c31af7Sopenharmony_ci							return a;
2930e5c31af7Sopenharmony_ci					}
2931e5c31af7Sopenharmony_ci					if (i == 4)
2932e5c31af7Sopenharmony_ci						return 1.0;
2933e5c31af7Sopenharmony_ci				}
2934e5c31af7Sopenharmony_ci				return 1.0;
2935e5c31af7Sopenharmony_ci			}
2936e5c31af7Sopenharmony_ci
2937e5c31af7Sopenharmony_ci			void main()
2938e5c31af7Sopenharmony_ci			{
2939e5c31af7Sopenharmony_ci				${SETUP}
2940e5c31af7Sopenharmony_ci				out0 = func(in0);
2941e5c31af7Sopenharmony_ci				${OUTPUT}
2942e5c31af7Sopenharmony_ci			}
2943e5c31af7Sopenharmony_ci		""
2944e5c31af7Sopenharmony_ci	end
2945e5c31af7Sopenharmony_ci
2946e5c31af7Sopenharmony_ci	case return_after_loop_sequence
2947e5c31af7Sopenharmony_ci		version 300 es
2948e5c31af7Sopenharmony_ci		values
2949e5c31af7Sopenharmony_ci		{
2950e5c31af7Sopenharmony_ci			input float in0		= [ -0.5 | 1.5 ];
2951e5c31af7Sopenharmony_ci			output float out0	= [ 0.5 | -1.5 ];
2952e5c31af7Sopenharmony_ci		}
2953e5c31af7Sopenharmony_ci
2954e5c31af7Sopenharmony_ci		both ""
2955e5c31af7Sopenharmony_ci			#version 300 es
2956e5c31af7Sopenharmony_ci			precision mediump float;
2957e5c31af7Sopenharmony_ci			${DECLARATIONS}
2958e5c31af7Sopenharmony_ci
2959e5c31af7Sopenharmony_ci			float func (float a)
2960e5c31af7Sopenharmony_ci			{
2961e5c31af7Sopenharmony_ci				int i;
2962e5c31af7Sopenharmony_ci				for (i = 0; i < 6; i++) // negate a
2963e5c31af7Sopenharmony_ci				{
2964e5c31af7Sopenharmony_ci					a = -a;
2965e5c31af7Sopenharmony_ci					if (i == 4)
2966e5c31af7Sopenharmony_ci						a = -a;
2967e5c31af7Sopenharmony_ci				}
2968e5c31af7Sopenharmony_ci
2969e5c31af7Sopenharmony_ci				for (; i < 10; i++) // keep a
2970e5c31af7Sopenharmony_ci				{
2971e5c31af7Sopenharmony_ci					if (i == 8)
2972e5c31af7Sopenharmony_ci						continue;
2973e5c31af7Sopenharmony_ci					else if (i == 9)
2974e5c31af7Sopenharmony_ci						break;
2975e5c31af7Sopenharmony_ci					a = -a;
2976e5c31af7Sopenharmony_ci				}
2977e5c31af7Sopenharmony_ci
2978e5c31af7Sopenharmony_ci				return a;
2979e5c31af7Sopenharmony_ci			}
2980e5c31af7Sopenharmony_ci
2981e5c31af7Sopenharmony_ci			void main()
2982e5c31af7Sopenharmony_ci			{
2983e5c31af7Sopenharmony_ci				${SETUP}
2984e5c31af7Sopenharmony_ci				out0 = func(in0);
2985e5c31af7Sopenharmony_ci				${OUTPUT}
2986e5c31af7Sopenharmony_ci			}
2987e5c31af7Sopenharmony_ci		""
2988e5c31af7Sopenharmony_ci	end
2989e5c31af7Sopenharmony_ci
2990e5c31af7Sopenharmony_ci	case mixed_return_break_continue
2991e5c31af7Sopenharmony_ci		version 300 es
2992e5c31af7Sopenharmony_ci		values
2993e5c31af7Sopenharmony_ci		{
2994e5c31af7Sopenharmony_ci			input float in0		= [ -0.5 | 1.5 ];
2995e5c31af7Sopenharmony_ci			output float out0	= [ 0.5 | -1.5 ];
2996e5c31af7Sopenharmony_ci		}
2997e5c31af7Sopenharmony_ci
2998e5c31af7Sopenharmony_ci		both ""
2999e5c31af7Sopenharmony_ci			#version 300 es
3000e5c31af7Sopenharmony_ci			precision mediump float;
3001e5c31af7Sopenharmony_ci			${DECLARATIONS}
3002e5c31af7Sopenharmony_ci
3003e5c31af7Sopenharmony_ci			float func (float a)
3004e5c31af7Sopenharmony_ci			{
3005e5c31af7Sopenharmony_ci				int i;
3006e5c31af7Sopenharmony_ci				for (i = 0; i < 6; i++)
3007e5c31af7Sopenharmony_ci				{
3008e5c31af7Sopenharmony_ci					if (i == 0)
3009e5c31af7Sopenharmony_ci						continue;
3010e5c31af7Sopenharmony_ci					else if (i == 1)
3011e5c31af7Sopenharmony_ci					{
3012e5c31af7Sopenharmony_ci					}
3013e5c31af7Sopenharmony_ci					else if (i == 3)
3014e5c31af7Sopenharmony_ci						break;
3015e5c31af7Sopenharmony_ci					else
3016e5c31af7Sopenharmony_ci						return a;
3017e5c31af7Sopenharmony_ci					a = -a;
3018e5c31af7Sopenharmony_ci				}
3019e5c31af7Sopenharmony_ci
3020e5c31af7Sopenharmony_ci				return 1.0;
3021e5c31af7Sopenharmony_ci			}
3022e5c31af7Sopenharmony_ci
3023e5c31af7Sopenharmony_ci			void main()
3024e5c31af7Sopenharmony_ci			{
3025e5c31af7Sopenharmony_ci				${SETUP}
3026e5c31af7Sopenharmony_ci				out0 = func(in0);
3027e5c31af7Sopenharmony_ci				${OUTPUT}
3028e5c31af7Sopenharmony_ci			}
3029e5c31af7Sopenharmony_ci		""
3030e5c31af7Sopenharmony_ci	end
3031e5c31af7Sopenharmony_ci
3032e5c31af7Sopenharmony_ciend # control_flow
3033e5c31af7Sopenharmony_ci
3034e5c31af7Sopenharmony_cigroup misc "Miscellaneous"
3035e5c31af7Sopenharmony_ci
3036e5c31af7Sopenharmony_ci	case multi_arg_float
3037e5c31af7Sopenharmony_ci		version 300 es
3038e5c31af7Sopenharmony_ci		values
3039e5c31af7Sopenharmony_ci		{
3040e5c31af7Sopenharmony_ci			input vec4 in0		= [ vec4(0.0, 1.0, -2.0, 0.5) | vec4(2.0, 2.5, 4.0, -7.0) ];
3041e5c31af7Sopenharmony_ci			output float out0	= [ 0.5 | -1.5 ]; # -sum(in0)
3042e5c31af7Sopenharmony_ci		}
3043e5c31af7Sopenharmony_ci
3044e5c31af7Sopenharmony_ci		both ""
3045e5c31af7Sopenharmony_ci			#version 300 es
3046e5c31af7Sopenharmony_ci			precision mediump float;
3047e5c31af7Sopenharmony_ci			${DECLARATIONS}
3048e5c31af7Sopenharmony_ci
3049e5c31af7Sopenharmony_ci			float sum(vec4 v) { return (v.x + v.y + v.z + v.w); }
3050e5c31af7Sopenharmony_ci
3051e5c31af7Sopenharmony_ci			float func (float a, vec3 b, vec2 c, vec2 d, vec4 e)
3052e5c31af7Sopenharmony_ci			{
3053e5c31af7Sopenharmony_ci				return -sum(vec4(a, b) + vec4(c, d)) + sum(e);
3054e5c31af7Sopenharmony_ci			}
3055e5c31af7Sopenharmony_ci
3056e5c31af7Sopenharmony_ci			void main()
3057e5c31af7Sopenharmony_ci			{
3058e5c31af7Sopenharmony_ci				${SETUP}
3059e5c31af7Sopenharmony_ci				out0 = func(in0.y, in0.xzw, in0.wz, in0.yx, in0);
3060e5c31af7Sopenharmony_ci				${OUTPUT}
3061e5c31af7Sopenharmony_ci			}
3062e5c31af7Sopenharmony_ci		""
3063e5c31af7Sopenharmony_ci	end
3064e5c31af7Sopenharmony_ci
3065e5c31af7Sopenharmony_ci	case multi_arg_int
3066e5c31af7Sopenharmony_ci		version 300 es
3067e5c31af7Sopenharmony_ci		values
3068e5c31af7Sopenharmony_ci		{
3069e5c31af7Sopenharmony_ci			input ivec4 in0		= [ ivec4(-1, 0, 2, 2) | ivec4(1, 4, -8, 2) ];
3070e5c31af7Sopenharmony_ci			output int out0		= [ -3 | 1 ];
3071e5c31af7Sopenharmony_ci		}
3072e5c31af7Sopenharmony_ci
3073e5c31af7Sopenharmony_ci		both ""
3074e5c31af7Sopenharmony_ci			#version 300 es
3075e5c31af7Sopenharmony_ci			precision mediump float;
3076e5c31af7Sopenharmony_ci			precision mediump int;
3077e5c31af7Sopenharmony_ci			${DECLARATIONS}
3078e5c31af7Sopenharmony_ci
3079e5c31af7Sopenharmony_ci			int sum(ivec4 v) { return (v.x + v.y + v.z + v.w); }
3080e5c31af7Sopenharmony_ci
3081e5c31af7Sopenharmony_ci			int func (int a, ivec3 b, ivec2 c, ivec2 d, ivec4 e)
3082e5c31af7Sopenharmony_ci			{
3083e5c31af7Sopenharmony_ci				return -sum(ivec4(a, b) + ivec4(c, d)) + sum(e);
3084e5c31af7Sopenharmony_ci			}
3085e5c31af7Sopenharmony_ci
3086e5c31af7Sopenharmony_ci			void main()
3087e5c31af7Sopenharmony_ci			{
3088e5c31af7Sopenharmony_ci				${SETUP}
3089e5c31af7Sopenharmony_ci				out0 = func(in0.y, in0.xzw, in0.wz, in0.yx, in0);
3090e5c31af7Sopenharmony_ci				${OUTPUT}
3091e5c31af7Sopenharmony_ci			}
3092e5c31af7Sopenharmony_ci		""
3093e5c31af7Sopenharmony_ci	end
3094e5c31af7Sopenharmony_ci
3095e5c31af7Sopenharmony_ci	case argument_eval_order_1
3096e5c31af7Sopenharmony_ci		version 300 es
3097e5c31af7Sopenharmony_ci		values
3098e5c31af7Sopenharmony_ci		{
3099e5c31af7Sopenharmony_ci			input int in0	= [  0 | 1 | 3 | 5 ];
3100e5c31af7Sopenharmony_ci			output int out0	= [ -1 | 5 | 11 | 17 ];
3101e5c31af7Sopenharmony_ci		}
3102e5c31af7Sopenharmony_ci
3103e5c31af7Sopenharmony_ci		both ""
3104e5c31af7Sopenharmony_ci			#version 300 es
3105e5c31af7Sopenharmony_ci			precision highp float;
3106e5c31af7Sopenharmony_ci			${DECLARATIONS}
3107e5c31af7Sopenharmony_ci
3108e5c31af7Sopenharmony_ci			int func (float a, int b, bool c, int d)
3109e5c31af7Sopenharmony_ci			{
3110e5c31af7Sopenharmony_ci				if (c)
3111e5c31af7Sopenharmony_ci					return b + int(a) + d;
3112e5c31af7Sopenharmony_ci				else
3113e5c31af7Sopenharmony_ci					return -1;
3114e5c31af7Sopenharmony_ci			}
3115e5c31af7Sopenharmony_ci
3116e5c31af7Sopenharmony_ci			void main ()
3117e5c31af7Sopenharmony_ci			{
3118e5c31af7Sopenharmony_ci				${SETUP}
3119e5c31af7Sopenharmony_ci				float v0 = float(in0);
3120e5c31af7Sopenharmony_ci				int v1 = in0;
3121e5c31af7Sopenharmony_ci				out0 = func((v0 += 1.0), v1++, (v0 > 1.5), v1);
3122e5c31af7Sopenharmony_ci				${OUTPUT}
3123e5c31af7Sopenharmony_ci			}
3124e5c31af7Sopenharmony_ci		""
3125e5c31af7Sopenharmony_ci	end
3126e5c31af7Sopenharmony_ci
3127e5c31af7Sopenharmony_ci	case argument_eval_order_2
3128e5c31af7Sopenharmony_ci		version 300 es
3129e5c31af7Sopenharmony_ci		values
3130e5c31af7Sopenharmony_ci		{
3131e5c31af7Sopenharmony_ci			input int in0	= [ 0 | -1 | 3 | 5 ];
3132e5c31af7Sopenharmony_ci			output int out0	= [ 3 | -1 | 9 | 13 ];
3133e5c31af7Sopenharmony_ci		}
3134e5c31af7Sopenharmony_ci
3135e5c31af7Sopenharmony_ci		both ""
3136e5c31af7Sopenharmony_ci			#version 300 es
3137e5c31af7Sopenharmony_ci			precision highp float;
3138e5c31af7Sopenharmony_ci			${DECLARATIONS}
3139e5c31af7Sopenharmony_ci
3140e5c31af7Sopenharmony_ci			int g;
3141e5c31af7Sopenharmony_ci
3142e5c31af7Sopenharmony_ci			int modG (int v)
3143e5c31af7Sopenharmony_ci			{
3144e5c31af7Sopenharmony_ci				g += v;
3145e5c31af7Sopenharmony_ci				return v;
3146e5c31af7Sopenharmony_ci			}
3147e5c31af7Sopenharmony_ci
3148e5c31af7Sopenharmony_ci			int func (float a, int b, bool c, int d)
3149e5c31af7Sopenharmony_ci			{
3150e5c31af7Sopenharmony_ci				if (c)
3151e5c31af7Sopenharmony_ci					return b + int(a) + d;
3152e5c31af7Sopenharmony_ci				else
3153e5c31af7Sopenharmony_ci					return -1;
3154e5c31af7Sopenharmony_ci			}
3155e5c31af7Sopenharmony_ci
3156e5c31af7Sopenharmony_ci			void main ()
3157e5c31af7Sopenharmony_ci			{
3158e5c31af7Sopenharmony_ci				${SETUP}
3159e5c31af7Sopenharmony_ci				out0 = func(float(g = in0), modG(2), --g > 0, g);
3160e5c31af7Sopenharmony_ci				${OUTPUT}
3161e5c31af7Sopenharmony_ci			}
3162e5c31af7Sopenharmony_ci		""
3163e5c31af7Sopenharmony_ci	end
3164e5c31af7Sopenharmony_ci
3165e5c31af7Sopenharmony_ciend # misc
3166e5c31af7Sopenharmony_ci
3167e5c31af7Sopenharmony_cigroup invalid "Invalid Functions"
3168e5c31af7Sopenharmony_ci	case break_in_body
3169e5c31af7Sopenharmony_ci		version 300 es
3170e5c31af7Sopenharmony_ci		expect compile_fail
3171e5c31af7Sopenharmony_ci		both ""
3172e5c31af7Sopenharmony_ci			#version 300 es
3173e5c31af7Sopenharmony_ci			precision mediump float;
3174e5c31af7Sopenharmony_ci			${DECLARATIONS}
3175e5c31af7Sopenharmony_ci
3176e5c31af7Sopenharmony_ci			void func ()
3177e5c31af7Sopenharmony_ci			{
3178e5c31af7Sopenharmony_ci				break;
3179e5c31af7Sopenharmony_ci			}
3180e5c31af7Sopenharmony_ci
3181e5c31af7Sopenharmony_ci			void main ()
3182e5c31af7Sopenharmony_ci			{
3183e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(1.0);
3184e5c31af7Sopenharmony_ci			}
3185e5c31af7Sopenharmony_ci		""
3186e5c31af7Sopenharmony_ci	end
3187e5c31af7Sopenharmony_ci
3188e5c31af7Sopenharmony_ci	case continue_in_body
3189e5c31af7Sopenharmony_ci		version 300 es
3190e5c31af7Sopenharmony_ci		expect compile_fail
3191e5c31af7Sopenharmony_ci		both ""
3192e5c31af7Sopenharmony_ci			#version 300 es
3193e5c31af7Sopenharmony_ci			precision mediump float;
3194e5c31af7Sopenharmony_ci			${DECLARATIONS}
3195e5c31af7Sopenharmony_ci
3196e5c31af7Sopenharmony_ci			void func ()
3197e5c31af7Sopenharmony_ci			{
3198e5c31af7Sopenharmony_ci				continue;
3199e5c31af7Sopenharmony_ci			}
3200e5c31af7Sopenharmony_ci
3201e5c31af7Sopenharmony_ci			void main ()
3202e5c31af7Sopenharmony_ci			{
3203e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(1.0);
3204e5c31af7Sopenharmony_ci			}
3205e5c31af7Sopenharmony_ci		""
3206e5c31af7Sopenharmony_ci	end
3207e5c31af7Sopenharmony_ci
3208e5c31af7Sopenharmony_ci	case return_value_from_void_function
3209e5c31af7Sopenharmony_ci		version 300 es
3210e5c31af7Sopenharmony_ci		expect compile_fail
3211e5c31af7Sopenharmony_ci		both ""
3212e5c31af7Sopenharmony_ci			#version 300 es
3213e5c31af7Sopenharmony_ci			precision mediump float;
3214e5c31af7Sopenharmony_ci			${DECLARATIONS}
3215e5c31af7Sopenharmony_ci
3216e5c31af7Sopenharmony_ci			void func ()
3217e5c31af7Sopenharmony_ci			{
3218e5c31af7Sopenharmony_ci				return 1.0;
3219e5c31af7Sopenharmony_ci			}
3220e5c31af7Sopenharmony_ci
3221e5c31af7Sopenharmony_ci			void main ()
3222e5c31af7Sopenharmony_ci			{
3223e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(1.0);
3224e5c31af7Sopenharmony_ci			}
3225e5c31af7Sopenharmony_ci		""
3226e5c31af7Sopenharmony_ci	end
3227e5c31af7Sopenharmony_ci
3228e5c31af7Sopenharmony_ci	case extra_arguments
3229e5c31af7Sopenharmony_ci		version 300 es
3230e5c31af7Sopenharmony_ci		expect compile_fail
3231e5c31af7Sopenharmony_ci		both ""
3232e5c31af7Sopenharmony_ci			#version 300 es
3233e5c31af7Sopenharmony_ci			precision mediump float;
3234e5c31af7Sopenharmony_ci			${DECLARATIONS}
3235e5c31af7Sopenharmony_ci
3236e5c31af7Sopenharmony_ci			void func (float f)
3237e5c31af7Sopenharmony_ci			{
3238e5c31af7Sopenharmony_ci			}
3239e5c31af7Sopenharmony_ci
3240e5c31af7Sopenharmony_ci			void main ()
3241e5c31af7Sopenharmony_ci			{
3242e5c31af7Sopenharmony_ci				func(1.0, 2.0);
3243e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(1.0);
3244e5c31af7Sopenharmony_ci			}
3245e5c31af7Sopenharmony_ci		""
3246e5c31af7Sopenharmony_ci	end
3247e5c31af7Sopenharmony_ci
3248e5c31af7Sopenharmony_ci	case missing_arguments
3249e5c31af7Sopenharmony_ci		version 300 es
3250e5c31af7Sopenharmony_ci		expect compile_fail
3251e5c31af7Sopenharmony_ci		both ""
3252e5c31af7Sopenharmony_ci			#version 300 es
3253e5c31af7Sopenharmony_ci			precision mediump float;
3254e5c31af7Sopenharmony_ci			${DECLARATIONS}
3255e5c31af7Sopenharmony_ci
3256e5c31af7Sopenharmony_ci			void func (float f)
3257e5c31af7Sopenharmony_ci			{
3258e5c31af7Sopenharmony_ci			}
3259e5c31af7Sopenharmony_ci
3260e5c31af7Sopenharmony_ci			void main ()
3261e5c31af7Sopenharmony_ci			{
3262e5c31af7Sopenharmony_ci				func();
3263e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(1.0);
3264e5c31af7Sopenharmony_ci			}
3265e5c31af7Sopenharmony_ci		""
3266e5c31af7Sopenharmony_ci	end
3267e5c31af7Sopenharmony_ci
3268e5c31af7Sopenharmony_ci	case missing_argument_type
3269e5c31af7Sopenharmony_ci		version 300 es
3270e5c31af7Sopenharmony_ci		expect compile_fail
3271e5c31af7Sopenharmony_ci		both ""
3272e5c31af7Sopenharmony_ci			#version 300 es
3273e5c31af7Sopenharmony_ci			precision mediump float;
3274e5c31af7Sopenharmony_ci			${DECLARATIONS}
3275e5c31af7Sopenharmony_ci
3276e5c31af7Sopenharmony_ci			void func (in f)
3277e5c31af7Sopenharmony_ci			{
3278e5c31af7Sopenharmony_ci			}
3279e5c31af7Sopenharmony_ci
3280e5c31af7Sopenharmony_ci			void main ()
3281e5c31af7Sopenharmony_ci			{
3282e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(1.0);
3283e5c31af7Sopenharmony_ci			}
3284e5c31af7Sopenharmony_ci		""
3285e5c31af7Sopenharmony_ci	end
3286e5c31af7Sopenharmony_ci
3287e5c31af7Sopenharmony_ci	case argument_basetype_mismatch
3288e5c31af7Sopenharmony_ci		version 300 es
3289e5c31af7Sopenharmony_ci		expect compile_fail
3290e5c31af7Sopenharmony_ci		both ""
3291e5c31af7Sopenharmony_ci			#version 300 es
3292e5c31af7Sopenharmony_ci			precision mediump float;
3293e5c31af7Sopenharmony_ci			precision mediump int;
3294e5c31af7Sopenharmony_ci			${DECLARATIONS}
3295e5c31af7Sopenharmony_ci
3296e5c31af7Sopenharmony_ci			void func (float f)
3297e5c31af7Sopenharmony_ci			{
3298e5c31af7Sopenharmony_ci			}
3299e5c31af7Sopenharmony_ci
3300e5c31af7Sopenharmony_ci			void main ()
3301e5c31af7Sopenharmony_ci			{
3302e5c31af7Sopenharmony_ci				func(2);
3303e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(1.0);
3304e5c31af7Sopenharmony_ci			}
3305e5c31af7Sopenharmony_ci		""
3306e5c31af7Sopenharmony_ci	end
3307e5c31af7Sopenharmony_ci
3308e5c31af7Sopenharmony_ci	case argument_scalar_vector_mismatch
3309e5c31af7Sopenharmony_ci		version 300 es
3310e5c31af7Sopenharmony_ci		expect compile_fail
3311e5c31af7Sopenharmony_ci		both ""
3312e5c31af7Sopenharmony_ci			#version 300 es
3313e5c31af7Sopenharmony_ci			precision mediump float;
3314e5c31af7Sopenharmony_ci			${DECLARATIONS}
3315e5c31af7Sopenharmony_ci
3316e5c31af7Sopenharmony_ci			void func (vec2 f)
3317e5c31af7Sopenharmony_ci			{
3318e5c31af7Sopenharmony_ci			}
3319e5c31af7Sopenharmony_ci
3320e5c31af7Sopenharmony_ci			void main ()
3321e5c31af7Sopenharmony_ci			{
3322e5c31af7Sopenharmony_ci				func(2.0);
3323e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(1.0);
3324e5c31af7Sopenharmony_ci			}
3325e5c31af7Sopenharmony_ci		""
3326e5c31af7Sopenharmony_ci	end
3327e5c31af7Sopenharmony_ci
3328e5c31af7Sopenharmony_ci	case argument_vector_size_mismatch
3329e5c31af7Sopenharmony_ci		version 300 es
3330e5c31af7Sopenharmony_ci		expect compile_fail
3331e5c31af7Sopenharmony_ci		both ""
3332e5c31af7Sopenharmony_ci			#version 300 es
3333e5c31af7Sopenharmony_ci			precision mediump float;
3334e5c31af7Sopenharmony_ci			${DECLARATIONS}
3335e5c31af7Sopenharmony_ci
3336e5c31af7Sopenharmony_ci			void func (vec3 f)
3337e5c31af7Sopenharmony_ci			{
3338e5c31af7Sopenharmony_ci			}
3339e5c31af7Sopenharmony_ci
3340e5c31af7Sopenharmony_ci			void main ()
3341e5c31af7Sopenharmony_ci			{
3342e5c31af7Sopenharmony_ci				func(vec2(2.0));
3343e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(1.0);
3344e5c31af7Sopenharmony_ci			}
3345e5c31af7Sopenharmony_ci		""
3346e5c31af7Sopenharmony_ci	end
3347e5c31af7Sopenharmony_ci
3348e5c31af7Sopenharmony_ci	case duplicate_function
3349e5c31af7Sopenharmony_ci		version 300 es
3350e5c31af7Sopenharmony_ci		expect compile_fail
3351e5c31af7Sopenharmony_ci		both ""
3352e5c31af7Sopenharmony_ci			#version 300 es
3353e5c31af7Sopenharmony_ci			precision mediump float;
3354e5c31af7Sopenharmony_ci			${DECLARATIONS}
3355e5c31af7Sopenharmony_ci
3356e5c31af7Sopenharmony_ci			void func (vec3 f);
3357e5c31af7Sopenharmony_ci
3358e5c31af7Sopenharmony_ci			void func (vec3 f)
3359e5c31af7Sopenharmony_ci			{
3360e5c31af7Sopenharmony_ci			}
3361e5c31af7Sopenharmony_ci
3362e5c31af7Sopenharmony_ci			void func (vec3 f)
3363e5c31af7Sopenharmony_ci			{
3364e5c31af7Sopenharmony_ci			}
3365e5c31af7Sopenharmony_ci
3366e5c31af7Sopenharmony_ci			void main ()
3367e5c31af7Sopenharmony_ci			{
3368e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(1.0);
3369e5c31af7Sopenharmony_ci			}
3370e5c31af7Sopenharmony_ci		""
3371e5c31af7Sopenharmony_ci	end
3372e5c31af7Sopenharmony_ci
3373e5c31af7Sopenharmony_ci	case prototype_mismatch_return_type
3374e5c31af7Sopenharmony_ci		version 300 es
3375e5c31af7Sopenharmony_ci		expect compile_fail
3376e5c31af7Sopenharmony_ci		both ""
3377e5c31af7Sopenharmony_ci			#version 300 es
3378e5c31af7Sopenharmony_ci			precision mediump float;
3379e5c31af7Sopenharmony_ci			${DECLARATIONS}
3380e5c31af7Sopenharmony_ci
3381e5c31af7Sopenharmony_ci			void func (vec3 f);
3382e5c31af7Sopenharmony_ci
3383e5c31af7Sopenharmony_ci			void main ()
3384e5c31af7Sopenharmony_ci			{
3385e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(1.0);
3386e5c31af7Sopenharmony_ci			}
3387e5c31af7Sopenharmony_ci
3388e5c31af7Sopenharmony_ci			float func (vec3 f)
3389e5c31af7Sopenharmony_ci			{
3390e5c31af7Sopenharmony_ci				return f.x;
3391e5c31af7Sopenharmony_ci			}
3392e5c31af7Sopenharmony_ci		""
3393e5c31af7Sopenharmony_ci	end
3394e5c31af7Sopenharmony_ci
3395e5c31af7Sopenharmony_ci	case prototype_unspecified_array_size
3396e5c31af7Sopenharmony_ci		version 300 es
3397e5c31af7Sopenharmony_ci		expect compile_fail
3398e5c31af7Sopenharmony_ci		both ""
3399e5c31af7Sopenharmony_ci			#version 300 es
3400e5c31af7Sopenharmony_ci			precision mediump float;
3401e5c31af7Sopenharmony_ci			${DECLARATIONS}
3402e5c31af7Sopenharmony_ci
3403e5c31af7Sopenharmony_ci			void func (vec3 f[]);
3404e5c31af7Sopenharmony_ci
3405e5c31af7Sopenharmony_ci			void main ()
3406e5c31af7Sopenharmony_ci			{
3407e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(1.0);
3408e5c31af7Sopenharmony_ci			}
3409e5c31af7Sopenharmony_ci		""
3410e5c31af7Sopenharmony_ci	end
3411e5c31af7Sopenharmony_ci
3412e5c31af7Sopenharmony_ci	case call_mismatch_argument_array_size
3413e5c31af7Sopenharmony_ci		version 300 es
3414e5c31af7Sopenharmony_ci		expect compile_fail
3415e5c31af7Sopenharmony_ci		both ""
3416e5c31af7Sopenharmony_ci			#version 300 es
3417e5c31af7Sopenharmony_ci			precision mediump float;
3418e5c31af7Sopenharmony_ci			${DECLARATIONS}
3419e5c31af7Sopenharmony_ci
3420e5c31af7Sopenharmony_ci			void func (vec3 f[3]);
3421e5c31af7Sopenharmony_ci			void func (vec3 f[3])
3422e5c31af7Sopenharmony_ci			{
3423e5c31af7Sopenharmony_ci			}
3424e5c31af7Sopenharmony_ci
3425e5c31af7Sopenharmony_ci			void main ()
3426e5c31af7Sopenharmony_ci			{
3427e5c31af7Sopenharmony_ci				vec3 array[4];
3428e5c31af7Sopenharmony_ci				func(array);
3429e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(1.0);
3430e5c31af7Sopenharmony_ci			}
3431e5c31af7Sopenharmony_ci		""
3432e5c31af7Sopenharmony_ci	end
3433e5c31af7Sopenharmony_ci
3434e5c31af7Sopenharmony_ci	case prototype_mismatch_argument_const
3435e5c31af7Sopenharmony_ci		version 300 es
3436e5c31af7Sopenharmony_ci		expect compile_fail
3437e5c31af7Sopenharmony_ci		both ""
3438e5c31af7Sopenharmony_ci			#version 300 es
3439e5c31af7Sopenharmony_ci			precision mediump float;
3440e5c31af7Sopenharmony_ci			${DECLARATIONS}
3441e5c31af7Sopenharmony_ci
3442e5c31af7Sopenharmony_ci			void func (vec3 f);
3443e5c31af7Sopenharmony_ci			void func (const vec3 f)
3444e5c31af7Sopenharmony_ci			{
3445e5c31af7Sopenharmony_ci			}
3446e5c31af7Sopenharmony_ci
3447e5c31af7Sopenharmony_ci			void main ()
3448e5c31af7Sopenharmony_ci			{
3449e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(1.0);
3450e5c31af7Sopenharmony_ci			}
3451e5c31af7Sopenharmony_ci		""
3452e5c31af7Sopenharmony_ci	end
3453e5c31af7Sopenharmony_ci
3454e5c31af7Sopenharmony_ci	case prototype_mismatch_argument_array_const
3455e5c31af7Sopenharmony_ci		version 300 es
3456e5c31af7Sopenharmony_ci		expect compile_fail
3457e5c31af7Sopenharmony_ci		both ""
3458e5c31af7Sopenharmony_ci			#version 300 es
3459e5c31af7Sopenharmony_ci			precision mediump float;
3460e5c31af7Sopenharmony_ci			${DECLARATIONS}
3461e5c31af7Sopenharmony_ci
3462e5c31af7Sopenharmony_ci			void func (vec3 f[3]);
3463e5c31af7Sopenharmony_ci			void func (const vec3 f[3])
3464e5c31af7Sopenharmony_ci			{
3465e5c31af7Sopenharmony_ci			}
3466e5c31af7Sopenharmony_ci
3467e5c31af7Sopenharmony_ci			void main ()
3468e5c31af7Sopenharmony_ci			{
3469e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(1.0);
3470e5c31af7Sopenharmony_ci			}
3471e5c31af7Sopenharmony_ci		""
3472e5c31af7Sopenharmony_ci	end
3473e5c31af7Sopenharmony_ci
3474e5c31af7Sopenharmony_ci	case prototype_mismatch_array_inout
3475e5c31af7Sopenharmony_ci		version 300 es
3476e5c31af7Sopenharmony_ci		expect compile_fail
3477e5c31af7Sopenharmony_ci		both ""
3478e5c31af7Sopenharmony_ci			#version 300 es
3479e5c31af7Sopenharmony_ci			precision mediump float;
3480e5c31af7Sopenharmony_ci			${DECLARATIONS}
3481e5c31af7Sopenharmony_ci
3482e5c31af7Sopenharmony_ci			void func (out vec3 f);
3483e5c31af7Sopenharmony_ci			void func (inout vec3 f)
3484e5c31af7Sopenharmony_ci			{
3485e5c31af7Sopenharmony_ci			}
3486e5c31af7Sopenharmony_ci
3487e5c31af7Sopenharmony_ci			void main ()
3488e5c31af7Sopenharmony_ci			{
3489e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(1.0);
3490e5c31af7Sopenharmony_ci			}
3491e5c31af7Sopenharmony_ci		""
3492e5c31af7Sopenharmony_ci	end
3493e5c31af7Sopenharmony_ci
3494e5c31af7Sopenharmony_ci	case missing_return_type
3495e5c31af7Sopenharmony_ci		version 300 es
3496e5c31af7Sopenharmony_ci		expect compile_fail
3497e5c31af7Sopenharmony_ci		both ""
3498e5c31af7Sopenharmony_ci			#version 300 es
3499e5c31af7Sopenharmony_ci			precision mediump float;
3500e5c31af7Sopenharmony_ci			${DECLARATIONS}
3501e5c31af7Sopenharmony_ci
3502e5c31af7Sopenharmony_ci			func (float f);
3503e5c31af7Sopenharmony_ci			func (inout vec3 f[3])
3504e5c31af7Sopenharmony_ci			{
3505e5c31af7Sopenharmony_ci			}
3506e5c31af7Sopenharmony_ci
3507e5c31af7Sopenharmony_ci			void main ()
3508e5c31af7Sopenharmony_ci			{
3509e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(1.0);
3510e5c31af7Sopenharmony_ci			}
3511e5c31af7Sopenharmony_ci		""
3512e5c31af7Sopenharmony_ci	end
3513e5c31af7Sopenharmony_ci
3514e5c31af7Sopenharmony_ci	case call_before_definition
3515e5c31af7Sopenharmony_ci		version 300 es
3516e5c31af7Sopenharmony_ci		expect compile_fail
3517e5c31af7Sopenharmony_ci		both ""
3518e5c31af7Sopenharmony_ci			#version 300 es
3519e5c31af7Sopenharmony_ci			precision mediump float;
3520e5c31af7Sopenharmony_ci			${DECLARATIONS}
3521e5c31af7Sopenharmony_ci
3522e5c31af7Sopenharmony_ci			void main ()
3523e5c31af7Sopenharmony_ci			{
3524e5c31af7Sopenharmony_ci				func(1.0);
3525e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(1.0);
3526e5c31af7Sopenharmony_ci			}
3527e5c31af7Sopenharmony_ci
3528e5c31af7Sopenharmony_ci			void func (float f)
3529e5c31af7Sopenharmony_ci			{
3530e5c31af7Sopenharmony_ci			}
3531e5c31af7Sopenharmony_ci
3532e5c31af7Sopenharmony_ci		""
3533e5c31af7Sopenharmony_ci	end
3534e5c31af7Sopenharmony_ci
3535e5c31af7Sopenharmony_ci	case argument_precision_overload
3536e5c31af7Sopenharmony_ci		version 300 es
3537e5c31af7Sopenharmony_ci		expect compile_fail
3538e5c31af7Sopenharmony_ci		both ""
3539e5c31af7Sopenharmony_ci			#version 300 es
3540e5c31af7Sopenharmony_ci			precision mediump float;
3541e5c31af7Sopenharmony_ci			${DECLARATIONS}
3542e5c31af7Sopenharmony_ci
3543e5c31af7Sopenharmony_ci			float func (lowp float f)
3544e5c31af7Sopenharmony_ci			{
3545e5c31af7Sopenharmony_ci				return f;
3546e5c31af7Sopenharmony_ci			}
3547e5c31af7Sopenharmony_ci
3548e5c31af7Sopenharmony_ci			float func (mediump float f)
3549e5c31af7Sopenharmony_ci			{
3550e5c31af7Sopenharmony_ci				return f;
3551e5c31af7Sopenharmony_ci			}
3552e5c31af7Sopenharmony_ci
3553e5c31af7Sopenharmony_ci			void main ()
3554e5c31af7Sopenharmony_ci			{
3555e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(1.0);
3556e5c31af7Sopenharmony_ci			}
3557e5c31af7Sopenharmony_ci		""
3558e5c31af7Sopenharmony_ci	end
3559e5c31af7Sopenharmony_ci
3560e5c31af7Sopenharmony_ci	case argument_in_out_overload
3561e5c31af7Sopenharmony_ci		version 300 es
3562e5c31af7Sopenharmony_ci		expect compile_fail
3563e5c31af7Sopenharmony_ci		both ""
3564e5c31af7Sopenharmony_ci			#version 300 es
3565e5c31af7Sopenharmony_ci			precision mediump float;
3566e5c31af7Sopenharmony_ci			${DECLARATIONS}
3567e5c31af7Sopenharmony_ci
3568e5c31af7Sopenharmony_ci			void func (in float f)
3569e5c31af7Sopenharmony_ci			{
3570e5c31af7Sopenharmony_ci			}
3571e5c31af7Sopenharmony_ci
3572e5c31af7Sopenharmony_ci			void func (out float f)
3573e5c31af7Sopenharmony_ci			{
3574e5c31af7Sopenharmony_ci				f = 1.0;
3575e5c31af7Sopenharmony_ci			}
3576e5c31af7Sopenharmony_ci
3577e5c31af7Sopenharmony_ci			void main ()
3578e5c31af7Sopenharmony_ci			{
3579e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(1.0);
3580e5c31af7Sopenharmony_ci			}
3581e5c31af7Sopenharmony_ci		""
3582e5c31af7Sopenharmony_ci	end
3583e5c31af7Sopenharmony_ci
3584e5c31af7Sopenharmony_ci	case argument_in_inout_overload
3585e5c31af7Sopenharmony_ci		version 300 es
3586e5c31af7Sopenharmony_ci		expect compile_fail
3587e5c31af7Sopenharmony_ci		both ""
3588e5c31af7Sopenharmony_ci			#version 300 es
3589e5c31af7Sopenharmony_ci			precision mediump float;
3590e5c31af7Sopenharmony_ci			${DECLARATIONS}
3591e5c31af7Sopenharmony_ci
3592e5c31af7Sopenharmony_ci			void func (in float f)
3593e5c31af7Sopenharmony_ci			{
3594e5c31af7Sopenharmony_ci			}
3595e5c31af7Sopenharmony_ci
3596e5c31af7Sopenharmony_ci			void func (inout float f)
3597e5c31af7Sopenharmony_ci			{
3598e5c31af7Sopenharmony_ci				f = -f;
3599e5c31af7Sopenharmony_ci			}
3600e5c31af7Sopenharmony_ci
3601e5c31af7Sopenharmony_ci			void main ()
3602e5c31af7Sopenharmony_ci			{
3603e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(1.0);
3604e5c31af7Sopenharmony_ci			}
3605e5c31af7Sopenharmony_ci		""
3606e5c31af7Sopenharmony_ci	end
3607e5c31af7Sopenharmony_ci
3608e5c31af7Sopenharmony_ci	case argument_out_inout_overload
3609e5c31af7Sopenharmony_ci		version 300 es
3610e5c31af7Sopenharmony_ci		expect compile_fail
3611e5c31af7Sopenharmony_ci		both ""
3612e5c31af7Sopenharmony_ci			#version 300 es
3613e5c31af7Sopenharmony_ci			precision mediump float;
3614e5c31af7Sopenharmony_ci			${DECLARATIONS}
3615e5c31af7Sopenharmony_ci
3616e5c31af7Sopenharmony_ci			void func (out float f)
3617e5c31af7Sopenharmony_ci			{
3618e5c31af7Sopenharmony_ci				f = -1.0;
3619e5c31af7Sopenharmony_ci			}
3620e5c31af7Sopenharmony_ci
3621e5c31af7Sopenharmony_ci			void func (inout float f)
3622e5c31af7Sopenharmony_ci			{
3623e5c31af7Sopenharmony_ci				f = -f;
3624e5c31af7Sopenharmony_ci			}
3625e5c31af7Sopenharmony_ci
3626e5c31af7Sopenharmony_ci			void main ()
3627e5c31af7Sopenharmony_ci			{
3628e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(1.0);
3629e5c31af7Sopenharmony_ci			}
3630e5c31af7Sopenharmony_ci		""
3631e5c31af7Sopenharmony_ci	end
3632e5c31af7Sopenharmony_ci
3633e5c31af7Sopenharmony_ci	case return_type_overload
3634e5c31af7Sopenharmony_ci		version 300 es
3635e5c31af7Sopenharmony_ci		expect compile_fail
3636e5c31af7Sopenharmony_ci		both ""
3637e5c31af7Sopenharmony_ci			#version 300 es
3638e5c31af7Sopenharmony_ci			precision mediump float;
3639e5c31af7Sopenharmony_ci			${DECLARATIONS}
3640e5c31af7Sopenharmony_ci
3641e5c31af7Sopenharmony_ci			float func (float f)
3642e5c31af7Sopenharmony_ci			{
3643e5c31af7Sopenharmony_ci				return f;
3644e5c31af7Sopenharmony_ci			}
3645e5c31af7Sopenharmony_ci
3646e5c31af7Sopenharmony_ci			int func (float f)
3647e5c31af7Sopenharmony_ci			{
3648e5c31af7Sopenharmony_ci				return int(f);
3649e5c31af7Sopenharmony_ci			}
3650e5c31af7Sopenharmony_ci
3651e5c31af7Sopenharmony_ci			void main ()
3652e5c31af7Sopenharmony_ci			{
3653e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(1.0);
3654e5c31af7Sopenharmony_ci			}
3655e5c31af7Sopenharmony_ci		""
3656e5c31af7Sopenharmony_ci	end
3657e5c31af7Sopenharmony_ci
3658e5c31af7Sopenharmony_ci	case return_type_precision_overload
3659e5c31af7Sopenharmony_ci		version 300 es
3660e5c31af7Sopenharmony_ci		expect compile_fail
3661e5c31af7Sopenharmony_ci		both ""
3662e5c31af7Sopenharmony_ci			#version 300 es
3663e5c31af7Sopenharmony_ci			precision mediump float;
3664e5c31af7Sopenharmony_ci			${DECLARATIONS}
3665e5c31af7Sopenharmony_ci
3666e5c31af7Sopenharmony_ci			lowp float func (float f)
3667e5c31af7Sopenharmony_ci			{
3668e5c31af7Sopenharmony_ci				return f;
3669e5c31af7Sopenharmony_ci			}
3670e5c31af7Sopenharmony_ci
3671e5c31af7Sopenharmony_ci			mediump float func (float f)
3672e5c31af7Sopenharmony_ci			{
3673e5c31af7Sopenharmony_ci				return f;
3674e5c31af7Sopenharmony_ci			}
3675e5c31af7Sopenharmony_ci
3676e5c31af7Sopenharmony_ci			void main ()
3677e5c31af7Sopenharmony_ci			{
3678e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(1.0);
3679e5c31af7Sopenharmony_ci			}
3680e5c31af7Sopenharmony_ci		""
3681e5c31af7Sopenharmony_ci	end
3682e5c31af7Sopenharmony_ci
3683e5c31af7Sopenharmony_ci	case return_type_const_overload
3684e5c31af7Sopenharmony_ci		version 300 es
3685e5c31af7Sopenharmony_ci		expect compile_fail
3686e5c31af7Sopenharmony_ci		both ""
3687e5c31af7Sopenharmony_ci			#version 300 es
3688e5c31af7Sopenharmony_ci			precision mediump float;
3689e5c31af7Sopenharmony_ci			${DECLARATIONS}
3690e5c31af7Sopenharmony_ci
3691e5c31af7Sopenharmony_ci			float func (float f)
3692e5c31af7Sopenharmony_ci			{
3693e5c31af7Sopenharmony_ci				return f;
3694e5c31af7Sopenharmony_ci			}
3695e5c31af7Sopenharmony_ci
3696e5c31af7Sopenharmony_ci			const float func (float f)
3697e5c31af7Sopenharmony_ci			{
3698e5c31af7Sopenharmony_ci				return f;
3699e5c31af7Sopenharmony_ci			}
3700e5c31af7Sopenharmony_ci
3701e5c31af7Sopenharmony_ci			void main ()
3702e5c31af7Sopenharmony_ci			{
3703e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(1.0);
3704e5c31af7Sopenharmony_ci			}
3705e5c31af7Sopenharmony_ci		""
3706e5c31af7Sopenharmony_ci	end
3707e5c31af7Sopenharmony_ci
3708e5c31af7Sopenharmony_ci	case return_without_value
3709e5c31af7Sopenharmony_ci		version 300 es
3710e5c31af7Sopenharmony_ci		expect compile_fail
3711e5c31af7Sopenharmony_ci		both ""
3712e5c31af7Sopenharmony_ci			#version 300 es
3713e5c31af7Sopenharmony_ci			precision mediump float;
3714e5c31af7Sopenharmony_ci			${DECLARATIONS}
3715e5c31af7Sopenharmony_ci
3716e5c31af7Sopenharmony_ci			float func (float f)
3717e5c31af7Sopenharmony_ci			{
3718e5c31af7Sopenharmony_ci				return;
3719e5c31af7Sopenharmony_ci				return 1.0;
3720e5c31af7Sopenharmony_ci			}
3721e5c31af7Sopenharmony_ci
3722e5c31af7Sopenharmony_ci			void main ()
3723e5c31af7Sopenharmony_ci			{
3724e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(1.0);
3725e5c31af7Sopenharmony_ci			}
3726e5c31af7Sopenharmony_ci		""
3727e5c31af7Sopenharmony_ci	end
3728e5c31af7Sopenharmony_ci
3729e5c31af7Sopenharmony_ci	case local_function_prototype
3730e5c31af7Sopenharmony_ci		version 300 es
3731e5c31af7Sopenharmony_ci		expect compile_fail
3732e5c31af7Sopenharmony_ci		both ""
3733e5c31af7Sopenharmony_ci			#version 300 es
3734e5c31af7Sopenharmony_ci			precision mediump float;
3735e5c31af7Sopenharmony_ci			${DECLARATIONS}
3736e5c31af7Sopenharmony_ci
3737e5c31af7Sopenharmony_ci			void main ()
3738e5c31af7Sopenharmony_ci			{
3739e5c31af7Sopenharmony_ci				float func (float f);
3740e5c31af7Sopenharmony_ci
3741e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(1.0);
3742e5c31af7Sopenharmony_ci			}
3743e5c31af7Sopenharmony_ci		""
3744e5c31af7Sopenharmony_ci	end
3745e5c31af7Sopenharmony_ci
3746e5c31af7Sopenharmony_ci	case local_function_definition
3747e5c31af7Sopenharmony_ci		version 300 es
3748e5c31af7Sopenharmony_ci		expect compile_fail
3749e5c31af7Sopenharmony_ci		both ""
3750e5c31af7Sopenharmony_ci			#version 300 es
3751e5c31af7Sopenharmony_ci			precision mediump float;
3752e5c31af7Sopenharmony_ci			${DECLARATIONS}
3753e5c31af7Sopenharmony_ci
3754e5c31af7Sopenharmony_ci			void main ()
3755e5c31af7Sopenharmony_ci			{
3756e5c31af7Sopenharmony_ci				float func (float f)
3757e5c31af7Sopenharmony_ci				{
3758e5c31af7Sopenharmony_ci					return 1.0;
3759e5c31af7Sopenharmony_ci				}
3760e5c31af7Sopenharmony_ci
3761e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(1.0);
3762e5c31af7Sopenharmony_ci			}
3763e5c31af7Sopenharmony_ci		""
3764e5c31af7Sopenharmony_ci	end
3765e5c31af7Sopenharmony_ci
3766e5c31af7Sopenharmony_ci	case name_type_conflict
3767e5c31af7Sopenharmony_ci		version 300 es
3768e5c31af7Sopenharmony_ci		expect compile_fail
3769e5c31af7Sopenharmony_ci		both ""
3770e5c31af7Sopenharmony_ci			#version 300 es
3771e5c31af7Sopenharmony_ci			precision mediump float;
3772e5c31af7Sopenharmony_ci			${DECLARATIONS}
3773e5c31af7Sopenharmony_ci
3774e5c31af7Sopenharmony_ci			struct foo { float a; }
3775e5c31af7Sopenharmony_ci
3776e5c31af7Sopenharmony_ci			float foo (float f)
3777e5c31af7Sopenharmony_ci			{
3778e5c31af7Sopenharmony_ci				return 1.0;
3779e5c31af7Sopenharmony_ci			}
3780e5c31af7Sopenharmony_ci
3781e5c31af7Sopenharmony_ci			void main ()
3782e5c31af7Sopenharmony_ci			{
3783e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(1.0);
3784e5c31af7Sopenharmony_ci			}
3785e5c31af7Sopenharmony_ci		""
3786e5c31af7Sopenharmony_ci	end
3787e5c31af7Sopenharmony_ci
3788e5c31af7Sopenharmony_ci	case const_overload
3789e5c31af7Sopenharmony_ci		version 300 es
3790e5c31af7Sopenharmony_ci		expect compile_fail
3791e5c31af7Sopenharmony_ci		both ""
3792e5c31af7Sopenharmony_ci			#version 300 es
3793e5c31af7Sopenharmony_ci			precision mediump float;
3794e5c31af7Sopenharmony_ci			${DECLARATIONS}
3795e5c31af7Sopenharmony_ci
3796e5c31af7Sopenharmony_ci			void func (vec3 f)
3797e5c31af7Sopenharmony_ci			{
3798e5c31af7Sopenharmony_ci			}
3799e5c31af7Sopenharmony_ci
3800e5c31af7Sopenharmony_ci			void func (const vec3 f)
3801e5c31af7Sopenharmony_ci			{
3802e5c31af7Sopenharmony_ci			}
3803e5c31af7Sopenharmony_ci
3804e5c31af7Sopenharmony_ci			void main ()
3805e5c31af7Sopenharmony_ci			{
3806e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(1.0);
3807e5c31af7Sopenharmony_ci			}
3808e5c31af7Sopenharmony_ci		""
3809e5c31af7Sopenharmony_ci	end
3810e5c31af7Sopenharmony_ci
3811e5c31af7Sopenharmony_ci	case uniform_local
3812e5c31af7Sopenharmony_ci		version 300 es
3813e5c31af7Sopenharmony_ci		expect compile_fail
3814e5c31af7Sopenharmony_ci		both ""
3815e5c31af7Sopenharmony_ci			#version 300 es
3816e5c31af7Sopenharmony_ci			precision mediump float;
3817e5c31af7Sopenharmony_ci			${DECLARATIONS}
3818e5c31af7Sopenharmony_ci
3819e5c31af7Sopenharmony_ci			void func (vec3 f)
3820e5c31af7Sopenharmony_ci			{
3821e5c31af7Sopenharmony_ci				uniform float u;
3822e5c31af7Sopenharmony_ci			}
3823e5c31af7Sopenharmony_ci
3824e5c31af7Sopenharmony_ci			void main ()
3825e5c31af7Sopenharmony_ci			{
3826e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(1.0);
3827e5c31af7Sopenharmony_ci			}
3828e5c31af7Sopenharmony_ci		""
3829e5c31af7Sopenharmony_ci	end
3830e5c31af7Sopenharmony_ci
3831e5c31af7Sopenharmony_ci	case in_local
3832e5c31af7Sopenharmony_ci		version 300 es
3833e5c31af7Sopenharmony_ci		expect compile_fail
3834e5c31af7Sopenharmony_ci		both ""
3835e5c31af7Sopenharmony_ci			#version 300 es
3836e5c31af7Sopenharmony_ci			precision mediump float;
3837e5c31af7Sopenharmony_ci			${DECLARATIONS}
3838e5c31af7Sopenharmony_ci
3839e5c31af7Sopenharmony_ci			void func (vec3 f)
3840e5c31af7Sopenharmony_ci			{
3841e5c31af7Sopenharmony_ci				in float v;
3842e5c31af7Sopenharmony_ci			}
3843e5c31af7Sopenharmony_ci
3844e5c31af7Sopenharmony_ci			void main ()
3845e5c31af7Sopenharmony_ci			{
3846e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(1.0);
3847e5c31af7Sopenharmony_ci			}
3848e5c31af7Sopenharmony_ci		""
3849e5c31af7Sopenharmony_ci	end
3850e5c31af7Sopenharmony_ci
3851e5c31af7Sopenharmony_ci	case out_local
3852e5c31af7Sopenharmony_ci		version 300 es
3853e5c31af7Sopenharmony_ci		expect compile_fail
3854e5c31af7Sopenharmony_ci		both ""
3855e5c31af7Sopenharmony_ci			#version 300 es
3856e5c31af7Sopenharmony_ci			precision mediump float;
3857e5c31af7Sopenharmony_ci			${DECLARATIONS}
3858e5c31af7Sopenharmony_ci
3859e5c31af7Sopenharmony_ci			void func (vec3 f)
3860e5c31af7Sopenharmony_ci			{
3861e5c31af7Sopenharmony_ci				in float a;
3862e5c31af7Sopenharmony_ci			}
3863e5c31af7Sopenharmony_ci
3864e5c31af7Sopenharmony_ci			void main ()
3865e5c31af7Sopenharmony_ci			{
3866e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(1.0);
3867e5c31af7Sopenharmony_ci			}
3868e5c31af7Sopenharmony_ci		""
3869e5c31af7Sopenharmony_ci	end
3870e5c31af7Sopenharmony_ci
3871e5c31af7Sopenharmony_ci	case inout_local
3872e5c31af7Sopenharmony_ci		version 300 es
3873e5c31af7Sopenharmony_ci		expect compile_fail
3874e5c31af7Sopenharmony_ci		both ""
3875e5c31af7Sopenharmony_ci			#version 300 es
3876e5c31af7Sopenharmony_ci			precision mediump float;
3877e5c31af7Sopenharmony_ci			${DECLARATIONS}
3878e5c31af7Sopenharmony_ci
3879e5c31af7Sopenharmony_ci			void func (vec3 f)
3880e5c31af7Sopenharmony_ci			{
3881e5c31af7Sopenharmony_ci				inout float a;
3882e5c31af7Sopenharmony_ci			}
3883e5c31af7Sopenharmony_ci
3884e5c31af7Sopenharmony_ci			void main ()
3885e5c31af7Sopenharmony_ci			{
3886e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(1.0);
3887e5c31af7Sopenharmony_ci			}
3888e5c31af7Sopenharmony_ci		""
3889e5c31af7Sopenharmony_ci	end
3890e5c31af7Sopenharmony_ci
3891e5c31af7Sopenharmony_ci	case uniform_argument
3892e5c31af7Sopenharmony_ci		version 300 es
3893e5c31af7Sopenharmony_ci		expect compile_fail
3894e5c31af7Sopenharmony_ci		both ""
3895e5c31af7Sopenharmony_ci			#version 300 es
3896e5c31af7Sopenharmony_ci			precision mediump float;
3897e5c31af7Sopenharmony_ci			${DECLARATIONS}
3898e5c31af7Sopenharmony_ci
3899e5c31af7Sopenharmony_ci			void func (uniform vec3 f)
3900e5c31af7Sopenharmony_ci			{
3901e5c31af7Sopenharmony_ci			}
3902e5c31af7Sopenharmony_ci
3903e5c31af7Sopenharmony_ci			void main ()
3904e5c31af7Sopenharmony_ci			{
3905e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(1.0);
3906e5c31af7Sopenharmony_ci			}
3907e5c31af7Sopenharmony_ci		""
3908e5c31af7Sopenharmony_ci	end
3909e5c31af7Sopenharmony_ci
3910e5c31af7Sopenharmony_ci	case uniform_return_type
3911e5c31af7Sopenharmony_ci		version 300 es
3912e5c31af7Sopenharmony_ci		expect compile_fail
3913e5c31af7Sopenharmony_ci		both ""
3914e5c31af7Sopenharmony_ci			#version 300 es
3915e5c31af7Sopenharmony_ci			precision mediump float;
3916e5c31af7Sopenharmony_ci			${DECLARATIONS}
3917e5c31af7Sopenharmony_ci
3918e5c31af7Sopenharmony_ci			uniform float func (vec3 f)
3919e5c31af7Sopenharmony_ci			{
3920e5c31af7Sopenharmony_ci				return f.x;
3921e5c31af7Sopenharmony_ci			}
3922e5c31af7Sopenharmony_ci
3923e5c31af7Sopenharmony_ci			void main ()
3924e5c31af7Sopenharmony_ci			{
3925e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(1.0);
3926e5c31af7Sopenharmony_ci			}
3927e5c31af7Sopenharmony_ci		""
3928e5c31af7Sopenharmony_ci	end
3929e5c31af7Sopenharmony_ci
3930e5c31af7Sopenharmony_ci	case in_return_type
3931e5c31af7Sopenharmony_ci		version 300 es
3932e5c31af7Sopenharmony_ci		expect compile_fail
3933e5c31af7Sopenharmony_ci		both ""
3934e5c31af7Sopenharmony_ci			#version 300 es
3935e5c31af7Sopenharmony_ci			precision mediump float;
3936e5c31af7Sopenharmony_ci			${DECLARATIONS}
3937e5c31af7Sopenharmony_ci
3938e5c31af7Sopenharmony_ci			in float func (vec3 f)
3939e5c31af7Sopenharmony_ci			{
3940e5c31af7Sopenharmony_ci				return f.x;
3941e5c31af7Sopenharmony_ci			}
3942e5c31af7Sopenharmony_ci
3943e5c31af7Sopenharmony_ci			void main ()
3944e5c31af7Sopenharmony_ci			{
3945e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(func(vec3(1.0)));
3946e5c31af7Sopenharmony_ci			}
3947e5c31af7Sopenharmony_ci		""
3948e5c31af7Sopenharmony_ci	end
3949e5c31af7Sopenharmony_ci
3950e5c31af7Sopenharmony_ci	case out_return_type
3951e5c31af7Sopenharmony_ci		version 300 es
3952e5c31af7Sopenharmony_ci		expect compile_fail
3953e5c31af7Sopenharmony_ci		both ""
3954e5c31af7Sopenharmony_ci			#version 300 es
3955e5c31af7Sopenharmony_ci			precision mediump float;
3956e5c31af7Sopenharmony_ci			${DECLARATIONS}
3957e5c31af7Sopenharmony_ci
3958e5c31af7Sopenharmony_ci			out float func (vec3 f)
3959e5c31af7Sopenharmony_ci			{
3960e5c31af7Sopenharmony_ci				return f.x;
3961e5c31af7Sopenharmony_ci			}
3962e5c31af7Sopenharmony_ci
3963e5c31af7Sopenharmony_ci			void main ()
3964e5c31af7Sopenharmony_ci			{
3965e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(func(vec3(1.0)));
3966e5c31af7Sopenharmony_ci			}
3967e5c31af7Sopenharmony_ci		""
3968e5c31af7Sopenharmony_ci	end
3969e5c31af7Sopenharmony_ci
3970e5c31af7Sopenharmony_ci	case inout_return_type
3971e5c31af7Sopenharmony_ci		version 300 es
3972e5c31af7Sopenharmony_ci		expect compile_fail
3973e5c31af7Sopenharmony_ci		both ""
3974e5c31af7Sopenharmony_ci			#version 300 es
3975e5c31af7Sopenharmony_ci			precision mediump float;
3976e5c31af7Sopenharmony_ci			${DECLARATIONS}
3977e5c31af7Sopenharmony_ci
3978e5c31af7Sopenharmony_ci			inout float func (vec3 f)
3979e5c31af7Sopenharmony_ci			{
3980e5c31af7Sopenharmony_ci				return f.x;
3981e5c31af7Sopenharmony_ci			}
3982e5c31af7Sopenharmony_ci
3983e5c31af7Sopenharmony_ci			void main ()
3984e5c31af7Sopenharmony_ci			{
3985e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(func(vec3(1.0)));
3986e5c31af7Sopenharmony_ci			}
3987e5c31af7Sopenharmony_ci		""
3988e5c31af7Sopenharmony_ci	end
3989e5c31af7Sopenharmony_ci
3990e5c31af7Sopenharmony_ci	case main_invalid_return_type
3991e5c31af7Sopenharmony_ci		version 300 es
3992e5c31af7Sopenharmony_ci		expect compile_fail
3993e5c31af7Sopenharmony_ci		both ""
3994e5c31af7Sopenharmony_ci			#version 300 es
3995e5c31af7Sopenharmony_ci			precision mediump float;
3996e5c31af7Sopenharmony_ci			${DECLARATIONS}
3997e5c31af7Sopenharmony_ci
3998e5c31af7Sopenharmony_ci			float main ()
3999e5c31af7Sopenharmony_ci			{
4000e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(1.0);
4001e5c31af7Sopenharmony_ci			}
4002e5c31af7Sopenharmony_ci		""
4003e5c31af7Sopenharmony_ci	end
4004e5c31af7Sopenharmony_ci
4005e5c31af7Sopenharmony_ci	case main_has_arguments
4006e5c31af7Sopenharmony_ci		version 300 es
4007e5c31af7Sopenharmony_ci		expect compile_fail
4008e5c31af7Sopenharmony_ci		both ""
4009e5c31af7Sopenharmony_ci			#version 300 es
4010e5c31af7Sopenharmony_ci			precision mediump float;
4011e5c31af7Sopenharmony_ci			${DECLARATIONS}
4012e5c31af7Sopenharmony_ci
4013e5c31af7Sopenharmony_ci			void main (float f)
4014e5c31af7Sopenharmony_ci			{
4015e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(1.0);
4016e5c31af7Sopenharmony_ci			}
4017e5c31af7Sopenharmony_ci		""
4018e5c31af7Sopenharmony_ci	end
4019e5c31af7Sopenharmony_ci
4020e5c31af7Sopenharmony_ci	case main_missing_return_type
4021e5c31af7Sopenharmony_ci		version 300 es
4022e5c31af7Sopenharmony_ci		expect compile_fail
4023e5c31af7Sopenharmony_ci		both ""
4024e5c31af7Sopenharmony_ci			#version 300 es
4025e5c31af7Sopenharmony_ci			precision mediump float;
4026e5c31af7Sopenharmony_ci			${DECLARATIONS}
4027e5c31af7Sopenharmony_ci
4028e5c31af7Sopenharmony_ci			main ()
4029e5c31af7Sopenharmony_ci			{
4030e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(1.0);
4031e5c31af7Sopenharmony_ci			}
4032e5c31af7Sopenharmony_ci		""
4033e5c31af7Sopenharmony_ci	end
4034e5c31af7Sopenharmony_ci
4035e5c31af7Sopenharmony_ci	case write_const_arg
4036e5c31af7Sopenharmony_ci		version 300 es
4037e5c31af7Sopenharmony_ci		expect compile_fail
4038e5c31af7Sopenharmony_ci		both ""
4039e5c31af7Sopenharmony_ci			#version 300 es
4040e5c31af7Sopenharmony_ci			precision mediump float;
4041e5c31af7Sopenharmony_ci			${DECLARATIONS}
4042e5c31af7Sopenharmony_ci
4043e5c31af7Sopenharmony_ci			float func (const float f)
4044e5c31af7Sopenharmony_ci			{
4045e5c31af7Sopenharmony_ci				f = 1.0;
4046e5c31af7Sopenharmony_ci			}
4047e5c31af7Sopenharmony_ci
4048e5c31af7Sopenharmony_ci			void main ()
4049e5c31af7Sopenharmony_ci			{
4050e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(1.0);
4051e5c31af7Sopenharmony_ci			}
4052e5c31af7Sopenharmony_ci		""
4053e5c31af7Sopenharmony_ci	end
4054e5c31af7Sopenharmony_ci
4055e5c31af7Sopenharmony_ci	case write_const_array_arg
4056e5c31af7Sopenharmony_ci		version 300 es
4057e5c31af7Sopenharmony_ci		expect compile_fail
4058e5c31af7Sopenharmony_ci		both ""
4059e5c31af7Sopenharmony_ci			#version 300 es
4060e5c31af7Sopenharmony_ci			precision mediump float;
4061e5c31af7Sopenharmony_ci			${DECLARATIONS}
4062e5c31af7Sopenharmony_ci
4063e5c31af7Sopenharmony_ci			float func (const float f[3])
4064e5c31af7Sopenharmony_ci			{
4065e5c31af7Sopenharmony_ci				f[0] = 1.0;
4066e5c31af7Sopenharmony_ci			}
4067e5c31af7Sopenharmony_ci
4068e5c31af7Sopenharmony_ci			void main ()
4069e5c31af7Sopenharmony_ci			{
4070e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(1.0);
4071e5c31af7Sopenharmony_ci			}
4072e5c31af7Sopenharmony_ci		""
4073e5c31af7Sopenharmony_ci	end
4074e5c31af7Sopenharmony_ci
4075e5c31af7Sopenharmony_ci	case use_const_arg_in_const_expr
4076e5c31af7Sopenharmony_ci		version 300 es
4077e5c31af7Sopenharmony_ci		expect compile_fail
4078e5c31af7Sopenharmony_ci		both ""
4079e5c31af7Sopenharmony_ci			#version 300 es
4080e5c31af7Sopenharmony_ci			precision mediump float;
4081e5c31af7Sopenharmony_ci			${DECLARATIONS}
4082e5c31af7Sopenharmony_ci
4083e5c31af7Sopenharmony_ci			float func (const int i)
4084e5c31af7Sopenharmony_ci			{
4085e5c31af7Sopenharmony_ci				const int z = i+1;
4086e5c31af7Sopenharmony_ci				return float(z);
4087e5c31af7Sopenharmony_ci			}
4088e5c31af7Sopenharmony_ci
4089e5c31af7Sopenharmony_ci			void main ()
4090e5c31af7Sopenharmony_ci			{
4091e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(func(1));
4092e5c31af7Sopenharmony_ci			}
4093e5c31af7Sopenharmony_ci		""
4094e5c31af7Sopenharmony_ci	end
4095e5c31af7Sopenharmony_ci
4096e5c31af7Sopenharmony_ci	case use_const_arg_as_array_size
4097e5c31af7Sopenharmony_ci		version 300 es
4098e5c31af7Sopenharmony_ci		expect compile_fail
4099e5c31af7Sopenharmony_ci		both ""
4100e5c31af7Sopenharmony_ci			#version 300 es
4101e5c31af7Sopenharmony_ci			precision mediump float;
4102e5c31af7Sopenharmony_ci			${DECLARATIONS}
4103e5c31af7Sopenharmony_ci
4104e5c31af7Sopenharmony_ci			float func (const int i)
4105e5c31af7Sopenharmony_ci			{
4106e5c31af7Sopenharmony_ci				float f[i];
4107e5c31af7Sopenharmony_ci				f[0] = 1.0;
4108e5c31af7Sopenharmony_ci				return f[0];
4109e5c31af7Sopenharmony_ci			}
4110e5c31af7Sopenharmony_ci
4111e5c31af7Sopenharmony_ci			void main ()
4112e5c31af7Sopenharmony_ci			{
4113e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(func(1));
4114e5c31af7Sopenharmony_ci			}
4115e5c31af7Sopenharmony_ci		""
4116e5c31af7Sopenharmony_ci	end
4117e5c31af7Sopenharmony_ci
4118e5c31af7Sopenharmony_ci	case overload_builtin_function
4119e5c31af7Sopenharmony_ci		version 300 es
4120e5c31af7Sopenharmony_ci		expect compile_fail
4121e5c31af7Sopenharmony_ci		both ""
4122e5c31af7Sopenharmony_ci			#version 300 es
4123e5c31af7Sopenharmony_ci			precision mediump float;
4124e5c31af7Sopenharmony_ci			${DECLARATIONS}
4125e5c31af7Sopenharmony_ci
4126e5c31af7Sopenharmony_ci			int sin (int x)
4127e5c31af7Sopenharmony_ci			{
4128e5c31af7Sopenharmony_ci				return int(sin(float(x)));
4129e5c31af7Sopenharmony_ci			}
4130e5c31af7Sopenharmony_ci
4131e5c31af7Sopenharmony_ci			void main ()
4132e5c31af7Sopenharmony_ci			{
4133e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(sin(1));
4134e5c31af7Sopenharmony_ci			}
4135e5c31af7Sopenharmony_ci		""
4136e5c31af7Sopenharmony_ci	end
4137e5c31af7Sopenharmony_ci
4138e5c31af7Sopenharmony_ci	case redefine_builtin_function
4139e5c31af7Sopenharmony_ci		version 300 es
4140e5c31af7Sopenharmony_ci		expect compile_fail
4141e5c31af7Sopenharmony_ci		both ""
4142e5c31af7Sopenharmony_ci			#version 300 es
4143e5c31af7Sopenharmony_ci			precision mediump float;
4144e5c31af7Sopenharmony_ci			${DECLARATIONS}
4145e5c31af7Sopenharmony_ci
4146e5c31af7Sopenharmony_ci			float sin (float x)
4147e5c31af7Sopenharmony_ci			{
4148e5c31af7Sopenharmony_ci				return 0.0;
4149e5c31af7Sopenharmony_ci			}
4150e5c31af7Sopenharmony_ci
4151e5c31af7Sopenharmony_ci			void main ()
4152e5c31af7Sopenharmony_ci			{
4153e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(sin(1.0));
4154e5c31af7Sopenharmony_ci			}
4155e5c31af7Sopenharmony_ci		""
4156e5c31af7Sopenharmony_ci	end
4157e5c31af7Sopenharmony_ci
4158e5c31af7Sopenharmony_ci	case basic_recursion
4159e5c31af7Sopenharmony_ci		version 300 es
4160e5c31af7Sopenharmony_ci		expect compile_fail
4161e5c31af7Sopenharmony_ci		both ""
4162e5c31af7Sopenharmony_ci			#version 300 es
4163e5c31af7Sopenharmony_ci			precision mediump float;
4164e5c31af7Sopenharmony_ci			${DECLARATIONS}
4165e5c31af7Sopenharmony_ci
4166e5c31af7Sopenharmony_ci			float fib (float x)
4167e5c31af7Sopenharmony_ci			{
4168e5c31af7Sopenharmony_ci				if (x <= 1.0)
4169e5c31af7Sopenharmony_ci					return x;
4170e5c31af7Sopenharmony_ci				else
4171e5c31af7Sopenharmony_ci					return fib(x-2.0) + fib(x-1.0);
4172e5c31af7Sopenharmony_ci			}
4173e5c31af7Sopenharmony_ci
4174e5c31af7Sopenharmony_ci			void main ()
4175e5c31af7Sopenharmony_ci			{
4176e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(fib(5.0));
4177e5c31af7Sopenharmony_ci			}
4178e5c31af7Sopenharmony_ci		""
4179e5c31af7Sopenharmony_ci	end
4180e5c31af7Sopenharmony_ci
4181e5c31af7Sopenharmony_ci	case simple_tail_recursion
4182e5c31af7Sopenharmony_ci		version 300 es
4183e5c31af7Sopenharmony_ci		expect compile_fail
4184e5c31af7Sopenharmony_ci		both ""
4185e5c31af7Sopenharmony_ci			#version 300 es
4186e5c31af7Sopenharmony_ci			precision mediump float;
4187e5c31af7Sopenharmony_ci			${DECLARATIONS}
4188e5c31af7Sopenharmony_ci
4189e5c31af7Sopenharmony_ci			float rec (float x)
4190e5c31af7Sopenharmony_ci			{
4191e5c31af7Sopenharmony_ci				if (x <= 0.0)
4192e5c31af7Sopenharmony_ci					return 0.0;
4193e5c31af7Sopenharmony_ci				else
4194e5c31af7Sopenharmony_ci					return rec(x-1.0);
4195e5c31af7Sopenharmony_ci			}
4196e5c31af7Sopenharmony_ci
4197e5c31af7Sopenharmony_ci			void main ()
4198e5c31af7Sopenharmony_ci			{
4199e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(rec(5.0));
4200e5c31af7Sopenharmony_ci			}
4201e5c31af7Sopenharmony_ci		""
4202e5c31af7Sopenharmony_ci	end
4203e5c31af7Sopenharmony_ci
4204e5c31af7Sopenharmony_ci	case dynamic_conditional_recursion
4205e5c31af7Sopenharmony_ci		version 300 es
4206e5c31af7Sopenharmony_ci		expect compile_fail
4207e5c31af7Sopenharmony_ci		both ""
4208e5c31af7Sopenharmony_ci			#version 300 es
4209e5c31af7Sopenharmony_ci			precision mediump float;
4210e5c31af7Sopenharmony_ci			${DECLARATIONS}
4211e5c31af7Sopenharmony_ci			uniform float ua;
4212e5c31af7Sopenharmony_ci			uniform float ub;
4213e5c31af7Sopenharmony_ci
4214e5c31af7Sopenharmony_ci			float funcA (float x);
4215e5c31af7Sopenharmony_ci			float funcB (float x);
4216e5c31af7Sopenharmony_ci
4217e5c31af7Sopenharmony_ci			float funcA (float x)
4218e5c31af7Sopenharmony_ci			{
4219e5c31af7Sopenharmony_ci				if (ub+x > 0.0)
4220e5c31af7Sopenharmony_ci					funcB(x*2.0);
4221e5c31af7Sopenharmony_ci				else
4222e5c31af7Sopenharmony_ci					return ub;
4223e5c31af7Sopenharmony_ci			}
4224e5c31af7Sopenharmony_ci
4225e5c31af7Sopenharmony_ci			float funcB (float x)
4226e5c31af7Sopenharmony_ci			{
4227e5c31af7Sopenharmony_ci				return sqrt(funcA(x));
4228e5c31af7Sopenharmony_ci			}
4229e5c31af7Sopenharmony_ci
4230e5c31af7Sopenharmony_ci			void main ()
4231e5c31af7Sopenharmony_ci			{
4232e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(funcB(ua));
4233e5c31af7Sopenharmony_ci			}
4234e5c31af7Sopenharmony_ci		""
4235e5c31af7Sopenharmony_ci	end
4236e5c31af7Sopenharmony_ci
4237e5c31af7Sopenharmony_ci	case dynamic_loop_recursion
4238e5c31af7Sopenharmony_ci		version 300 es
4239e5c31af7Sopenharmony_ci		expect compile_fail
4240e5c31af7Sopenharmony_ci		both ""
4241e5c31af7Sopenharmony_ci			#version 300 es
4242e5c31af7Sopenharmony_ci			precision mediump float;
4243e5c31af7Sopenharmony_ci			${DECLARATIONS}
4244e5c31af7Sopenharmony_ci			uniform float ua;
4245e5c31af7Sopenharmony_ci			uniform float ub;
4246e5c31af7Sopenharmony_ci
4247e5c31af7Sopenharmony_ci			float funcA (float x);
4248e5c31af7Sopenharmony_ci			float funcB (float x);
4249e5c31af7Sopenharmony_ci
4250e5c31af7Sopenharmony_ci			float funcA (float x)
4251e5c31af7Sopenharmony_ci			{
4252e5c31af7Sopenharmony_ci				for (float z = 0.0; z < ub+x; z++)
4253e5c31af7Sopenharmony_ci				{
4254e5c31af7Sopenharmony_ci					if (z > 2.0)
4255e5c31af7Sopenharmony_ci						funcB(z*2.0);
4256e5c31af7Sopenharmony_ci					else
4257e5c31af7Sopenharmony_ci						return z;
4258e5c31af7Sopenharmony_ci				}
4259e5c31af7Sopenharmony_ci			}
4260e5c31af7Sopenharmony_ci
4261e5c31af7Sopenharmony_ci			float funcB (float x)
4262e5c31af7Sopenharmony_ci			{
4263e5c31af7Sopenharmony_ci				return sqrt(funcA(x));
4264e5c31af7Sopenharmony_ci			}
4265e5c31af7Sopenharmony_ci
4266e5c31af7Sopenharmony_ci			void main ()
4267e5c31af7Sopenharmony_ci			{
4268e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(funcB(ua));
4269e5c31af7Sopenharmony_ci			}
4270e5c31af7Sopenharmony_ci		""
4271e5c31af7Sopenharmony_ci	end
4272e5c31af7Sopenharmony_ci
4273e5c31af7Sopenharmony_ci	case dynamic_switch_recursion
4274e5c31af7Sopenharmony_ci		version 300 es
4275e5c31af7Sopenharmony_ci		expect compile_fail
4276e5c31af7Sopenharmony_ci		both ""
4277e5c31af7Sopenharmony_ci			#version 300 es
4278e5c31af7Sopenharmony_ci			precision mediump float;
4279e5c31af7Sopenharmony_ci			${DECLARATIONS}
4280e5c31af7Sopenharmony_ci			uniform float ua;
4281e5c31af7Sopenharmony_ci			uniform mediump int ub;
4282e5c31af7Sopenharmony_ci
4283e5c31af7Sopenharmony_ci			float funcA (float x);
4284e5c31af7Sopenharmony_ci			float funcB (float x);
4285e5c31af7Sopenharmony_ci
4286e5c31af7Sopenharmony_ci			float funcA (float x)
4287e5c31af7Sopenharmony_ci			{
4288e5c31af7Sopenharmony_ci				switch (ub + int(x))
4289e5c31af7Sopenharmony_ci				{
4290e5c31af7Sopenharmony_ci					case 0: return ua-1.0;
4291e5c31af7Sopenharmony_ci					case 1: return ua;
4292e5c31af7Sopenharmony_ci					case 2: return funcB(x*2.0);
4293e5c31af7Sopenharmony_ci					default: return 0.0;
4294e5c31af7Sopenharmony_ci				}
4295e5c31af7Sopenharmony_ci			}
4296e5c31af7Sopenharmony_ci
4297e5c31af7Sopenharmony_ci			float funcB (float x)
4298e5c31af7Sopenharmony_ci			{
4299e5c31af7Sopenharmony_ci				return sqrt(funcA(x));
4300e5c31af7Sopenharmony_ci			}
4301e5c31af7Sopenharmony_ci
4302e5c31af7Sopenharmony_ci			void main ()
4303e5c31af7Sopenharmony_ci			{
4304e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(funcB(ua));
4305e5c31af7Sopenharmony_ci			}
4306e5c31af7Sopenharmony_ci		""
4307e5c31af7Sopenharmony_ci	end
4308e5c31af7Sopenharmony_ci
4309e5c31af7Sopenharmony_ci	case modify_const_arg
4310e5c31af7Sopenharmony_ci		version 300 es
4311e5c31af7Sopenharmony_ci		expect compile_fail
4312e5c31af7Sopenharmony_ci		both ""
4313e5c31af7Sopenharmony_ci			#version 300 es
4314e5c31af7Sopenharmony_ci			precision mediump float;
4315e5c31af7Sopenharmony_ci			precision mediump int;
4316e5c31af7Sopenharmony_ci			${DECLARATIONS}
4317e5c31af7Sopenharmony_ci
4318e5c31af7Sopenharmony_ci			int func (const int a)
4319e5c31af7Sopenharmony_ci			{
4320e5c31af7Sopenharmony_ci				a = -a;
4321e5c31af7Sopenharmony_ci				return 2 * a;
4322e5c31af7Sopenharmony_ci			}
4323e5c31af7Sopenharmony_ci
4324e5c31af7Sopenharmony_ci			void main()
4325e5c31af7Sopenharmony_ci			{
4326e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(func(3));
4327e5c31af7Sopenharmony_ci			}
4328e5c31af7Sopenharmony_ci		""
4329e5c31af7Sopenharmony_ci	end
4330e5c31af7Sopenharmony_ci
4331e5c31af7Sopenharmony_ci	case init_const_local_from_const_arg
4332e5c31af7Sopenharmony_ci		version 300 es
4333e5c31af7Sopenharmony_ci		expect compile_fail
4334e5c31af7Sopenharmony_ci		both ""
4335e5c31af7Sopenharmony_ci			#version 300 es
4336e5c31af7Sopenharmony_ci			precision mediump float;
4337e5c31af7Sopenharmony_ci			precision mediump int;
4338e5c31af7Sopenharmony_ci			${DECLARATIONS}
4339e5c31af7Sopenharmony_ci
4340e5c31af7Sopenharmony_ci			int func (const int a)
4341e5c31af7Sopenharmony_ci			{
4342e5c31af7Sopenharmony_ci				const int b = -a;
4343e5c31af7Sopenharmony_ci				return 2 * b;
4344e5c31af7Sopenharmony_ci			}
4345e5c31af7Sopenharmony_ci
4346e5c31af7Sopenharmony_ci			void main()
4347e5c31af7Sopenharmony_ci			{
4348e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(func(3));
4349e5c31af7Sopenharmony_ci			}
4350e5c31af7Sopenharmony_ci		""
4351e5c31af7Sopenharmony_ci	end
4352e5c31af7Sopenharmony_ci
4353e5c31af7Sopenharmony_ci	case array_size_from_const_arg
4354e5c31af7Sopenharmony_ci		version 300 es
4355e5c31af7Sopenharmony_ci		expect compile_fail
4356e5c31af7Sopenharmony_ci		both ""
4357e5c31af7Sopenharmony_ci			#version 300 es
4358e5c31af7Sopenharmony_ci			precision mediump float;
4359e5c31af7Sopenharmony_ci			precision mediump int;
4360e5c31af7Sopenharmony_ci			${DECLARATIONS}
4361e5c31af7Sopenharmony_ci
4362e5c31af7Sopenharmony_ci			int func (const int a)
4363e5c31af7Sopenharmony_ci			{
4364e5c31af7Sopenharmony_ci				int arr[a];
4365e5c31af7Sopenharmony_ci				arr[1] = 3;
4366e5c31af7Sopenharmony_ci				return arr[1];
4367e5c31af7Sopenharmony_ci			}
4368e5c31af7Sopenharmony_ci
4369e5c31af7Sopenharmony_ci			void main()
4370e5c31af7Sopenharmony_ci			{
4371e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(func(3));
4372e5c31af7Sopenharmony_ci			}
4373e5c31af7Sopenharmony_ci		""
4374e5c31af7Sopenharmony_ci	end
4375e5c31af7Sopenharmony_ci
4376e5c31af7Sopenharmony_ciend # invalid
4377