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 310 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 310 es
22e5c31af7Sopenharmony_ci			precision highp 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 310 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 310 es
48e5c31af7Sopenharmony_ci			precision highp 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 310 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 310 es
74e5c31af7Sopenharmony_ci			precision highp 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 310 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 310 es
100e5c31af7Sopenharmony_ci			precision highp 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 310 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 310 es
126e5c31af7Sopenharmony_ci			precision highp 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 310 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 310 es
152e5c31af7Sopenharmony_ci			precision highp 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 310 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 310 es
178e5c31af7Sopenharmony_ci			precision highp 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 310 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 310 es
204e5c31af7Sopenharmony_ci			precision highp float;
205e5c31af7Sopenharmony_ci			precision highp 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 310 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 310 es
232e5c31af7Sopenharmony_ci			precision highp float;
233e5c31af7Sopenharmony_ci			precision highp 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 310 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 310 es
260e5c31af7Sopenharmony_ci			precision highp float;
261e5c31af7Sopenharmony_ci			precision highp 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 310 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 310 es
288e5c31af7Sopenharmony_ci			precision highp float;
289e5c31af7Sopenharmony_ci			precision highp 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 310 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 310 es
316e5c31af7Sopenharmony_ci			precision highp float;
317e5c31af7Sopenharmony_ci			precision highp 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 310 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 310 es
344e5c31af7Sopenharmony_ci			precision highp float;
345e5c31af7Sopenharmony_ci			precision highp 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 310 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 310 es
372e5c31af7Sopenharmony_ci			precision highp float;
373e5c31af7Sopenharmony_ci			precision highp 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 310 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 310 es
400e5c31af7Sopenharmony_ci			precision highp float;
401e5c31af7Sopenharmony_ci			precision highp 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 310 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 310 es
428e5c31af7Sopenharmony_ci			precision highp float;
429e5c31af7Sopenharmony_ci			precision highp int;
430e5c31af7Sopenharmony_ci			${DECLARATIONS}
431e5c31af7Sopenharmony_ci
432e5c31af7Sopenharmony_ci			bool func (bool a)
433e5c31af7Sopenharmony_ci			{
434e5c31af7Sopenharmony_ci				return !a;
435e5c31af7Sopenharmony_ci			}
436e5c31af7Sopenharmony_ci
437e5c31af7Sopenharmony_ci			void main()
438e5c31af7Sopenharmony_ci			{
439e5c31af7Sopenharmony_ci				${SETUP}
440e5c31af7Sopenharmony_ci				out0 = func(in0);
441e5c31af7Sopenharmony_ci				${OUTPUT}
442e5c31af7Sopenharmony_ci			}
443e5c31af7Sopenharmony_ci		""
444e5c31af7Sopenharmony_ci	end
445e5c31af7Sopenharmony_ci
446e5c31af7Sopenharmony_ci	case bool_bvec2
447e5c31af7Sopenharmony_ci		version 310 es
448e5c31af7Sopenharmony_ci		values
449e5c31af7Sopenharmony_ci		{
450e5c31af7Sopenharmony_ci			input bvec2 in0		= [ bvec2(true, true) | bvec2(false, true) ];
451e5c31af7Sopenharmony_ci			output bool out0	= [ false | true ];
452e5c31af7Sopenharmony_ci		}
453e5c31af7Sopenharmony_ci
454e5c31af7Sopenharmony_ci		both ""
455e5c31af7Sopenharmony_ci			#version 310 es
456e5c31af7Sopenharmony_ci			precision highp float;
457e5c31af7Sopenharmony_ci			precision highp int;
458e5c31af7Sopenharmony_ci			${DECLARATIONS}
459e5c31af7Sopenharmony_ci
460e5c31af7Sopenharmony_ci			bool func (bvec2 a)
461e5c31af7Sopenharmony_ci			{
462e5c31af7Sopenharmony_ci				return !(a.x == a.y);
463e5c31af7Sopenharmony_ci			}
464e5c31af7Sopenharmony_ci
465e5c31af7Sopenharmony_ci			void main()
466e5c31af7Sopenharmony_ci			{
467e5c31af7Sopenharmony_ci				${SETUP}
468e5c31af7Sopenharmony_ci				out0 = func(in0);
469e5c31af7Sopenharmony_ci				${OUTPUT}
470e5c31af7Sopenharmony_ci			}
471e5c31af7Sopenharmony_ci		""
472e5c31af7Sopenharmony_ci	end
473e5c31af7Sopenharmony_ci
474e5c31af7Sopenharmony_ci	case bool_bvec3
475e5c31af7Sopenharmony_ci		version 310 es
476e5c31af7Sopenharmony_ci		values
477e5c31af7Sopenharmony_ci		{
478e5c31af7Sopenharmony_ci			input bvec3 in0		= [ bvec3(true, true, false) | bvec3(true, false, false) ];
479e5c31af7Sopenharmony_ci			output bool out0	= [ false | true ];
480e5c31af7Sopenharmony_ci		}
481e5c31af7Sopenharmony_ci
482e5c31af7Sopenharmony_ci		both ""
483e5c31af7Sopenharmony_ci			#version 310 es
484e5c31af7Sopenharmony_ci			precision highp float;
485e5c31af7Sopenharmony_ci			precision highp int;
486e5c31af7Sopenharmony_ci			${DECLARATIONS}
487e5c31af7Sopenharmony_ci
488e5c31af7Sopenharmony_ci			bool func (bvec3 a)
489e5c31af7Sopenharmony_ci			{
490e5c31af7Sopenharmony_ci				return (a.x == a.y) == a.z;
491e5c31af7Sopenharmony_ci			}
492e5c31af7Sopenharmony_ci
493e5c31af7Sopenharmony_ci			void main()
494e5c31af7Sopenharmony_ci			{
495e5c31af7Sopenharmony_ci				${SETUP}
496e5c31af7Sopenharmony_ci				out0 = func(in0);
497e5c31af7Sopenharmony_ci				${OUTPUT}
498e5c31af7Sopenharmony_ci			}
499e5c31af7Sopenharmony_ci		""
500e5c31af7Sopenharmony_ci	end
501e5c31af7Sopenharmony_ci
502e5c31af7Sopenharmony_ci	case bool_bvec4
503e5c31af7Sopenharmony_ci		version 310 es
504e5c31af7Sopenharmony_ci		values
505e5c31af7Sopenharmony_ci		{
506e5c31af7Sopenharmony_ci			input bvec4 in0		= [ bvec4(true, true, true, false) | bvec4(false, false, true, true) | bvec4(true, false, false, true) ];
507e5c31af7Sopenharmony_ci			output bool out0	= [ false | true | true ];
508e5c31af7Sopenharmony_ci		}
509e5c31af7Sopenharmony_ci
510e5c31af7Sopenharmony_ci		both ""
511e5c31af7Sopenharmony_ci			#version 310 es
512e5c31af7Sopenharmony_ci			precision highp float;
513e5c31af7Sopenharmony_ci			precision highp int;
514e5c31af7Sopenharmony_ci			${DECLARATIONS}
515e5c31af7Sopenharmony_ci
516e5c31af7Sopenharmony_ci			bool func (bvec4 a)
517e5c31af7Sopenharmony_ci			{
518e5c31af7Sopenharmony_ci				return ((a.x == a.y) == (a.z == a.w));
519e5c31af7Sopenharmony_ci			}
520e5c31af7Sopenharmony_ci
521e5c31af7Sopenharmony_ci			void main()
522e5c31af7Sopenharmony_ci			{
523e5c31af7Sopenharmony_ci				${SETUP}
524e5c31af7Sopenharmony_ci				out0 = func(in0);
525e5c31af7Sopenharmony_ci				${OUTPUT}
526e5c31af7Sopenharmony_ci			}
527e5c31af7Sopenharmony_ci		""
528e5c31af7Sopenharmony_ci	end
529e5c31af7Sopenharmony_ci
530e5c31af7Sopenharmony_ci	case mat2
531e5c31af7Sopenharmony_ci		version 310 es
532e5c31af7Sopenharmony_ci		values
533e5c31af7Sopenharmony_ci		{
534e5c31af7Sopenharmony_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) ];
535e5c31af7Sopenharmony_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) ];
536e5c31af7Sopenharmony_ci		}
537e5c31af7Sopenharmony_ci
538e5c31af7Sopenharmony_ci		both ""
539e5c31af7Sopenharmony_ci			#version 310 es
540e5c31af7Sopenharmony_ci			precision highp float;
541e5c31af7Sopenharmony_ci			${DECLARATIONS}
542e5c31af7Sopenharmony_ci
543e5c31af7Sopenharmony_ci			mat2 func (mat2 a)
544e5c31af7Sopenharmony_ci			{
545e5c31af7Sopenharmony_ci				return -2.0*a;
546e5c31af7Sopenharmony_ci			}
547e5c31af7Sopenharmony_ci
548e5c31af7Sopenharmony_ci			void main()
549e5c31af7Sopenharmony_ci			{
550e5c31af7Sopenharmony_ci				${SETUP}
551e5c31af7Sopenharmony_ci				out0 = func(in0);
552e5c31af7Sopenharmony_ci				${OUTPUT}
553e5c31af7Sopenharmony_ci			}
554e5c31af7Sopenharmony_ci		""
555e5c31af7Sopenharmony_ci	end
556e5c31af7Sopenharmony_ci
557e5c31af7Sopenharmony_ci
558e5c31af7Sopenharmony_ci	case mat2x3
559e5c31af7Sopenharmony_ci		version 310 es
560e5c31af7Sopenharmony_ci		values
561e5c31af7Sopenharmony_ci		{
562e5c31af7Sopenharmony_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) ];
563e5c31af7Sopenharmony_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) ];
564e5c31af7Sopenharmony_ci		}
565e5c31af7Sopenharmony_ci
566e5c31af7Sopenharmony_ci		both ""
567e5c31af7Sopenharmony_ci			#version 310 es
568e5c31af7Sopenharmony_ci			precision highp float;
569e5c31af7Sopenharmony_ci			${DECLARATIONS}
570e5c31af7Sopenharmony_ci
571e5c31af7Sopenharmony_ci			mat2x3 func (mat2x3 a)
572e5c31af7Sopenharmony_ci			{
573e5c31af7Sopenharmony_ci				return -2.0*a;
574e5c31af7Sopenharmony_ci			}
575e5c31af7Sopenharmony_ci
576e5c31af7Sopenharmony_ci			void main()
577e5c31af7Sopenharmony_ci			{
578e5c31af7Sopenharmony_ci				${SETUP}
579e5c31af7Sopenharmony_ci				out0 = func(in0);
580e5c31af7Sopenharmony_ci				${OUTPUT}
581e5c31af7Sopenharmony_ci			}
582e5c31af7Sopenharmony_ci		""
583e5c31af7Sopenharmony_ci	end
584e5c31af7Sopenharmony_ci
585e5c31af7Sopenharmony_ci
586e5c31af7Sopenharmony_ci	case mat2x4
587e5c31af7Sopenharmony_ci		version 310 es
588e5c31af7Sopenharmony_ci		values
589e5c31af7Sopenharmony_ci		{
590e5c31af7Sopenharmony_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) ];
591e5c31af7Sopenharmony_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) ];
592e5c31af7Sopenharmony_ci		}
593e5c31af7Sopenharmony_ci
594e5c31af7Sopenharmony_ci		both ""
595e5c31af7Sopenharmony_ci			#version 310 es
596e5c31af7Sopenharmony_ci			precision highp float;
597e5c31af7Sopenharmony_ci			${DECLARATIONS}
598e5c31af7Sopenharmony_ci
599e5c31af7Sopenharmony_ci			mat2x4 func (mat2x4 a)
600e5c31af7Sopenharmony_ci			{
601e5c31af7Sopenharmony_ci				return -2.0*a;
602e5c31af7Sopenharmony_ci			}
603e5c31af7Sopenharmony_ci
604e5c31af7Sopenharmony_ci			void main()
605e5c31af7Sopenharmony_ci			{
606e5c31af7Sopenharmony_ci				${SETUP}
607e5c31af7Sopenharmony_ci				out0 = func(in0);
608e5c31af7Sopenharmony_ci				${OUTPUT}
609e5c31af7Sopenharmony_ci			}
610e5c31af7Sopenharmony_ci		""
611e5c31af7Sopenharmony_ci	end
612e5c31af7Sopenharmony_ci
613e5c31af7Sopenharmony_ci
614e5c31af7Sopenharmony_ci	case mat3x2
615e5c31af7Sopenharmony_ci		version 310 es
616e5c31af7Sopenharmony_ci		values
617e5c31af7Sopenharmony_ci		{
618e5c31af7Sopenharmony_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) ];
619e5c31af7Sopenharmony_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) ];
620e5c31af7Sopenharmony_ci		}
621e5c31af7Sopenharmony_ci
622e5c31af7Sopenharmony_ci		both ""
623e5c31af7Sopenharmony_ci			#version 310 es
624e5c31af7Sopenharmony_ci			precision highp float;
625e5c31af7Sopenharmony_ci			${DECLARATIONS}
626e5c31af7Sopenharmony_ci
627e5c31af7Sopenharmony_ci			mat3x2 func (mat3x2 a)
628e5c31af7Sopenharmony_ci			{
629e5c31af7Sopenharmony_ci				return -2.0*a;
630e5c31af7Sopenharmony_ci			}
631e5c31af7Sopenharmony_ci
632e5c31af7Sopenharmony_ci			void main()
633e5c31af7Sopenharmony_ci			{
634e5c31af7Sopenharmony_ci				${SETUP}
635e5c31af7Sopenharmony_ci				out0 = func(in0);
636e5c31af7Sopenharmony_ci				${OUTPUT}
637e5c31af7Sopenharmony_ci			}
638e5c31af7Sopenharmony_ci		""
639e5c31af7Sopenharmony_ci	end
640e5c31af7Sopenharmony_ci
641e5c31af7Sopenharmony_ci
642e5c31af7Sopenharmony_ci	case mat3
643e5c31af7Sopenharmony_ci		version 310 es
644e5c31af7Sopenharmony_ci		values
645e5c31af7Sopenharmony_ci		{
646e5c31af7Sopenharmony_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) ];
647e5c31af7Sopenharmony_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) ];
648e5c31af7Sopenharmony_ci		}
649e5c31af7Sopenharmony_ci
650e5c31af7Sopenharmony_ci		both ""
651e5c31af7Sopenharmony_ci			#version 310 es
652e5c31af7Sopenharmony_ci			precision highp float;
653e5c31af7Sopenharmony_ci			${DECLARATIONS}
654e5c31af7Sopenharmony_ci
655e5c31af7Sopenharmony_ci			mat3 func (mat3 a)
656e5c31af7Sopenharmony_ci			{
657e5c31af7Sopenharmony_ci				return -2.0*a;
658e5c31af7Sopenharmony_ci			}
659e5c31af7Sopenharmony_ci
660e5c31af7Sopenharmony_ci			void main()
661e5c31af7Sopenharmony_ci			{
662e5c31af7Sopenharmony_ci				${SETUP}
663e5c31af7Sopenharmony_ci				out0 = func(in0);
664e5c31af7Sopenharmony_ci				${OUTPUT}
665e5c31af7Sopenharmony_ci			}
666e5c31af7Sopenharmony_ci		""
667e5c31af7Sopenharmony_ci	end
668e5c31af7Sopenharmony_ci
669e5c31af7Sopenharmony_ci
670e5c31af7Sopenharmony_ci	case mat3x4
671e5c31af7Sopenharmony_ci		version 310 es
672e5c31af7Sopenharmony_ci		values
673e5c31af7Sopenharmony_ci		{
674e5c31af7Sopenharmony_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) ];
675e5c31af7Sopenharmony_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) ];
676e5c31af7Sopenharmony_ci		}
677e5c31af7Sopenharmony_ci
678e5c31af7Sopenharmony_ci		both ""
679e5c31af7Sopenharmony_ci			#version 310 es
680e5c31af7Sopenharmony_ci			precision highp float;
681e5c31af7Sopenharmony_ci			${DECLARATIONS}
682e5c31af7Sopenharmony_ci
683e5c31af7Sopenharmony_ci			mat3x4 func (mat3x4 a)
684e5c31af7Sopenharmony_ci			{
685e5c31af7Sopenharmony_ci				return -2.0*a;
686e5c31af7Sopenharmony_ci			}
687e5c31af7Sopenharmony_ci
688e5c31af7Sopenharmony_ci			void main()
689e5c31af7Sopenharmony_ci			{
690e5c31af7Sopenharmony_ci				${SETUP}
691e5c31af7Sopenharmony_ci				out0 = func(in0);
692e5c31af7Sopenharmony_ci				${OUTPUT}
693e5c31af7Sopenharmony_ci			}
694e5c31af7Sopenharmony_ci		""
695e5c31af7Sopenharmony_ci	end
696e5c31af7Sopenharmony_ci
697e5c31af7Sopenharmony_ci
698e5c31af7Sopenharmony_ci	case mat4x2
699e5c31af7Sopenharmony_ci		version 310 es
700e5c31af7Sopenharmony_ci		values
701e5c31af7Sopenharmony_ci		{
702e5c31af7Sopenharmony_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) ];
703e5c31af7Sopenharmony_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) ];
704e5c31af7Sopenharmony_ci		}
705e5c31af7Sopenharmony_ci
706e5c31af7Sopenharmony_ci		both ""
707e5c31af7Sopenharmony_ci			#version 310 es
708e5c31af7Sopenharmony_ci			precision highp float;
709e5c31af7Sopenharmony_ci			${DECLARATIONS}
710e5c31af7Sopenharmony_ci
711e5c31af7Sopenharmony_ci			mat4x2 func (mat4x2 a)
712e5c31af7Sopenharmony_ci			{
713e5c31af7Sopenharmony_ci				return -2.0*a;
714e5c31af7Sopenharmony_ci			}
715e5c31af7Sopenharmony_ci
716e5c31af7Sopenharmony_ci			void main()
717e5c31af7Sopenharmony_ci			{
718e5c31af7Sopenharmony_ci				${SETUP}
719e5c31af7Sopenharmony_ci				out0 = func(in0);
720e5c31af7Sopenharmony_ci				${OUTPUT}
721e5c31af7Sopenharmony_ci			}
722e5c31af7Sopenharmony_ci		""
723e5c31af7Sopenharmony_ci	end
724e5c31af7Sopenharmony_ci
725e5c31af7Sopenharmony_ci
726e5c31af7Sopenharmony_ci	case mat4x3
727e5c31af7Sopenharmony_ci		version 310 es
728e5c31af7Sopenharmony_ci		values
729e5c31af7Sopenharmony_ci		{
730e5c31af7Sopenharmony_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) ];
731e5c31af7Sopenharmony_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) ];
732e5c31af7Sopenharmony_ci		}
733e5c31af7Sopenharmony_ci
734e5c31af7Sopenharmony_ci		both ""
735e5c31af7Sopenharmony_ci			#version 310 es
736e5c31af7Sopenharmony_ci			precision highp float;
737e5c31af7Sopenharmony_ci			${DECLARATIONS}
738e5c31af7Sopenharmony_ci
739e5c31af7Sopenharmony_ci			mat4x3 func (mat4x3 a)
740e5c31af7Sopenharmony_ci			{
741e5c31af7Sopenharmony_ci				return -2.0*a;
742e5c31af7Sopenharmony_ci			}
743e5c31af7Sopenharmony_ci
744e5c31af7Sopenharmony_ci			void main()
745e5c31af7Sopenharmony_ci			{
746e5c31af7Sopenharmony_ci				${SETUP}
747e5c31af7Sopenharmony_ci				out0 = func(in0);
748e5c31af7Sopenharmony_ci				${OUTPUT}
749e5c31af7Sopenharmony_ci			}
750e5c31af7Sopenharmony_ci		""
751e5c31af7Sopenharmony_ci	end
752e5c31af7Sopenharmony_ci
753e5c31af7Sopenharmony_ci
754e5c31af7Sopenharmony_ci	case mat4
755e5c31af7Sopenharmony_ci		version 310 es
756e5c31af7Sopenharmony_ci		values
757e5c31af7Sopenharmony_ci		{
758e5c31af7Sopenharmony_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) ];
759e5c31af7Sopenharmony_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) ];
760e5c31af7Sopenharmony_ci		}
761e5c31af7Sopenharmony_ci
762e5c31af7Sopenharmony_ci		both ""
763e5c31af7Sopenharmony_ci			#version 310 es
764e5c31af7Sopenharmony_ci			precision highp float;
765e5c31af7Sopenharmony_ci			${DECLARATIONS}
766e5c31af7Sopenharmony_ci
767e5c31af7Sopenharmony_ci			mat4 func (mat4 a)
768e5c31af7Sopenharmony_ci			{
769e5c31af7Sopenharmony_ci				return -2.0*a;
770e5c31af7Sopenharmony_ci			}
771e5c31af7Sopenharmony_ci
772e5c31af7Sopenharmony_ci			void main()
773e5c31af7Sopenharmony_ci			{
774e5c31af7Sopenharmony_ci				${SETUP}
775e5c31af7Sopenharmony_ci				out0 = func(in0);
776e5c31af7Sopenharmony_ci				${OUTPUT}
777e5c31af7Sopenharmony_ci			}
778e5c31af7Sopenharmony_ci		""
779e5c31af7Sopenharmony_ci	end
780e5c31af7Sopenharmony_ci
781e5c31af7Sopenharmony_ci	case float_struct
782e5c31af7Sopenharmony_ci		version 310 es
783e5c31af7Sopenharmony_ci		values
784e5c31af7Sopenharmony_ci		{
785e5c31af7Sopenharmony_ci			input vec3 in0		= [ vec3(0.0, 1.0, -2.0) | vec3(2.0, 2.5, -4.0) ];
786e5c31af7Sopenharmony_ci			output float out0	= [ 1.0 | -0.5 ];
787e5c31af7Sopenharmony_ci		}
788e5c31af7Sopenharmony_ci
789e5c31af7Sopenharmony_ci		both ""
790e5c31af7Sopenharmony_ci			#version 310 es
791e5c31af7Sopenharmony_ci			precision highp float;
792e5c31af7Sopenharmony_ci			${DECLARATIONS}
793e5c31af7Sopenharmony_ci
794e5c31af7Sopenharmony_ci			struct Pos { float a, b, c; };
795e5c31af7Sopenharmony_ci
796e5c31af7Sopenharmony_ci			float func (Pos p)
797e5c31af7Sopenharmony_ci			{
798e5c31af7Sopenharmony_ci				return -(p.a + p.b + p.c);
799e5c31af7Sopenharmony_ci			}
800e5c31af7Sopenharmony_ci
801e5c31af7Sopenharmony_ci			void main()
802e5c31af7Sopenharmony_ci			{
803e5c31af7Sopenharmony_ci				Pos p = Pos(in0.x, in0.y, in0.z);
804e5c31af7Sopenharmony_ci				out0 = func(p);
805e5c31af7Sopenharmony_ci				${OUTPUT}
806e5c31af7Sopenharmony_ci			}
807e5c31af7Sopenharmony_ci		""
808e5c31af7Sopenharmony_ci	end
809e5c31af7Sopenharmony_ci
810e5c31af7Sopenharmony_ci	case struct_struct
811e5c31af7Sopenharmony_ci		version 310 es
812e5c31af7Sopenharmony_ci		values
813e5c31af7Sopenharmony_ci		{
814e5c31af7Sopenharmony_ci			input vec3 in0		= [ vec3(0.0, 1.0, -2.0) | vec3(2.0, 2.5, -4.0) ];
815e5c31af7Sopenharmony_ci			output float out0	= [ 1.0 | -0.5 ];
816e5c31af7Sopenharmony_ci		}
817e5c31af7Sopenharmony_ci
818e5c31af7Sopenharmony_ci		both ""
819e5c31af7Sopenharmony_ci			#version 310 es
820e5c31af7Sopenharmony_ci			precision highp float;
821e5c31af7Sopenharmony_ci			${DECLARATIONS}
822e5c31af7Sopenharmony_ci
823e5c31af7Sopenharmony_ci			struct Pos { float a, b, c; };
824e5c31af7Sopenharmony_ci
825e5c31af7Sopenharmony_ci			Pos func (Pos p)
826e5c31af7Sopenharmony_ci			{
827e5c31af7Sopenharmony_ci				return Pos(-p.a, -p.b, -p.c);
828e5c31af7Sopenharmony_ci			}
829e5c31af7Sopenharmony_ci
830e5c31af7Sopenharmony_ci			void main()
831e5c31af7Sopenharmony_ci			{
832e5c31af7Sopenharmony_ci				Pos p = Pos(in0.x, in0.y, in0.z);
833e5c31af7Sopenharmony_ci				p = func(p);
834e5c31af7Sopenharmony_ci				out0 = p.a + p.b + p.c;
835e5c31af7Sopenharmony_ci				${OUTPUT}
836e5c31af7Sopenharmony_ci			}
837e5c31af7Sopenharmony_ci		""
838e5c31af7Sopenharmony_ci	end
839e5c31af7Sopenharmony_ci
840e5c31af7Sopenharmony_ci	case struct_nested_struct
841e5c31af7Sopenharmony_ci		version 310 es
842e5c31af7Sopenharmony_ci		values
843e5c31af7Sopenharmony_ci		{
844e5c31af7Sopenharmony_ci			input vec3 in0		= [ vec3(0.0, 1.0, -2.0) | vec3(2.0, 2.5, -4.0) ];
845e5c31af7Sopenharmony_ci			output float out0	= [ 1.0 | -0.5 ];
846e5c31af7Sopenharmony_ci		}
847e5c31af7Sopenharmony_ci
848e5c31af7Sopenharmony_ci		both ""
849e5c31af7Sopenharmony_ci			#version 310 es
850e5c31af7Sopenharmony_ci			precision highp float;
851e5c31af7Sopenharmony_ci			${DECLARATIONS}
852e5c31af7Sopenharmony_ci
853e5c31af7Sopenharmony_ci			struct Pos { float a, b, c; };
854e5c31af7Sopenharmony_ci			struct Line { Pos start, end; };
855e5c31af7Sopenharmony_ci
856e5c31af7Sopenharmony_ci			Line func (Pos p)
857e5c31af7Sopenharmony_ci			{
858e5c31af7Sopenharmony_ci				return Line(p, Pos(-p.a, -p.b, -p.c));
859e5c31af7Sopenharmony_ci			}
860e5c31af7Sopenharmony_ci
861e5c31af7Sopenharmony_ci			float sum (Pos p)
862e5c31af7Sopenharmony_ci			{
863e5c31af7Sopenharmony_ci				return (p.a + p.b + p.c);
864e5c31af7Sopenharmony_ci			}
865e5c31af7Sopenharmony_ci
866e5c31af7Sopenharmony_ci			void main()
867e5c31af7Sopenharmony_ci			{
868e5c31af7Sopenharmony_ci				Pos p = Pos(in0.x, in0.y, in0.z);
869e5c31af7Sopenharmony_ci				Line line = func(p);
870e5c31af7Sopenharmony_ci				out0 = sum(line.start) + (2.0 * sum(line.end));
871e5c31af7Sopenharmony_ci				${OUTPUT}
872e5c31af7Sopenharmony_ci			}
873e5c31af7Sopenharmony_ci		""
874e5c31af7Sopenharmony_ci	end
875e5c31af7Sopenharmony_ci
876e5c31af7Sopenharmony_ci
877e5c31af7Sopenharmony_ciend # datatypes
878e5c31af7Sopenharmony_ci
879e5c31af7Sopenharmony_cigroup qualifiers "Function Parameter Qualifiers"
880e5c31af7Sopenharmony_ci
881e5c31af7Sopenharmony_ci	case in_float
882e5c31af7Sopenharmony_ci		version 310 es
883e5c31af7Sopenharmony_ci		values
884e5c31af7Sopenharmony_ci		{
885e5c31af7Sopenharmony_ci			input float in0		= [ 0.0 | 1.0 | -2.0 | 2.5 ];
886e5c31af7Sopenharmony_ci			output float out0	= [ 0.0 | -1.0 | 2.0 | -2.5 ];
887e5c31af7Sopenharmony_ci		}
888e5c31af7Sopenharmony_ci
889e5c31af7Sopenharmony_ci		both ""
890e5c31af7Sopenharmony_ci			#version 310 es
891e5c31af7Sopenharmony_ci			precision highp float;
892e5c31af7Sopenharmony_ci			precision highp int;
893e5c31af7Sopenharmony_ci			${DECLARATIONS}
894e5c31af7Sopenharmony_ci
895e5c31af7Sopenharmony_ci			float func (in float a)
896e5c31af7Sopenharmony_ci			{
897e5c31af7Sopenharmony_ci				a = -a;
898e5c31af7Sopenharmony_ci				return 2.0 * a;
899e5c31af7Sopenharmony_ci			}
900e5c31af7Sopenharmony_ci
901e5c31af7Sopenharmony_ci			void main()
902e5c31af7Sopenharmony_ci			{
903e5c31af7Sopenharmony_ci				${SETUP}
904e5c31af7Sopenharmony_ci				float f = in0;
905e5c31af7Sopenharmony_ci				float g = func(f);
906e5c31af7Sopenharmony_ci				out0 = f + g;
907e5c31af7Sopenharmony_ci				${OUTPUT}
908e5c31af7Sopenharmony_ci			}
909e5c31af7Sopenharmony_ci		""
910e5c31af7Sopenharmony_ci	end
911e5c31af7Sopenharmony_ci
912e5c31af7Sopenharmony_ci	case out_float
913e5c31af7Sopenharmony_ci		version 310 es
914e5c31af7Sopenharmony_ci		values
915e5c31af7Sopenharmony_ci		{
916e5c31af7Sopenharmony_ci			input float in0		= [ 0.0 | 1.0 | -2.0 | 2.5 ];
917e5c31af7Sopenharmony_ci			output float out0	= [ 0.0 | -1.0 | 2.0 | -2.5 ];
918e5c31af7Sopenharmony_ci		}
919e5c31af7Sopenharmony_ci
920e5c31af7Sopenharmony_ci		both ""
921e5c31af7Sopenharmony_ci			#version 310 es
922e5c31af7Sopenharmony_ci			precision highp float;
923e5c31af7Sopenharmony_ci			precision highp int;
924e5c31af7Sopenharmony_ci			${DECLARATIONS}
925e5c31af7Sopenharmony_ci
926e5c31af7Sopenharmony_ci			void func (out float a)
927e5c31af7Sopenharmony_ci			{
928e5c31af7Sopenharmony_ci				a = -1.0;
929e5c31af7Sopenharmony_ci			}
930e5c31af7Sopenharmony_ci
931e5c31af7Sopenharmony_ci			void main()
932e5c31af7Sopenharmony_ci			{
933e5c31af7Sopenharmony_ci				${SETUP}
934e5c31af7Sopenharmony_ci				float f = 1.0;
935e5c31af7Sopenharmony_ci				func(f);
936e5c31af7Sopenharmony_ci				out0 = f * in0;
937e5c31af7Sopenharmony_ci				${OUTPUT}
938e5c31af7Sopenharmony_ci			}
939e5c31af7Sopenharmony_ci		""
940e5c31af7Sopenharmony_ci	end
941e5c31af7Sopenharmony_ci
942e5c31af7Sopenharmony_ci	case inout_float
943e5c31af7Sopenharmony_ci		version 310 es
944e5c31af7Sopenharmony_ci		values
945e5c31af7Sopenharmony_ci		{
946e5c31af7Sopenharmony_ci			input float in0		= [ 0.0 | 1.0 | -2.0 | 2.5 ];
947e5c31af7Sopenharmony_ci			output float out0	= [ 0.0 | -1.0 | 2.0 | -2.5 ];
948e5c31af7Sopenharmony_ci		}
949e5c31af7Sopenharmony_ci
950e5c31af7Sopenharmony_ci		both ""
951e5c31af7Sopenharmony_ci			#version 310 es
952e5c31af7Sopenharmony_ci			precision highp float;
953e5c31af7Sopenharmony_ci			precision highp int;
954e5c31af7Sopenharmony_ci			${DECLARATIONS}
955e5c31af7Sopenharmony_ci
956e5c31af7Sopenharmony_ci			void func (inout float a)
957e5c31af7Sopenharmony_ci			{
958e5c31af7Sopenharmony_ci				a = -a;
959e5c31af7Sopenharmony_ci			}
960e5c31af7Sopenharmony_ci
961e5c31af7Sopenharmony_ci			void main()
962e5c31af7Sopenharmony_ci			{
963e5c31af7Sopenharmony_ci				${SETUP}
964e5c31af7Sopenharmony_ci				float f = 1.0;
965e5c31af7Sopenharmony_ci				func(f);
966e5c31af7Sopenharmony_ci				out0 = f * in0;
967e5c31af7Sopenharmony_ci				${OUTPUT}
968e5c31af7Sopenharmony_ci			}
969e5c31af7Sopenharmony_ci		""
970e5c31af7Sopenharmony_ci	end
971e5c31af7Sopenharmony_ci
972e5c31af7Sopenharmony_ci	case in_lowp_float
973e5c31af7Sopenharmony_ci		version 310 es
974e5c31af7Sopenharmony_ci		values
975e5c31af7Sopenharmony_ci		{
976e5c31af7Sopenharmony_ci			input float in0		= [ 0.0 | 1.0 | -2.0 | 2.5 ];
977e5c31af7Sopenharmony_ci			output float out0	= [ 0.0 | -1.0 | 2.0 | -2.5 ];
978e5c31af7Sopenharmony_ci		}
979e5c31af7Sopenharmony_ci
980e5c31af7Sopenharmony_ci		both ""
981e5c31af7Sopenharmony_ci			#version 310 es
982e5c31af7Sopenharmony_ci			precision highp float;
983e5c31af7Sopenharmony_ci			precision highp int;
984e5c31af7Sopenharmony_ci			${DECLARATIONS}
985e5c31af7Sopenharmony_ci
986e5c31af7Sopenharmony_ci			float func (in lowp float a)
987e5c31af7Sopenharmony_ci			{
988e5c31af7Sopenharmony_ci				a = -a;
989e5c31af7Sopenharmony_ci				return 2.0 * a;
990e5c31af7Sopenharmony_ci			}
991e5c31af7Sopenharmony_ci
992e5c31af7Sopenharmony_ci			void main()
993e5c31af7Sopenharmony_ci			{
994e5c31af7Sopenharmony_ci				${SETUP}
995e5c31af7Sopenharmony_ci				float f = in0;
996e5c31af7Sopenharmony_ci				float g = func(f);
997e5c31af7Sopenharmony_ci				out0 = f + g;
998e5c31af7Sopenharmony_ci				${OUTPUT}
999e5c31af7Sopenharmony_ci			}
1000e5c31af7Sopenharmony_ci		""
1001e5c31af7Sopenharmony_ci	end
1002e5c31af7Sopenharmony_ci
1003e5c31af7Sopenharmony_ci	case out_lowp_float
1004e5c31af7Sopenharmony_ci		version 310 es
1005e5c31af7Sopenharmony_ci		values
1006e5c31af7Sopenharmony_ci		{
1007e5c31af7Sopenharmony_ci			input float in0		= [ 0.0 | 1.0 | -2.0 | 2.5 ];
1008e5c31af7Sopenharmony_ci			output float out0	= [ 0.0 | -1.0 | 2.0 | -2.5 ];
1009e5c31af7Sopenharmony_ci		}
1010e5c31af7Sopenharmony_ci
1011e5c31af7Sopenharmony_ci		both ""
1012e5c31af7Sopenharmony_ci			#version 310 es
1013e5c31af7Sopenharmony_ci			precision highp float;
1014e5c31af7Sopenharmony_ci			precision highp int;
1015e5c31af7Sopenharmony_ci			${DECLARATIONS}
1016e5c31af7Sopenharmony_ci
1017e5c31af7Sopenharmony_ci			void func (out lowp float a)
1018e5c31af7Sopenharmony_ci			{
1019e5c31af7Sopenharmony_ci				a = -1.0;
1020e5c31af7Sopenharmony_ci			}
1021e5c31af7Sopenharmony_ci
1022e5c31af7Sopenharmony_ci			void main()
1023e5c31af7Sopenharmony_ci			{
1024e5c31af7Sopenharmony_ci				${SETUP}
1025e5c31af7Sopenharmony_ci				float f = 1.0;
1026e5c31af7Sopenharmony_ci				func(f);
1027e5c31af7Sopenharmony_ci				out0 = f * in0;
1028e5c31af7Sopenharmony_ci				${OUTPUT}
1029e5c31af7Sopenharmony_ci			}
1030e5c31af7Sopenharmony_ci		""
1031e5c31af7Sopenharmony_ci	end
1032e5c31af7Sopenharmony_ci
1033e5c31af7Sopenharmony_ci	case inout_lowp_float
1034e5c31af7Sopenharmony_ci		version 310 es
1035e5c31af7Sopenharmony_ci		values
1036e5c31af7Sopenharmony_ci		{
1037e5c31af7Sopenharmony_ci			input float in0		= [ 0.0 | 1.0 | -2.0 | 2.5 ];
1038e5c31af7Sopenharmony_ci			output float out0	= [ 0.0 | -1.0 | 2.0 | -2.5 ];
1039e5c31af7Sopenharmony_ci		}
1040e5c31af7Sopenharmony_ci
1041e5c31af7Sopenharmony_ci		both ""
1042e5c31af7Sopenharmony_ci			#version 310 es
1043e5c31af7Sopenharmony_ci			precision highp float;
1044e5c31af7Sopenharmony_ci			precision highp int;
1045e5c31af7Sopenharmony_ci			${DECLARATIONS}
1046e5c31af7Sopenharmony_ci
1047e5c31af7Sopenharmony_ci			void func (inout lowp float a)
1048e5c31af7Sopenharmony_ci			{
1049e5c31af7Sopenharmony_ci				a = -a;
1050e5c31af7Sopenharmony_ci			}
1051e5c31af7Sopenharmony_ci
1052e5c31af7Sopenharmony_ci			void main()
1053e5c31af7Sopenharmony_ci			{
1054e5c31af7Sopenharmony_ci				${SETUP}
1055e5c31af7Sopenharmony_ci				float f = 1.0;
1056e5c31af7Sopenharmony_ci				func(f);
1057e5c31af7Sopenharmony_ci				out0 = f * in0;
1058e5c31af7Sopenharmony_ci				${OUTPUT}
1059e5c31af7Sopenharmony_ci			}
1060e5c31af7Sopenharmony_ci		""
1061e5c31af7Sopenharmony_ci	end
1062e5c31af7Sopenharmony_ci
1063e5c31af7Sopenharmony_ci	case in_highp_float
1064e5c31af7Sopenharmony_ci		version 310 es
1065e5c31af7Sopenharmony_ci		values
1066e5c31af7Sopenharmony_ci		{
1067e5c31af7Sopenharmony_ci			input float in0		= [ 0.0 | 1.0 | -2.0 | 2.5 ];
1068e5c31af7Sopenharmony_ci			output float out0	= [ 0.0 | -1.0 | 2.0 | -2.5 ];
1069e5c31af7Sopenharmony_ci		}
1070e5c31af7Sopenharmony_ci
1071e5c31af7Sopenharmony_ci		both ""
1072e5c31af7Sopenharmony_ci			#version 310 es
1073e5c31af7Sopenharmony_ci			precision highp float;
1074e5c31af7Sopenharmony_ci			precision highp int;
1075e5c31af7Sopenharmony_ci			${DECLARATIONS}
1076e5c31af7Sopenharmony_ci
1077e5c31af7Sopenharmony_ci			float func (in highp float a)
1078e5c31af7Sopenharmony_ci			{
1079e5c31af7Sopenharmony_ci				a = -a;
1080e5c31af7Sopenharmony_ci				return 2.0 * a;
1081e5c31af7Sopenharmony_ci			}
1082e5c31af7Sopenharmony_ci
1083e5c31af7Sopenharmony_ci			void main()
1084e5c31af7Sopenharmony_ci			{
1085e5c31af7Sopenharmony_ci				${SETUP}
1086e5c31af7Sopenharmony_ci				float f = in0;
1087e5c31af7Sopenharmony_ci				float g = func(f);
1088e5c31af7Sopenharmony_ci				out0 = f + g;
1089e5c31af7Sopenharmony_ci				${OUTPUT}
1090e5c31af7Sopenharmony_ci			}
1091e5c31af7Sopenharmony_ci		""
1092e5c31af7Sopenharmony_ci	end
1093e5c31af7Sopenharmony_ci
1094e5c31af7Sopenharmony_ci	case out_highp_float
1095e5c31af7Sopenharmony_ci		version 310 es
1096e5c31af7Sopenharmony_ci		values
1097e5c31af7Sopenharmony_ci		{
1098e5c31af7Sopenharmony_ci			input float in0		= [ 0.0 | 1.0 | -2.0 | 2.5 ];
1099e5c31af7Sopenharmony_ci			output float out0	= [ 0.0 | -1.0 | 2.0 | -2.5 ];
1100e5c31af7Sopenharmony_ci		}
1101e5c31af7Sopenharmony_ci
1102e5c31af7Sopenharmony_ci		both ""
1103e5c31af7Sopenharmony_ci			#version 310 es
1104e5c31af7Sopenharmony_ci			precision highp float;
1105e5c31af7Sopenharmony_ci			precision highp int;
1106e5c31af7Sopenharmony_ci			${DECLARATIONS}
1107e5c31af7Sopenharmony_ci
1108e5c31af7Sopenharmony_ci			void func (out highp float a)
1109e5c31af7Sopenharmony_ci			{
1110e5c31af7Sopenharmony_ci				a = -1.0;
1111e5c31af7Sopenharmony_ci			}
1112e5c31af7Sopenharmony_ci
1113e5c31af7Sopenharmony_ci			void main()
1114e5c31af7Sopenharmony_ci			{
1115e5c31af7Sopenharmony_ci				${SETUP}
1116e5c31af7Sopenharmony_ci				float f = 1.0;
1117e5c31af7Sopenharmony_ci				func(f);
1118e5c31af7Sopenharmony_ci				out0 = f * in0;
1119e5c31af7Sopenharmony_ci				${OUTPUT}
1120e5c31af7Sopenharmony_ci			}
1121e5c31af7Sopenharmony_ci		""
1122e5c31af7Sopenharmony_ci	end
1123e5c31af7Sopenharmony_ci
1124e5c31af7Sopenharmony_ci	case inout_highp_float
1125e5c31af7Sopenharmony_ci		version 310 es
1126e5c31af7Sopenharmony_ci		values
1127e5c31af7Sopenharmony_ci		{
1128e5c31af7Sopenharmony_ci			input float in0		= [ 0.0 | 1.0 | -2.0 | 2.5 ];
1129e5c31af7Sopenharmony_ci			output float out0	= [ 0.0 | -1.0 | 2.0 | -2.5 ];
1130e5c31af7Sopenharmony_ci		}
1131e5c31af7Sopenharmony_ci
1132e5c31af7Sopenharmony_ci		both ""
1133e5c31af7Sopenharmony_ci			#version 310 es
1134e5c31af7Sopenharmony_ci			precision highp float;
1135e5c31af7Sopenharmony_ci			precision highp int;
1136e5c31af7Sopenharmony_ci			${DECLARATIONS}
1137e5c31af7Sopenharmony_ci
1138e5c31af7Sopenharmony_ci			void func (inout highp float a)
1139e5c31af7Sopenharmony_ci			{
1140e5c31af7Sopenharmony_ci				a = -a;
1141e5c31af7Sopenharmony_ci			}
1142e5c31af7Sopenharmony_ci
1143e5c31af7Sopenharmony_ci			void main()
1144e5c31af7Sopenharmony_ci			{
1145e5c31af7Sopenharmony_ci				${SETUP}
1146e5c31af7Sopenharmony_ci				float f = 1.0;
1147e5c31af7Sopenharmony_ci				func(f);
1148e5c31af7Sopenharmony_ci				out0 = f * in0;
1149e5c31af7Sopenharmony_ci				${OUTPUT}
1150e5c31af7Sopenharmony_ci			}
1151e5c31af7Sopenharmony_ci		""
1152e5c31af7Sopenharmony_ci	end
1153e5c31af7Sopenharmony_ci
1154e5c31af7Sopenharmony_ci	case const_float
1155e5c31af7Sopenharmony_ci		version 310 es
1156e5c31af7Sopenharmony_ci		values
1157e5c31af7Sopenharmony_ci		{
1158e5c31af7Sopenharmony_ci			input float in0		= [ 0.0 | 1.0 | -2.0 | 2.5 ];
1159e5c31af7Sopenharmony_ci			output float out0	= [ 0.0 | -1.0 | 2.0 | -2.5 ];
1160e5c31af7Sopenharmony_ci		}
1161e5c31af7Sopenharmony_ci
1162e5c31af7Sopenharmony_ci		both ""
1163e5c31af7Sopenharmony_ci			#version 310 es
1164e5c31af7Sopenharmony_ci			precision highp float;
1165e5c31af7Sopenharmony_ci			precision highp int;
1166e5c31af7Sopenharmony_ci			${DECLARATIONS}
1167e5c31af7Sopenharmony_ci
1168e5c31af7Sopenharmony_ci			float func (const float a)
1169e5c31af7Sopenharmony_ci			{
1170e5c31af7Sopenharmony_ci				float b = -a;
1171e5c31af7Sopenharmony_ci				return 2.0 * b;
1172e5c31af7Sopenharmony_ci			}
1173e5c31af7Sopenharmony_ci
1174e5c31af7Sopenharmony_ci			void main()
1175e5c31af7Sopenharmony_ci			{
1176e5c31af7Sopenharmony_ci				${SETUP}
1177e5c31af7Sopenharmony_ci				float f = in0;
1178e5c31af7Sopenharmony_ci				float g = func(f);
1179e5c31af7Sopenharmony_ci				out0 = f + g;
1180e5c31af7Sopenharmony_ci				${OUTPUT}
1181e5c31af7Sopenharmony_ci			}
1182e5c31af7Sopenharmony_ci		""
1183e5c31af7Sopenharmony_ci	end
1184e5c31af7Sopenharmony_ci
1185e5c31af7Sopenharmony_ci	case const_in_float
1186e5c31af7Sopenharmony_ci		version 310 es
1187e5c31af7Sopenharmony_ci		values
1188e5c31af7Sopenharmony_ci		{
1189e5c31af7Sopenharmony_ci			input float in0		= [ 0.0 | 1.0 | -2.0 | 2.5 ];
1190e5c31af7Sopenharmony_ci			output float out0	= [ 0.0 | -1.0 | 2.0 | -2.5 ];
1191e5c31af7Sopenharmony_ci		}
1192e5c31af7Sopenharmony_ci
1193e5c31af7Sopenharmony_ci		both ""
1194e5c31af7Sopenharmony_ci			#version 310 es
1195e5c31af7Sopenharmony_ci			precision highp float;
1196e5c31af7Sopenharmony_ci			precision highp int;
1197e5c31af7Sopenharmony_ci			${DECLARATIONS}
1198e5c31af7Sopenharmony_ci
1199e5c31af7Sopenharmony_ci			float func (const in float a)
1200e5c31af7Sopenharmony_ci			{
1201e5c31af7Sopenharmony_ci				float b = -a;
1202e5c31af7Sopenharmony_ci				return 2.0 * b;
1203e5c31af7Sopenharmony_ci			}
1204e5c31af7Sopenharmony_ci
1205e5c31af7Sopenharmony_ci			void main()
1206e5c31af7Sopenharmony_ci			{
1207e5c31af7Sopenharmony_ci				${SETUP}
1208e5c31af7Sopenharmony_ci				float f = in0;
1209e5c31af7Sopenharmony_ci				float g = func(f);
1210e5c31af7Sopenharmony_ci				out0 = f + g;
1211e5c31af7Sopenharmony_ci				${OUTPUT}
1212e5c31af7Sopenharmony_ci			}
1213e5c31af7Sopenharmony_ci		""
1214e5c31af7Sopenharmony_ci	end
1215e5c31af7Sopenharmony_ci
1216e5c31af7Sopenharmony_ci	case in_int
1217e5c31af7Sopenharmony_ci		version 310 es
1218e5c31af7Sopenharmony_ci		values
1219e5c31af7Sopenharmony_ci		{
1220e5c31af7Sopenharmony_ci			input int in0		= [ 0 | 1 | -2 | 4 ];
1221e5c31af7Sopenharmony_ci			output int out0		= [ 0 | -1 | 2 | -4 ];
1222e5c31af7Sopenharmony_ci		}
1223e5c31af7Sopenharmony_ci
1224e5c31af7Sopenharmony_ci		both ""
1225e5c31af7Sopenharmony_ci			#version 310 es
1226e5c31af7Sopenharmony_ci			precision highp float;
1227e5c31af7Sopenharmony_ci			precision highp int;
1228e5c31af7Sopenharmony_ci			${DECLARATIONS}
1229e5c31af7Sopenharmony_ci
1230e5c31af7Sopenharmony_ci			int func (in int a)
1231e5c31af7Sopenharmony_ci			{
1232e5c31af7Sopenharmony_ci				a = -a;
1233e5c31af7Sopenharmony_ci				return 2 * a;
1234e5c31af7Sopenharmony_ci			}
1235e5c31af7Sopenharmony_ci
1236e5c31af7Sopenharmony_ci			void main()
1237e5c31af7Sopenharmony_ci			{
1238e5c31af7Sopenharmony_ci				${SETUP}
1239e5c31af7Sopenharmony_ci				int f = in0;
1240e5c31af7Sopenharmony_ci				int g = func(f);
1241e5c31af7Sopenharmony_ci				out0 = f + g;
1242e5c31af7Sopenharmony_ci				${OUTPUT}
1243e5c31af7Sopenharmony_ci			}
1244e5c31af7Sopenharmony_ci		""
1245e5c31af7Sopenharmony_ci	end
1246e5c31af7Sopenharmony_ci
1247e5c31af7Sopenharmony_ci	case out_int
1248e5c31af7Sopenharmony_ci		version 310 es
1249e5c31af7Sopenharmony_ci		values
1250e5c31af7Sopenharmony_ci		{
1251e5c31af7Sopenharmony_ci			input int in0		= [ 0 | 1 | -2 | 6 ];
1252e5c31af7Sopenharmony_ci			output int out0		= [ 0 | -1 | 2 | -6 ];
1253e5c31af7Sopenharmony_ci		}
1254e5c31af7Sopenharmony_ci
1255e5c31af7Sopenharmony_ci		both ""
1256e5c31af7Sopenharmony_ci			#version 310 es
1257e5c31af7Sopenharmony_ci			precision highp float;
1258e5c31af7Sopenharmony_ci			precision highp int;
1259e5c31af7Sopenharmony_ci			${DECLARATIONS}
1260e5c31af7Sopenharmony_ci
1261e5c31af7Sopenharmony_ci			void func (out int a)
1262e5c31af7Sopenharmony_ci			{
1263e5c31af7Sopenharmony_ci				a = -1;
1264e5c31af7Sopenharmony_ci			}
1265e5c31af7Sopenharmony_ci
1266e5c31af7Sopenharmony_ci			void main()
1267e5c31af7Sopenharmony_ci			{
1268e5c31af7Sopenharmony_ci				${SETUP}
1269e5c31af7Sopenharmony_ci				int f = 1;
1270e5c31af7Sopenharmony_ci				func(f);
1271e5c31af7Sopenharmony_ci				out0 = f * in0;
1272e5c31af7Sopenharmony_ci				${OUTPUT}
1273e5c31af7Sopenharmony_ci			}
1274e5c31af7Sopenharmony_ci		""
1275e5c31af7Sopenharmony_ci	end
1276e5c31af7Sopenharmony_ci
1277e5c31af7Sopenharmony_ci	case inout_int
1278e5c31af7Sopenharmony_ci		version 310 es
1279e5c31af7Sopenharmony_ci		values
1280e5c31af7Sopenharmony_ci		{
1281e5c31af7Sopenharmony_ci			input int in0		= [ 0 | 1 | -2 | 6 ];
1282e5c31af7Sopenharmony_ci			output int out0		= [ 0 | -1 | 2 | -6 ];
1283e5c31af7Sopenharmony_ci		}
1284e5c31af7Sopenharmony_ci
1285e5c31af7Sopenharmony_ci		both ""
1286e5c31af7Sopenharmony_ci			#version 310 es
1287e5c31af7Sopenharmony_ci			precision highp float;
1288e5c31af7Sopenharmony_ci			precision highp int;
1289e5c31af7Sopenharmony_ci			${DECLARATIONS}
1290e5c31af7Sopenharmony_ci
1291e5c31af7Sopenharmony_ci			void func (inout int a)
1292e5c31af7Sopenharmony_ci			{
1293e5c31af7Sopenharmony_ci				a = -a;
1294e5c31af7Sopenharmony_ci			}
1295e5c31af7Sopenharmony_ci
1296e5c31af7Sopenharmony_ci			void main()
1297e5c31af7Sopenharmony_ci			{
1298e5c31af7Sopenharmony_ci				${SETUP}
1299e5c31af7Sopenharmony_ci				int f = 1;
1300e5c31af7Sopenharmony_ci				func(f);
1301e5c31af7Sopenharmony_ci				out0 = f * in0;
1302e5c31af7Sopenharmony_ci				${OUTPUT}
1303e5c31af7Sopenharmony_ci			}
1304e5c31af7Sopenharmony_ci		""
1305e5c31af7Sopenharmony_ci	end
1306e5c31af7Sopenharmony_ci
1307e5c31af7Sopenharmony_ci	case in_lowp_int
1308e5c31af7Sopenharmony_ci		version 310 es
1309e5c31af7Sopenharmony_ci		values
1310e5c31af7Sopenharmony_ci		{
1311e5c31af7Sopenharmony_ci			input int in0		= [ 0 | 1 | -2 | 4 ];
1312e5c31af7Sopenharmony_ci			output int out0		= [ 0 | -1 | 2 | -4 ];
1313e5c31af7Sopenharmony_ci		}
1314e5c31af7Sopenharmony_ci
1315e5c31af7Sopenharmony_ci		both ""
1316e5c31af7Sopenharmony_ci			#version 310 es
1317e5c31af7Sopenharmony_ci			precision highp float;
1318e5c31af7Sopenharmony_ci			precision highp int;
1319e5c31af7Sopenharmony_ci			${DECLARATIONS}
1320e5c31af7Sopenharmony_ci
1321e5c31af7Sopenharmony_ci			int func (in lowp int a)
1322e5c31af7Sopenharmony_ci			{
1323e5c31af7Sopenharmony_ci				a = -a;
1324e5c31af7Sopenharmony_ci				return 2 * a;
1325e5c31af7Sopenharmony_ci			}
1326e5c31af7Sopenharmony_ci
1327e5c31af7Sopenharmony_ci			void main()
1328e5c31af7Sopenharmony_ci			{
1329e5c31af7Sopenharmony_ci				${SETUP}
1330e5c31af7Sopenharmony_ci				int f = in0;
1331e5c31af7Sopenharmony_ci				int g = func(f);
1332e5c31af7Sopenharmony_ci				out0 = f + g;
1333e5c31af7Sopenharmony_ci				${OUTPUT}
1334e5c31af7Sopenharmony_ci			}
1335e5c31af7Sopenharmony_ci		""
1336e5c31af7Sopenharmony_ci	end
1337e5c31af7Sopenharmony_ci
1338e5c31af7Sopenharmony_ci	case out_lowp_int
1339e5c31af7Sopenharmony_ci		version 310 es
1340e5c31af7Sopenharmony_ci		values
1341e5c31af7Sopenharmony_ci		{
1342e5c31af7Sopenharmony_ci			input int in0		= [ 0 | 1 | -2 | 6 ];
1343e5c31af7Sopenharmony_ci			output int out0		= [ 0 | -1 | 2 | -6 ];
1344e5c31af7Sopenharmony_ci		}
1345e5c31af7Sopenharmony_ci
1346e5c31af7Sopenharmony_ci		both ""
1347e5c31af7Sopenharmony_ci			#version 310 es
1348e5c31af7Sopenharmony_ci			precision highp float;
1349e5c31af7Sopenharmony_ci			precision highp int;
1350e5c31af7Sopenharmony_ci			${DECLARATIONS}
1351e5c31af7Sopenharmony_ci
1352e5c31af7Sopenharmony_ci			void func (out lowp int a)
1353e5c31af7Sopenharmony_ci			{
1354e5c31af7Sopenharmony_ci				a = -1;
1355e5c31af7Sopenharmony_ci			}
1356e5c31af7Sopenharmony_ci
1357e5c31af7Sopenharmony_ci			void main()
1358e5c31af7Sopenharmony_ci			{
1359e5c31af7Sopenharmony_ci				${SETUP}
1360e5c31af7Sopenharmony_ci				int f = 1;
1361e5c31af7Sopenharmony_ci				func(f);
1362e5c31af7Sopenharmony_ci				out0 = f * in0;
1363e5c31af7Sopenharmony_ci				${OUTPUT}
1364e5c31af7Sopenharmony_ci			}
1365e5c31af7Sopenharmony_ci		""
1366e5c31af7Sopenharmony_ci	end
1367e5c31af7Sopenharmony_ci
1368e5c31af7Sopenharmony_ci	case inout_lowp_int
1369e5c31af7Sopenharmony_ci		version 310 es
1370e5c31af7Sopenharmony_ci		values
1371e5c31af7Sopenharmony_ci		{
1372e5c31af7Sopenharmony_ci			input int in0		= [ 0 | 1 | -2 | 6 ];
1373e5c31af7Sopenharmony_ci			output int out0		= [ 0 | -1 | 2 | -6 ];
1374e5c31af7Sopenharmony_ci		}
1375e5c31af7Sopenharmony_ci
1376e5c31af7Sopenharmony_ci		both ""
1377e5c31af7Sopenharmony_ci			#version 310 es
1378e5c31af7Sopenharmony_ci			precision highp float;
1379e5c31af7Sopenharmony_ci			precision highp int;
1380e5c31af7Sopenharmony_ci			${DECLARATIONS}
1381e5c31af7Sopenharmony_ci
1382e5c31af7Sopenharmony_ci			void func (inout lowp int a)
1383e5c31af7Sopenharmony_ci			{
1384e5c31af7Sopenharmony_ci				a = -a;
1385e5c31af7Sopenharmony_ci			}
1386e5c31af7Sopenharmony_ci
1387e5c31af7Sopenharmony_ci			void main()
1388e5c31af7Sopenharmony_ci			{
1389e5c31af7Sopenharmony_ci				${SETUP}
1390e5c31af7Sopenharmony_ci				int f = 1;
1391e5c31af7Sopenharmony_ci				func(f);
1392e5c31af7Sopenharmony_ci				out0 = f * in0;
1393e5c31af7Sopenharmony_ci				${OUTPUT}
1394e5c31af7Sopenharmony_ci			}
1395e5c31af7Sopenharmony_ci		""
1396e5c31af7Sopenharmony_ci	end
1397e5c31af7Sopenharmony_ci
1398e5c31af7Sopenharmony_ci	case in_highp_int
1399e5c31af7Sopenharmony_ci		version 310 es
1400e5c31af7Sopenharmony_ci		values
1401e5c31af7Sopenharmony_ci		{
1402e5c31af7Sopenharmony_ci			input int in0		= [ 0 | 1 | -2 | 4 ];
1403e5c31af7Sopenharmony_ci			output int out0		= [ 0 | -1 | 2 | -4 ];
1404e5c31af7Sopenharmony_ci		}
1405e5c31af7Sopenharmony_ci
1406e5c31af7Sopenharmony_ci		both ""
1407e5c31af7Sopenharmony_ci			#version 310 es
1408e5c31af7Sopenharmony_ci			precision highp float;
1409e5c31af7Sopenharmony_ci			precision highp int;
1410e5c31af7Sopenharmony_ci			${DECLARATIONS}
1411e5c31af7Sopenharmony_ci
1412e5c31af7Sopenharmony_ci			int func (in highp int a)
1413e5c31af7Sopenharmony_ci			{
1414e5c31af7Sopenharmony_ci				a = -a;
1415e5c31af7Sopenharmony_ci				return 2 * a;
1416e5c31af7Sopenharmony_ci			}
1417e5c31af7Sopenharmony_ci
1418e5c31af7Sopenharmony_ci			void main()
1419e5c31af7Sopenharmony_ci			{
1420e5c31af7Sopenharmony_ci				${SETUP}
1421e5c31af7Sopenharmony_ci				int f = in0;
1422e5c31af7Sopenharmony_ci				int g = func(f);
1423e5c31af7Sopenharmony_ci				out0 = f + g;
1424e5c31af7Sopenharmony_ci				${OUTPUT}
1425e5c31af7Sopenharmony_ci			}
1426e5c31af7Sopenharmony_ci		""
1427e5c31af7Sopenharmony_ci	end
1428e5c31af7Sopenharmony_ci
1429e5c31af7Sopenharmony_ci	case out_highp_int
1430e5c31af7Sopenharmony_ci		version 310 es
1431e5c31af7Sopenharmony_ci		values
1432e5c31af7Sopenharmony_ci		{
1433e5c31af7Sopenharmony_ci			input int in0		= [ 0 | 1 | -2 | 6 ];
1434e5c31af7Sopenharmony_ci			output int out0		= [ 0 | -1 | 2 | -6 ];
1435e5c31af7Sopenharmony_ci		}
1436e5c31af7Sopenharmony_ci
1437e5c31af7Sopenharmony_ci		both ""
1438e5c31af7Sopenharmony_ci			#version 310 es
1439e5c31af7Sopenharmony_ci			precision highp float;
1440e5c31af7Sopenharmony_ci			precision highp int;
1441e5c31af7Sopenharmony_ci			${DECLARATIONS}
1442e5c31af7Sopenharmony_ci
1443e5c31af7Sopenharmony_ci			void func (out highp int a)
1444e5c31af7Sopenharmony_ci			{
1445e5c31af7Sopenharmony_ci				a = -1;
1446e5c31af7Sopenharmony_ci			}
1447e5c31af7Sopenharmony_ci
1448e5c31af7Sopenharmony_ci			void main()
1449e5c31af7Sopenharmony_ci			{
1450e5c31af7Sopenharmony_ci				${SETUP}
1451e5c31af7Sopenharmony_ci				int f = 1;
1452e5c31af7Sopenharmony_ci				func(f);
1453e5c31af7Sopenharmony_ci				out0 = f * in0;
1454e5c31af7Sopenharmony_ci				${OUTPUT}
1455e5c31af7Sopenharmony_ci			}
1456e5c31af7Sopenharmony_ci		""
1457e5c31af7Sopenharmony_ci	end
1458e5c31af7Sopenharmony_ci
1459e5c31af7Sopenharmony_ci	case inout_highp_int
1460e5c31af7Sopenharmony_ci		version 310 es
1461e5c31af7Sopenharmony_ci		values
1462e5c31af7Sopenharmony_ci		{
1463e5c31af7Sopenharmony_ci			input int in0		= [ 0 | 1 | -2 | 6 ];
1464e5c31af7Sopenharmony_ci			output int out0		= [ 0 | -1 | 2 | -6 ];
1465e5c31af7Sopenharmony_ci		}
1466e5c31af7Sopenharmony_ci
1467e5c31af7Sopenharmony_ci		both ""
1468e5c31af7Sopenharmony_ci			#version 310 es
1469e5c31af7Sopenharmony_ci			precision highp float;
1470e5c31af7Sopenharmony_ci			precision highp int;
1471e5c31af7Sopenharmony_ci			${DECLARATIONS}
1472e5c31af7Sopenharmony_ci
1473e5c31af7Sopenharmony_ci			void func (inout highp int a)
1474e5c31af7Sopenharmony_ci			{
1475e5c31af7Sopenharmony_ci				a = -a;
1476e5c31af7Sopenharmony_ci			}
1477e5c31af7Sopenharmony_ci
1478e5c31af7Sopenharmony_ci			void main()
1479e5c31af7Sopenharmony_ci			{
1480e5c31af7Sopenharmony_ci				${SETUP}
1481e5c31af7Sopenharmony_ci				int f = 1;
1482e5c31af7Sopenharmony_ci				func(f);
1483e5c31af7Sopenharmony_ci				out0 = f * in0;
1484e5c31af7Sopenharmony_ci				${OUTPUT}
1485e5c31af7Sopenharmony_ci			}
1486e5c31af7Sopenharmony_ci		""
1487e5c31af7Sopenharmony_ci	end
1488e5c31af7Sopenharmony_ci
1489e5c31af7Sopenharmony_ci	case const_int
1490e5c31af7Sopenharmony_ci		version 310 es
1491e5c31af7Sopenharmony_ci		values
1492e5c31af7Sopenharmony_ci		{
1493e5c31af7Sopenharmony_ci			input int in0		= [ 0 | 1 | -2 | 4 ];
1494e5c31af7Sopenharmony_ci			output int out0		= [ 0 | -1 | 2 | -4 ];
1495e5c31af7Sopenharmony_ci		}
1496e5c31af7Sopenharmony_ci
1497e5c31af7Sopenharmony_ci		both ""
1498e5c31af7Sopenharmony_ci			#version 310 es
1499e5c31af7Sopenharmony_ci			precision highp float;
1500e5c31af7Sopenharmony_ci			precision highp int;
1501e5c31af7Sopenharmony_ci			${DECLARATIONS}
1502e5c31af7Sopenharmony_ci
1503e5c31af7Sopenharmony_ci			int func (const int a)
1504e5c31af7Sopenharmony_ci			{
1505e5c31af7Sopenharmony_ci				int b = -a;
1506e5c31af7Sopenharmony_ci				return 2 * b;
1507e5c31af7Sopenharmony_ci			}
1508e5c31af7Sopenharmony_ci
1509e5c31af7Sopenharmony_ci			void main()
1510e5c31af7Sopenharmony_ci			{
1511e5c31af7Sopenharmony_ci				${SETUP}
1512e5c31af7Sopenharmony_ci				int f = in0;
1513e5c31af7Sopenharmony_ci				int g = func(f);
1514e5c31af7Sopenharmony_ci				out0 = f + g;
1515e5c31af7Sopenharmony_ci				${OUTPUT}
1516e5c31af7Sopenharmony_ci			}
1517e5c31af7Sopenharmony_ci		""
1518e5c31af7Sopenharmony_ci	end
1519e5c31af7Sopenharmony_ci
1520e5c31af7Sopenharmony_ci	case const_in_int
1521e5c31af7Sopenharmony_ci		version 310 es
1522e5c31af7Sopenharmony_ci		values
1523e5c31af7Sopenharmony_ci		{
1524e5c31af7Sopenharmony_ci			input int in0		= [ 0 | 1 | -2 | 4 ];
1525e5c31af7Sopenharmony_ci			output int out0		= [ 0 | -1 | 2 | -4 ];
1526e5c31af7Sopenharmony_ci		}
1527e5c31af7Sopenharmony_ci
1528e5c31af7Sopenharmony_ci		both ""
1529e5c31af7Sopenharmony_ci			#version 310 es
1530e5c31af7Sopenharmony_ci			precision highp float;
1531e5c31af7Sopenharmony_ci			precision highp int;
1532e5c31af7Sopenharmony_ci			${DECLARATIONS}
1533e5c31af7Sopenharmony_ci
1534e5c31af7Sopenharmony_ci			int func (const in int a)
1535e5c31af7Sopenharmony_ci			{
1536e5c31af7Sopenharmony_ci				int b = -a;
1537e5c31af7Sopenharmony_ci				return 2 * b;
1538e5c31af7Sopenharmony_ci			}
1539e5c31af7Sopenharmony_ci
1540e5c31af7Sopenharmony_ci			void main()
1541e5c31af7Sopenharmony_ci			{
1542e5c31af7Sopenharmony_ci				${SETUP}
1543e5c31af7Sopenharmony_ci				int f = in0;
1544e5c31af7Sopenharmony_ci				int g = func(f);
1545e5c31af7Sopenharmony_ci				out0 = f + g;
1546e5c31af7Sopenharmony_ci				${OUTPUT}
1547e5c31af7Sopenharmony_ci			}
1548e5c31af7Sopenharmony_ci		""
1549e5c31af7Sopenharmony_ci	end
1550e5c31af7Sopenharmony_ci
1551e5c31af7Sopenharmony_ci	case in_bool
1552e5c31af7Sopenharmony_ci		version 310 es
1553e5c31af7Sopenharmony_ci		values
1554e5c31af7Sopenharmony_ci		{
1555e5c31af7Sopenharmony_ci			input bool in0		= [ true | false ];
1556e5c31af7Sopenharmony_ci			output bool out0	= [ true | true ];
1557e5c31af7Sopenharmony_ci		}
1558e5c31af7Sopenharmony_ci
1559e5c31af7Sopenharmony_ci		both ""
1560e5c31af7Sopenharmony_ci			#version 310 es
1561e5c31af7Sopenharmony_ci			precision highp float;
1562e5c31af7Sopenharmony_ci			precision highp int;
1563e5c31af7Sopenharmony_ci			${DECLARATIONS}
1564e5c31af7Sopenharmony_ci
1565e5c31af7Sopenharmony_ci			bool func (in bool a)
1566e5c31af7Sopenharmony_ci			{
1567e5c31af7Sopenharmony_ci				a = !a;
1568e5c31af7Sopenharmony_ci				return a;
1569e5c31af7Sopenharmony_ci			}
1570e5c31af7Sopenharmony_ci
1571e5c31af7Sopenharmony_ci			void main()
1572e5c31af7Sopenharmony_ci			{
1573e5c31af7Sopenharmony_ci				${SETUP}
1574e5c31af7Sopenharmony_ci				bool f = in0;
1575e5c31af7Sopenharmony_ci				bool g = func(f);
1576e5c31af7Sopenharmony_ci				out0 = (f != g);
1577e5c31af7Sopenharmony_ci				${OUTPUT}
1578e5c31af7Sopenharmony_ci			}
1579e5c31af7Sopenharmony_ci		""
1580e5c31af7Sopenharmony_ci	end
1581e5c31af7Sopenharmony_ci
1582e5c31af7Sopenharmony_ci	case out_bool
1583e5c31af7Sopenharmony_ci		version 310 es
1584e5c31af7Sopenharmony_ci		values
1585e5c31af7Sopenharmony_ci		{
1586e5c31af7Sopenharmony_ci			input bool in0		= [ true | false ];
1587e5c31af7Sopenharmony_ci			output bool out0	= [ false | true ];
1588e5c31af7Sopenharmony_ci		}
1589e5c31af7Sopenharmony_ci
1590e5c31af7Sopenharmony_ci		both ""
1591e5c31af7Sopenharmony_ci			#version 310 es
1592e5c31af7Sopenharmony_ci			precision highp float;
1593e5c31af7Sopenharmony_ci			precision highp int;
1594e5c31af7Sopenharmony_ci			${DECLARATIONS}
1595e5c31af7Sopenharmony_ci
1596e5c31af7Sopenharmony_ci			void func (out bool a)
1597e5c31af7Sopenharmony_ci			{
1598e5c31af7Sopenharmony_ci				a = false;
1599e5c31af7Sopenharmony_ci			}
1600e5c31af7Sopenharmony_ci
1601e5c31af7Sopenharmony_ci			void main()
1602e5c31af7Sopenharmony_ci			{
1603e5c31af7Sopenharmony_ci				${SETUP}
1604e5c31af7Sopenharmony_ci				bool f = true;
1605e5c31af7Sopenharmony_ci				func(f);
1606e5c31af7Sopenharmony_ci				out0 = (in0 == f);
1607e5c31af7Sopenharmony_ci				${OUTPUT}
1608e5c31af7Sopenharmony_ci			}
1609e5c31af7Sopenharmony_ci		""
1610e5c31af7Sopenharmony_ci	end
1611e5c31af7Sopenharmony_ci
1612e5c31af7Sopenharmony_ci	case inout_bool
1613e5c31af7Sopenharmony_ci		version 310 es
1614e5c31af7Sopenharmony_ci		values
1615e5c31af7Sopenharmony_ci		{
1616e5c31af7Sopenharmony_ci			input bool in0		= [ true | false ];
1617e5c31af7Sopenharmony_ci			output bool out0	= [ false | true ];
1618e5c31af7Sopenharmony_ci		}
1619e5c31af7Sopenharmony_ci
1620e5c31af7Sopenharmony_ci		both ""
1621e5c31af7Sopenharmony_ci			#version 310 es
1622e5c31af7Sopenharmony_ci			precision highp float;
1623e5c31af7Sopenharmony_ci			precision highp int;
1624e5c31af7Sopenharmony_ci			${DECLARATIONS}
1625e5c31af7Sopenharmony_ci
1626e5c31af7Sopenharmony_ci			void func (inout bool a)
1627e5c31af7Sopenharmony_ci			{
1628e5c31af7Sopenharmony_ci				a = !a;
1629e5c31af7Sopenharmony_ci			}
1630e5c31af7Sopenharmony_ci
1631e5c31af7Sopenharmony_ci			void main()
1632e5c31af7Sopenharmony_ci			{
1633e5c31af7Sopenharmony_ci				${SETUP}
1634e5c31af7Sopenharmony_ci				bool f = true;
1635e5c31af7Sopenharmony_ci				func(f);
1636e5c31af7Sopenharmony_ci				out0 = (in0 == f);
1637e5c31af7Sopenharmony_ci				${OUTPUT}
1638e5c31af7Sopenharmony_ci			}
1639e5c31af7Sopenharmony_ci		""
1640e5c31af7Sopenharmony_ci	end
1641e5c31af7Sopenharmony_ci
1642e5c31af7Sopenharmony_ci	case const_bool
1643e5c31af7Sopenharmony_ci		version 310 es
1644e5c31af7Sopenharmony_ci		values
1645e5c31af7Sopenharmony_ci		{
1646e5c31af7Sopenharmony_ci			input bool in0		= [ true | false ];
1647e5c31af7Sopenharmony_ci			output bool out0	= [ true | true ];
1648e5c31af7Sopenharmony_ci		}
1649e5c31af7Sopenharmony_ci
1650e5c31af7Sopenharmony_ci		both ""
1651e5c31af7Sopenharmony_ci			#version 310 es
1652e5c31af7Sopenharmony_ci			precision highp float;
1653e5c31af7Sopenharmony_ci			precision highp int;
1654e5c31af7Sopenharmony_ci			${DECLARATIONS}
1655e5c31af7Sopenharmony_ci
1656e5c31af7Sopenharmony_ci			bool func (const bool a)
1657e5c31af7Sopenharmony_ci			{
1658e5c31af7Sopenharmony_ci				bool b = !a;
1659e5c31af7Sopenharmony_ci				return b;
1660e5c31af7Sopenharmony_ci			}
1661e5c31af7Sopenharmony_ci
1662e5c31af7Sopenharmony_ci			void main()
1663e5c31af7Sopenharmony_ci			{
1664e5c31af7Sopenharmony_ci				${SETUP}
1665e5c31af7Sopenharmony_ci				bool f = in0;
1666e5c31af7Sopenharmony_ci				bool g = func(f);
1667e5c31af7Sopenharmony_ci				out0 = (f != g);
1668e5c31af7Sopenharmony_ci				${OUTPUT}
1669e5c31af7Sopenharmony_ci			}
1670e5c31af7Sopenharmony_ci		""
1671e5c31af7Sopenharmony_ci	end
1672e5c31af7Sopenharmony_ci
1673e5c31af7Sopenharmony_ciend # qualifiers
1674e5c31af7Sopenharmony_ci
1675e5c31af7Sopenharmony_cigroup declarations "Function Declarations"
1676e5c31af7Sopenharmony_ci
1677e5c31af7Sopenharmony_ci	case basic
1678e5c31af7Sopenharmony_ci		version 310 es
1679e5c31af7Sopenharmony_ci		values
1680e5c31af7Sopenharmony_ci		{
1681e5c31af7Sopenharmony_ci			input float in0		= [ 0.0 | 1.0 | -2.0 | 2.5 ];
1682e5c31af7Sopenharmony_ci			output float out0	= [ 0.0 | -1.0 | 2.0 | -2.5 ];
1683e5c31af7Sopenharmony_ci		}
1684e5c31af7Sopenharmony_ci
1685e5c31af7Sopenharmony_ci		both ""
1686e5c31af7Sopenharmony_ci			#version 310 es
1687e5c31af7Sopenharmony_ci			precision highp float;
1688e5c31af7Sopenharmony_ci			${DECLARATIONS}
1689e5c31af7Sopenharmony_ci
1690e5c31af7Sopenharmony_ci			float func (void);
1691e5c31af7Sopenharmony_ci
1692e5c31af7Sopenharmony_ci			float func (void)
1693e5c31af7Sopenharmony_ci			{
1694e5c31af7Sopenharmony_ci				return -1.0;
1695e5c31af7Sopenharmony_ci			}
1696e5c31af7Sopenharmony_ci
1697e5c31af7Sopenharmony_ci			void main()
1698e5c31af7Sopenharmony_ci			{
1699e5c31af7Sopenharmony_ci				out0 = func() * in0;
1700e5c31af7Sopenharmony_ci				${OUTPUT}
1701e5c31af7Sopenharmony_ci			}
1702e5c31af7Sopenharmony_ci		""
1703e5c31af7Sopenharmony_ci	end
1704e5c31af7Sopenharmony_ci
1705e5c31af7Sopenharmony_ci	case basic_arg
1706e5c31af7Sopenharmony_ci		version 310 es
1707e5c31af7Sopenharmony_ci		values
1708e5c31af7Sopenharmony_ci		{
1709e5c31af7Sopenharmony_ci			input float in0		= [ 0.0 | 1.0 | -2.0 | 2.5 ];
1710e5c31af7Sopenharmony_ci			output float out0	= [ 0.0 | -1.0 | 2.0 | -2.5 ];
1711e5c31af7Sopenharmony_ci		}
1712e5c31af7Sopenharmony_ci
1713e5c31af7Sopenharmony_ci		both ""
1714e5c31af7Sopenharmony_ci			#version 310 es
1715e5c31af7Sopenharmony_ci			precision highp float;
1716e5c31af7Sopenharmony_ci			${DECLARATIONS}
1717e5c31af7Sopenharmony_ci
1718e5c31af7Sopenharmony_ci			float func (float f);
1719e5c31af7Sopenharmony_ci
1720e5c31af7Sopenharmony_ci			float func (float f)
1721e5c31af7Sopenharmony_ci			{
1722e5c31af7Sopenharmony_ci				return -f;
1723e5c31af7Sopenharmony_ci			}
1724e5c31af7Sopenharmony_ci
1725e5c31af7Sopenharmony_ci			void main()
1726e5c31af7Sopenharmony_ci			{
1727e5c31af7Sopenharmony_ci				out0 = func(in0);
1728e5c31af7Sopenharmony_ci				${OUTPUT}
1729e5c31af7Sopenharmony_ci			}
1730e5c31af7Sopenharmony_ci		""
1731e5c31af7Sopenharmony_ci	end
1732e5c31af7Sopenharmony_ci
1733e5c31af7Sopenharmony_ci	case define_after_use
1734e5c31af7Sopenharmony_ci		version 310 es
1735e5c31af7Sopenharmony_ci		values
1736e5c31af7Sopenharmony_ci		{
1737e5c31af7Sopenharmony_ci			input float in0		= [ 0.0 | 1.0 | -2.0 | 2.5 ];
1738e5c31af7Sopenharmony_ci			output float out0	= [ 0.0 | -1.0 | 2.0 | -2.5 ];
1739e5c31af7Sopenharmony_ci		}
1740e5c31af7Sopenharmony_ci
1741e5c31af7Sopenharmony_ci		both ""
1742e5c31af7Sopenharmony_ci			#version 310 es
1743e5c31af7Sopenharmony_ci			precision highp float;
1744e5c31af7Sopenharmony_ci			${DECLARATIONS}
1745e5c31af7Sopenharmony_ci
1746e5c31af7Sopenharmony_ci			float func (void);
1747e5c31af7Sopenharmony_ci
1748e5c31af7Sopenharmony_ci			void main()
1749e5c31af7Sopenharmony_ci			{
1750e5c31af7Sopenharmony_ci				out0 = func() * in0;
1751e5c31af7Sopenharmony_ci				${OUTPUT}
1752e5c31af7Sopenharmony_ci			}
1753e5c31af7Sopenharmony_ci
1754e5c31af7Sopenharmony_ci			float func (void)
1755e5c31af7Sopenharmony_ci			{
1756e5c31af7Sopenharmony_ci				return -1.0;
1757e5c31af7Sopenharmony_ci			}
1758e5c31af7Sopenharmony_ci		""
1759e5c31af7Sopenharmony_ci	end
1760e5c31af7Sopenharmony_ci
1761e5c31af7Sopenharmony_ci	case double_declare
1762e5c31af7Sopenharmony_ci		version 310 es
1763e5c31af7Sopenharmony_ci		values
1764e5c31af7Sopenharmony_ci		{
1765e5c31af7Sopenharmony_ci			input float in0		= [ 0.0 | 1.0 | -2.0 | 2.5 ];
1766e5c31af7Sopenharmony_ci			output float out0	= [ 0.0 | -1.0 | 2.0 | -2.5 ];
1767e5c31af7Sopenharmony_ci		}
1768e5c31af7Sopenharmony_ci
1769e5c31af7Sopenharmony_ci		both ""
1770e5c31af7Sopenharmony_ci			#version 310 es
1771e5c31af7Sopenharmony_ci			precision highp float;
1772e5c31af7Sopenharmony_ci			${DECLARATIONS}
1773e5c31af7Sopenharmony_ci
1774e5c31af7Sopenharmony_ci			float func (void);
1775e5c31af7Sopenharmony_ci
1776e5c31af7Sopenharmony_ci			float func (void);
1777e5c31af7Sopenharmony_ci
1778e5c31af7Sopenharmony_ci			float func (void)
1779e5c31af7Sopenharmony_ci			{
1780e5c31af7Sopenharmony_ci				return -1.0;
1781e5c31af7Sopenharmony_ci			}
1782e5c31af7Sopenharmony_ci
1783e5c31af7Sopenharmony_ci			void main()
1784e5c31af7Sopenharmony_ci			{
1785e5c31af7Sopenharmony_ci				out0 = func() * in0;
1786e5c31af7Sopenharmony_ci				${OUTPUT}
1787e5c31af7Sopenharmony_ci			}
1788e5c31af7Sopenharmony_ci		""
1789e5c31af7Sopenharmony_ci	end
1790e5c31af7Sopenharmony_ci
1791e5c31af7Sopenharmony_ci	case declare_after_define
1792e5c31af7Sopenharmony_ci		version 310 es
1793e5c31af7Sopenharmony_ci		values
1794e5c31af7Sopenharmony_ci		{
1795e5c31af7Sopenharmony_ci			input float in0		= [ 0.0 | 1.0 | -2.0 | 2.5 ];
1796e5c31af7Sopenharmony_ci			output float out0	= [ 0.0 | -1.0 | 2.0 | -2.5 ];
1797e5c31af7Sopenharmony_ci		}
1798e5c31af7Sopenharmony_ci
1799e5c31af7Sopenharmony_ci		both ""
1800e5c31af7Sopenharmony_ci			#version 310 es
1801e5c31af7Sopenharmony_ci			precision highp float;
1802e5c31af7Sopenharmony_ci			${DECLARATIONS}
1803e5c31af7Sopenharmony_ci
1804e5c31af7Sopenharmony_ci			float func (void)
1805e5c31af7Sopenharmony_ci			{
1806e5c31af7Sopenharmony_ci				return -1.0;
1807e5c31af7Sopenharmony_ci			}
1808e5c31af7Sopenharmony_ci
1809e5c31af7Sopenharmony_ci			float func (void);
1810e5c31af7Sopenharmony_ci
1811e5c31af7Sopenharmony_ci			void main()
1812e5c31af7Sopenharmony_ci			{
1813e5c31af7Sopenharmony_ci				out0 = func() * in0;
1814e5c31af7Sopenharmony_ci				${OUTPUT}
1815e5c31af7Sopenharmony_ci			}
1816e5c31af7Sopenharmony_ci		""
1817e5c31af7Sopenharmony_ci	end
1818e5c31af7Sopenharmony_ci
1819e5c31af7Sopenharmony_ci	case void_vs_no_void
1820e5c31af7Sopenharmony_ci		version 310 es
1821e5c31af7Sopenharmony_ci		values
1822e5c31af7Sopenharmony_ci		{
1823e5c31af7Sopenharmony_ci			input float in0		= [ 0.0 | 1.0 | -2.0 | 2.5 ];
1824e5c31af7Sopenharmony_ci			output float out0	= [ 0.0 | -1.0 | 2.0 | -2.5 ];
1825e5c31af7Sopenharmony_ci		}
1826e5c31af7Sopenharmony_ci
1827e5c31af7Sopenharmony_ci		both ""
1828e5c31af7Sopenharmony_ci			#version 310 es
1829e5c31af7Sopenharmony_ci			precision highp float;
1830e5c31af7Sopenharmony_ci			${DECLARATIONS}
1831e5c31af7Sopenharmony_ci
1832e5c31af7Sopenharmony_ci			float func ();
1833e5c31af7Sopenharmony_ci
1834e5c31af7Sopenharmony_ci			void main()
1835e5c31af7Sopenharmony_ci			{
1836e5c31af7Sopenharmony_ci				out0 = func() * in0;
1837e5c31af7Sopenharmony_ci				${OUTPUT}
1838e5c31af7Sopenharmony_ci			}
1839e5c31af7Sopenharmony_ci
1840e5c31af7Sopenharmony_ci			float func (void)
1841e5c31af7Sopenharmony_ci			{
1842e5c31af7Sopenharmony_ci				return -1.0;
1843e5c31af7Sopenharmony_ci			}
1844e5c31af7Sopenharmony_ci		""
1845e5c31af7Sopenharmony_ci	end
1846e5c31af7Sopenharmony_ci
1847e5c31af7Sopenharmony_ci	case in_vs_no_in
1848e5c31af7Sopenharmony_ci		version 310 es
1849e5c31af7Sopenharmony_ci		values
1850e5c31af7Sopenharmony_ci		{
1851e5c31af7Sopenharmony_ci			input float in0		= [ 0.0 | 1.0 | -2.0 | 2.5 ];
1852e5c31af7Sopenharmony_ci			output float out0	= [ 0.0 | -1.0 | 2.0 | -2.5 ];
1853e5c31af7Sopenharmony_ci		}
1854e5c31af7Sopenharmony_ci
1855e5c31af7Sopenharmony_ci		both ""
1856e5c31af7Sopenharmony_ci			#version 310 es
1857e5c31af7Sopenharmony_ci			precision highp float;
1858e5c31af7Sopenharmony_ci			${DECLARATIONS}
1859e5c31af7Sopenharmony_ci
1860e5c31af7Sopenharmony_ci			float func (float f);
1861e5c31af7Sopenharmony_ci
1862e5c31af7Sopenharmony_ci			void main()
1863e5c31af7Sopenharmony_ci			{
1864e5c31af7Sopenharmony_ci				out0 = func(in0);
1865e5c31af7Sopenharmony_ci				${OUTPUT}
1866e5c31af7Sopenharmony_ci			}
1867e5c31af7Sopenharmony_ci
1868e5c31af7Sopenharmony_ci			float func (in float f)
1869e5c31af7Sopenharmony_ci			{
1870e5c31af7Sopenharmony_ci				return -f;
1871e5c31af7Sopenharmony_ci			}
1872e5c31af7Sopenharmony_ci		""
1873e5c31af7Sopenharmony_ci	end
1874e5c31af7Sopenharmony_ci
1875e5c31af7Sopenharmony_ci	case default_vs_explicit_precision
1876e5c31af7Sopenharmony_ci		version 310 es
1877e5c31af7Sopenharmony_ci		values
1878e5c31af7Sopenharmony_ci		{
1879e5c31af7Sopenharmony_ci			input float in0		= [ 0.0 | 1.0 | -2.0 | 2.5 ];
1880e5c31af7Sopenharmony_ci			output float out0	= [ 0.0 | -1.0 | 2.0 | -2.5 ];
1881e5c31af7Sopenharmony_ci		}
1882e5c31af7Sopenharmony_ci
1883e5c31af7Sopenharmony_ci		both ""
1884e5c31af7Sopenharmony_ci			#version 310 es
1885e5c31af7Sopenharmony_ci			precision highp float;
1886e5c31af7Sopenharmony_ci			${DECLARATIONS}
1887e5c31af7Sopenharmony_ci
1888e5c31af7Sopenharmony_ci			precision mediump float;
1889e5c31af7Sopenharmony_ci
1890e5c31af7Sopenharmony_ci			float func (float f);
1891e5c31af7Sopenharmony_ci
1892e5c31af7Sopenharmony_ci			precision highp float;
1893e5c31af7Sopenharmony_ci
1894e5c31af7Sopenharmony_ci			void main()
1895e5c31af7Sopenharmony_ci			{
1896e5c31af7Sopenharmony_ci				out0 = func(in0);
1897e5c31af7Sopenharmony_ci				${OUTPUT}
1898e5c31af7Sopenharmony_ci			}
1899e5c31af7Sopenharmony_ci
1900e5c31af7Sopenharmony_ci			float func (mediump float f)
1901e5c31af7Sopenharmony_ci			{
1902e5c31af7Sopenharmony_ci				return -f;
1903e5c31af7Sopenharmony_ci			}
1904e5c31af7Sopenharmony_ci		""
1905e5c31af7Sopenharmony_ci	end
1906e5c31af7Sopenharmony_ci
1907e5c31af7Sopenharmony_ci
1908e5c31af7Sopenharmony_ciend # declarations
1909e5c31af7Sopenharmony_ci
1910e5c31af7Sopenharmony_cigroup overloading "Function Overloading"
1911e5c31af7Sopenharmony_ci
1912e5c31af7Sopenharmony_ci	case user_func_arg_type_simple
1913e5c31af7Sopenharmony_ci		version 310 es
1914e5c31af7Sopenharmony_ci		values
1915e5c31af7Sopenharmony_ci		{
1916e5c31af7Sopenharmony_ci			input float in0		= [ 0.0 | 1.0 | -2.0 | 2.5 ];
1917e5c31af7Sopenharmony_ci			output float out0	= [ 0.0 | -1.0 | 2.0 | -2.5 ];
1918e5c31af7Sopenharmony_ci		}
1919e5c31af7Sopenharmony_ci
1920e5c31af7Sopenharmony_ci		both ""
1921e5c31af7Sopenharmony_ci			#version 310 es
1922e5c31af7Sopenharmony_ci			precision highp float;
1923e5c31af7Sopenharmony_ci			precision highp int;
1924e5c31af7Sopenharmony_ci			${DECLARATIONS}
1925e5c31af7Sopenharmony_ci
1926e5c31af7Sopenharmony_ci			float func (float a)
1927e5c31af7Sopenharmony_ci			{
1928e5c31af7Sopenharmony_ci				return -a;
1929e5c31af7Sopenharmony_ci			}
1930e5c31af7Sopenharmony_ci
1931e5c31af7Sopenharmony_ci			int func (int a)
1932e5c31af7Sopenharmony_ci			{
1933e5c31af7Sopenharmony_ci				return -a;
1934e5c31af7Sopenharmony_ci			}
1935e5c31af7Sopenharmony_ci
1936e5c31af7Sopenharmony_ci			void main()
1937e5c31af7Sopenharmony_ci			{
1938e5c31af7Sopenharmony_ci				out0 = func(in0) * float(func(-1));
1939e5c31af7Sopenharmony_ci				${OUTPUT}
1940e5c31af7Sopenharmony_ci			}
1941e5c31af7Sopenharmony_ci		""
1942e5c31af7Sopenharmony_ci	end
1943e5c31af7Sopenharmony_ci
1944e5c31af7Sopenharmony_ci	case user_func_arg_float_types
1945e5c31af7Sopenharmony_ci		version 310 es
1946e5c31af7Sopenharmony_ci		values
1947e5c31af7Sopenharmony_ci		{
1948e5c31af7Sopenharmony_ci			input float in0		= [ 0.0 | 1.0 | -2.0 | 2.5 ];
1949e5c31af7Sopenharmony_ci			output float out0	= [ 0.0 | -1.0 | 2.0 | -2.5 ];
1950e5c31af7Sopenharmony_ci		}
1951e5c31af7Sopenharmony_ci
1952e5c31af7Sopenharmony_ci		both ""
1953e5c31af7Sopenharmony_ci			#version 310 es
1954e5c31af7Sopenharmony_ci			precision highp float;
1955e5c31af7Sopenharmony_ci			precision highp int;
1956e5c31af7Sopenharmony_ci			${DECLARATIONS}
1957e5c31af7Sopenharmony_ci
1958e5c31af7Sopenharmony_ci			float func (float a) { return -a; }
1959e5c31af7Sopenharmony_ci			vec2 func (vec2 a) { return a.yx; }
1960e5c31af7Sopenharmony_ci			vec3 func (vec3 a) { return a.xxx; }
1961e5c31af7Sopenharmony_ci			vec4 func (vec4 a) { return a.wwww; }
1962e5c31af7Sopenharmony_ci
1963e5c31af7Sopenharmony_ci			void main()
1964e5c31af7Sopenharmony_ci			{
1965e5c31af7Sopenharmony_ci				out0 = func(func(func(func(vec4(in0)).xyz).xy).x);
1966e5c31af7Sopenharmony_ci				${OUTPUT}
1967e5c31af7Sopenharmony_ci			}
1968e5c31af7Sopenharmony_ci		""
1969e5c31af7Sopenharmony_ci	end
1970e5c31af7Sopenharmony_ci
1971e5c31af7Sopenharmony_ci	case user_func_arg_int_types
1972e5c31af7Sopenharmony_ci		version 310 es
1973e5c31af7Sopenharmony_ci		values
1974e5c31af7Sopenharmony_ci		{
1975e5c31af7Sopenharmony_ci			input int in0		= [ 0 | 1 | -2 | 6 ];
1976e5c31af7Sopenharmony_ci			output int out0		= [ 0 | -1 | 2 | -6 ];
1977e5c31af7Sopenharmony_ci		}
1978e5c31af7Sopenharmony_ci
1979e5c31af7Sopenharmony_ci		both ""
1980e5c31af7Sopenharmony_ci			#version 310 es
1981e5c31af7Sopenharmony_ci			precision highp float;
1982e5c31af7Sopenharmony_ci			precision highp int;
1983e5c31af7Sopenharmony_ci			${DECLARATIONS}
1984e5c31af7Sopenharmony_ci
1985e5c31af7Sopenharmony_ci			int func (int a) { return -a; }
1986e5c31af7Sopenharmony_ci			ivec2 func (ivec2 a) { return a.yx; }
1987e5c31af7Sopenharmony_ci			ivec3 func (ivec3 a) { return a.xxx; }
1988e5c31af7Sopenharmony_ci			ivec4 func (ivec4 a) { return a.wwww; }
1989e5c31af7Sopenharmony_ci
1990e5c31af7Sopenharmony_ci			void main()
1991e5c31af7Sopenharmony_ci			{
1992e5c31af7Sopenharmony_ci				${SETUP}
1993e5c31af7Sopenharmony_ci				out0 = func(func(func(func(ivec4(in0)).xyz).xy).x);
1994e5c31af7Sopenharmony_ci				${OUTPUT}
1995e5c31af7Sopenharmony_ci			}
1996e5c31af7Sopenharmony_ci		""
1997e5c31af7Sopenharmony_ci	end
1998e5c31af7Sopenharmony_ci
1999e5c31af7Sopenharmony_ci	case user_func_arg_bool_types
2000e5c31af7Sopenharmony_ci		version 310 es
2001e5c31af7Sopenharmony_ci		values
2002e5c31af7Sopenharmony_ci		{
2003e5c31af7Sopenharmony_ci			input bool in0		= [ true | false ];
2004e5c31af7Sopenharmony_ci			output bool out0	= [ false | true ];
2005e5c31af7Sopenharmony_ci		}
2006e5c31af7Sopenharmony_ci
2007e5c31af7Sopenharmony_ci		both ""
2008e5c31af7Sopenharmony_ci			#version 310 es
2009e5c31af7Sopenharmony_ci			precision highp float;
2010e5c31af7Sopenharmony_ci			precision highp int;
2011e5c31af7Sopenharmony_ci			${DECLARATIONS}
2012e5c31af7Sopenharmony_ci
2013e5c31af7Sopenharmony_ci			bool func (bool a) { return !a; }
2014e5c31af7Sopenharmony_ci			bvec2 func (bvec2 a) { return a.yx; }
2015e5c31af7Sopenharmony_ci			bvec3 func (bvec3 a) { return a.xxx; }
2016e5c31af7Sopenharmony_ci			bvec4 func (bvec4 a) { return a.wwww; }
2017e5c31af7Sopenharmony_ci
2018e5c31af7Sopenharmony_ci			void main()
2019e5c31af7Sopenharmony_ci			{
2020e5c31af7Sopenharmony_ci				${SETUP}
2021e5c31af7Sopenharmony_ci				out0 = func(func(func(func(bvec4(in0)).xyz).xy).x);
2022e5c31af7Sopenharmony_ci				${OUTPUT}
2023e5c31af7Sopenharmony_ci			}
2024e5c31af7Sopenharmony_ci		""
2025e5c31af7Sopenharmony_ci	end
2026e5c31af7Sopenharmony_ci
2027e5c31af7Sopenharmony_ci	case user_func_arg_basic_types
2028e5c31af7Sopenharmony_ci		version 310 es
2029e5c31af7Sopenharmony_ci		values
2030e5c31af7Sopenharmony_ci		{
2031e5c31af7Sopenharmony_ci			input float in0		= [ 0.0 | 1.0 | -2.0 | 2.5 ];
2032e5c31af7Sopenharmony_ci			output float out0	= [ 0.0 | -1.0 | 2.0 | -2.5 ];
2033e5c31af7Sopenharmony_ci		}
2034e5c31af7Sopenharmony_ci
2035e5c31af7Sopenharmony_ci		both ""
2036e5c31af7Sopenharmony_ci			#version 310 es
2037e5c31af7Sopenharmony_ci			precision highp float;
2038e5c31af7Sopenharmony_ci			precision highp int;
2039e5c31af7Sopenharmony_ci			${DECLARATIONS}
2040e5c31af7Sopenharmony_ci
2041e5c31af7Sopenharmony_ci			float func (float a) { return -a; }
2042e5c31af7Sopenharmony_ci			vec2 func (vec2 a) { return a.yx; }
2043e5c31af7Sopenharmony_ci			vec3 func (vec3 a) { return a.xxx; }
2044e5c31af7Sopenharmony_ci			vec4 func (vec4 a) { return a.wwww; }
2045e5c31af7Sopenharmony_ci			int func (int a) { return -a; }
2046e5c31af7Sopenharmony_ci			ivec2 func (ivec2 a) { return a.yx; }
2047e5c31af7Sopenharmony_ci			ivec3 func (ivec3 a) { return a.xxx; }
2048e5c31af7Sopenharmony_ci			ivec4 func (ivec4 a) { return a.wwww; }
2049e5c31af7Sopenharmony_ci			bool func (bool a) { return !a; }
2050e5c31af7Sopenharmony_ci			bvec2 func (bvec2 a) { return a.yx; }
2051e5c31af7Sopenharmony_ci			bvec3 func (bvec3 a) { return a.xxx; }
2052e5c31af7Sopenharmony_ci			bvec4 func (bvec4 a) { return a.wwww; }
2053e5c31af7Sopenharmony_ci
2054e5c31af7Sopenharmony_ci			void main()
2055e5c31af7Sopenharmony_ci			{
2056e5c31af7Sopenharmony_ci				${SETUP}
2057e5c31af7Sopenharmony_ci				if (func(func(bvec4(false)).x))
2058e5c31af7Sopenharmony_ci					out0 = func(in0) * float(func(-1));
2059e5c31af7Sopenharmony_ci				else
2060e5c31af7Sopenharmony_ci					out0 = float(func(func(ivec4(func(func(func(vec4(0.5)).xyz).xy).xxxx)).xy).x);
2061e5c31af7Sopenharmony_ci				${OUTPUT}
2062e5c31af7Sopenharmony_ci			}
2063e5c31af7Sopenharmony_ci		""
2064e5c31af7Sopenharmony_ci	end
2065e5c31af7Sopenharmony_ci
2066e5c31af7Sopenharmony_ci	case user_func_arg_complex_types
2067e5c31af7Sopenharmony_ci		version 310 es
2068e5c31af7Sopenharmony_ci		values
2069e5c31af7Sopenharmony_ci		{
2070e5c31af7Sopenharmony_ci			input float in0		= [ 0.0 | 1.0 | -2.0 | 2.5 ];
2071e5c31af7Sopenharmony_ci			output float out0	= [ 0.0 | -1.0 | 2.0 | -2.5 ];
2072e5c31af7Sopenharmony_ci		}
2073e5c31af7Sopenharmony_ci
2074e5c31af7Sopenharmony_ci		both ""
2075e5c31af7Sopenharmony_ci			#version 310 es
2076e5c31af7Sopenharmony_ci			precision highp float;
2077e5c31af7Sopenharmony_ci			precision highp int;
2078e5c31af7Sopenharmony_ci			${DECLARATIONS}
2079e5c31af7Sopenharmony_ci
2080e5c31af7Sopenharmony_ci			struct Pos { float a, b, c; };
2081e5c31af7Sopenharmony_ci			struct Line { Pos start, end; };
2082e5c31af7Sopenharmony_ci
2083e5c31af7Sopenharmony_ci			float func (float a) { return -a; }
2084e5c31af7Sopenharmony_ci			float func (float a[4]) { return a[0] + a[3]; }
2085e5c31af7Sopenharmony_ci			vec2 func (vec2 a) { return a.yx; }
2086e5c31af7Sopenharmony_ci			vec3 func (vec3 a) { return a.xxx; }
2087e5c31af7Sopenharmony_ci			vec4 func (vec4 a) { return a.wwww; }
2088e5c31af7Sopenharmony_ci			vec4 func (vec4 a[4]) { return a[1] + a[2]; }
2089e5c31af7Sopenharmony_ci			int func (int a) { return -a; }
2090e5c31af7Sopenharmony_ci			ivec2 func (ivec2 a) { return a.yx; }
2091e5c31af7Sopenharmony_ci			ivec3 func (ivec3 a) { return a.xxx; }
2092e5c31af7Sopenharmony_ci			ivec4 func (ivec4 a) { return a.wwww; }
2093e5c31af7Sopenharmony_ci			bool func (bool a) { return !a; }
2094e5c31af7Sopenharmony_ci			bvec2 func (bvec2 a) { return a.yx; }
2095e5c31af7Sopenharmony_ci			bvec3 func (bvec3 a) { return a.xxx; }
2096e5c31af7Sopenharmony_ci			bvec4 func (bvec4 a) { return a.wwww; }
2097e5c31af7Sopenharmony_ci			Pos func (Pos a) { return a; }
2098e5c31af7Sopenharmony_ci			Line func (Line a) { return Line(a.end, a.start); }
2099e5c31af7Sopenharmony_ci
2100e5c31af7Sopenharmony_ci			void main()
2101e5c31af7Sopenharmony_ci			{
2102e5c31af7Sopenharmony_ci				${SETUP}
2103e5c31af7Sopenharmony_ci				float arr[4];
2104e5c31af7Sopenharmony_ci				vec4 arr2[4];
2105e5c31af7Sopenharmony_ci				out0 = func(arr) + func(arr2).x;
2106e5c31af7Sopenharmony_ci				if (func(func(bvec4(false)).x))
2107e5c31af7Sopenharmony_ci					out0 = func(in0) * float(func(-1));
2108e5c31af7Sopenharmony_ci				else
2109e5c31af7Sopenharmony_ci					out0 = float(func(func(ivec4(func(func(func(vec4(0.5)).xyz).xy).xxxx)).xy).x);
2110e5c31af7Sopenharmony_ci				${OUTPUT}
2111e5c31af7Sopenharmony_ci			}
2112e5c31af7Sopenharmony_ci		""
2113e5c31af7Sopenharmony_ci	end
2114e5c31af7Sopenharmony_ci
2115e5c31af7Sopenharmony_ci	case user_func_arguments
2116e5c31af7Sopenharmony_ci		version 310 es
2117e5c31af7Sopenharmony_ci		values
2118e5c31af7Sopenharmony_ci		{
2119e5c31af7Sopenharmony_ci			input float in0		= [ 0.0 | 1.0 | -2.0 | 2.5 ];
2120e5c31af7Sopenharmony_ci			output float out0	= [ 0.0 | -1.0 | 2.0 | -2.5 ];
2121e5c31af7Sopenharmony_ci		}
2122e5c31af7Sopenharmony_ci
2123e5c31af7Sopenharmony_ci		both ""
2124e5c31af7Sopenharmony_ci			#version 310 es
2125e5c31af7Sopenharmony_ci			precision highp float;
2126e5c31af7Sopenharmony_ci			${DECLARATIONS}
2127e5c31af7Sopenharmony_ci
2128e5c31af7Sopenharmony_ci			float func (float a)
2129e5c31af7Sopenharmony_ci			{
2130e5c31af7Sopenharmony_ci				return -a;
2131e5c31af7Sopenharmony_ci			}
2132e5c31af7Sopenharmony_ci
2133e5c31af7Sopenharmony_ci			float func (float a, float b)
2134e5c31af7Sopenharmony_ci			{
2135e5c31af7Sopenharmony_ci				return a * b;
2136e5c31af7Sopenharmony_ci			}
2137e5c31af7Sopenharmony_ci
2138e5c31af7Sopenharmony_ci			void main()
2139e5c31af7Sopenharmony_ci			{
2140e5c31af7Sopenharmony_ci				out0 = func(in0) * func(-0.5, -2.0);
2141e5c31af7Sopenharmony_ci				${OUTPUT}
2142e5c31af7Sopenharmony_ci			}
2143e5c31af7Sopenharmony_ci		""
2144e5c31af7Sopenharmony_ci	end
2145e5c31af7Sopenharmony_ci
2146e5c31af7Sopenharmony_ci	case array_size
2147e5c31af7Sopenharmony_ci		version 310 es
2148e5c31af7Sopenharmony_ci		values
2149e5c31af7Sopenharmony_ci		{
2150e5c31af7Sopenharmony_ci			output float out0	= [ 1.0 ];
2151e5c31af7Sopenharmony_ci		}
2152e5c31af7Sopenharmony_ci
2153e5c31af7Sopenharmony_ci		both ""
2154e5c31af7Sopenharmony_ci			#version 310 es
2155e5c31af7Sopenharmony_ci			precision highp float;
2156e5c31af7Sopenharmony_ci			${DECLARATIONS}
2157e5c31af7Sopenharmony_ci
2158e5c31af7Sopenharmony_ci			float func (float f[3])
2159e5c31af7Sopenharmony_ci			{
2160e5c31af7Sopenharmony_ci				return f[0];
2161e5c31af7Sopenharmony_ci			}
2162e5c31af7Sopenharmony_ci
2163e5c31af7Sopenharmony_ci			float func (float f[4])
2164e5c31af7Sopenharmony_ci			{
2165e5c31af7Sopenharmony_ci				return f[1];
2166e5c31af7Sopenharmony_ci			}
2167e5c31af7Sopenharmony_ci
2168e5c31af7Sopenharmony_ci			void main ()
2169e5c31af7Sopenharmony_ci			{
2170e5c31af7Sopenharmony_ci				${SETUP}
2171e5c31af7Sopenharmony_ci				float[4] x = float[4] (-1.0, 1.0, 0.0, 0.0);
2172e5c31af7Sopenharmony_ci				out0 = func(x);
2173e5c31af7Sopenharmony_ci				${OUTPUT}
2174e5c31af7Sopenharmony_ci			}
2175e5c31af7Sopenharmony_ci		""
2176e5c31af7Sopenharmony_ci	end
2177e5c31af7Sopenharmony_ci
2178e5c31af7Sopenharmony_ciend # overloading
2179e5c31af7Sopenharmony_ci
2180e5c31af7Sopenharmony_cigroup array_arguments "Arrays as Arguments"
2181e5c31af7Sopenharmony_ci
2182e5c31af7Sopenharmony_ci	case local_in_float
2183e5c31af7Sopenharmony_ci		version 310 es
2184e5c31af7Sopenharmony_ci		values
2185e5c31af7Sopenharmony_ci		{
2186e5c31af7Sopenharmony_ci			input vec4 in0		= [ vec4(0.0, 1.0, 2.0, -4.0) | vec4(-7.5, 12.125, -0.25, 16.0) ];
2187e5c31af7Sopenharmony_ci			output vec4 out0	= [ vec4(0.0, -1.0, -2.0, 4.0) | vec4(7.5, -12.125, 0.25, -16.0) ];
2188e5c31af7Sopenharmony_ci		}
2189e5c31af7Sopenharmony_ci
2190e5c31af7Sopenharmony_ci		both ""
2191e5c31af7Sopenharmony_ci			#version 310 es
2192e5c31af7Sopenharmony_ci			precision highp float;
2193e5c31af7Sopenharmony_ci			${DECLARATIONS}
2194e5c31af7Sopenharmony_ci
2195e5c31af7Sopenharmony_ci			float func (in float a[4])
2196e5c31af7Sopenharmony_ci			{
2197e5c31af7Sopenharmony_ci				a[0] = -1.0;
2198e5c31af7Sopenharmony_ci				a[2] = -4.0;
2199e5c31af7Sopenharmony_ci				a[3] = -3.0 * a[1];
2200e5c31af7Sopenharmony_ci				return a[0];
2201e5c31af7Sopenharmony_ci			}
2202e5c31af7Sopenharmony_ci
2203e5c31af7Sopenharmony_ci			void main()
2204e5c31af7Sopenharmony_ci			{
2205e5c31af7Sopenharmony_ci				float arr[4];
2206e5c31af7Sopenharmony_ci				arr[0] = in0.x;
2207e5c31af7Sopenharmony_ci				arr[1] = in0.y;
2208e5c31af7Sopenharmony_ci				arr[2] = in0.z;
2209e5c31af7Sopenharmony_ci				arr[3] = in0.w;
2210e5c31af7Sopenharmony_ci				float f = func(arr);
2211e5c31af7Sopenharmony_ci				out0 = f * vec4(arr[0], arr[1], arr[2], arr[3]);
2212e5c31af7Sopenharmony_ci				${OUTPUT}
2213e5c31af7Sopenharmony_ci			}
2214e5c31af7Sopenharmony_ci		""
2215e5c31af7Sopenharmony_ci	end
2216e5c31af7Sopenharmony_ci
2217e5c31af7Sopenharmony_ci	case global_in_float
2218e5c31af7Sopenharmony_ci		version 310 es
2219e5c31af7Sopenharmony_ci		values
2220e5c31af7Sopenharmony_ci		{
2221e5c31af7Sopenharmony_ci			input vec4 in0		= [ vec4(0.0, 1.0, 2.0, -4.0) | vec4(-7.5, 12.125, -0.25, 16.0) ];
2222e5c31af7Sopenharmony_ci			output vec4 out0	= [ vec4(0.0, -1.0, -2.0, 4.0) | vec4(7.5, -12.125, 0.25, -16.0) ];
2223e5c31af7Sopenharmony_ci		}
2224e5c31af7Sopenharmony_ci
2225e5c31af7Sopenharmony_ci		both ""
2226e5c31af7Sopenharmony_ci			#version 310 es
2227e5c31af7Sopenharmony_ci			precision highp float;
2228e5c31af7Sopenharmony_ci			${DECLARATIONS}
2229e5c31af7Sopenharmony_ci
2230e5c31af7Sopenharmony_ci			float func (in float a[4])
2231e5c31af7Sopenharmony_ci			{
2232e5c31af7Sopenharmony_ci				a[0] = -1.0;
2233e5c31af7Sopenharmony_ci				a[2] = -4.0;
2234e5c31af7Sopenharmony_ci				a[3] = -3.0 * a[1];
2235e5c31af7Sopenharmony_ci				return a[0];
2236e5c31af7Sopenharmony_ci			}
2237e5c31af7Sopenharmony_ci
2238e5c31af7Sopenharmony_ci			float arr[4];
2239e5c31af7Sopenharmony_ci
2240e5c31af7Sopenharmony_ci			void main()
2241e5c31af7Sopenharmony_ci			{
2242e5c31af7Sopenharmony_ci				arr[0] = in0.x;
2243e5c31af7Sopenharmony_ci				arr[1] = in0.y;
2244e5c31af7Sopenharmony_ci				arr[2] = in0.z;
2245e5c31af7Sopenharmony_ci				arr[3] = in0.w;
2246e5c31af7Sopenharmony_ci				float f = func(arr);
2247e5c31af7Sopenharmony_ci				out0 = f * vec4(arr[0], arr[1], arr[2], arr[3]);
2248e5c31af7Sopenharmony_ci				${OUTPUT}
2249e5c31af7Sopenharmony_ci			}
2250e5c31af7Sopenharmony_ci		""
2251e5c31af7Sopenharmony_ci	end
2252e5c31af7Sopenharmony_ci
2253e5c31af7Sopenharmony_ci	case local_in_int
2254e5c31af7Sopenharmony_ci		version 310 es
2255e5c31af7Sopenharmony_ci		values
2256e5c31af7Sopenharmony_ci		{
2257e5c31af7Sopenharmony_ci			input ivec4 in0		= [ ivec4(0, 1, 2, -4) | ivec4(-7, -11, 13, 19) ];
2258e5c31af7Sopenharmony_ci			output ivec4 out0	= [ ivec4(0, -1, -2, 4) | ivec4(7, 11, -13, -19) ];
2259e5c31af7Sopenharmony_ci		}
2260e5c31af7Sopenharmony_ci
2261e5c31af7Sopenharmony_ci		both ""
2262e5c31af7Sopenharmony_ci			#version 310 es
2263e5c31af7Sopenharmony_ci			precision highp float;
2264e5c31af7Sopenharmony_ci			precision highp int;
2265e5c31af7Sopenharmony_ci			${DECLARATIONS}
2266e5c31af7Sopenharmony_ci
2267e5c31af7Sopenharmony_ci			int func (in int a[4])
2268e5c31af7Sopenharmony_ci			{
2269e5c31af7Sopenharmony_ci				a[0] = -1;
2270e5c31af7Sopenharmony_ci				a[2] = -4;
2271e5c31af7Sopenharmony_ci				a[3] = -3 * a[1];
2272e5c31af7Sopenharmony_ci				return a[0];
2273e5c31af7Sopenharmony_ci			}
2274e5c31af7Sopenharmony_ci
2275e5c31af7Sopenharmony_ci			void main()
2276e5c31af7Sopenharmony_ci			{
2277e5c31af7Sopenharmony_ci				${SETUP}
2278e5c31af7Sopenharmony_ci				int arr[4];
2279e5c31af7Sopenharmony_ci				arr[0] = in0.x;
2280e5c31af7Sopenharmony_ci				arr[1] = in0.y;
2281e5c31af7Sopenharmony_ci				arr[2] = in0.z;
2282e5c31af7Sopenharmony_ci				arr[3] = in0.w;
2283e5c31af7Sopenharmony_ci				int f = func(arr);
2284e5c31af7Sopenharmony_ci				out0 = f * ivec4(arr[0], arr[1], arr[2], arr[3]);
2285e5c31af7Sopenharmony_ci				${OUTPUT}
2286e5c31af7Sopenharmony_ci			}
2287e5c31af7Sopenharmony_ci		""
2288e5c31af7Sopenharmony_ci	end
2289e5c31af7Sopenharmony_ci
2290e5c31af7Sopenharmony_ci	case global_in_int
2291e5c31af7Sopenharmony_ci		version 310 es
2292e5c31af7Sopenharmony_ci		values
2293e5c31af7Sopenharmony_ci		{
2294e5c31af7Sopenharmony_ci			input ivec4 in0		= [ ivec4(0, 1, 2, 4) | ivec4(-7, -11, 13, 19) ];
2295e5c31af7Sopenharmony_ci			output ivec4 out0	= [ ivec4(0, -1, -2, -4) | ivec4(7, 11, -13, -19) ];
2296e5c31af7Sopenharmony_ci		}
2297e5c31af7Sopenharmony_ci
2298e5c31af7Sopenharmony_ci		both ""
2299e5c31af7Sopenharmony_ci			#version 310 es
2300e5c31af7Sopenharmony_ci			precision highp float;
2301e5c31af7Sopenharmony_ci			precision highp int;
2302e5c31af7Sopenharmony_ci			${DECLARATIONS}
2303e5c31af7Sopenharmony_ci
2304e5c31af7Sopenharmony_ci			int func (in int a[4])
2305e5c31af7Sopenharmony_ci			{
2306e5c31af7Sopenharmony_ci				a[0] = -1;
2307e5c31af7Sopenharmony_ci				a[2] = -4;
2308e5c31af7Sopenharmony_ci				a[3] = -3 * a[1];
2309e5c31af7Sopenharmony_ci				return a[0];
2310e5c31af7Sopenharmony_ci			}
2311e5c31af7Sopenharmony_ci
2312e5c31af7Sopenharmony_ci			int arr[4];
2313e5c31af7Sopenharmony_ci
2314e5c31af7Sopenharmony_ci			void main()
2315e5c31af7Sopenharmony_ci			{
2316e5c31af7Sopenharmony_ci				${SETUP}
2317e5c31af7Sopenharmony_ci				arr[0] = in0.x;
2318e5c31af7Sopenharmony_ci				arr[1] = in0.y;
2319e5c31af7Sopenharmony_ci				arr[2] = in0.z;
2320e5c31af7Sopenharmony_ci				arr[3] = in0.w;
2321e5c31af7Sopenharmony_ci				int f = func(arr);
2322e5c31af7Sopenharmony_ci				out0 = f * ivec4(arr[0], arr[1], arr[2], arr[3]);
2323e5c31af7Sopenharmony_ci				${OUTPUT}
2324e5c31af7Sopenharmony_ci			}
2325e5c31af7Sopenharmony_ci
2326e5c31af7Sopenharmony_ci		""
2327e5c31af7Sopenharmony_ci	end
2328e5c31af7Sopenharmony_ci
2329e5c31af7Sopenharmony_ci	case local_in_bool
2330e5c31af7Sopenharmony_ci		version 310 es
2331e5c31af7Sopenharmony_ci		values
2332e5c31af7Sopenharmony_ci		{
2333e5c31af7Sopenharmony_ci			input bvec4 in0		= [ bvec4(true, true, false, true) | bvec4(false, false, false, false) ];
2334e5c31af7Sopenharmony_ci			output bvec4 out0	= [ bvec4(false, false, true, false) | bvec4(true, true, true, true) ];
2335e5c31af7Sopenharmony_ci		}
2336e5c31af7Sopenharmony_ci
2337e5c31af7Sopenharmony_ci		both ""
2338e5c31af7Sopenharmony_ci			#version 310 es
2339e5c31af7Sopenharmony_ci			precision highp float;
2340e5c31af7Sopenharmony_ci			precision highp int;
2341e5c31af7Sopenharmony_ci			${DECLARATIONS}
2342e5c31af7Sopenharmony_ci
2343e5c31af7Sopenharmony_ci			bool func (in bool a[4])
2344e5c31af7Sopenharmony_ci			{
2345e5c31af7Sopenharmony_ci				a[0] = false;
2346e5c31af7Sopenharmony_ci				a[2] = true;
2347e5c31af7Sopenharmony_ci				a[3] = !a[1];
2348e5c31af7Sopenharmony_ci				return a[0];
2349e5c31af7Sopenharmony_ci			}
2350e5c31af7Sopenharmony_ci
2351e5c31af7Sopenharmony_ci			void main()
2352e5c31af7Sopenharmony_ci			{
2353e5c31af7Sopenharmony_ci				${SETUP}
2354e5c31af7Sopenharmony_ci				bool arr[4];
2355e5c31af7Sopenharmony_ci				arr[0] = !in0.x;
2356e5c31af7Sopenharmony_ci				arr[1] = !in0.y;
2357e5c31af7Sopenharmony_ci				arr[2] = !in0.z;
2358e5c31af7Sopenharmony_ci				arr[3] = !in0.w;
2359e5c31af7Sopenharmony_ci				func(arr);
2360e5c31af7Sopenharmony_ci				out0 = bvec4(arr[0], arr[1], arr[2], arr[3]);
2361e5c31af7Sopenharmony_ci				${OUTPUT}
2362e5c31af7Sopenharmony_ci			}
2363e5c31af7Sopenharmony_ci		""
2364e5c31af7Sopenharmony_ci	end
2365e5c31af7Sopenharmony_ci
2366e5c31af7Sopenharmony_ci	case global_in_bool
2367e5c31af7Sopenharmony_ci		version 310 es
2368e5c31af7Sopenharmony_ci		values
2369e5c31af7Sopenharmony_ci		{
2370e5c31af7Sopenharmony_ci			input bvec4 in0		= [ bvec4(true, true, false, true) | bvec4(false, false, false, false) ];
2371e5c31af7Sopenharmony_ci			output bvec4 out0	= [ bvec4(false, false, true, false) | bvec4(true, true, true, true) ];
2372e5c31af7Sopenharmony_ci		}
2373e5c31af7Sopenharmony_ci
2374e5c31af7Sopenharmony_ci		both ""
2375e5c31af7Sopenharmony_ci			#version 310 es
2376e5c31af7Sopenharmony_ci			precision highp float;
2377e5c31af7Sopenharmony_ci			precision highp int;
2378e5c31af7Sopenharmony_ci			${DECLARATIONS}
2379e5c31af7Sopenharmony_ci
2380e5c31af7Sopenharmony_ci			bool func (in bool a[4])
2381e5c31af7Sopenharmony_ci			{
2382e5c31af7Sopenharmony_ci				a[0] = false;
2383e5c31af7Sopenharmony_ci				a[2] = true;
2384e5c31af7Sopenharmony_ci				a[3] = !a[1];
2385e5c31af7Sopenharmony_ci				return a[0];
2386e5c31af7Sopenharmony_ci			}
2387e5c31af7Sopenharmony_ci
2388e5c31af7Sopenharmony_ci			bool arr[4];
2389e5c31af7Sopenharmony_ci
2390e5c31af7Sopenharmony_ci			void main()
2391e5c31af7Sopenharmony_ci			{
2392e5c31af7Sopenharmony_ci				${SETUP}
2393e5c31af7Sopenharmony_ci				arr[0] = !in0.x;
2394e5c31af7Sopenharmony_ci				arr[1] = !in0.y;
2395e5c31af7Sopenharmony_ci				arr[2] = !in0.z;
2396e5c31af7Sopenharmony_ci				arr[3] = !in0.w;
2397e5c31af7Sopenharmony_ci				func(arr);
2398e5c31af7Sopenharmony_ci				out0 = bvec4(arr[0], arr[1], arr[2], arr[3]);
2399e5c31af7Sopenharmony_ci				${OUTPUT}
2400e5c31af7Sopenharmony_ci			}
2401e5c31af7Sopenharmony_ci		""
2402e5c31af7Sopenharmony_ci	end
2403e5c31af7Sopenharmony_ci
2404e5c31af7Sopenharmony_ci	case test_helpers
2405e5c31af7Sopenharmony_ci		version 310 es
2406e5c31af7Sopenharmony_ci		desc "Check that helper functions are supported properly."
2407e5c31af7Sopenharmony_ci		values
2408e5c31af7Sopenharmony_ci		{
2409e5c31af7Sopenharmony_ci			input vec4 in0		= [ vec4(0.0, 1.0, 2.0, -4.0) | vec4(-7.5, 12.125, -0.25, 16.0) ];
2410e5c31af7Sopenharmony_ci			output float out0	= [ 1.0 | 1.0 ];
2411e5c31af7Sopenharmony_ci		}
2412e5c31af7Sopenharmony_ci
2413e5c31af7Sopenharmony_ci		both ""
2414e5c31af7Sopenharmony_ci			#version 310 es
2415e5c31af7Sopenharmony_ci			precision highp float;
2416e5c31af7Sopenharmony_ci			${DECLARATIONS}
2417e5c31af7Sopenharmony_ci
2418e5c31af7Sopenharmony_ci			vec4 get (in float arr[4]);
2419e5c31af7Sopenharmony_ci			void set (out float arr[4], vec4 val);
2420e5c31af7Sopenharmony_ci			void negate (inout float arr[4]);
2421e5c31af7Sopenharmony_ci			bool test (in float arr[4], vec4 ref);
2422e5c31af7Sopenharmony_ci			bool isEqual (in float a[4], in float b[4]);
2423e5c31af7Sopenharmony_ci
2424e5c31af7Sopenharmony_ci			void main()
2425e5c31af7Sopenharmony_ci			{
2426e5c31af7Sopenharmony_ci				float arr[4];
2427e5c31af7Sopenharmony_ci				set(arr, in0);
2428e5c31af7Sopenharmony_ci				negate(arr);
2429e5c31af7Sopenharmony_ci				out0 = float(test(arr, -in0));
2430e5c31af7Sopenharmony_ci				${OUTPUT}
2431e5c31af7Sopenharmony_ci			}
2432e5c31af7Sopenharmony_ci
2433e5c31af7Sopenharmony_ci			float absDiff (vec4 a, vec4 b) { vec4 d = abs(a - b); return max(max(d.x, d.y), max(d.z, d.w)); }
2434e5c31af7Sopenharmony_ci			vec4 get (in float arr[4]) { return vec4(arr[0], arr[1], arr[2], arr[3]); }
2435e5c31af7Sopenharmony_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; }
2436e5c31af7Sopenharmony_ci			void negate (inout float arr[4]) { set(arr, -get(arr)); }
2437e5c31af7Sopenharmony_ci			bool test (in float arr[4], vec4 ref) { return (absDiff(get(arr), ref) < 0.1); }
2438e5c31af7Sopenharmony_ci			bool isEqual (in float a[4], in float b[4]) { return (absDiff(get(a), get(b)) < 0.1); }
2439e5c31af7Sopenharmony_ci		""
2440e5c31af7Sopenharmony_ci	end
2441e5c31af7Sopenharmony_ci
2442e5c31af7Sopenharmony_ci	case copy_local_in_on_call
2443e5c31af7Sopenharmony_ci		version 310 es
2444e5c31af7Sopenharmony_ci		desc "Check that local 'in' arguments are copied on call and don't alias."
2445e5c31af7Sopenharmony_ci		values
2446e5c31af7Sopenharmony_ci		{
2447e5c31af7Sopenharmony_ci			input vec4 in0		= [ vec4(0.0, 1.0, 2.0, -4.0) | vec4(-7.5, 12.125, -0.25, 16.0) ];
2448e5c31af7Sopenharmony_ci			output vec4 out0	= [ vec4(0.0, -1.0, -2.0, 4.0) | vec4(7.5, -12.125, 0.25, -16.0) ];
2449e5c31af7Sopenharmony_ci		}
2450e5c31af7Sopenharmony_ci
2451e5c31af7Sopenharmony_ci		both ""
2452e5c31af7Sopenharmony_ci			#version 310 es
2453e5c31af7Sopenharmony_ci			precision highp float;
2454e5c31af7Sopenharmony_ci			${DECLARATIONS}
2455e5c31af7Sopenharmony_ci
2456e5c31af7Sopenharmony_ci			vec4 get (in float arr[4]);
2457e5c31af7Sopenharmony_ci			void set (out float arr[4], vec4 val);
2458e5c31af7Sopenharmony_ci			void negate (inout float arr[4]);
2459e5c31af7Sopenharmony_ci			bool test (in float arr[4], vec4 ref);
2460e5c31af7Sopenharmony_ci			bool isEqual (in float a[4], in float b[4]);
2461e5c31af7Sopenharmony_ci
2462e5c31af7Sopenharmony_ci			float func (in float a[4], in float b[4])
2463e5c31af7Sopenharmony_ci			{
2464e5c31af7Sopenharmony_ci				a[0] = 2.123;
2465e5c31af7Sopenharmony_ci				a[2] = -4.123;
2466e5c31af7Sopenharmony_ci				return isEqual(a, b) ? 1.0 : -1.0;
2467e5c31af7Sopenharmony_ci			}
2468e5c31af7Sopenharmony_ci
2469e5c31af7Sopenharmony_ci			void main()
2470e5c31af7Sopenharmony_ci			{
2471e5c31af7Sopenharmony_ci				float arr[4];
2472e5c31af7Sopenharmony_ci				set(arr, in0);
2473e5c31af7Sopenharmony_ci				out0 = in0 * func(arr, arr);
2474e5c31af7Sopenharmony_ci				${OUTPUT}
2475e5c31af7Sopenharmony_ci			}
2476e5c31af7Sopenharmony_ci
2477e5c31af7Sopenharmony_ci			float absDiff (vec4 a, vec4 b) { vec4 d = abs(a - b); return max(max(d.x, d.y), max(d.z, d.w)); }
2478e5c31af7Sopenharmony_ci			vec4 get (in float arr[4]) { return vec4(arr[0], arr[1], arr[2], arr[3]); }
2479e5c31af7Sopenharmony_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; }
2480e5c31af7Sopenharmony_ci			void negate (inout float arr[4]) { set(arr, -get(arr)); }
2481e5c31af7Sopenharmony_ci			bool test (in float arr[4], vec4 ref) { return (absDiff(get(arr), ref) < 0.1); }
2482e5c31af7Sopenharmony_ci			bool isEqual (in float a[4], in float b[4]) { return (absDiff(get(a), get(b)) < 0.1); }
2483e5c31af7Sopenharmony_ci		""
2484e5c31af7Sopenharmony_ci	end
2485e5c31af7Sopenharmony_ci
2486e5c31af7Sopenharmony_ci	case copy_global_in_on_call
2487e5c31af7Sopenharmony_ci		version 310 es
2488e5c31af7Sopenharmony_ci		desc "Check that global 'in' arguments are copied on call and don't alias."
2489e5c31af7Sopenharmony_ci		values
2490e5c31af7Sopenharmony_ci		{
2491e5c31af7Sopenharmony_ci			input vec4 in0		= [ vec4(0.0, 1.0, 2.0, -4.0) | vec4(-7.5, 12.125, -0.25, 16.0) ];
2492e5c31af7Sopenharmony_ci			output vec4 out0	= [ vec4(0.0, -1.0, -2.0, 4.0) | vec4(7.5, -12.125, 0.25, -16.0) ];
2493e5c31af7Sopenharmony_ci		}
2494e5c31af7Sopenharmony_ci
2495e5c31af7Sopenharmony_ci		both ""
2496e5c31af7Sopenharmony_ci			#version 310 es
2497e5c31af7Sopenharmony_ci			precision highp float;
2498e5c31af7Sopenharmony_ci			${DECLARATIONS}
2499e5c31af7Sopenharmony_ci
2500e5c31af7Sopenharmony_ci			vec4 get (in float arr[4]);
2501e5c31af7Sopenharmony_ci			void set (out float arr[4], vec4 val);
2502e5c31af7Sopenharmony_ci			void negate (inout float arr[4]);
2503e5c31af7Sopenharmony_ci			bool test (in float arr[4], vec4 ref);
2504e5c31af7Sopenharmony_ci			bool isEqual (in float a[4], in float b[4]);
2505e5c31af7Sopenharmony_ci
2506e5c31af7Sopenharmony_ci			float func (in float a[4], in float b[4])
2507e5c31af7Sopenharmony_ci			{
2508e5c31af7Sopenharmony_ci				a[0] = 2.123;
2509e5c31af7Sopenharmony_ci				a[2] = -4.123;
2510e5c31af7Sopenharmony_ci				return isEqual(a, b) ? 1.0 : -1.0;
2511e5c31af7Sopenharmony_ci			}
2512e5c31af7Sopenharmony_ci
2513e5c31af7Sopenharmony_ci			float arr[4];
2514e5c31af7Sopenharmony_ci
2515e5c31af7Sopenharmony_ci			void main()
2516e5c31af7Sopenharmony_ci			{
2517e5c31af7Sopenharmony_ci				set(arr, in0);
2518e5c31af7Sopenharmony_ci				out0 = in0 * func(arr, arr);
2519e5c31af7Sopenharmony_ci				${OUTPUT}
2520e5c31af7Sopenharmony_ci			}
2521e5c31af7Sopenharmony_ci
2522e5c31af7Sopenharmony_ci			float absDiff (vec4 a, vec4 b) { vec4 d = abs(a - b); return max(max(d.x, d.y), max(d.z, d.w)); }
2523e5c31af7Sopenharmony_ci			vec4 get (in float arr[4]) { return vec4(arr[0], arr[1], arr[2], arr[3]); }
2524e5c31af7Sopenharmony_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; }
2525e5c31af7Sopenharmony_ci			void negate (inout float arr[4]) { set(arr, -get(arr)); }
2526e5c31af7Sopenharmony_ci			bool test (in float arr[4], vec4 ref) { return (absDiff(get(arr), ref) < 0.1); }
2527e5c31af7Sopenharmony_ci			bool isEqual (in float a[4], in float b[4]) { return (absDiff(get(a), get(b)) < 0.1); }
2528e5c31af7Sopenharmony_ci		""
2529e5c31af7Sopenharmony_ci	end
2530e5c31af7Sopenharmony_ci
2531e5c31af7Sopenharmony_ci	case copy_local_inout_on_call
2532e5c31af7Sopenharmony_ci		version 310 es
2533e5c31af7Sopenharmony_ci		desc "Check that local 'in' arguments are copied on call and don't alias."
2534e5c31af7Sopenharmony_ci		values
2535e5c31af7Sopenharmony_ci		{
2536e5c31af7Sopenharmony_ci			input vec4 in0		= [ vec4(0.0, 1.0, 2.0, -4.0) | vec4(-7.5, 12.125, -0.25, 16.0) ];
2537e5c31af7Sopenharmony_ci			output vec4 out0	= [ vec4(0.0, -1.0, -2.0, 4.0) | vec4(7.5, -12.125, 0.25, -16.0) ];
2538e5c31af7Sopenharmony_ci		}
2539e5c31af7Sopenharmony_ci
2540e5c31af7Sopenharmony_ci		both ""
2541e5c31af7Sopenharmony_ci			#version 310 es
2542e5c31af7Sopenharmony_ci			precision highp float;
2543e5c31af7Sopenharmony_ci			${DECLARATIONS}
2544e5c31af7Sopenharmony_ci
2545e5c31af7Sopenharmony_ci			vec4 get (in float arr[4]);
2546e5c31af7Sopenharmony_ci			void set (out float arr[4], vec4 val);
2547e5c31af7Sopenharmony_ci			void negate (inout float arr[4]);
2548e5c31af7Sopenharmony_ci			bool test (in float arr[4], vec4 ref);
2549e5c31af7Sopenharmony_ci			bool isEqual (in float a[4], in float b[4]);
2550e5c31af7Sopenharmony_ci
2551e5c31af7Sopenharmony_ci			float func (inout float a[4], inout float b[4])
2552e5c31af7Sopenharmony_ci			{
2553e5c31af7Sopenharmony_ci				negate(a);
2554e5c31af7Sopenharmony_ci				return isEqual(a, b) ? 1.0 : -1.0;
2555e5c31af7Sopenharmony_ci			}
2556e5c31af7Sopenharmony_ci
2557e5c31af7Sopenharmony_ci			void main()
2558e5c31af7Sopenharmony_ci			{
2559e5c31af7Sopenharmony_ci				float arr[4];
2560e5c31af7Sopenharmony_ci				set(arr, in0);
2561e5c31af7Sopenharmony_ci				float m = func(arr, arr); // returns -1.0
2562e5c31af7Sopenharmony_ci				float n = float(test(arr, in0) || test(arr, -in0));
2563e5c31af7Sopenharmony_ci				out0 = in0 * m * n;
2564e5c31af7Sopenharmony_ci				${OUTPUT}
2565e5c31af7Sopenharmony_ci			}
2566e5c31af7Sopenharmony_ci
2567e5c31af7Sopenharmony_ci			float absDiff (vec4 a, vec4 b) { vec4 d = abs(a - b); return max(max(d.x, d.y), max(d.z, d.w)); }
2568e5c31af7Sopenharmony_ci			vec4 get (in float arr[4]) { return vec4(arr[0], arr[1], arr[2], arr[3]); }
2569e5c31af7Sopenharmony_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; }
2570e5c31af7Sopenharmony_ci			void negate (inout float arr[4]) { set(arr, -get(arr)); }
2571e5c31af7Sopenharmony_ci			bool test (in float arr[4], vec4 ref) { return (absDiff(get(arr), ref) < 0.1); }
2572e5c31af7Sopenharmony_ci			bool isEqual (in float a[4], in float b[4]) { return (absDiff(get(a), get(b)) < 0.1); }
2573e5c31af7Sopenharmony_ci		""
2574e5c31af7Sopenharmony_ci	end
2575e5c31af7Sopenharmony_ci
2576e5c31af7Sopenharmony_ci	case copy_global_inout_on_call
2577e5c31af7Sopenharmony_ci		version 310 es
2578e5c31af7Sopenharmony_ci		desc "Check that global 'in' arguments are copied on call and don't alias."
2579e5c31af7Sopenharmony_ci		values
2580e5c31af7Sopenharmony_ci		{
2581e5c31af7Sopenharmony_ci			input vec4 in0		= [ vec4(0.0, 1.0, 2.0, -4.0) | vec4(-7.5, 12.125, -0.25, 16.0) ];
2582e5c31af7Sopenharmony_ci			output vec4 out0	= [ vec4(0.0, -1.0, -2.0, 4.0) | vec4(7.5, -12.125, 0.25, -16.0) ];
2583e5c31af7Sopenharmony_ci		}
2584e5c31af7Sopenharmony_ci
2585e5c31af7Sopenharmony_ci		both ""
2586e5c31af7Sopenharmony_ci			#version 310 es
2587e5c31af7Sopenharmony_ci			precision highp float;
2588e5c31af7Sopenharmony_ci			${DECLARATIONS}
2589e5c31af7Sopenharmony_ci
2590e5c31af7Sopenharmony_ci			vec4 get (in float arr[4]);
2591e5c31af7Sopenharmony_ci			void set (out float arr[4], vec4 val);
2592e5c31af7Sopenharmony_ci			void negate (inout float arr[4]);
2593e5c31af7Sopenharmony_ci			bool test (in float arr[4], vec4 ref);
2594e5c31af7Sopenharmony_ci			bool isEqual (in float a[4], in float b[4]);
2595e5c31af7Sopenharmony_ci
2596e5c31af7Sopenharmony_ci			float func (in float a[4], in float b[4])
2597e5c31af7Sopenharmony_ci			{
2598e5c31af7Sopenharmony_ci				negate(a);
2599e5c31af7Sopenharmony_ci				return isEqual(a, b) ? 1.0 : -1.0;
2600e5c31af7Sopenharmony_ci			}
2601e5c31af7Sopenharmony_ci
2602e5c31af7Sopenharmony_ci			float arr[4];
2603e5c31af7Sopenharmony_ci
2604e5c31af7Sopenharmony_ci			void main()
2605e5c31af7Sopenharmony_ci			{
2606e5c31af7Sopenharmony_ci				set(arr, in0);
2607e5c31af7Sopenharmony_ci				float m = func(arr, arr); // returns -1.0
2608e5c31af7Sopenharmony_ci				float n = float(test(arr, in0) || test(arr, -in0));
2609e5c31af7Sopenharmony_ci				out0 = in0 * m * n;
2610e5c31af7Sopenharmony_ci				${OUTPUT}
2611e5c31af7Sopenharmony_ci			}
2612e5c31af7Sopenharmony_ci
2613e5c31af7Sopenharmony_ci			float absDiff (vec4 a, vec4 b) { vec4 d = abs(a - b); return max(max(d.x, d.y), max(d.z, d.w)); }
2614e5c31af7Sopenharmony_ci			vec4 get (in float arr[4]) { return vec4(arr[0], arr[1], arr[2], arr[3]); }
2615e5c31af7Sopenharmony_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; }
2616e5c31af7Sopenharmony_ci			void negate (inout float arr[4]) { set(arr, -get(arr)); }
2617e5c31af7Sopenharmony_ci			bool test (in float arr[4], vec4 ref) { return (absDiff(get(arr), ref) < 0.1); }
2618e5c31af7Sopenharmony_ci			bool isEqual (in float a[4], in float b[4]) { return (absDiff(get(a), get(b)) < 0.1); }
2619e5c31af7Sopenharmony_ci		""
2620e5c31af7Sopenharmony_ci	end
2621e5c31af7Sopenharmony_ci
2622e5c31af7Sopenharmony_ci#			vec4 get (in float arr[4]);
2623e5c31af7Sopenharmony_ci#			void set (out float arr[4], vec4 val);
2624e5c31af7Sopenharmony_ci#			void negate (inout float arr[4]);
2625e5c31af7Sopenharmony_ci#			bool test (in float arr[4], vec4 ref);
2626e5c31af7Sopenharmony_ci#			bool isEqual (in float a[4], in float b[4]);
2627e5c31af7Sopenharmony_ci
2628e5c31af7Sopenharmony_ci#			float absDiff (vec4 a, vec4 b) { vec4 d = abs(a - b); return max(max(d.x, d.y), max(d.z, d.w)); }
2629e5c31af7Sopenharmony_ci#			vec4 get (in float arr[4]) { return vec4(arr[0], arr[1], arr[2], arr[3]); }
2630e5c31af7Sopenharmony_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; }
2631e5c31af7Sopenharmony_ci#			void negate (inout float arr[4]) { set(arr, -get(arr)); }
2632e5c31af7Sopenharmony_ci#			bool test (in float arr[4], vec4 ref) { return (absDiff(get(arr), ref) < 0.1); }
2633e5c31af7Sopenharmony_ci#			bool isEqual (in float a[4], in float b[4]) { return (absDiff(get(a), get(b)) < 0.1); }
2634e5c31af7Sopenharmony_ci
2635e5c31af7Sopenharmony_ciend # array_arguments
2636e5c31af7Sopenharmony_ci
2637e5c31af7Sopenharmony_ci#group qualifiers "Function Parameter Qualifiers"
2638e5c31af7Sopenharmony_ci#
2639e5c31af7Sopenharmony_ci#end # qualifiers
2640e5c31af7Sopenharmony_ci
2641e5c31af7Sopenharmony_cigroup control_flow "Control Flow In Functions"
2642e5c31af7Sopenharmony_ci
2643e5c31af7Sopenharmony_ci	case simple_return
2644e5c31af7Sopenharmony_ci		version 310 es
2645e5c31af7Sopenharmony_ci		values
2646e5c31af7Sopenharmony_ci		{
2647e5c31af7Sopenharmony_ci			input float in0		= [ -0.5 | 1.5 ];
2648e5c31af7Sopenharmony_ci			output float out0	= [ 0.5 | -1.5 ];
2649e5c31af7Sopenharmony_ci		}
2650e5c31af7Sopenharmony_ci
2651e5c31af7Sopenharmony_ci		both ""
2652e5c31af7Sopenharmony_ci			#version 310 es
2653e5c31af7Sopenharmony_ci			precision highp float;
2654e5c31af7Sopenharmony_ci			${DECLARATIONS}
2655e5c31af7Sopenharmony_ci
2656e5c31af7Sopenharmony_ci			float func (float a)
2657e5c31af7Sopenharmony_ci			{
2658e5c31af7Sopenharmony_ci				return -a;
2659e5c31af7Sopenharmony_ci				a = a * -1.0;
2660e5c31af7Sopenharmony_ci				return 1.0;
2661e5c31af7Sopenharmony_ci			}
2662e5c31af7Sopenharmony_ci
2663e5c31af7Sopenharmony_ci			void main()
2664e5c31af7Sopenharmony_ci			{
2665e5c31af7Sopenharmony_ci				${SETUP}
2666e5c31af7Sopenharmony_ci				out0 = func(in0);
2667e5c31af7Sopenharmony_ci				${OUTPUT}
2668e5c31af7Sopenharmony_ci			}
2669e5c31af7Sopenharmony_ci		""
2670e5c31af7Sopenharmony_ci	end
2671e5c31af7Sopenharmony_ci
2672e5c31af7Sopenharmony_ci	case return_in_if
2673e5c31af7Sopenharmony_ci		version 310 es
2674e5c31af7Sopenharmony_ci		values
2675e5c31af7Sopenharmony_ci		{
2676e5c31af7Sopenharmony_ci			input float in0		= [ -0.5 | 1.5 ];
2677e5c31af7Sopenharmony_ci			output float out0	= [ 0.5 | -1.5 ];
2678e5c31af7Sopenharmony_ci		}
2679e5c31af7Sopenharmony_ci
2680e5c31af7Sopenharmony_ci		both ""
2681e5c31af7Sopenharmony_ci			#version 310 es
2682e5c31af7Sopenharmony_ci			precision highp float;
2683e5c31af7Sopenharmony_ci			${DECLARATIONS}
2684e5c31af7Sopenharmony_ci
2685e5c31af7Sopenharmony_ci			float func (float a)
2686e5c31af7Sopenharmony_ci			{
2687e5c31af7Sopenharmony_ci				if (a != 0.0)
2688e5c31af7Sopenharmony_ci					return -a;
2689e5c31af7Sopenharmony_ci				return 1.0;
2690e5c31af7Sopenharmony_ci			}
2691e5c31af7Sopenharmony_ci
2692e5c31af7Sopenharmony_ci			void main()
2693e5c31af7Sopenharmony_ci			{
2694e5c31af7Sopenharmony_ci				${SETUP}
2695e5c31af7Sopenharmony_ci				out0 = func(in0);
2696e5c31af7Sopenharmony_ci				${OUTPUT}
2697e5c31af7Sopenharmony_ci			}
2698e5c31af7Sopenharmony_ci		""
2699e5c31af7Sopenharmony_ci	end
2700e5c31af7Sopenharmony_ci
2701e5c31af7Sopenharmony_ci	case return_in_else
2702e5c31af7Sopenharmony_ci		version 310 es
2703e5c31af7Sopenharmony_ci		values
2704e5c31af7Sopenharmony_ci		{
2705e5c31af7Sopenharmony_ci			input float in0		= [ -0.5 | 1.5 ];
2706e5c31af7Sopenharmony_ci			output float out0	= [ 0.5 | -1.5 ];
2707e5c31af7Sopenharmony_ci		}
2708e5c31af7Sopenharmony_ci
2709e5c31af7Sopenharmony_ci		both ""
2710e5c31af7Sopenharmony_ci			#version 310 es
2711e5c31af7Sopenharmony_ci			precision highp float;
2712e5c31af7Sopenharmony_ci			${DECLARATIONS}
2713e5c31af7Sopenharmony_ci
2714e5c31af7Sopenharmony_ci			float func (float a)
2715e5c31af7Sopenharmony_ci			{
2716e5c31af7Sopenharmony_ci				if (a == 0.0)
2717e5c31af7Sopenharmony_ci					return 1.0;
2718e5c31af7Sopenharmony_ci				else
2719e5c31af7Sopenharmony_ci					return -a;
2720e5c31af7Sopenharmony_ci				return 1.0;
2721e5c31af7Sopenharmony_ci			}
2722e5c31af7Sopenharmony_ci
2723e5c31af7Sopenharmony_ci			void main()
2724e5c31af7Sopenharmony_ci			{
2725e5c31af7Sopenharmony_ci				${SETUP}
2726e5c31af7Sopenharmony_ci				out0 = func(in0);
2727e5c31af7Sopenharmony_ci				${OUTPUT}
2728e5c31af7Sopenharmony_ci			}
2729e5c31af7Sopenharmony_ci		""
2730e5c31af7Sopenharmony_ci	end
2731e5c31af7Sopenharmony_ci
2732e5c31af7Sopenharmony_ci	case return_in_loop
2733e5c31af7Sopenharmony_ci		version 310 es
2734e5c31af7Sopenharmony_ci		values
2735e5c31af7Sopenharmony_ci		{
2736e5c31af7Sopenharmony_ci			input float in0		= [ -0.5 | 1.5 ];
2737e5c31af7Sopenharmony_ci			output float out0	= [ 0.5 | -1.5 ];
2738e5c31af7Sopenharmony_ci		}
2739e5c31af7Sopenharmony_ci
2740e5c31af7Sopenharmony_ci		both ""
2741e5c31af7Sopenharmony_ci			#version 310 es
2742e5c31af7Sopenharmony_ci			precision highp float;
2743e5c31af7Sopenharmony_ci			${DECLARATIONS}
2744e5c31af7Sopenharmony_ci
2745e5c31af7Sopenharmony_ci			float func (float a)
2746e5c31af7Sopenharmony_ci			{
2747e5c31af7Sopenharmony_ci				while (a < 100.0)
2748e5c31af7Sopenharmony_ci					return -a;
2749e5c31af7Sopenharmony_ci				return 1.0;
2750e5c31af7Sopenharmony_ci			}
2751e5c31af7Sopenharmony_ci
2752e5c31af7Sopenharmony_ci			void main()
2753e5c31af7Sopenharmony_ci			{
2754e5c31af7Sopenharmony_ci				${SETUP}
2755e5c31af7Sopenharmony_ci				out0 = func(in0);
2756e5c31af7Sopenharmony_ci				${OUTPUT}
2757e5c31af7Sopenharmony_ci			}
2758e5c31af7Sopenharmony_ci		""
2759e5c31af7Sopenharmony_ci	end
2760e5c31af7Sopenharmony_ci
2761e5c31af7Sopenharmony_ci	case return_in_loop_if
2762e5c31af7Sopenharmony_ci		version 310 es
2763e5c31af7Sopenharmony_ci		values
2764e5c31af7Sopenharmony_ci		{
2765e5c31af7Sopenharmony_ci			input float in0		= [ -0.5 | 1.5 ];
2766e5c31af7Sopenharmony_ci			output float out0	= [ 0.5 | -1.5 ];
2767e5c31af7Sopenharmony_ci		}
2768e5c31af7Sopenharmony_ci
2769e5c31af7Sopenharmony_ci		both ""
2770e5c31af7Sopenharmony_ci			#version 310 es
2771e5c31af7Sopenharmony_ci			precision highp float;
2772e5c31af7Sopenharmony_ci			${DECLARATIONS}
2773e5c31af7Sopenharmony_ci
2774e5c31af7Sopenharmony_ci			float func (float a)
2775e5c31af7Sopenharmony_ci			{
2776e5c31af7Sopenharmony_ci				while (a < 100.0)
2777e5c31af7Sopenharmony_ci				{
2778e5c31af7Sopenharmony_ci					a = -a;
2779e5c31af7Sopenharmony_ci					if (a != 0.0)
2780e5c31af7Sopenharmony_ci						return a;
2781e5c31af7Sopenharmony_ci					else
2782e5c31af7Sopenharmony_ci						return -1.0;
2783e5c31af7Sopenharmony_ci				}
2784e5c31af7Sopenharmony_ci				return 1.0;
2785e5c31af7Sopenharmony_ci			}
2786e5c31af7Sopenharmony_ci
2787e5c31af7Sopenharmony_ci			void main()
2788e5c31af7Sopenharmony_ci			{
2789e5c31af7Sopenharmony_ci				${SETUP}
2790e5c31af7Sopenharmony_ci				out0 = func(in0);
2791e5c31af7Sopenharmony_ci				${OUTPUT}
2792e5c31af7Sopenharmony_ci			}
2793e5c31af7Sopenharmony_ci		""
2794e5c31af7Sopenharmony_ci	end
2795e5c31af7Sopenharmony_ci
2796e5c31af7Sopenharmony_ci	case return_after_loop
2797e5c31af7Sopenharmony_ci		version 310 es
2798e5c31af7Sopenharmony_ci		values
2799e5c31af7Sopenharmony_ci		{
2800e5c31af7Sopenharmony_ci			input float in0		= [ -0.5 | 1.5 ];
2801e5c31af7Sopenharmony_ci			output float out0	= [ 0.5 | -1.5 ];
2802e5c31af7Sopenharmony_ci		}
2803e5c31af7Sopenharmony_ci
2804e5c31af7Sopenharmony_ci		both ""
2805e5c31af7Sopenharmony_ci			#version 310 es
2806e5c31af7Sopenharmony_ci			precision highp float;
2807e5c31af7Sopenharmony_ci			${DECLARATIONS}
2808e5c31af7Sopenharmony_ci
2809e5c31af7Sopenharmony_ci			float func (float a)
2810e5c31af7Sopenharmony_ci			{
2811e5c31af7Sopenharmony_ci				for (int i = 0; i < 5; i++)
2812e5c31af7Sopenharmony_ci					a = -a;
2813e5c31af7Sopenharmony_ci				return a;
2814e5c31af7Sopenharmony_ci			}
2815e5c31af7Sopenharmony_ci
2816e5c31af7Sopenharmony_ci			void main()
2817e5c31af7Sopenharmony_ci			{
2818e5c31af7Sopenharmony_ci				${SETUP}
2819e5c31af7Sopenharmony_ci				out0 = func(in0);
2820e5c31af7Sopenharmony_ci				${OUTPUT}
2821e5c31af7Sopenharmony_ci			}
2822e5c31af7Sopenharmony_ci		""
2823e5c31af7Sopenharmony_ci	end
2824e5c31af7Sopenharmony_ci
2825e5c31af7Sopenharmony_ci	case return_after_break
2826e5c31af7Sopenharmony_ci		version 310 es
2827e5c31af7Sopenharmony_ci		values
2828e5c31af7Sopenharmony_ci		{
2829e5c31af7Sopenharmony_ci			input float in0		= [ -0.5 | 1.5 ];
2830e5c31af7Sopenharmony_ci			output float out0	= [ 0.5 | -1.5 ];
2831e5c31af7Sopenharmony_ci		}
2832e5c31af7Sopenharmony_ci
2833e5c31af7Sopenharmony_ci		both ""
2834e5c31af7Sopenharmony_ci			#version 310 es
2835e5c31af7Sopenharmony_ci			precision highp float;
2836e5c31af7Sopenharmony_ci			${DECLARATIONS}
2837e5c31af7Sopenharmony_ci
2838e5c31af7Sopenharmony_ci			float func (float a)
2839e5c31af7Sopenharmony_ci			{
2840e5c31af7Sopenharmony_ci				for (int i = 0; i < 6; i++)
2841e5c31af7Sopenharmony_ci				{
2842e5c31af7Sopenharmony_ci					a = -a;
2843e5c31af7Sopenharmony_ci					if (i == 4)
2844e5c31af7Sopenharmony_ci						break;
2845e5c31af7Sopenharmony_ci				}
2846e5c31af7Sopenharmony_ci				return a;
2847e5c31af7Sopenharmony_ci			}
2848e5c31af7Sopenharmony_ci
2849e5c31af7Sopenharmony_ci			void main()
2850e5c31af7Sopenharmony_ci			{
2851e5c31af7Sopenharmony_ci				${SETUP}
2852e5c31af7Sopenharmony_ci				out0 = func(in0);
2853e5c31af7Sopenharmony_ci				${OUTPUT}
2854e5c31af7Sopenharmony_ci			}
2855e5c31af7Sopenharmony_ci		""
2856e5c31af7Sopenharmony_ci	end
2857e5c31af7Sopenharmony_ci
2858e5c31af7Sopenharmony_ci	case return_after_continue
2859e5c31af7Sopenharmony_ci		version 310 es
2860e5c31af7Sopenharmony_ci		values
2861e5c31af7Sopenharmony_ci		{
2862e5c31af7Sopenharmony_ci			input float in0		= [ -0.5 | 1.5 ];
2863e5c31af7Sopenharmony_ci			output float out0	= [ 0.5 | -1.5 ];
2864e5c31af7Sopenharmony_ci		}
2865e5c31af7Sopenharmony_ci
2866e5c31af7Sopenharmony_ci		both ""
2867e5c31af7Sopenharmony_ci			#version 310 es
2868e5c31af7Sopenharmony_ci			precision highp float;
2869e5c31af7Sopenharmony_ci			${DECLARATIONS}
2870e5c31af7Sopenharmony_ci
2871e5c31af7Sopenharmony_ci			float func (float a)
2872e5c31af7Sopenharmony_ci			{
2873e5c31af7Sopenharmony_ci				for (int i = 0; i < 6; i++)
2874e5c31af7Sopenharmony_ci				{
2875e5c31af7Sopenharmony_ci					if (i == 4)
2876e5c31af7Sopenharmony_ci						continue;
2877e5c31af7Sopenharmony_ci					a = -a;
2878e5c31af7Sopenharmony_ci				}
2879e5c31af7Sopenharmony_ci				return a;
2880e5c31af7Sopenharmony_ci			}
2881e5c31af7Sopenharmony_ci
2882e5c31af7Sopenharmony_ci			void main()
2883e5c31af7Sopenharmony_ci			{
2884e5c31af7Sopenharmony_ci				${SETUP}
2885e5c31af7Sopenharmony_ci				out0 = func(in0);
2886e5c31af7Sopenharmony_ci				${OUTPUT}
2887e5c31af7Sopenharmony_ci			}
2888e5c31af7Sopenharmony_ci		""
2889e5c31af7Sopenharmony_ci	end
2890e5c31af7Sopenharmony_ci
2891e5c31af7Sopenharmony_ci	case return_in_nested_loop
2892e5c31af7Sopenharmony_ci		version 310 es
2893e5c31af7Sopenharmony_ci		values
2894e5c31af7Sopenharmony_ci		{
2895e5c31af7Sopenharmony_ci			input float in0		= [ -0.5 | 1.5 ];
2896e5c31af7Sopenharmony_ci			output float out0	= [ 0.5 | -1.5 ];
2897e5c31af7Sopenharmony_ci		}
2898e5c31af7Sopenharmony_ci
2899e5c31af7Sopenharmony_ci		both ""
2900e5c31af7Sopenharmony_ci			#version 310 es
2901e5c31af7Sopenharmony_ci			precision highp float;
2902e5c31af7Sopenharmony_ci			${DECLARATIONS}
2903e5c31af7Sopenharmony_ci
2904e5c31af7Sopenharmony_ci			float func (float a)
2905e5c31af7Sopenharmony_ci			{
2906e5c31af7Sopenharmony_ci				for (int i = 0; i < 6; i++)
2907e5c31af7Sopenharmony_ci				{
2908e5c31af7Sopenharmony_ci					a = -a;
2909e5c31af7Sopenharmony_ci					for (int j = 0; j < 4; j++)
2910e5c31af7Sopenharmony_ci					{
2911e5c31af7Sopenharmony_ci						a = -a;
2912e5c31af7Sopenharmony_ci						if (i == 1)
2913e5c31af7Sopenharmony_ci							return a;
2914e5c31af7Sopenharmony_ci					}
2915e5c31af7Sopenharmony_ci					if (i == 4)
2916e5c31af7Sopenharmony_ci						return 1.0;
2917e5c31af7Sopenharmony_ci				}
2918e5c31af7Sopenharmony_ci				return 1.0;
2919e5c31af7Sopenharmony_ci			}
2920e5c31af7Sopenharmony_ci
2921e5c31af7Sopenharmony_ci			void main()
2922e5c31af7Sopenharmony_ci			{
2923e5c31af7Sopenharmony_ci				${SETUP}
2924e5c31af7Sopenharmony_ci				out0 = func(in0);
2925e5c31af7Sopenharmony_ci				${OUTPUT}
2926e5c31af7Sopenharmony_ci			}
2927e5c31af7Sopenharmony_ci		""
2928e5c31af7Sopenharmony_ci	end
2929e5c31af7Sopenharmony_ci
2930e5c31af7Sopenharmony_ci	case return_after_loop_sequence
2931e5c31af7Sopenharmony_ci		version 310 es
2932e5c31af7Sopenharmony_ci		values
2933e5c31af7Sopenharmony_ci		{
2934e5c31af7Sopenharmony_ci			input float in0		= [ -0.5 | 1.5 ];
2935e5c31af7Sopenharmony_ci			output float out0	= [ 0.5 | -1.5 ];
2936e5c31af7Sopenharmony_ci		}
2937e5c31af7Sopenharmony_ci
2938e5c31af7Sopenharmony_ci		both ""
2939e5c31af7Sopenharmony_ci			#version 310 es
2940e5c31af7Sopenharmony_ci			precision highp float;
2941e5c31af7Sopenharmony_ci			${DECLARATIONS}
2942e5c31af7Sopenharmony_ci
2943e5c31af7Sopenharmony_ci			float func (float a)
2944e5c31af7Sopenharmony_ci			{
2945e5c31af7Sopenharmony_ci				int i;
2946e5c31af7Sopenharmony_ci				for (i = 0; i < 6; i++) // negate a
2947e5c31af7Sopenharmony_ci				{
2948e5c31af7Sopenharmony_ci					a = -a;
2949e5c31af7Sopenharmony_ci					if (i == 4)
2950e5c31af7Sopenharmony_ci						a = -a;
2951e5c31af7Sopenharmony_ci				}
2952e5c31af7Sopenharmony_ci
2953e5c31af7Sopenharmony_ci				for (; i < 10; i++) // keep a
2954e5c31af7Sopenharmony_ci				{
2955e5c31af7Sopenharmony_ci					if (i == 8)
2956e5c31af7Sopenharmony_ci						continue;
2957e5c31af7Sopenharmony_ci					else if (i == 9)
2958e5c31af7Sopenharmony_ci						break;
2959e5c31af7Sopenharmony_ci					a = -a;
2960e5c31af7Sopenharmony_ci				}
2961e5c31af7Sopenharmony_ci
2962e5c31af7Sopenharmony_ci				return a;
2963e5c31af7Sopenharmony_ci			}
2964e5c31af7Sopenharmony_ci
2965e5c31af7Sopenharmony_ci			void main()
2966e5c31af7Sopenharmony_ci			{
2967e5c31af7Sopenharmony_ci				${SETUP}
2968e5c31af7Sopenharmony_ci				out0 = func(in0);
2969e5c31af7Sopenharmony_ci				${OUTPUT}
2970e5c31af7Sopenharmony_ci			}
2971e5c31af7Sopenharmony_ci		""
2972e5c31af7Sopenharmony_ci	end
2973e5c31af7Sopenharmony_ci
2974e5c31af7Sopenharmony_ci	case mixed_return_break_continue
2975e5c31af7Sopenharmony_ci		version 310 es
2976e5c31af7Sopenharmony_ci		values
2977e5c31af7Sopenharmony_ci		{
2978e5c31af7Sopenharmony_ci			input float in0		= [ -0.5 | 1.5 ];
2979e5c31af7Sopenharmony_ci			output float out0	= [ 0.5 | -1.5 ];
2980e5c31af7Sopenharmony_ci		}
2981e5c31af7Sopenharmony_ci
2982e5c31af7Sopenharmony_ci		both ""
2983e5c31af7Sopenharmony_ci			#version 310 es
2984e5c31af7Sopenharmony_ci			precision highp float;
2985e5c31af7Sopenharmony_ci			${DECLARATIONS}
2986e5c31af7Sopenharmony_ci
2987e5c31af7Sopenharmony_ci			float func (float a)
2988e5c31af7Sopenharmony_ci			{
2989e5c31af7Sopenharmony_ci				int i;
2990e5c31af7Sopenharmony_ci				for (i = 0; i < 6; i++)
2991e5c31af7Sopenharmony_ci				{
2992e5c31af7Sopenharmony_ci					if (i == 0)
2993e5c31af7Sopenharmony_ci						continue;
2994e5c31af7Sopenharmony_ci					else if (i == 1)
2995e5c31af7Sopenharmony_ci					{
2996e5c31af7Sopenharmony_ci					}
2997e5c31af7Sopenharmony_ci					else if (i == 3)
2998e5c31af7Sopenharmony_ci						break;
2999e5c31af7Sopenharmony_ci					else
3000e5c31af7Sopenharmony_ci						return a;
3001e5c31af7Sopenharmony_ci					a = -a;
3002e5c31af7Sopenharmony_ci				}
3003e5c31af7Sopenharmony_ci
3004e5c31af7Sopenharmony_ci				return 1.0;
3005e5c31af7Sopenharmony_ci			}
3006e5c31af7Sopenharmony_ci
3007e5c31af7Sopenharmony_ci			void main()
3008e5c31af7Sopenharmony_ci			{
3009e5c31af7Sopenharmony_ci				${SETUP}
3010e5c31af7Sopenharmony_ci				out0 = func(in0);
3011e5c31af7Sopenharmony_ci				${OUTPUT}
3012e5c31af7Sopenharmony_ci			}
3013e5c31af7Sopenharmony_ci		""
3014e5c31af7Sopenharmony_ci	end
3015e5c31af7Sopenharmony_ci
3016e5c31af7Sopenharmony_ciend # control_flow
3017e5c31af7Sopenharmony_ci
3018e5c31af7Sopenharmony_cigroup misc "Miscellaneous"
3019e5c31af7Sopenharmony_ci
3020e5c31af7Sopenharmony_ci	case multi_arg_float
3021e5c31af7Sopenharmony_ci		version 310 es
3022e5c31af7Sopenharmony_ci		values
3023e5c31af7Sopenharmony_ci		{
3024e5c31af7Sopenharmony_ci			input vec4 in0		= [ vec4(0.0, 1.0, -2.0, 0.5) | vec4(2.0, 2.5, 4.0, -7.0) ];
3025e5c31af7Sopenharmony_ci			output float out0	= [ 0.5 | -1.5 ]; # -sum(in0)
3026e5c31af7Sopenharmony_ci		}
3027e5c31af7Sopenharmony_ci
3028e5c31af7Sopenharmony_ci		both ""
3029e5c31af7Sopenharmony_ci			#version 310 es
3030e5c31af7Sopenharmony_ci			precision highp float;
3031e5c31af7Sopenharmony_ci			${DECLARATIONS}
3032e5c31af7Sopenharmony_ci
3033e5c31af7Sopenharmony_ci			float sum(vec4 v) { return (v.x + v.y + v.z + v.w); }
3034e5c31af7Sopenharmony_ci
3035e5c31af7Sopenharmony_ci			float func (float a, vec3 b, vec2 c, vec2 d, vec4 e)
3036e5c31af7Sopenharmony_ci			{
3037e5c31af7Sopenharmony_ci				return -sum(vec4(a, b) + vec4(c, d)) + sum(e);
3038e5c31af7Sopenharmony_ci			}
3039e5c31af7Sopenharmony_ci
3040e5c31af7Sopenharmony_ci			void main()
3041e5c31af7Sopenharmony_ci			{
3042e5c31af7Sopenharmony_ci				${SETUP}
3043e5c31af7Sopenharmony_ci				out0 = func(in0.y, in0.xzw, in0.wz, in0.yx, in0);
3044e5c31af7Sopenharmony_ci				${OUTPUT}
3045e5c31af7Sopenharmony_ci			}
3046e5c31af7Sopenharmony_ci		""
3047e5c31af7Sopenharmony_ci	end
3048e5c31af7Sopenharmony_ci
3049e5c31af7Sopenharmony_ci	case multi_arg_int
3050e5c31af7Sopenharmony_ci		version 310 es
3051e5c31af7Sopenharmony_ci		values
3052e5c31af7Sopenharmony_ci		{
3053e5c31af7Sopenharmony_ci			input ivec4 in0		= [ ivec4(-1, 0, 2, 2) | ivec4(1, 4, -8, 2) ];
3054e5c31af7Sopenharmony_ci			output int out0		= [ -3 | 1 ];
3055e5c31af7Sopenharmony_ci		}
3056e5c31af7Sopenharmony_ci
3057e5c31af7Sopenharmony_ci		both ""
3058e5c31af7Sopenharmony_ci			#version 310 es
3059e5c31af7Sopenharmony_ci			precision highp float;
3060e5c31af7Sopenharmony_ci			precision highp int;
3061e5c31af7Sopenharmony_ci			${DECLARATIONS}
3062e5c31af7Sopenharmony_ci
3063e5c31af7Sopenharmony_ci			int sum(ivec4 v) { return (v.x + v.y + v.z + v.w); }
3064e5c31af7Sopenharmony_ci
3065e5c31af7Sopenharmony_ci			int func (int a, ivec3 b, ivec2 c, ivec2 d, ivec4 e)
3066e5c31af7Sopenharmony_ci			{
3067e5c31af7Sopenharmony_ci				return -sum(ivec4(a, b) + ivec4(c, d)) + sum(e);
3068e5c31af7Sopenharmony_ci			}
3069e5c31af7Sopenharmony_ci
3070e5c31af7Sopenharmony_ci			void main()
3071e5c31af7Sopenharmony_ci			{
3072e5c31af7Sopenharmony_ci				${SETUP}
3073e5c31af7Sopenharmony_ci				out0 = func(in0.y, in0.xzw, in0.wz, in0.yx, in0);
3074e5c31af7Sopenharmony_ci				${OUTPUT}
3075e5c31af7Sopenharmony_ci			}
3076e5c31af7Sopenharmony_ci		""
3077e5c31af7Sopenharmony_ci	end
3078e5c31af7Sopenharmony_ci
3079e5c31af7Sopenharmony_ci	case argument_eval_order_1
3080e5c31af7Sopenharmony_ci		version 310 es
3081e5c31af7Sopenharmony_ci		values
3082e5c31af7Sopenharmony_ci		{
3083e5c31af7Sopenharmony_ci			input int in0	= [  0 | 1 | 3 | 5 ];
3084e5c31af7Sopenharmony_ci			output int out0	= [ -1 | 5 | 11 | 17 ];
3085e5c31af7Sopenharmony_ci		}
3086e5c31af7Sopenharmony_ci
3087e5c31af7Sopenharmony_ci		both ""
3088e5c31af7Sopenharmony_ci			#version 310 es
3089e5c31af7Sopenharmony_ci			precision highp float;
3090e5c31af7Sopenharmony_ci			precision highp int;
3091e5c31af7Sopenharmony_ci			${DECLARATIONS}
3092e5c31af7Sopenharmony_ci
3093e5c31af7Sopenharmony_ci			int func (float a, int b, bool c, int d)
3094e5c31af7Sopenharmony_ci			{
3095e5c31af7Sopenharmony_ci				if (c)
3096e5c31af7Sopenharmony_ci					return b + int(a) + d;
3097e5c31af7Sopenharmony_ci				else
3098e5c31af7Sopenharmony_ci					return -1;
3099e5c31af7Sopenharmony_ci			}
3100e5c31af7Sopenharmony_ci
3101e5c31af7Sopenharmony_ci			void main ()
3102e5c31af7Sopenharmony_ci			{
3103e5c31af7Sopenharmony_ci				${SETUP}
3104e5c31af7Sopenharmony_ci				float v0 = float(in0);
3105e5c31af7Sopenharmony_ci				int v1 = in0;
3106e5c31af7Sopenharmony_ci				out0 = func((v0 += 1.0), v1++, (v0 > 1.5), v1);
3107e5c31af7Sopenharmony_ci				${OUTPUT}
3108e5c31af7Sopenharmony_ci			}
3109e5c31af7Sopenharmony_ci		""
3110e5c31af7Sopenharmony_ci	end
3111e5c31af7Sopenharmony_ci
3112e5c31af7Sopenharmony_ci	case argument_eval_order_2
3113e5c31af7Sopenharmony_ci		version 310 es
3114e5c31af7Sopenharmony_ci		values
3115e5c31af7Sopenharmony_ci		{
3116e5c31af7Sopenharmony_ci			input int in0	= [ 0 | -1 | 3 | 5 ];
3117e5c31af7Sopenharmony_ci			output int out0	= [ 3 | -1 | 9 | 13 ];
3118e5c31af7Sopenharmony_ci		}
3119e5c31af7Sopenharmony_ci
3120e5c31af7Sopenharmony_ci		both ""
3121e5c31af7Sopenharmony_ci			#version 310 es
3122e5c31af7Sopenharmony_ci			precision highp float;
3123e5c31af7Sopenharmony_ci			precision highp int;
3124e5c31af7Sopenharmony_ci			${DECLARATIONS}
3125e5c31af7Sopenharmony_ci
3126e5c31af7Sopenharmony_ci			int g;
3127e5c31af7Sopenharmony_ci
3128e5c31af7Sopenharmony_ci			int modG (int v)
3129e5c31af7Sopenharmony_ci			{
3130e5c31af7Sopenharmony_ci				g += v;
3131e5c31af7Sopenharmony_ci				return v;
3132e5c31af7Sopenharmony_ci			}
3133e5c31af7Sopenharmony_ci
3134e5c31af7Sopenharmony_ci			int func (float a, int b, bool c, int d)
3135e5c31af7Sopenharmony_ci			{
3136e5c31af7Sopenharmony_ci				if (c)
3137e5c31af7Sopenharmony_ci					return b + int(a) + d;
3138e5c31af7Sopenharmony_ci				else
3139e5c31af7Sopenharmony_ci					return -1;
3140e5c31af7Sopenharmony_ci			}
3141e5c31af7Sopenharmony_ci
3142e5c31af7Sopenharmony_ci			void main ()
3143e5c31af7Sopenharmony_ci			{
3144e5c31af7Sopenharmony_ci				${SETUP}
3145e5c31af7Sopenharmony_ci				out0 = func(float(g = in0), modG(2), --g > 0, g);
3146e5c31af7Sopenharmony_ci				${OUTPUT}
3147e5c31af7Sopenharmony_ci			}
3148e5c31af7Sopenharmony_ci		""
3149e5c31af7Sopenharmony_ci	end
3150e5c31af7Sopenharmony_ci
3151e5c31af7Sopenharmony_ciend # misc
3152