1e5c31af7Sopenharmony_ci#X1. Constructor tests test constructing arrays of arrays with different declaration syntax and data types.
2e5c31af7Sopenharmony_ci#X2. Return value tests test arrays of arrays as function return values.
3e5c31af7Sopenharmony_ci#X3. Parameter tests test arrays of arrays as different types of function parameters (in, out, unnamed).
4e5c31af7Sopenharmony_ci#X4. Implicit size tests test constructing arrays of arrays with implicit size.
5e5c31af7Sopenharmony_ci#X5. Assignment tests test assigning an array of arrays to another array of arrays variable.
6e5c31af7Sopenharmony_ci#X6. Length tests test the length method of arrays of arrays.
7e5c31af7Sopenharmony_ci#X8. Array access tests test array element access at initialization with const/dynamic values
8e5c31af7Sopenharmony_ci
9e5c31af7Sopenharmony_cigroup constructor "Array of arrays constructors"
10e5c31af7Sopenharmony_ci
11e5c31af7Sopenharmony_ci	group explicit "Testing constructors with explicit sizes"
12e5c31af7Sopenharmony_ci		case float_3x3
13e5c31af7Sopenharmony_ci			version 450
14e5c31af7Sopenharmony_ci			desc "Testing constructing explicitly sized arrays of arrays"
15e5c31af7Sopenharmony_ci			values
16e5c31af7Sopenharmony_ci			{
17e5c31af7Sopenharmony_ci				input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(7.4, -1.0, 2.0) | vec3(3.0, 1.6, -2.0) ];
18e5c31af7Sopenharmony_ci				output vec3 out0 = [ vec3(2.0, 0.5, 1.0) | vec3(2.0, 7.4, -1.0) | vec3(-2.0, 3.0, 1.6) ];
19e5c31af7Sopenharmony_ci			}
20e5c31af7Sopenharmony_ci
21e5c31af7Sopenharmony_ci			both ""
22e5c31af7Sopenharmony_ci				#version 450
23e5c31af7Sopenharmony_ci				precision mediump float;
24e5c31af7Sopenharmony_ci				${DECLARATIONS}
25e5c31af7Sopenharmony_ci
26e5c31af7Sopenharmony_ci				void main()
27e5c31af7Sopenharmony_ci				{
28e5c31af7Sopenharmony_ci					${SETUP}
29e5c31af7Sopenharmony_ci					float[3][3] x;
30e5c31af7Sopenharmony_ci					x = float[3][3] (	float[3] (in0.z, in0.x, in0.y),
31e5c31af7Sopenharmony_ci										float[3] (in0.z, in0.x, in0.y),
32e5c31af7Sopenharmony_ci										float[3] (in0.z, in0.x, in0.y) );
33e5c31af7Sopenharmony_ci					out0 = vec3(x[0][0], x[1][1], x[2][2]);
34e5c31af7Sopenharmony_ci					${OUTPUT}
35e5c31af7Sopenharmony_ci				}
36e5c31af7Sopenharmony_ci			""
37e5c31af7Sopenharmony_ci		end
38e5c31af7Sopenharmony_ci
39e5c31af7Sopenharmony_ci		case float_3x4
40e5c31af7Sopenharmony_ci			version 450
41e5c31af7Sopenharmony_ci			desc "Testing constructing explicitly sized arrays of arrays"
42e5c31af7Sopenharmony_ci			values
43e5c31af7Sopenharmony_ci			{
44e5c31af7Sopenharmony_ci				input vec4 in0 = [ vec4(0.5, 1.0, 2.0, 0.2) | vec4(7.4, -1.0, 2.0, -1.3) | vec4(3.0, 1.6, -2.0, 0.5) ];
45e5c31af7Sopenharmony_ci				output vec4 out0 = [ vec4(2.0, 0.5, 0.2, 1.0) | vec4(2.0, 7.4, -1.3, -1.0) | vec4(-2.0, 3.0, 0.5, 1.6) ];
46e5c31af7Sopenharmony_ci			}
47e5c31af7Sopenharmony_ci
48e5c31af7Sopenharmony_ci			both ""
49e5c31af7Sopenharmony_ci				#version 450
50e5c31af7Sopenharmony_ci				precision mediump float;
51e5c31af7Sopenharmony_ci				${DECLARATIONS}
52e5c31af7Sopenharmony_ci
53e5c31af7Sopenharmony_ci				void main()
54e5c31af7Sopenharmony_ci				{
55e5c31af7Sopenharmony_ci					${SETUP}
56e5c31af7Sopenharmony_ci					float[3][4] x;
57e5c31af7Sopenharmony_ci					x = float[3][4] (	float[4] (in0.z, in0.x, in0.w, in0.y),
58e5c31af7Sopenharmony_ci										float[4] (in0.z, in0.x, in0.w, in0.y),
59e5c31af7Sopenharmony_ci										float[4] (in0.z, in0.x, in0.w, in0.y) );
60e5c31af7Sopenharmony_ci					out0 = vec4(x[0][0], x[1][1], x[2][2], x[2][3]);
61e5c31af7Sopenharmony_ci					${OUTPUT}
62e5c31af7Sopenharmony_ci				}
63e5c31af7Sopenharmony_ci			""
64e5c31af7Sopenharmony_ci		end
65e5c31af7Sopenharmony_ci
66e5c31af7Sopenharmony_ci		case int_3x1
67e5c31af7Sopenharmony_ci			version 450
68e5c31af7Sopenharmony_ci			desc "Testing constructing explicitly sized arrays of arrays"
69e5c31af7Sopenharmony_ci			values
70e5c31af7Sopenharmony_ci			{
71e5c31af7Sopenharmony_ci				input ivec3 in0 = [ ivec3(0, 1, 2) | ivec3(7, -1, 2) | ivec3(3, 1, -2) ];
72e5c31af7Sopenharmony_ci				output ivec3 out0 = [ ivec3(2, 0, 1) | ivec3(2, 7, -1) | ivec3(-2, 3, 1) ];
73e5c31af7Sopenharmony_ci			}
74e5c31af7Sopenharmony_ci
75e5c31af7Sopenharmony_ci			both ""
76e5c31af7Sopenharmony_ci				#version 450
77e5c31af7Sopenharmony_ci				precision mediump int;
78e5c31af7Sopenharmony_ci				precision mediump float;
79e5c31af7Sopenharmony_ci				${DECLARATIONS}
80e5c31af7Sopenharmony_ci
81e5c31af7Sopenharmony_ci				void main()
82e5c31af7Sopenharmony_ci				{
83e5c31af7Sopenharmony_ci					${SETUP}
84e5c31af7Sopenharmony_ci					int x[3][1];
85e5c31af7Sopenharmony_ci					x = int[3][1] (	int[1] (in0.z),
86e5c31af7Sopenharmony_ci									int[1] (in0.x),
87e5c31af7Sopenharmony_ci									int[1] (in0.y) );
88e5c31af7Sopenharmony_ci					out0 = ivec3(x[0][0], x[1][0], x[2][0]);
89e5c31af7Sopenharmony_ci					${OUTPUT}
90e5c31af7Sopenharmony_ci				}
91e5c31af7Sopenharmony_ci			""
92e5c31af7Sopenharmony_ci		end
93e5c31af7Sopenharmony_ci
94e5c31af7Sopenharmony_ci		case int_4x4x4
95e5c31af7Sopenharmony_ci			version 450
96e5c31af7Sopenharmony_ci			desc "Testing constructing explicitly sized arrays of arrays"
97e5c31af7Sopenharmony_ci			values
98e5c31af7Sopenharmony_ci			{
99e5c31af7Sopenharmony_ci				input ivec4 in0 = [ ivec4(0, 1, 2, 0) | ivec4(7, -1, 2, -1) | ivec4(3, 1, -2, 0) ];
100e5c31af7Sopenharmony_ci				output ivec4 out0 = [ ivec4(2, 0, 0, 1) | ivec4(2, 7, -1, -1) | ivec4(-2, 3, 0, 1) ];
101e5c31af7Sopenharmony_ci			}
102e5c31af7Sopenharmony_ci
103e5c31af7Sopenharmony_ci			both ""
104e5c31af7Sopenharmony_ci				#version 450
105e5c31af7Sopenharmony_ci				precision mediump int;
106e5c31af7Sopenharmony_ci				precision mediump float;
107e5c31af7Sopenharmony_ci				${DECLARATIONS}
108e5c31af7Sopenharmony_ci
109e5c31af7Sopenharmony_ci				void main()
110e5c31af7Sopenharmony_ci				{
111e5c31af7Sopenharmony_ci					${SETUP}
112e5c31af7Sopenharmony_ci					int[4] x[4][4];
113e5c31af7Sopenharmony_ci					x = int[4][4][4] (	int[4][4] (	(int[4] (in0.z, in0.x, in0.w, in0.y)),
114e5c31af7Sopenharmony_ci													(int[4] (in0.z, in0.x, in0.w, in0.y)),
115e5c31af7Sopenharmony_ci													(int[4] (in0.z, in0.x, in0.w, in0.y)),
116e5c31af7Sopenharmony_ci													(int[4] (in0.z, in0.x, in0.w, in0.y))),
117e5c31af7Sopenharmony_ci
118e5c31af7Sopenharmony_ci										int[4][4] (	(int[4] (in0.z, in0.x, in0.w, in0.y)),
119e5c31af7Sopenharmony_ci													(int[4] (in0.z, in0.x, in0.w, in0.y)),
120e5c31af7Sopenharmony_ci													(int[4] (in0.z, in0.x, in0.w, in0.y)),
121e5c31af7Sopenharmony_ci													(int[4] (in0.z, in0.x, in0.w, in0.y))),
122e5c31af7Sopenharmony_ci
123e5c31af7Sopenharmony_ci										int[4][4] (	(int[4] (in0.z, in0.x, in0.w, in0.y)),
124e5c31af7Sopenharmony_ci													(int[4] (in0.z, in0.x, in0.w, in0.y)),
125e5c31af7Sopenharmony_ci													(int[4] (in0.z, in0.x, in0.w, in0.y)),
126e5c31af7Sopenharmony_ci													(int[4] (in0.z, in0.x, in0.w, in0.y))),
127e5c31af7Sopenharmony_ci
128e5c31af7Sopenharmony_ci										int[4][4] (	(int[4] (in0.z, in0.x, in0.w, in0.y)),
129e5c31af7Sopenharmony_ci													(int[4] (in0.z, in0.x, in0.w, in0.y)),
130e5c31af7Sopenharmony_ci													(int[4] (in0.z, in0.x, in0.w, in0.y)),
131e5c31af7Sopenharmony_ci													(int[4] (in0.z, in0.x, in0.w, in0.y))) );
132e5c31af7Sopenharmony_ci
133e5c31af7Sopenharmony_ci					out0 = ivec4(x[0][0][0], x[1][1][1], x[2][2][2], x[3][3][3]);
134e5c31af7Sopenharmony_ci					${OUTPUT}
135e5c31af7Sopenharmony_ci				}
136e5c31af7Sopenharmony_ci			""
137e5c31af7Sopenharmony_ci		end
138e5c31af7Sopenharmony_ci
139e5c31af7Sopenharmony_ci		case bool_3x3x3
140e5c31af7Sopenharmony_ci			version 450
141e5c31af7Sopenharmony_ci			desc "Testing constructing explicitly sized arrays of arrays"
142e5c31af7Sopenharmony_ci			values
143e5c31af7Sopenharmony_ci			{
144e5c31af7Sopenharmony_ci				input bvec3 in0 = [ bvec3(true, true, false) ];
145e5c31af7Sopenharmony_ci				output bvec3 out0 = [ bvec3(false, true, true) ];
146e5c31af7Sopenharmony_ci			}
147e5c31af7Sopenharmony_ci
148e5c31af7Sopenharmony_ci			both ""
149e5c31af7Sopenharmony_ci				#version 450
150e5c31af7Sopenharmony_ci				precision mediump float;
151e5c31af7Sopenharmony_ci				${DECLARATIONS}
152e5c31af7Sopenharmony_ci
153e5c31af7Sopenharmony_ci				void main()
154e5c31af7Sopenharmony_ci				{
155e5c31af7Sopenharmony_ci					${SETUP}
156e5c31af7Sopenharmony_ci					bool[3][3][3] x;
157e5c31af7Sopenharmony_ci					x = bool[3][3][3] (	bool[3][3] ((bool[3] (in0.y, in0.y, in0.y)),
158e5c31af7Sopenharmony_ci													(bool[3] (in0.z, in0.z, in0.z)),
159e5c31af7Sopenharmony_ci													(bool[3] (in0.x, in0.x, in0.x))),
160e5c31af7Sopenharmony_ci
161e5c31af7Sopenharmony_ci										bool[3][3] ((bool[3] (in0.y, in0.y, in0.y)),
162e5c31af7Sopenharmony_ci													(bool[3] (in0.z, in0.z, in0.z)),
163e5c31af7Sopenharmony_ci													(bool[3] (in0.x, in0.x, in0.x))),
164e5c31af7Sopenharmony_ci
165e5c31af7Sopenharmony_ci										bool[3][3] ((bool[3] (in0.y, in0.y, in0.y)),
166e5c31af7Sopenharmony_ci													(bool[3] (in0.z, in0.z, in0.z)),
167e5c31af7Sopenharmony_ci													(bool[3] (in0.x, in0.x, in0.x))) );
168e5c31af7Sopenharmony_ci
169e5c31af7Sopenharmony_ci					out0 = bvec3(x[1][1][1], x[0][0][0], x[2][2][2]);
170e5c31af7Sopenharmony_ci					${OUTPUT}
171e5c31af7Sopenharmony_ci				}
172e5c31af7Sopenharmony_ci			""
173e5c31af7Sopenharmony_ci		end
174e5c31af7Sopenharmony_ci
175e5c31af7Sopenharmony_ci		case bool_2x1x4
176e5c31af7Sopenharmony_ci			version 450
177e5c31af7Sopenharmony_ci			desc "Testing constructing explicitly sized arrays of arrays"
178e5c31af7Sopenharmony_ci			values
179e5c31af7Sopenharmony_ci			{
180e5c31af7Sopenharmony_ci				input bvec4 in0 = [ bvec4(true, true, false, false) ];
181e5c31af7Sopenharmony_ci				output bvec4 out0 = [ bvec4(false, true, true, false) ];
182e5c31af7Sopenharmony_ci			}
183e5c31af7Sopenharmony_ci
184e5c31af7Sopenharmony_ci			both ""
185e5c31af7Sopenharmony_ci				#version 450
186e5c31af7Sopenharmony_ci				precision mediump float;
187e5c31af7Sopenharmony_ci				${DECLARATIONS}
188e5c31af7Sopenharmony_ci
189e5c31af7Sopenharmony_ci				void main()
190e5c31af7Sopenharmony_ci				{
191e5c31af7Sopenharmony_ci					${SETUP}
192e5c31af7Sopenharmony_ci					bool x[2][1][4];
193e5c31af7Sopenharmony_ci					x = bool[2][1][4] ( bool[1][4] ((bool[4] (in0.z, in0.x, in0.y, in0.w))),
194e5c31af7Sopenharmony_ci										bool[1][4] ((bool[4] (in0.z, in0.x, in0.y, in0.w))) );
195e5c31af7Sopenharmony_ci					out0 = bvec4(x[0][0][0], x[0][0][1], x[1][0][2], x[1][0][3]);
196e5c31af7Sopenharmony_ci					${OUTPUT}
197e5c31af7Sopenharmony_ci				}
198e5c31af7Sopenharmony_ci			""
199e5c31af7Sopenharmony_ci		end
200e5c31af7Sopenharmony_ci
201e5c31af7Sopenharmony_ci		case struct_3x2
202e5c31af7Sopenharmony_ci			version 450
203e5c31af7Sopenharmony_ci			desc "Testing constructing explicitly sized arrays of arrays"
204e5c31af7Sopenharmony_ci			values
205e5c31af7Sopenharmony_ci			{
206e5c31af7Sopenharmony_ci				input vec3 in0 = [ vec3(0.5, 1.0, 2.0) ];
207e5c31af7Sopenharmony_ci				output vec3 out0 = [ vec3(2.0, -0.5, -1.0) ];
208e5c31af7Sopenharmony_ci			}
209e5c31af7Sopenharmony_ci
210e5c31af7Sopenharmony_ci			both ""
211e5c31af7Sopenharmony_ci				#version 450
212e5c31af7Sopenharmony_ci				precision mediump float;
213e5c31af7Sopenharmony_ci				${DECLARATIONS}
214e5c31af7Sopenharmony_ci
215e5c31af7Sopenharmony_ci				void main()
216e5c31af7Sopenharmony_ci				{
217e5c31af7Sopenharmony_ci					${SETUP}
218e5c31af7Sopenharmony_ci
219e5c31af7Sopenharmony_ci					struct Test
220e5c31af7Sopenharmony_ci					{
221e5c31af7Sopenharmony_ci						float f;
222e5c31af7Sopenharmony_ci						vec3 v;
223e5c31af7Sopenharmony_ci					};
224e5c31af7Sopenharmony_ci
225e5c31af7Sopenharmony_ci					Test a = Test(in0.z, vec3(in0.x, in0.y, in0.z));
226e5c31af7Sopenharmony_ci					Test b = Test(in0.y, vec3(-in0.z, -in0.x, -in0.y));
227e5c31af7Sopenharmony_ci					Test c = Test(in0.x, vec3(-in0.y, in0.z, -in0.x));
228e5c31af7Sopenharmony_ci
229e5c31af7Sopenharmony_ci					Test[2] x[3] = Test[3][2] ( (Test[2] (a, b)),
230e5c31af7Sopenharmony_ci												(Test[2] (c, a)),
231e5c31af7Sopenharmony_ci											    (Test[2] (b, c)) );
232e5c31af7Sopenharmony_ci
233e5c31af7Sopenharmony_ci					out0 = vec3(x[0][0].f, x[0][1].v.y, x[2][1].v.x);
234e5c31af7Sopenharmony_ci					${OUTPUT}
235e5c31af7Sopenharmony_ci				}
236e5c31af7Sopenharmony_ci			""
237e5c31af7Sopenharmony_ci		end
238e5c31af7Sopenharmony_ci
239e5c31af7Sopenharmony_ci		case struct_4x1x4
240e5c31af7Sopenharmony_ci			version 450
241e5c31af7Sopenharmony_ci			desc "Testing constructing explicitly sized arrays of arrays"
242e5c31af7Sopenharmony_ci			values
243e5c31af7Sopenharmony_ci			{
244e5c31af7Sopenharmony_ci				input vec4 in0 = [ vec4(0.5, 1.0, 2.0, 1.5) ];
245e5c31af7Sopenharmony_ci				output vec4 out0 = [ vec4(2.0, -0.5, -1.0, -1.5) ];
246e5c31af7Sopenharmony_ci			}
247e5c31af7Sopenharmony_ci
248e5c31af7Sopenharmony_ci			both ""
249e5c31af7Sopenharmony_ci				#version 450
250e5c31af7Sopenharmony_ci				precision mediump float;
251e5c31af7Sopenharmony_ci				${DECLARATIONS}
252e5c31af7Sopenharmony_ci
253e5c31af7Sopenharmony_ci				void main()
254e5c31af7Sopenharmony_ci				{
255e5c31af7Sopenharmony_ci					${SETUP}
256e5c31af7Sopenharmony_ci
257e5c31af7Sopenharmony_ci					struct Test
258e5c31af7Sopenharmony_ci					{
259e5c31af7Sopenharmony_ci						float f;
260e5c31af7Sopenharmony_ci						vec3 v;
261e5c31af7Sopenharmony_ci					};
262e5c31af7Sopenharmony_ci
263e5c31af7Sopenharmony_ci					Test a = Test(in0.z, vec3(in0.x, in0.y, in0.z));
264e5c31af7Sopenharmony_ci					Test b = Test(in0.y, vec3(-in0.z, -in0.x, -in0.y));
265e5c31af7Sopenharmony_ci					Test c = Test(in0.x, vec3(-in0.y, in0.z, -in0.x));
266e5c31af7Sopenharmony_ci					Test d = Test(-in0.w, vec3(-in0.w, -in0.x, -in0.z));
267e5c31af7Sopenharmony_ci
268e5c31af7Sopenharmony_ci					Test[4] x[4][1] = Test[4][1][4] (	(Test[1][4] (Test[4] (a, b, c, d))),
269e5c31af7Sopenharmony_ci														(Test[1][4] (Test[4] (a, b, c, d))),
270e5c31af7Sopenharmony_ci														(Test[1][4] (Test[4] (a, b, c, d))),
271e5c31af7Sopenharmony_ci														(Test[1][4] (Test[4] (a, b, c, d))) );
272e5c31af7Sopenharmony_ci
273e5c31af7Sopenharmony_ci					out0 = vec4(x[0][0][0].f, x[1][0][1].v.y, x[2][0][2].v.x, x[3][0][3].v.x);
274e5c31af7Sopenharmony_ci					${OUTPUT}
275e5c31af7Sopenharmony_ci				}
276e5c31af7Sopenharmony_ci			""
277e5c31af7Sopenharmony_ci		end
278e5c31af7Sopenharmony_ci
279e5c31af7Sopenharmony_ci		case vec3_4x3
280e5c31af7Sopenharmony_ci			version 450
281e5c31af7Sopenharmony_ci			desc "Testing constructing explicitly sized arrays of arrays"
282e5c31af7Sopenharmony_ci			values
283e5c31af7Sopenharmony_ci			{
284e5c31af7Sopenharmony_ci				input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(7.4, -1.0, 2.0) | vec3(3.0, 1.6, -2.0) ];
285e5c31af7Sopenharmony_ci				output vec3 out0 = [ vec3(0.5, -2.0, 1.0) | vec3(7.4, -2.0, -1.0) | vec3(3.0, 2.0, 1.6) ];
286e5c31af7Sopenharmony_ci			}
287e5c31af7Sopenharmony_ci
288e5c31af7Sopenharmony_ci			both ""
289e5c31af7Sopenharmony_ci				#version 450
290e5c31af7Sopenharmony_ci				precision mediump float;
291e5c31af7Sopenharmony_ci				${DECLARATIONS}
292e5c31af7Sopenharmony_ci
293e5c31af7Sopenharmony_ci				void main()
294e5c31af7Sopenharmony_ci				{
295e5c31af7Sopenharmony_ci					${SETUP}
296e5c31af7Sopenharmony_ci
297e5c31af7Sopenharmony_ci					vec3[3] x[4];
298e5c31af7Sopenharmony_ci					x = vec3[4][3] (vec3[3] (	vec3(in0.x, in0.y, in0.z),
299e5c31af7Sopenharmony_ci												vec3(-in0.y, -in0.z, -in0.x),
300e5c31af7Sopenharmony_ci												vec3(in0.z, in0.x, in0.y)),
301e5c31af7Sopenharmony_ci									vec3[3] (	vec3(in0.x, in0.y, in0.z),
302e5c31af7Sopenharmony_ci												vec3(-in0.y, -in0.z, -in0.x),
303e5c31af7Sopenharmony_ci												vec3(in0.z, in0.x, in0.y)),
304e5c31af7Sopenharmony_ci									vec3[3] (	vec3(in0.x, in0.y, in0.z),
305e5c31af7Sopenharmony_ci												vec3(-in0.y, -in0.z, -in0.x),
306e5c31af7Sopenharmony_ci												vec3(in0.z, in0.x, in0.y)),
307e5c31af7Sopenharmony_ci									vec3[3] (	vec3(in0.x, in0.y, in0.z),
308e5c31af7Sopenharmony_ci												vec3(-in0.y, -in0.z, -in0.x),
309e5c31af7Sopenharmony_ci												vec3(in0.z, in0.x, in0.y)) );
310e5c31af7Sopenharmony_ci
311e5c31af7Sopenharmony_ci					out0 = vec3(x[0][0].x, x[1][1].y, x[3][2].z);
312e5c31af7Sopenharmony_ci					${OUTPUT}
313e5c31af7Sopenharmony_ci				}
314e5c31af7Sopenharmony_ci			""
315e5c31af7Sopenharmony_ci		end
316e5c31af7Sopenharmony_ci
317e5c31af7Sopenharmony_ci		case ivec3_3x2x1
318e5c31af7Sopenharmony_ci			version 450
319e5c31af7Sopenharmony_ci			desc "Testing constructing explicitly sized arrays of arrays"
320e5c31af7Sopenharmony_ci			values
321e5c31af7Sopenharmony_ci			{
322e5c31af7Sopenharmony_ci				input ivec3 in0 = [ ivec3(5, 1, 2) | ivec3(7, -1, 2) | ivec3(3, 1, -2) ];
323e5c31af7Sopenharmony_ci				output ivec3 out0 = [ ivec3(5, -2, 1) | ivec3(7, -2, -1) | ivec3(3, 2, 1) ];
324e5c31af7Sopenharmony_ci			}
325e5c31af7Sopenharmony_ci
326e5c31af7Sopenharmony_ci			both ""
327e5c31af7Sopenharmony_ci				#version 450
328e5c31af7Sopenharmony_ci				precision mediump int;
329e5c31af7Sopenharmony_ci				precision mediump float;
330e5c31af7Sopenharmony_ci				${DECLARATIONS}
331e5c31af7Sopenharmony_ci
332e5c31af7Sopenharmony_ci				void main()
333e5c31af7Sopenharmony_ci				{
334e5c31af7Sopenharmony_ci					${SETUP}
335e5c31af7Sopenharmony_ci
336e5c31af7Sopenharmony_ci					ivec3 x[3][2][1];
337e5c31af7Sopenharmony_ci					x = ivec3[3][2][1] (ivec3[2][1] (	ivec3[1] (ivec3(in0.x, in0.y, in0.z)),
338e5c31af7Sopenharmony_ci														ivec3[1] (ivec3(-in0.y, -in0.z, -in0.x))),
339e5c31af7Sopenharmony_ci										ivec3[2][1] (	ivec3[1] (ivec3(in0.z, in0.x, in0.y)),
340e5c31af7Sopenharmony_ci														ivec3[1] (ivec3(in0.x, in0.y, in0.z))),
341e5c31af7Sopenharmony_ci										ivec3[2][1] (	ivec3[1] (ivec3(-in0.y, -in0.z, -in0.x)),
342e5c31af7Sopenharmony_ci														ivec3[1] (ivec3(in0.z, in0.x, in0.y))) );
343e5c31af7Sopenharmony_ci
344e5c31af7Sopenharmony_ci					out0 = ivec3(x[0][0][0].x, x[2][0][0].y, x[1][0][0].z);
345e5c31af7Sopenharmony_ci					${OUTPUT}
346e5c31af7Sopenharmony_ci				}
347e5c31af7Sopenharmony_ci			""
348e5c31af7Sopenharmony_ci		end
349e5c31af7Sopenharmony_ci
350e5c31af7Sopenharmony_ci		case bvec3_1x2x3
351e5c31af7Sopenharmony_ci			version 450
352e5c31af7Sopenharmony_ci			desc "Testing constructing explicitly sized arrays of arrays"
353e5c31af7Sopenharmony_ci			values
354e5c31af7Sopenharmony_ci			{
355e5c31af7Sopenharmony_ci				input bvec3 in0 = [ bvec3(true, false, true) ];
356e5c31af7Sopenharmony_ci				output bvec3 out0 = [ bvec3(true, true, false) ];
357e5c31af7Sopenharmony_ci			}
358e5c31af7Sopenharmony_ci
359e5c31af7Sopenharmony_ci			both ""
360e5c31af7Sopenharmony_ci				#version 450
361e5c31af7Sopenharmony_ci				precision mediump float;
362e5c31af7Sopenharmony_ci				${DECLARATIONS}
363e5c31af7Sopenharmony_ci
364e5c31af7Sopenharmony_ci				void main()
365e5c31af7Sopenharmony_ci				{
366e5c31af7Sopenharmony_ci					${SETUP}
367e5c31af7Sopenharmony_ci
368e5c31af7Sopenharmony_ci					bvec3[3] x[1][2];
369e5c31af7Sopenharmony_ci					x = bvec3[1][2][3] ( bvec3[2][3] (	bvec3[3] (	bvec3(in0.x, in0.y, in0.z),
370e5c31af7Sopenharmony_ci																	bvec3(in0.y, in0.z, in0.x),
371e5c31af7Sopenharmony_ci																	bvec3(in0.z, in0.x, in0.y)),
372e5c31af7Sopenharmony_ci
373e5c31af7Sopenharmony_ci														bvec3[3] (	bvec3(in0.z, in0.x, in0.y),
374e5c31af7Sopenharmony_ci																	bvec3(in0.x, in0.y, in0.z),
375e5c31af7Sopenharmony_ci																	bvec3(in0.y, in0.z, in0.x)) ));
376e5c31af7Sopenharmony_ci
377e5c31af7Sopenharmony_ci					out0 = bvec3(x[0][0][0].x, x[0][0][1].y, x[0][1][0].z);
378e5c31af7Sopenharmony_ci					${OUTPUT}
379e5c31af7Sopenharmony_ci				}
380e5c31af7Sopenharmony_ci			""
381e5c31af7Sopenharmony_ci		end
382e5c31af7Sopenharmony_ci
383e5c31af7Sopenharmony_ci		case mat3_3x2
384e5c31af7Sopenharmony_ci			version 450
385e5c31af7Sopenharmony_ci			desc "Testing constructing explicitly sized arrays of arrays"
386e5c31af7Sopenharmony_ci			values
387e5c31af7Sopenharmony_ci			{
388e5c31af7Sopenharmony_ci				input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(-1.5, 0.0, -2.3) ];
389e5c31af7Sopenharmony_ci				output vec3 out0 = [ vec3(0.5, -1.0, 1.0) | vec3(-1.5, 0.0, 0.0) ];
390e5c31af7Sopenharmony_ci			}
391e5c31af7Sopenharmony_ci
392e5c31af7Sopenharmony_ci			both ""
393e5c31af7Sopenharmony_ci				#version 450
394e5c31af7Sopenharmony_ci				precision mediump float;
395e5c31af7Sopenharmony_ci				${DECLARATIONS}
396e5c31af7Sopenharmony_ci
397e5c31af7Sopenharmony_ci				void main()
398e5c31af7Sopenharmony_ci				{
399e5c31af7Sopenharmony_ci					${SETUP}
400e5c31af7Sopenharmony_ci					mat3[3][2] a = mat3[3][2] (	mat3[2] (	mat3(	in0.x, in0.y, in0.z,
401e5c31af7Sopenharmony_ci																	in0.x, in0.y, in0.z,
402e5c31af7Sopenharmony_ci																	in0.x, in0.y, in0.z),
403e5c31af7Sopenharmony_ci															mat3(	in0.z, in0.x, -in0.y,
404e5c31af7Sopenharmony_ci																	in0.z, in0.x, -in0.y,
405e5c31af7Sopenharmony_ci																	in0.z, in0.x, -in0.y)),
406e5c31af7Sopenharmony_ci
407e5c31af7Sopenharmony_ci												mat3[2] (	mat3(	-in0.z, -in0.z, in0.z,
408e5c31af7Sopenharmony_ci																	-in0.y, -in0.y, in0.y,
409e5c31af7Sopenharmony_ci																	-in0.x, -in0.x, in0.x),
410e5c31af7Sopenharmony_ci															mat3(	in0.x, in0.y, in0.z,
411e5c31af7Sopenharmony_ci																	in0.x, in0.y, in0.z,
412e5c31af7Sopenharmony_ci																	in0.x, in0.y, in0.z)),
413e5c31af7Sopenharmony_ci
414e5c31af7Sopenharmony_ci												mat3[2] (	mat3(	in0.z, in0.x, -in0.y,
415e5c31af7Sopenharmony_ci																	in0.z, in0.x, -in0.y,
416e5c31af7Sopenharmony_ci																	in0.z, in0.x, -in0.y),
417e5c31af7Sopenharmony_ci															mat3(	-in0.z, -in0.z, in0.z,
418e5c31af7Sopenharmony_ci																	-in0.y, -in0.y, in0.y,
419e5c31af7Sopenharmony_ci																	-in0.x, -in0.x, in0.x)) );
420e5c31af7Sopenharmony_ci
421e5c31af7Sopenharmony_ci					mat3 a0 = a[0][0];
422e5c31af7Sopenharmony_ci					mat3 a1 = a[0][1];
423e5c31af7Sopenharmony_ci					mat3 a2 = a[2][1];
424e5c31af7Sopenharmony_ci
425e5c31af7Sopenharmony_ci					float ret0 = a0[2][0];
426e5c31af7Sopenharmony_ci					float ret1 = a1[0][2];
427e5c31af7Sopenharmony_ci					float ret2 = a2[1][2];
428e5c31af7Sopenharmony_ci
429e5c31af7Sopenharmony_ci					out0 = vec3(ret0, ret1, ret2);
430e5c31af7Sopenharmony_ci					${OUTPUT}
431e5c31af7Sopenharmony_ci				}
432e5c31af7Sopenharmony_ci			""
433e5c31af7Sopenharmony_ci		end
434e5c31af7Sopenharmony_ci
435e5c31af7Sopenharmony_ci		case mat3_3x3x3
436e5c31af7Sopenharmony_ci			version 450
437e5c31af7Sopenharmony_ci			desc "Testing constructing explicitly sized arrays of arrays"
438e5c31af7Sopenharmony_ci			values
439e5c31af7Sopenharmony_ci			{
440e5c31af7Sopenharmony_ci				input ivec3 in0 = [ ivec3(0, 1, 2) | ivec3(-1, 0, -2) ];
441e5c31af7Sopenharmony_ci				output ivec3 out0 = [ ivec3(0, -1, 1) | ivec3(-1, 0, 0) ];
442e5c31af7Sopenharmony_ci			}
443e5c31af7Sopenharmony_ci
444e5c31af7Sopenharmony_ci			both ""
445e5c31af7Sopenharmony_ci				#version 450
446e5c31af7Sopenharmony_ci				precision mediump int;
447e5c31af7Sopenharmony_ci				precision mediump float;
448e5c31af7Sopenharmony_ci				${DECLARATIONS}
449e5c31af7Sopenharmony_ci
450e5c31af7Sopenharmony_ci				void main()
451e5c31af7Sopenharmony_ci				{
452e5c31af7Sopenharmony_ci					${SETUP}
453e5c31af7Sopenharmony_ci
454e5c31af7Sopenharmony_ci					mat3 a = mat3(	in0.x, in0.y, in0.z,
455e5c31af7Sopenharmony_ci									in0.x, in0.y, in0.z,
456e5c31af7Sopenharmony_ci									in0.x, in0.y, in0.z);
457e5c31af7Sopenharmony_ci					mat3 b = mat3(	in0.z, in0.x, -in0.y,
458e5c31af7Sopenharmony_ci									in0.z, in0.x, -in0.y,
459e5c31af7Sopenharmony_ci									in0.z, in0.x, -in0.y);
460e5c31af7Sopenharmony_ci					mat3 c = mat3(	-in0.z, -in0.z, in0.z,
461e5c31af7Sopenharmony_ci									-in0.y, -in0.y, in0.y,
462e5c31af7Sopenharmony_ci									-in0.x, -in0.x, in0.x);
463e5c31af7Sopenharmony_ci
464e5c31af7Sopenharmony_ci					mat3[3][3][3] x = mat3[3][3][3] (	mat3[3][3] (mat3[3] (a, a, a),
465e5c31af7Sopenharmony_ci																	mat3[3] (b, b, b),
466e5c31af7Sopenharmony_ci																	mat3[3] (c, c, c)),
467e5c31af7Sopenharmony_ci
468e5c31af7Sopenharmony_ci														mat3[3][3] (mat3[3] (b, b, b),
469e5c31af7Sopenharmony_ci																	mat3[3] (a, a, a),
470e5c31af7Sopenharmony_ci																	mat3[3] (c, c, c)),
471e5c31af7Sopenharmony_ci
472e5c31af7Sopenharmony_ci														mat3[3][3] (mat3[3] (c, c, c),
473e5c31af7Sopenharmony_ci																	mat3[3] (a, a, a),
474e5c31af7Sopenharmony_ci																	mat3[3] (b, b, b)) );
475e5c31af7Sopenharmony_ci
476e5c31af7Sopenharmony_ci					mat3 x0 = x[0][0][0];
477e5c31af7Sopenharmony_ci					mat3 x1 = x[1][0][0];
478e5c31af7Sopenharmony_ci					mat3 x2 = x[2][0][0];
479e5c31af7Sopenharmony_ci
480e5c31af7Sopenharmony_ci					float ret0 = x0[2][0];
481e5c31af7Sopenharmony_ci					float ret1 = x1[0][2];
482e5c31af7Sopenharmony_ci					float ret2 = x2[1][2];
483e5c31af7Sopenharmony_ci
484e5c31af7Sopenharmony_ci					out0 = ivec3(ret0, ret1, ret2);
485e5c31af7Sopenharmony_ci					${OUTPUT}
486e5c31af7Sopenharmony_ci				}
487e5c31af7Sopenharmony_ci			""
488e5c31af7Sopenharmony_ci		end
489e5c31af7Sopenharmony_ci
490e5c31af7Sopenharmony_ci		case mat3_3x4
491e5c31af7Sopenharmony_ci			version 450
492e5c31af7Sopenharmony_ci			desc "Testing constructing explicitly sized arrays of arrays"
493e5c31af7Sopenharmony_ci			values
494e5c31af7Sopenharmony_ci			{
495e5c31af7Sopenharmony_ci				input bvec3 in0 = [ bvec3(true, false, true) ];
496e5c31af7Sopenharmony_ci				output bvec3 out0 = [ bvec3(true, false, false) ];
497e5c31af7Sopenharmony_ci			}
498e5c31af7Sopenharmony_ci
499e5c31af7Sopenharmony_ci			both ""
500e5c31af7Sopenharmony_ci				#version 450
501e5c31af7Sopenharmony_ci				precision mediump float;
502e5c31af7Sopenharmony_ci				${DECLARATIONS}
503e5c31af7Sopenharmony_ci
504e5c31af7Sopenharmony_ci				void main()
505e5c31af7Sopenharmony_ci				{
506e5c31af7Sopenharmony_ci					${SETUP}
507e5c31af7Sopenharmony_ci
508e5c31af7Sopenharmony_ci					mat3 a = mat3(	in0.x, in0.y, in0.z,
509e5c31af7Sopenharmony_ci									in0.x, in0.y, in0.z,
510e5c31af7Sopenharmony_ci									in0.x, in0.y, in0.z);
511e5c31af7Sopenharmony_ci
512e5c31af7Sopenharmony_ci					mat3 b = mat3(	in0.z, in0.x, in0.y,
513e5c31af7Sopenharmony_ci									in0.z, in0.x, in0.y,
514e5c31af7Sopenharmony_ci									in0.z, in0.x, in0.y);
515e5c31af7Sopenharmony_ci
516e5c31af7Sopenharmony_ci					mat3 c = mat3(	in0.z, in0.z, in0.z,
517e5c31af7Sopenharmony_ci									in0.y, in0.y, in0.y,
518e5c31af7Sopenharmony_ci									in0.x, in0.x, in0.x);
519e5c31af7Sopenharmony_ci
520e5c31af7Sopenharmony_ci					mat3[4] x[3] = mat3[3][4] (	mat3[4] (a, b, c, a),
521e5c31af7Sopenharmony_ci												mat3[4] (b, c, a, b),
522e5c31af7Sopenharmony_ci												mat3[4] (c, a, b, c) );
523e5c31af7Sopenharmony_ci
524e5c31af7Sopenharmony_ci					mat3 x0 = x[0][0];
525e5c31af7Sopenharmony_ci					mat3 x1 = x[1][3];
526e5c31af7Sopenharmony_ci					mat3 x2 = x[2][0];
527e5c31af7Sopenharmony_ci
528e5c31af7Sopenharmony_ci					float ret0 = x0[2][0];
529e5c31af7Sopenharmony_ci					float ret1 = x1[0][2];
530e5c31af7Sopenharmony_ci					float ret2 = x2[1][2];
531e5c31af7Sopenharmony_ci
532e5c31af7Sopenharmony_ci					out0 = bvec3(ret0, ret1, ret2);
533e5c31af7Sopenharmony_ci					${OUTPUT}
534e5c31af7Sopenharmony_ci				}
535e5c31af7Sopenharmony_ci			""
536e5c31af7Sopenharmony_ci		end
537e5c31af7Sopenharmony_ci
538e5c31af7Sopenharmony_ci		case high_dimensional_array
539e5c31af7Sopenharmony_ci			version 450
540e5c31af7Sopenharmony_ci			desc "Testing constructing explicitly sized arrays of arrays"
541e5c31af7Sopenharmony_ci			values
542e5c31af7Sopenharmony_ci			{
543e5c31af7Sopenharmony_ci				input ivec2 in0 = [ ivec2(1, -2) ];
544e5c31af7Sopenharmony_ci				output ivec2 out0 = [ ivec2(-2, 1) ];
545e5c31af7Sopenharmony_ci			}
546e5c31af7Sopenharmony_ci
547e5c31af7Sopenharmony_ci			both ""
548e5c31af7Sopenharmony_ci				#version 450
549e5c31af7Sopenharmony_ci				precision mediump float;
550e5c31af7Sopenharmony_ci				${DECLARATIONS}
551e5c31af7Sopenharmony_ci
552e5c31af7Sopenharmony_ci				void main()
553e5c31af7Sopenharmony_ci				{
554e5c31af7Sopenharmony_ci					${SETUP}
555e5c31af7Sopenharmony_ci
556e5c31af7Sopenharmony_ci					int[1][1][1][2][1][1][1] x = int[1][1][1][2][1][1][1] ( int[1][1][2][1][1][1] (int [1][2][1][1][1] ( int[2][1][1][1] (	int[1][1][1] ( int[1][1] (int[1] (in0.y))),
557e5c31af7Sopenharmony_ci																																			int[1][1][1] ( int[1][1] (int[1] (in0.x)))))));
558e5c31af7Sopenharmony_ci
559e5c31af7Sopenharmony_ci					out0 = ivec2(x[0][0][0][0][0][0][0], x[0][0][0][1][0][0][0]);
560e5c31af7Sopenharmony_ci					${OUTPUT}
561e5c31af7Sopenharmony_ci				}
562e5c31af7Sopenharmony_ci			""
563e5c31af7Sopenharmony_ci		end
564e5c31af7Sopenharmony_ci
565e5c31af7Sopenharmony_ci	end # explicit
566e5c31af7Sopenharmony_ci
567e5c31af7Sopenharmony_ci	group implicit "Testing constructors with implicit size"
568e5c31af7Sopenharmony_ci
569e5c31af7Sopenharmony_ci		case float_3x3
570e5c31af7Sopenharmony_ci			version 450
571e5c31af7Sopenharmony_ci			desc "Testing constructing implicitly sized arrays of arrays"
572e5c31af7Sopenharmony_ci			values
573e5c31af7Sopenharmony_ci			{
574e5c31af7Sopenharmony_ci				input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(7.4, -1.0, 2.0) | vec3(3.0, 1.6, -2.0) ];
575e5c31af7Sopenharmony_ci				output vec3 out0 = [ vec3(2.0, 0.5, 1.0) | vec3(2.0, 7.4, -1.0) | vec3(-2.0, 3.0, 1.6) ];
576e5c31af7Sopenharmony_ci			}
577e5c31af7Sopenharmony_ci
578e5c31af7Sopenharmony_ci			both ""
579e5c31af7Sopenharmony_ci				#version 450
580e5c31af7Sopenharmony_ci				precision mediump float;
581e5c31af7Sopenharmony_ci				${DECLARATIONS}
582e5c31af7Sopenharmony_ci
583e5c31af7Sopenharmony_ci				void main()
584e5c31af7Sopenharmony_ci				{
585e5c31af7Sopenharmony_ci					${SETUP}
586e5c31af7Sopenharmony_ci					float[3][3] x;
587e5c31af7Sopenharmony_ci					x = float[][] ( float[](in0.z, in0.x, in0.y),
588e5c31af7Sopenharmony_ci									float[](in0.z, in0.x, in0.y),
589e5c31af7Sopenharmony_ci									float[](in0.z, in0.x, in0.y) );
590e5c31af7Sopenharmony_ci
591e5c31af7Sopenharmony_ci					out0 = vec3(x[0][0], x[1][1], x[2][2]);
592e5c31af7Sopenharmony_ci					${OUTPUT}
593e5c31af7Sopenharmony_ci				}
594e5c31af7Sopenharmony_ci			""
595e5c31af7Sopenharmony_ci		end
596e5c31af7Sopenharmony_ci
597e5c31af7Sopenharmony_ci		case float_3x4
598e5c31af7Sopenharmony_ci			version 450
599e5c31af7Sopenharmony_ci			desc "Testing constructing implicitly sized arrays of arrays"
600e5c31af7Sopenharmony_ci			values
601e5c31af7Sopenharmony_ci			{
602e5c31af7Sopenharmony_ci				input vec4 in0 = [ vec4(0.5, 1.0, 2.0, 0.2) | vec4(7.4, -1.0, 2.0, -1.3) | vec4(3.0, 1.6, -2.0, 0.5) ];
603e5c31af7Sopenharmony_ci				output vec4 out0 = [ vec4(2.0, 0.5, 0.2, 1.0) | vec4(2.0, 7.4, -1.3, -1.0) | vec4(-2.0, 3.0, 0.5, 1.6) ];
604e5c31af7Sopenharmony_ci			}
605e5c31af7Sopenharmony_ci
606e5c31af7Sopenharmony_ci			both ""
607e5c31af7Sopenharmony_ci				#version 450
608e5c31af7Sopenharmony_ci				precision mediump float;
609e5c31af7Sopenharmony_ci				${DECLARATIONS}
610e5c31af7Sopenharmony_ci
611e5c31af7Sopenharmony_ci				void main()
612e5c31af7Sopenharmony_ci				{
613e5c31af7Sopenharmony_ci					${SETUP}
614e5c31af7Sopenharmony_ci					float[3][4] x;
615e5c31af7Sopenharmony_ci					x = float[][] ( float[] (in0.z, in0.x, in0.w, in0.y),
616e5c31af7Sopenharmony_ci									float[] (in0.z, in0.x, in0.w, in0.y),
617e5c31af7Sopenharmony_ci									float[] (in0.z, in0.x, in0.w, in0.y) );
618e5c31af7Sopenharmony_ci
619e5c31af7Sopenharmony_ci					out0 = vec4(x[0][0], x[1][1], x[2][2], x[2][3]);
620e5c31af7Sopenharmony_ci					${OUTPUT}
621e5c31af7Sopenharmony_ci				}
622e5c31af7Sopenharmony_ci			""
623e5c31af7Sopenharmony_ci		end
624e5c31af7Sopenharmony_ci
625e5c31af7Sopenharmony_ci		case int_3x1
626e5c31af7Sopenharmony_ci			version 450
627e5c31af7Sopenharmony_ci			desc "Testing constructing implicitly sized arrays of arrays"
628e5c31af7Sopenharmony_ci			values
629e5c31af7Sopenharmony_ci			{
630e5c31af7Sopenharmony_ci				input ivec3 in0 = [ ivec3(0, 1, 2) | ivec3(7, -1, 2) | ivec3(3, 1, -2) ];
631e5c31af7Sopenharmony_ci				output ivec3 out0 = [ ivec3(2, 0, 1) | ivec3(2, 7, -1) | ivec3(-2, 3, 1) ];
632e5c31af7Sopenharmony_ci			}
633e5c31af7Sopenharmony_ci
634e5c31af7Sopenharmony_ci			both ""
635e5c31af7Sopenharmony_ci				#version 450
636e5c31af7Sopenharmony_ci				precision mediump int;
637e5c31af7Sopenharmony_ci				precision mediump float;
638e5c31af7Sopenharmony_ci				${DECLARATIONS}
639e5c31af7Sopenharmony_ci
640e5c31af7Sopenharmony_ci				void main()
641e5c31af7Sopenharmony_ci				{
642e5c31af7Sopenharmony_ci					${SETUP}
643e5c31af7Sopenharmony_ci					int x[3][1];
644e5c31af7Sopenharmony_ci					x = int[][] ( int[] (in0.z),
645e5c31af7Sopenharmony_ci								  int[] (in0.x),
646e5c31af7Sopenharmony_ci								  int[] (in0.y) );
647e5c31af7Sopenharmony_ci
648e5c31af7Sopenharmony_ci					out0 = ivec3(x[0][0], x[1][0], x[2][0]);
649e5c31af7Sopenharmony_ci					${OUTPUT}
650e5c31af7Sopenharmony_ci				}
651e5c31af7Sopenharmony_ci			""
652e5c31af7Sopenharmony_ci		end
653e5c31af7Sopenharmony_ci
654e5c31af7Sopenharmony_ci		case int_4x4x4
655e5c31af7Sopenharmony_ci			version 450
656e5c31af7Sopenharmony_ci			desc "Testing constructing implicitly sized arrays of arrays"
657e5c31af7Sopenharmony_ci			values
658e5c31af7Sopenharmony_ci			{
659e5c31af7Sopenharmony_ci				input ivec4 in0 = [ ivec4(0, 1, 2, 0) | ivec4(7, -1, 2, -1) | ivec4(3, 1, -2, 0) ];
660e5c31af7Sopenharmony_ci				output ivec4 out0 = [ ivec4(2, 0, 0, 1) | ivec4(2, 7, -1, -1) | ivec4(-2, 3, 0, 1) ];
661e5c31af7Sopenharmony_ci			}
662e5c31af7Sopenharmony_ci
663e5c31af7Sopenharmony_ci			both ""
664e5c31af7Sopenharmony_ci				#version 450
665e5c31af7Sopenharmony_ci				precision mediump int;
666e5c31af7Sopenharmony_ci				precision mediump float;
667e5c31af7Sopenharmony_ci				${DECLARATIONS}
668e5c31af7Sopenharmony_ci
669e5c31af7Sopenharmony_ci				void main()
670e5c31af7Sopenharmony_ci				{
671e5c31af7Sopenharmony_ci					${SETUP}
672e5c31af7Sopenharmony_ci					int[4] x[4][4];
673e5c31af7Sopenharmony_ci					x = int[][][] ( int[][] ((int[] (in0.z, in0.x, in0.w, in0.y)),
674e5c31af7Sopenharmony_ci											 (int[] (in0.z, in0.x, in0.w, in0.y)),
675e5c31af7Sopenharmony_ci											 (int[] (in0.z, in0.x, in0.w, in0.y)),
676e5c31af7Sopenharmony_ci											 (int[] (in0.z, in0.x, in0.w, in0.y))),
677e5c31af7Sopenharmony_ci
678e5c31af7Sopenharmony_ci									int[][] ((int[] (in0.z, in0.x, in0.w, in0.y)),
679e5c31af7Sopenharmony_ci											 (int[] (in0.z, in0.x, in0.w, in0.y)),
680e5c31af7Sopenharmony_ci											 (int[] (in0.z, in0.x, in0.w, in0.y)),
681e5c31af7Sopenharmony_ci											 (int[] (in0.z, in0.x, in0.w, in0.y))),
682e5c31af7Sopenharmony_ci
683e5c31af7Sopenharmony_ci									int[][] ((int[] (in0.z, in0.x, in0.w, in0.y)),
684e5c31af7Sopenharmony_ci											 (int[] (in0.z, in0.x, in0.w, in0.y)),
685e5c31af7Sopenharmony_ci											 (int[] (in0.z, in0.x, in0.w, in0.y)),
686e5c31af7Sopenharmony_ci											 (int[] (in0.z, in0.x, in0.w, in0.y))),
687e5c31af7Sopenharmony_ci
688e5c31af7Sopenharmony_ci									int[][] ((int[] (in0.z, in0.x, in0.w, in0.y)),
689e5c31af7Sopenharmony_ci											 (int[] (in0.z, in0.x, in0.w, in0.y)),
690e5c31af7Sopenharmony_ci											 (int[] (in0.z, in0.x, in0.w, in0.y)),
691e5c31af7Sopenharmony_ci											 (int[] (in0.z, in0.x, in0.w, in0.y))) );
692e5c31af7Sopenharmony_ci
693e5c31af7Sopenharmony_ci					out0 = ivec4(x[0][0][0], x[1][1][1], x[2][2][2], x[3][3][3]);
694e5c31af7Sopenharmony_ci					${OUTPUT}
695e5c31af7Sopenharmony_ci				}
696e5c31af7Sopenharmony_ci			""
697e5c31af7Sopenharmony_ci		end
698e5c31af7Sopenharmony_ci
699e5c31af7Sopenharmony_ci		case bool_3x3x3
700e5c31af7Sopenharmony_ci			version 450
701e5c31af7Sopenharmony_ci			desc "Testing constructing implicitly sized arrays of arrays"
702e5c31af7Sopenharmony_ci			values
703e5c31af7Sopenharmony_ci			{
704e5c31af7Sopenharmony_ci				input bvec3 in0 = [ bvec3(true, true, false) ];
705e5c31af7Sopenharmony_ci				output bvec3 out0 = [ bvec3(false, true, true) ];
706e5c31af7Sopenharmony_ci			}
707e5c31af7Sopenharmony_ci
708e5c31af7Sopenharmony_ci			both ""
709e5c31af7Sopenharmony_ci				#version 450
710e5c31af7Sopenharmony_ci				precision mediump float;
711e5c31af7Sopenharmony_ci				${DECLARATIONS}
712e5c31af7Sopenharmony_ci
713e5c31af7Sopenharmony_ci				void main()
714e5c31af7Sopenharmony_ci				{
715e5c31af7Sopenharmony_ci					${SETUP}
716e5c31af7Sopenharmony_ci					bool[3][3][3] x;
717e5c31af7Sopenharmony_ci					x = bool[][][] (bool[][] (	(bool[] (in0.y, in0.y, in0.y)),
718e5c31af7Sopenharmony_ci												(bool[] (in0.z, in0.z, in0.z)),
719e5c31af7Sopenharmony_ci												(bool[] (in0.x, in0.x, in0.x))),
720e5c31af7Sopenharmony_ci
721e5c31af7Sopenharmony_ci									bool[][] (	(bool[] (in0.y, in0.y, in0.y)),
722e5c31af7Sopenharmony_ci												(bool[] (in0.z, in0.z, in0.z)),
723e5c31af7Sopenharmony_ci												(bool[] (in0.x, in0.x, in0.x))),
724e5c31af7Sopenharmony_ci
725e5c31af7Sopenharmony_ci									bool[][] (	(bool[] (in0.y, in0.y, in0.y)),
726e5c31af7Sopenharmony_ci												(bool[] (in0.z, in0.z, in0.z)),
727e5c31af7Sopenharmony_ci												(bool[] (in0.x, in0.x, in0.x))) );
728e5c31af7Sopenharmony_ci
729e5c31af7Sopenharmony_ci					out0 = bvec3(x[1][1][1], x[0][0][0], x[2][2][2]);
730e5c31af7Sopenharmony_ci					${OUTPUT}
731e5c31af7Sopenharmony_ci				}
732e5c31af7Sopenharmony_ci			""
733e5c31af7Sopenharmony_ci		end
734e5c31af7Sopenharmony_ci
735e5c31af7Sopenharmony_ci		case bool_2x1x4
736e5c31af7Sopenharmony_ci			version 450
737e5c31af7Sopenharmony_ci			desc "Testing constructing implicitly sized arrays of arrays"
738e5c31af7Sopenharmony_ci			values
739e5c31af7Sopenharmony_ci			{
740e5c31af7Sopenharmony_ci				input bvec4 in0 = [ bvec4(true, true, false, false) ];
741e5c31af7Sopenharmony_ci				output bvec4 out0 = [ bvec4(false, true, true, false) ];
742e5c31af7Sopenharmony_ci			}
743e5c31af7Sopenharmony_ci
744e5c31af7Sopenharmony_ci			both ""
745e5c31af7Sopenharmony_ci				#version 450
746e5c31af7Sopenharmony_ci				precision mediump float;
747e5c31af7Sopenharmony_ci				${DECLARATIONS}
748e5c31af7Sopenharmony_ci
749e5c31af7Sopenharmony_ci				void main()
750e5c31af7Sopenharmony_ci				{
751e5c31af7Sopenharmony_ci					${SETUP}
752e5c31af7Sopenharmony_ci					bool x[2][1][4];
753e5c31af7Sopenharmony_ci					x = bool[2][1][4] ( bool[][] ((bool[] (in0.z, in0.x, in0.y, in0.w))),
754e5c31af7Sopenharmony_ci										bool[][] ((bool[] (in0.z, in0.x, in0.y, in0.w))) );
755e5c31af7Sopenharmony_ci					out0 = bvec4(x[0][0][0], x[0][0][1], x[1][0][2], x[1][0][3]);
756e5c31af7Sopenharmony_ci					${OUTPUT}
757e5c31af7Sopenharmony_ci				}
758e5c31af7Sopenharmony_ci			""
759e5c31af7Sopenharmony_ci		end
760e5c31af7Sopenharmony_ci
761e5c31af7Sopenharmony_ci		case struct_3x2
762e5c31af7Sopenharmony_ci			version 450
763e5c31af7Sopenharmony_ci			desc "Testing constructing implicitly sized arrays of arrays"
764e5c31af7Sopenharmony_ci			values
765e5c31af7Sopenharmony_ci			{
766e5c31af7Sopenharmony_ci				input vec3 in0 = [ vec3(0.5, 1.0, 2.0) ];
767e5c31af7Sopenharmony_ci				output vec3 out0 = [ vec3(2.0, -0.5, -1.0) ];
768e5c31af7Sopenharmony_ci			}
769e5c31af7Sopenharmony_ci
770e5c31af7Sopenharmony_ci			both ""
771e5c31af7Sopenharmony_ci				#version 450
772e5c31af7Sopenharmony_ci				precision mediump float;
773e5c31af7Sopenharmony_ci				${DECLARATIONS}
774e5c31af7Sopenharmony_ci
775e5c31af7Sopenharmony_ci				void main()
776e5c31af7Sopenharmony_ci				{
777e5c31af7Sopenharmony_ci					${SETUP}
778e5c31af7Sopenharmony_ci
779e5c31af7Sopenharmony_ci					struct Test
780e5c31af7Sopenharmony_ci					{
781e5c31af7Sopenharmony_ci						float f;
782e5c31af7Sopenharmony_ci						vec3 v;
783e5c31af7Sopenharmony_ci					};
784e5c31af7Sopenharmony_ci
785e5c31af7Sopenharmony_ci					Test a = Test(in0.z, vec3(in0.x, in0.y, in0.z));
786e5c31af7Sopenharmony_ci					Test b = Test(in0.y, vec3(-in0.z, -in0.x, -in0.y));
787e5c31af7Sopenharmony_ci					Test c = Test(in0.x, vec3(-in0.y, in0.z, -in0.x));
788e5c31af7Sopenharmony_ci
789e5c31af7Sopenharmony_ci					Test[2] x[3] = Test[][] (	(Test[] (a, b)),
790e5c31af7Sopenharmony_ci												(Test[] (c, a)),
791e5c31af7Sopenharmony_ci											    (Test[] (b, c)) );
792e5c31af7Sopenharmony_ci
793e5c31af7Sopenharmony_ci					out0 = vec3(x[0][0].f, x[0][1].v.y, x[2][1].v.x);
794e5c31af7Sopenharmony_ci					${OUTPUT}
795e5c31af7Sopenharmony_ci				}
796e5c31af7Sopenharmony_ci			""
797e5c31af7Sopenharmony_ci		end
798e5c31af7Sopenharmony_ci
799e5c31af7Sopenharmony_ci		case struct_4x1x4
800e5c31af7Sopenharmony_ci			version 450
801e5c31af7Sopenharmony_ci			desc "Testing constructing implicitly sized arrays of arrays"
802e5c31af7Sopenharmony_ci			values
803e5c31af7Sopenharmony_ci			{
804e5c31af7Sopenharmony_ci				input vec4 in0 = [ vec4(0.5, 1.0, 2.0, 1.5) ];
805e5c31af7Sopenharmony_ci				output vec4 out0 = [ vec4(2.0, -0.5, -1.0, -1.5) ];
806e5c31af7Sopenharmony_ci			}
807e5c31af7Sopenharmony_ci
808e5c31af7Sopenharmony_ci			both ""
809e5c31af7Sopenharmony_ci				#version 450
810e5c31af7Sopenharmony_ci				precision mediump float;
811e5c31af7Sopenharmony_ci				${DECLARATIONS}
812e5c31af7Sopenharmony_ci
813e5c31af7Sopenharmony_ci				void main()
814e5c31af7Sopenharmony_ci				{
815e5c31af7Sopenharmony_ci					${SETUP}
816e5c31af7Sopenharmony_ci
817e5c31af7Sopenharmony_ci
818e5c31af7Sopenharmony_ci					struct Test
819e5c31af7Sopenharmony_ci					{
820e5c31af7Sopenharmony_ci						float f;
821e5c31af7Sopenharmony_ci						vec3 v;
822e5c31af7Sopenharmony_ci					};
823e5c31af7Sopenharmony_ci
824e5c31af7Sopenharmony_ci					Test a = Test(in0.z, vec3(in0.x, in0.y, in0.z));
825e5c31af7Sopenharmony_ci					Test b = Test(in0.y, vec3(-in0.z, -in0.x, -in0.y));
826e5c31af7Sopenharmony_ci					Test c = Test(in0.x, vec3(-in0.y, in0.z, -in0.x));
827e5c31af7Sopenharmony_ci					Test d = Test(-in0.w, vec3(-in0.w, -in0.x, -in0.z));
828e5c31af7Sopenharmony_ci
829e5c31af7Sopenharmony_ci					Test[4] x[4][1] = Test[][][] (	(Test[][] (Test[] (a, b, c, d))),
830e5c31af7Sopenharmony_ci													(Test[][] (Test[] (a, b, c, d))),
831e5c31af7Sopenharmony_ci													(Test[][] (Test[] (a, b, c, d))),
832e5c31af7Sopenharmony_ci													(Test[][] (Test[] (a, b, c, d))) );
833e5c31af7Sopenharmony_ci
834e5c31af7Sopenharmony_ci					out0 = vec4(x[0][0][0].f, x[1][0][1].v.y, x[2][0][2].v.x, x[3][0][3].v.x);
835e5c31af7Sopenharmony_ci					${OUTPUT}
836e5c31af7Sopenharmony_ci				}
837e5c31af7Sopenharmony_ci			""
838e5c31af7Sopenharmony_ci		end
839e5c31af7Sopenharmony_ci
840e5c31af7Sopenharmony_ci		case vec3_4x3
841e5c31af7Sopenharmony_ci			version 450
842e5c31af7Sopenharmony_ci			desc "Testing constructing implicitly sized arrays of arrays"
843e5c31af7Sopenharmony_ci			values
844e5c31af7Sopenharmony_ci			{
845e5c31af7Sopenharmony_ci				input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(7.4, -1.0, 2.0) | vec3(3.0, 1.6, -2.0) ];
846e5c31af7Sopenharmony_ci				output vec3 out0 = [ vec3(0.5, -2.0, 1.0) | vec3(7.4, -2.0, -1.0) | vec3(3.0, 2.0, 1.6) ];
847e5c31af7Sopenharmony_ci			}
848e5c31af7Sopenharmony_ci
849e5c31af7Sopenharmony_ci			both ""
850e5c31af7Sopenharmony_ci				#version 450
851e5c31af7Sopenharmony_ci				precision mediump float;
852e5c31af7Sopenharmony_ci				${DECLARATIONS}
853e5c31af7Sopenharmony_ci
854e5c31af7Sopenharmony_ci				void main()
855e5c31af7Sopenharmony_ci				{
856e5c31af7Sopenharmony_ci					${SETUP}
857e5c31af7Sopenharmony_ci
858e5c31af7Sopenharmony_ci					vec3[3] x[4];
859e5c31af7Sopenharmony_ci					x = vec3[][] (	vec3[]	(	vec3(in0.x, in0.y, in0.z),
860e5c31af7Sopenharmony_ci												vec3(-in0.y, -in0.z, -in0.x),
861e5c31af7Sopenharmony_ci												vec3(in0.z, in0.x, in0.y)),
862e5c31af7Sopenharmony_ci									vec3[]	(	vec3(in0.x, in0.y, in0.z),
863e5c31af7Sopenharmony_ci												vec3(-in0.y, -in0.z, -in0.x),
864e5c31af7Sopenharmony_ci												vec3(in0.z, in0.x, in0.y)),
865e5c31af7Sopenharmony_ci
866e5c31af7Sopenharmony_ci									vec3[]	(	vec3(in0.x, in0.y, in0.z),
867e5c31af7Sopenharmony_ci												vec3(-in0.y, -in0.z, -in0.x),
868e5c31af7Sopenharmony_ci												vec3(in0.z, in0.x, in0.y)),
869e5c31af7Sopenharmony_ci
870e5c31af7Sopenharmony_ci									vec3[]	(	vec3(in0.x, in0.y, in0.z),
871e5c31af7Sopenharmony_ci												vec3(-in0.y, -in0.z, -in0.x),
872e5c31af7Sopenharmony_ci												vec3(in0.z, in0.x, in0.y)) );
873e5c31af7Sopenharmony_ci
874e5c31af7Sopenharmony_ci					out0 = vec3(x[0][0].x, x[1][1].y, x[3][2].z);
875e5c31af7Sopenharmony_ci					${OUTPUT}
876e5c31af7Sopenharmony_ci				}
877e5c31af7Sopenharmony_ci			""
878e5c31af7Sopenharmony_ci		end
879e5c31af7Sopenharmony_ci
880e5c31af7Sopenharmony_ci		case ivec3_3x2x1
881e5c31af7Sopenharmony_ci			version 450
882e5c31af7Sopenharmony_ci			desc "Testing constructing implicitly sized arrays of arrays"
883e5c31af7Sopenharmony_ci			values
884e5c31af7Sopenharmony_ci			{
885e5c31af7Sopenharmony_ci				input ivec3 in0 = [ ivec3(5, 1, 2) | ivec3(7, -1, 2) | ivec3(3, 1, -2) ];
886e5c31af7Sopenharmony_ci				output ivec3 out0 = [ ivec3(5, -2, 1) | ivec3(7, -2, -1) | ivec3(3, 2, 1) ];
887e5c31af7Sopenharmony_ci			}
888e5c31af7Sopenharmony_ci
889e5c31af7Sopenharmony_ci			both ""
890e5c31af7Sopenharmony_ci				#version 450
891e5c31af7Sopenharmony_ci				precision mediump int;
892e5c31af7Sopenharmony_ci				precision mediump float;
893e5c31af7Sopenharmony_ci				${DECLARATIONS}
894e5c31af7Sopenharmony_ci
895e5c31af7Sopenharmony_ci				void main()
896e5c31af7Sopenharmony_ci				{
897e5c31af7Sopenharmony_ci					${SETUP}
898e5c31af7Sopenharmony_ci
899e5c31af7Sopenharmony_ci					ivec3 x[3][2][1];
900e5c31af7Sopenharmony_ci					x = ivec3[][][] (	ivec3[][] (	ivec3[] (ivec3(in0.x, in0.y, in0.z)),
901e5c31af7Sopenharmony_ci													ivec3[] (ivec3(-in0.y, -in0.z, -in0.x))),
902e5c31af7Sopenharmony_ci										ivec3[][] (	ivec3[] (ivec3(in0.z, in0.x, in0.y)),
903e5c31af7Sopenharmony_ci													ivec3[] (ivec3(in0.x, in0.y, in0.z))),
904e5c31af7Sopenharmony_ci										ivec3[][] (	ivec3[] (ivec3(-in0.y, -in0.z, -in0.x)),
905e5c31af7Sopenharmony_ci													ivec3[] (ivec3(in0.z, in0.x, in0.y))) );
906e5c31af7Sopenharmony_ci					out0 = ivec3(x[0][0][0].x, x[2][0][0].y, x[1][0][0].z);
907e5c31af7Sopenharmony_ci					${OUTPUT}
908e5c31af7Sopenharmony_ci				}
909e5c31af7Sopenharmony_ci			""
910e5c31af7Sopenharmony_ci		end
911e5c31af7Sopenharmony_ci
912e5c31af7Sopenharmony_ci		case bvec3_1x2x3
913e5c31af7Sopenharmony_ci			version 450
914e5c31af7Sopenharmony_ci			desc "Testing constructing implicitly sized arrays of arrays"
915e5c31af7Sopenharmony_ci			values
916e5c31af7Sopenharmony_ci			{
917e5c31af7Sopenharmony_ci				input bvec3 in0 = [ bvec3(true, false, true) ];
918e5c31af7Sopenharmony_ci				output bvec3 out0 = [ bvec3(true, true, false) ];
919e5c31af7Sopenharmony_ci			}
920e5c31af7Sopenharmony_ci
921e5c31af7Sopenharmony_ci			both ""
922e5c31af7Sopenharmony_ci				#version 450
923e5c31af7Sopenharmony_ci				precision mediump float;
924e5c31af7Sopenharmony_ci				${DECLARATIONS}
925e5c31af7Sopenharmony_ci
926e5c31af7Sopenharmony_ci				void main()
927e5c31af7Sopenharmony_ci				{
928e5c31af7Sopenharmony_ci					${SETUP}
929e5c31af7Sopenharmony_ci
930e5c31af7Sopenharmony_ci					bvec3[3] x[1][2];
931e5c31af7Sopenharmony_ci					x = bvec3[][][] (	bvec3[][] (	bvec3[] (bvec3(in0.x, in0.y, in0.z),
932e5c31af7Sopenharmony_ci															 bvec3(in0.y, in0.z, in0.x),
933e5c31af7Sopenharmony_ci															 bvec3(in0.z, in0.x, in0.y)),
934e5c31af7Sopenharmony_ci
935e5c31af7Sopenharmony_ci													bvec3[] (bvec3(in0.z, in0.x, in0.y),
936e5c31af7Sopenharmony_ci															 bvec3(in0.x, in0.y, in0.z),
937e5c31af7Sopenharmony_ci															 bvec3(in0.y, in0.z, in0.x)) ));
938e5c31af7Sopenharmony_ci
939e5c31af7Sopenharmony_ci					out0 = bvec3(x[0][0][0].x, x[0][0][1].y, x[0][1][0].z);
940e5c31af7Sopenharmony_ci					${OUTPUT}
941e5c31af7Sopenharmony_ci				}
942e5c31af7Sopenharmony_ci			""
943e5c31af7Sopenharmony_ci		end
944e5c31af7Sopenharmony_ci
945e5c31af7Sopenharmony_ci		case mat3_3x2
946e5c31af7Sopenharmony_ci			version 450
947e5c31af7Sopenharmony_ci			desc "Testing constructing implicitly sized arrays of arrays"
948e5c31af7Sopenharmony_ci			values
949e5c31af7Sopenharmony_ci			{
950e5c31af7Sopenharmony_ci				input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(-1.5, 0.0, -2.3) ];
951e5c31af7Sopenharmony_ci				output vec3 out0 = [ vec3(0.5, -1.0, 1.0) | vec3(-1.5, 0.0, 0.0) ];
952e5c31af7Sopenharmony_ci			}
953e5c31af7Sopenharmony_ci
954e5c31af7Sopenharmony_ci			both ""
955e5c31af7Sopenharmony_ci				#version 450
956e5c31af7Sopenharmony_ci				precision mediump float;
957e5c31af7Sopenharmony_ci				${DECLARATIONS}
958e5c31af7Sopenharmony_ci
959e5c31af7Sopenharmony_ci				void main()
960e5c31af7Sopenharmony_ci				{
961e5c31af7Sopenharmony_ci					${SETUP}
962e5c31af7Sopenharmony_ci					mat3[3][2] a = mat3[][] (	mat3[] (mat3(	in0.x, in0.y, in0.z,
963e5c31af7Sopenharmony_ci																in0.x, in0.y, in0.z,
964e5c31af7Sopenharmony_ci																in0.x, in0.y, in0.z),
965e5c31af7Sopenharmony_ci														mat3(	in0.z, in0.x, -in0.y,
966e5c31af7Sopenharmony_ci																in0.z, in0.x, -in0.y,
967e5c31af7Sopenharmony_ci																in0.z, in0.x, -in0.y)),
968e5c31af7Sopenharmony_ci
969e5c31af7Sopenharmony_ci												mat3[] (mat3(	-in0.z, -in0.z, in0.z,
970e5c31af7Sopenharmony_ci																-in0.y, -in0.y, in0.y,
971e5c31af7Sopenharmony_ci																-in0.x, -in0.x, in0.x),
972e5c31af7Sopenharmony_ci														mat3(	in0.x, in0.y, in0.z,
973e5c31af7Sopenharmony_ci																in0.x, in0.y, in0.z,
974e5c31af7Sopenharmony_ci																in0.x, in0.y, in0.z)),
975e5c31af7Sopenharmony_ci
976e5c31af7Sopenharmony_ci												mat3[] (mat3(	in0.z, in0.x, -in0.y,
977e5c31af7Sopenharmony_ci																in0.z, in0.x, -in0.y,
978e5c31af7Sopenharmony_ci																in0.z, in0.x, -in0.y),
979e5c31af7Sopenharmony_ci														mat3(	-in0.z, -in0.z, in0.z,
980e5c31af7Sopenharmony_ci																-in0.y, -in0.y, in0.y,
981e5c31af7Sopenharmony_ci																-in0.x, -in0.x, in0.x)) );
982e5c31af7Sopenharmony_ci
983e5c31af7Sopenharmony_ci					mat3 a0 = a[0][0];
984e5c31af7Sopenharmony_ci					mat3 a1 = a[0][1];
985e5c31af7Sopenharmony_ci					mat3 a2 = a[2][1];
986e5c31af7Sopenharmony_ci
987e5c31af7Sopenharmony_ci					float ret0 = a0[2][0];
988e5c31af7Sopenharmony_ci					float ret1 = a1[0][2];
989e5c31af7Sopenharmony_ci					float ret2 = a2[1][2];
990e5c31af7Sopenharmony_ci
991e5c31af7Sopenharmony_ci					out0 = vec3(ret0, ret1, ret2);
992e5c31af7Sopenharmony_ci					${OUTPUT}
993e5c31af7Sopenharmony_ci				}
994e5c31af7Sopenharmony_ci			""
995e5c31af7Sopenharmony_ci		end
996e5c31af7Sopenharmony_ci
997e5c31af7Sopenharmony_ci		case mat3_3x3x3
998e5c31af7Sopenharmony_ci			version 450
999e5c31af7Sopenharmony_ci			desc "Testing constructing implicitly sized arrays of arrays"
1000e5c31af7Sopenharmony_ci			values
1001e5c31af7Sopenharmony_ci			{
1002e5c31af7Sopenharmony_ci				input ivec3 in0 = [ ivec3(0, 1, 2) | ivec3(-1, 0, -2) ];
1003e5c31af7Sopenharmony_ci				output ivec3 out0 = [ ivec3(0, -1, 1) | ivec3(-1, 0, 0) ];
1004e5c31af7Sopenharmony_ci			}
1005e5c31af7Sopenharmony_ci
1006e5c31af7Sopenharmony_ci			both ""
1007e5c31af7Sopenharmony_ci				#version 450
1008e5c31af7Sopenharmony_ci				precision mediump int;
1009e5c31af7Sopenharmony_ci				precision mediump float;
1010e5c31af7Sopenharmony_ci				${DECLARATIONS}
1011e5c31af7Sopenharmony_ci
1012e5c31af7Sopenharmony_ci				void main()
1013e5c31af7Sopenharmony_ci				{
1014e5c31af7Sopenharmony_ci					${SETUP}
1015e5c31af7Sopenharmony_ci
1016e5c31af7Sopenharmony_ci					mat3 a = mat3(	in0.x, in0.y, in0.z,
1017e5c31af7Sopenharmony_ci									in0.x, in0.y, in0.z,
1018e5c31af7Sopenharmony_ci									in0.x, in0.y, in0.z);
1019e5c31af7Sopenharmony_ci					mat3 b = mat3(	in0.z, in0.x, -in0.y,
1020e5c31af7Sopenharmony_ci									in0.z, in0.x, -in0.y,
1021e5c31af7Sopenharmony_ci									in0.z, in0.x, -in0.y);
1022e5c31af7Sopenharmony_ci					mat3 c = mat3(	-in0.z, -in0.z, in0.z,
1023e5c31af7Sopenharmony_ci									-in0.y, -in0.y, in0.y,
1024e5c31af7Sopenharmony_ci									-in0.x, -in0.x, in0.x);
1025e5c31af7Sopenharmony_ci
1026e5c31af7Sopenharmony_ci					mat3[3][3][3] x = mat3[][][] (	mat3[][] (	mat3[] (a, a, a),
1027e5c31af7Sopenharmony_ci																mat3[] (b, b, b),
1028e5c31af7Sopenharmony_ci																mat3[] (c, c, c)),
1029e5c31af7Sopenharmony_ci
1030e5c31af7Sopenharmony_ci													mat3[][] (	mat3[] (b, b, b),
1031e5c31af7Sopenharmony_ci																mat3[] (a, a, a),
1032e5c31af7Sopenharmony_ci																mat3[] (c, c, c)),
1033e5c31af7Sopenharmony_ci
1034e5c31af7Sopenharmony_ci													mat3[][] (	mat3[] (c, c, c),
1035e5c31af7Sopenharmony_ci																mat3[] (a, a, a),
1036e5c31af7Sopenharmony_ci																mat3[] (b, b, b)) );
1037e5c31af7Sopenharmony_ci
1038e5c31af7Sopenharmony_ci					mat3 x0 = x[0][0][0];
1039e5c31af7Sopenharmony_ci					mat3 x1 = x[1][0][0];
1040e5c31af7Sopenharmony_ci					mat3 x2 = x[2][0][0];
1041e5c31af7Sopenharmony_ci
1042e5c31af7Sopenharmony_ci					float ret0 = x0[2][0];
1043e5c31af7Sopenharmony_ci					float ret1 = x1[0][2];
1044e5c31af7Sopenharmony_ci					float ret2 = x2[1][2];
1045e5c31af7Sopenharmony_ci
1046e5c31af7Sopenharmony_ci					out0 = ivec3(ret0, ret1, ret2);
1047e5c31af7Sopenharmony_ci					${OUTPUT}
1048e5c31af7Sopenharmony_ci				}
1049e5c31af7Sopenharmony_ci			""
1050e5c31af7Sopenharmony_ci		end
1051e5c31af7Sopenharmony_ci
1052e5c31af7Sopenharmony_ci		case mat3_3x4
1053e5c31af7Sopenharmony_ci			version 450
1054e5c31af7Sopenharmony_ci			desc "Testing constructing implicitly sized arrays of arrays"
1055e5c31af7Sopenharmony_ci			values
1056e5c31af7Sopenharmony_ci			{
1057e5c31af7Sopenharmony_ci				input bvec3 in0 = [ bvec3(true, false, true) ];
1058e5c31af7Sopenharmony_ci				output bvec3 out0 = [ bvec3(true, false, false) ];
1059e5c31af7Sopenharmony_ci			}
1060e5c31af7Sopenharmony_ci
1061e5c31af7Sopenharmony_ci			both ""
1062e5c31af7Sopenharmony_ci				#version 450
1063e5c31af7Sopenharmony_ci				precision mediump float;
1064e5c31af7Sopenharmony_ci				${DECLARATIONS}
1065e5c31af7Sopenharmony_ci
1066e5c31af7Sopenharmony_ci				void main()
1067e5c31af7Sopenharmony_ci				{
1068e5c31af7Sopenharmony_ci					${SETUP}
1069e5c31af7Sopenharmony_ci
1070e5c31af7Sopenharmony_ci					mat3 a = mat3(	in0.x, in0.y, in0.z,
1071e5c31af7Sopenharmony_ci									in0.x, in0.y, in0.z,
1072e5c31af7Sopenharmony_ci									in0.x, in0.y, in0.z);
1073e5c31af7Sopenharmony_ci
1074e5c31af7Sopenharmony_ci					mat3 b = mat3(	in0.z, in0.x, in0.y,
1075e5c31af7Sopenharmony_ci									in0.z, in0.x, in0.y,
1076e5c31af7Sopenharmony_ci									in0.z, in0.x, in0.y);
1077e5c31af7Sopenharmony_ci
1078e5c31af7Sopenharmony_ci					mat3 c = mat3(	in0.z, in0.z, in0.z,
1079e5c31af7Sopenharmony_ci									in0.y, in0.y, in0.y,
1080e5c31af7Sopenharmony_ci									in0.x, in0.x, in0.x);
1081e5c31af7Sopenharmony_ci
1082e5c31af7Sopenharmony_ci					mat3[4] x[3] = mat3[][] (	mat3[] (a, b, c, a),
1083e5c31af7Sopenharmony_ci												mat3[] (b, c, a, b),
1084e5c31af7Sopenharmony_ci												mat3[] (c, a, b, c) );
1085e5c31af7Sopenharmony_ci
1086e5c31af7Sopenharmony_ci					mat3 x0 = x[0][0];
1087e5c31af7Sopenharmony_ci					mat3 x1 = x[1][3];
1088e5c31af7Sopenharmony_ci					mat3 x2 = x[2][0];
1089e5c31af7Sopenharmony_ci
1090e5c31af7Sopenharmony_ci					float ret0 = x0[2][0];
1091e5c31af7Sopenharmony_ci					float ret1 = x1[0][2];
1092e5c31af7Sopenharmony_ci					float ret2 = x2[1][2];
1093e5c31af7Sopenharmony_ci
1094e5c31af7Sopenharmony_ci					out0 = bvec3(ret0, ret1, ret2);
1095e5c31af7Sopenharmony_ci					${OUTPUT}
1096e5c31af7Sopenharmony_ci				}
1097e5c31af7Sopenharmony_ci			""
1098e5c31af7Sopenharmony_ci		end
1099e5c31af7Sopenharmony_ci
1100e5c31af7Sopenharmony_ci		case int_high_dimensional_array
1101e5c31af7Sopenharmony_ci			version 450
1102e5c31af7Sopenharmony_ci			desc "Testing constructing implicitly sized arrays of arrays"
1103e5c31af7Sopenharmony_ci			values
1104e5c31af7Sopenharmony_ci			{
1105e5c31af7Sopenharmony_ci				input ivec2 in0 = [ ivec2(1, -2) ];
1106e5c31af7Sopenharmony_ci				output ivec2 out0 = [ ivec2(-2, 1) ];
1107e5c31af7Sopenharmony_ci			}
1108e5c31af7Sopenharmony_ci
1109e5c31af7Sopenharmony_ci			both ""
1110e5c31af7Sopenharmony_ci				#version 450
1111e5c31af7Sopenharmony_ci				precision mediump float;
1112e5c31af7Sopenharmony_ci				${DECLARATIONS}
1113e5c31af7Sopenharmony_ci
1114e5c31af7Sopenharmony_ci				void main()
1115e5c31af7Sopenharmony_ci				{
1116e5c31af7Sopenharmony_ci					${SETUP}
1117e5c31af7Sopenharmony_ci
1118e5c31af7Sopenharmony_ci					int[][][][][][][] x = int[][][][][][][] ( int[][][][][][] (int [][][][][] ( int[][][][] (	int[][][] ( int[][] (int[] (in0.y))),
1119e5c31af7Sopenharmony_ci																												int[][][] ( int[][] (int[] (in0.x)))))));
1120e5c31af7Sopenharmony_ci
1121e5c31af7Sopenharmony_ci					out0 = ivec2(x[0][0][0][0][0][0][0], x[0][0][0][1][0][0][0]);
1122e5c31af7Sopenharmony_ci					${OUTPUT}
1123e5c31af7Sopenharmony_ci				}
1124e5c31af7Sopenharmony_ci			""
1125e5c31af7Sopenharmony_ci		end
1126e5c31af7Sopenharmony_ci
1127e5c31af7Sopenharmony_ci	end # implicit
1128e5c31af7Sopenharmony_ci
1129e5c31af7Sopenharmony_ciend # constructor
1130e5c31af7Sopenharmony_ci
1131e5c31af7Sopenharmony_cigroup return "Array of arrays as return value"
1132e5c31af7Sopenharmony_ci
1133e5c31af7Sopenharmony_ci	group explicit "Testing return value with explicit constructor"
1134e5c31af7Sopenharmony_ci
1135e5c31af7Sopenharmony_ci		case float_3x3
1136e5c31af7Sopenharmony_ci			version 450
1137e5c31af7Sopenharmony_ci			desc "Testing arrays of arrays as function return values with explicit array size"
1138e5c31af7Sopenharmony_ci			values
1139e5c31af7Sopenharmony_ci			{
1140e5c31af7Sopenharmony_ci				input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(7.4, -1.0, 2.0) | vec3(3.0, 1.6, -2.0) ];
1141e5c31af7Sopenharmony_ci				output vec3 out0 = [ vec3(2.0, -0.5, 1.0) | vec3(2.0, -7.4, -1.0) | vec3(-2.0, -3.0, 1.6) ];
1142e5c31af7Sopenharmony_ci			}
1143e5c31af7Sopenharmony_ci
1144e5c31af7Sopenharmony_ci			both ""
1145e5c31af7Sopenharmony_ci				#version 450
1146e5c31af7Sopenharmony_ci				precision mediump float;
1147e5c31af7Sopenharmony_ci				${DECLARATIONS}
1148e5c31af7Sopenharmony_ci
1149e5c31af7Sopenharmony_ci				float[3][3] func(vec3 a)
1150e5c31af7Sopenharmony_ci				{
1151e5c31af7Sopenharmony_ci					return float[3][3] (float[3] (a.z, 0.0, 0.0),
1152e5c31af7Sopenharmony_ci										float[3] (0.0, -a.x, 0.0),
1153e5c31af7Sopenharmony_ci										float[3] (0.0, 0.0, a.y) );
1154e5c31af7Sopenharmony_ci				}
1155e5c31af7Sopenharmony_ci
1156e5c31af7Sopenharmony_ci				void main()
1157e5c31af7Sopenharmony_ci				{
1158e5c31af7Sopenharmony_ci					${SETUP}
1159e5c31af7Sopenharmony_ci					float[3][3] x = func(in0);
1160e5c31af7Sopenharmony_ci					out0 = vec3(x[0][0], x[1][1], x[2][2]);
1161e5c31af7Sopenharmony_ci					${OUTPUT}
1162e5c31af7Sopenharmony_ci				}
1163e5c31af7Sopenharmony_ci			""
1164e5c31af7Sopenharmony_ci		end
1165e5c31af7Sopenharmony_ci
1166e5c31af7Sopenharmony_ci		case int_2x2x2
1167e5c31af7Sopenharmony_ci			version 450
1168e5c31af7Sopenharmony_ci			desc "Testing arrays of arrays as function return values with explicit array size"
1169e5c31af7Sopenharmony_ci			values
1170e5c31af7Sopenharmony_ci			{
1171e5c31af7Sopenharmony_ci				input ivec2 in0 = [ ivec2(4, 1) | ivec2(7, -1) | ivec2(3, 1) ];
1172e5c31af7Sopenharmony_ci				output ivec2 out0 =	[ ivec2(1, -4) | ivec2(-1, -7) | ivec2(1, -3) ];
1173e5c31af7Sopenharmony_ci			}
1174e5c31af7Sopenharmony_ci
1175e5c31af7Sopenharmony_ci			both ""
1176e5c31af7Sopenharmony_ci				#version 450
1177e5c31af7Sopenharmony_ci				precision mediump int;
1178e5c31af7Sopenharmony_ci				precision mediump float;
1179e5c31af7Sopenharmony_ci				${DECLARATIONS}
1180e5c31af7Sopenharmony_ci
1181e5c31af7Sopenharmony_ci				int[2][2][2] func(ivec2 a)
1182e5c31af7Sopenharmony_ci				{
1183e5c31af7Sopenharmony_ci					return int[2][2][2] (	int[2][2] (	int[2] (a.y, -a.x),
1184e5c31af7Sopenharmony_ci														int[2] (0, 0)),
1185e5c31af7Sopenharmony_ci											int[2][2] (	int[2] (0, 0),
1186e5c31af7Sopenharmony_ci														int[2] (a.y, -a.x)) );
1187e5c31af7Sopenharmony_ci				}
1188e5c31af7Sopenharmony_ci
1189e5c31af7Sopenharmony_ci				void main()
1190e5c31af7Sopenharmony_ci				{
1191e5c31af7Sopenharmony_ci					${SETUP}
1192e5c31af7Sopenharmony_ci					int[2][2][2] x = func(in0);
1193e5c31af7Sopenharmony_ci					out0 = ivec2(x[0][0][0], x[1][1][1]);
1194e5c31af7Sopenharmony_ci					${OUTPUT}
1195e5c31af7Sopenharmony_ci				}
1196e5c31af7Sopenharmony_ci			""
1197e5c31af7Sopenharmony_ci		end
1198e5c31af7Sopenharmony_ci
1199e5c31af7Sopenharmony_ci		case bool_3x2x3
1200e5c31af7Sopenharmony_ci			version 450
1201e5c31af7Sopenharmony_ci			desc "Testing arrays of arrays as function return values with explicit array size"
1202e5c31af7Sopenharmony_ci			values
1203e5c31af7Sopenharmony_ci			{
1204e5c31af7Sopenharmony_ci				input bvec3 in0 =	[ bvec3(false, true, true) ];
1205e5c31af7Sopenharmony_ci				output bvec3 out0 = [ bvec3(true, false, true) ];
1206e5c31af7Sopenharmony_ci			}
1207e5c31af7Sopenharmony_ci
1208e5c31af7Sopenharmony_ci			both ""
1209e5c31af7Sopenharmony_ci				#version 450
1210e5c31af7Sopenharmony_ci				precision mediump float;
1211e5c31af7Sopenharmony_ci				${DECLARATIONS}
1212e5c31af7Sopenharmony_ci
1213e5c31af7Sopenharmony_ci				bool[3][2][3] func(bvec3 a)
1214e5c31af7Sopenharmony_ci				{
1215e5c31af7Sopenharmony_ci					return bool[3][2][3] (	bool[2][3] (bool[3] (a.z, a.x, a.y),
1216e5c31af7Sopenharmony_ci														bool[3] (a.x, a.y, a.z)),
1217e5c31af7Sopenharmony_ci											bool[2][3] (bool[3] (a.x, a.y, a.z),
1218e5c31af7Sopenharmony_ci														bool[3] (a.z, a.x, a.y)),
1219e5c31af7Sopenharmony_ci											bool[2][3] (bool[3] (a.y, a.z, a.x),
1220e5c31af7Sopenharmony_ci														bool[3] (a.y, a.z, a.x)) );
1221e5c31af7Sopenharmony_ci				}
1222e5c31af7Sopenharmony_ci
1223e5c31af7Sopenharmony_ci				void main()
1224e5c31af7Sopenharmony_ci				{
1225e5c31af7Sopenharmony_ci					${SETUP}
1226e5c31af7Sopenharmony_ci					bool[3] x[3][2] = func(in0);
1227e5c31af7Sopenharmony_ci					out0 = bvec3(x[0][0][0], x[1][1][1], x[2][1][0]);
1228e5c31af7Sopenharmony_ci					${OUTPUT}
1229e5c31af7Sopenharmony_ci				}
1230e5c31af7Sopenharmony_ci			""
1231e5c31af7Sopenharmony_ci		end
1232e5c31af7Sopenharmony_ci
1233e5c31af7Sopenharmony_ci
1234e5c31af7Sopenharmony_ci		case vec3_2x3
1235e5c31af7Sopenharmony_ci			version 450
1236e5c31af7Sopenharmony_ci			desc "Testing arrays of arrays as function return values with explicit array size"
1237e5c31af7Sopenharmony_ci			values
1238e5c31af7Sopenharmony_ci			{
1239e5c31af7Sopenharmony_ci				input vec3 in0 =	[ vec3(0.5, 1.0, 2.0) | vec3(-0.5, 11.2, -1.0) ];
1240e5c31af7Sopenharmony_ci				output vec3 out0 = [ vec3(1.0, 0.5, -2.0) | vec3(11.2, -0.5, 1.0) ];
1241e5c31af7Sopenharmony_ci			}
1242e5c31af7Sopenharmony_ci
1243e5c31af7Sopenharmony_ci			both ""
1244e5c31af7Sopenharmony_ci				#version 450
1245e5c31af7Sopenharmony_ci				precision mediump float;
1246e5c31af7Sopenharmony_ci				${DECLARATIONS}
1247e5c31af7Sopenharmony_ci
1248e5c31af7Sopenharmony_ci				vec3[2][3] func(vec3 p)
1249e5c31af7Sopenharmony_ci				{
1250e5c31af7Sopenharmony_ci					vec3[2][3] a = vec3[2][3](	vec3[3] (vec3(p.x, p.y, -p.z),
1251e5c31af7Sopenharmony_ci														vec3(p.y, -p.z, p.x),
1252e5c31af7Sopenharmony_ci														vec3(-p.z, p.x, p.y)),
1253e5c31af7Sopenharmony_ci												vec3[3] (vec3(p.y, -p.z, p.x),
1254e5c31af7Sopenharmony_ci														vec3(p.x, p.y, -p.z),
1255e5c31af7Sopenharmony_ci														vec3(-p.z, p.x, p.y)) );
1256e5c31af7Sopenharmony_ci
1257e5c31af7Sopenharmony_ci					return vec3[2][3] ( vec3[3] (a[0][1], a[0][2], a[0][0]),
1258e5c31af7Sopenharmony_ci										vec3[3] (a[1][1], a[1][2], a[1][0]));
1259e5c31af7Sopenharmony_ci				}
1260e5c31af7Sopenharmony_ci
1261e5c31af7Sopenharmony_ci				void main()
1262e5c31af7Sopenharmony_ci				{
1263e5c31af7Sopenharmony_ci					${SETUP}
1264e5c31af7Sopenharmony_ci
1265e5c31af7Sopenharmony_ci					vec3[2][3] x = func(in0);
1266e5c31af7Sopenharmony_ci					out0 = vec3(x[0][0].x, x[1][1].y, x[0][2].z);
1267e5c31af7Sopenharmony_ci					${OUTPUT}
1268e5c31af7Sopenharmony_ci				}
1269e5c31af7Sopenharmony_ci			""
1270e5c31af7Sopenharmony_ci		end
1271e5c31af7Sopenharmony_ci
1272e5c31af7Sopenharmony_ci		case struct_3x1x3
1273e5c31af7Sopenharmony_ci			version 450
1274e5c31af7Sopenharmony_ci			desc "Testing arrays of arrays as function return values with explicit array size"
1275e5c31af7Sopenharmony_ci			values
1276e5c31af7Sopenharmony_ci			{
1277e5c31af7Sopenharmony_ci				input vec3 in0 = [ vec3(0.5, 1.0, 2.0) ];
1278e5c31af7Sopenharmony_ci				output vec3 out0 = [ vec3(-1.0, 2.0, 0.5) ];
1279e5c31af7Sopenharmony_ci			}
1280e5c31af7Sopenharmony_ci
1281e5c31af7Sopenharmony_ci			both ""
1282e5c31af7Sopenharmony_ci				#version 450
1283e5c31af7Sopenharmony_ci				precision mediump float;
1284e5c31af7Sopenharmony_ci				${DECLARATIONS}
1285e5c31af7Sopenharmony_ci
1286e5c31af7Sopenharmony_ci				struct Test
1287e5c31af7Sopenharmony_ci				{
1288e5c31af7Sopenharmony_ci					float f;
1289e5c31af7Sopenharmony_ci					vec3 v;
1290e5c31af7Sopenharmony_ci				};
1291e5c31af7Sopenharmony_ci
1292e5c31af7Sopenharmony_ci				Test[3][1][3] func(vec3 p)
1293e5c31af7Sopenharmony_ci				{
1294e5c31af7Sopenharmony_ci					Test a = Test(p.z, vec3(p.x, p.y, p.z));
1295e5c31af7Sopenharmony_ci					Test b = Test(p.y, vec3(-p.z, -p.x, -p.y));
1296e5c31af7Sopenharmony_ci					Test c = Test(p.x, vec3(-p.y, p.z, -p.x));
1297e5c31af7Sopenharmony_ci
1298e5c31af7Sopenharmony_ci					return Test[3][1][3] (	Test[1][3] (Test[3] (b, b, b)),
1299e5c31af7Sopenharmony_ci											Test[1][3] (Test[3] (a, a, a)),
1300e5c31af7Sopenharmony_ci											Test[1][3] (Test[3] (c, c, c)) );
1301e5c31af7Sopenharmony_ci				}
1302e5c31af7Sopenharmony_ci
1303e5c31af7Sopenharmony_ci				void main()
1304e5c31af7Sopenharmony_ci				{
1305e5c31af7Sopenharmony_ci					${SETUP}
1306e5c31af7Sopenharmony_ci					Test[3][1][3] x = func(in0);
1307e5c31af7Sopenharmony_ci					out0 = vec3(x[0][0][0].v.z, x[2][0][2].v.y, x[1][0][1].v.x);
1308e5c31af7Sopenharmony_ci					${OUTPUT}
1309e5c31af7Sopenharmony_ci				}
1310e5c31af7Sopenharmony_ci			""
1311e5c31af7Sopenharmony_ci		end
1312e5c31af7Sopenharmony_ci
1313e5c31af7Sopenharmony_ci		case ivec3_3x3
1314e5c31af7Sopenharmony_ci			version 450
1315e5c31af7Sopenharmony_ci			desc "Testing arrays of arrays as function return values with explicit array size"
1316e5c31af7Sopenharmony_ci			values
1317e5c31af7Sopenharmony_ci			{
1318e5c31af7Sopenharmony_ci				input ivec3 in0 = [ ivec3(5, 1, 2) | ivec3(-5, 11, -1) ];
1319e5c31af7Sopenharmony_ci				output ivec3 out0 = [ ivec3(1, 5, -2) | ivec3(11, -5, 1) ];
1320e5c31af7Sopenharmony_ci			}
1321e5c31af7Sopenharmony_ci
1322e5c31af7Sopenharmony_ci			both ""
1323e5c31af7Sopenharmony_ci				#version 450
1324e5c31af7Sopenharmony_ci				precision mediump int;
1325e5c31af7Sopenharmony_ci				precision mediump float;
1326e5c31af7Sopenharmony_ci				${DECLARATIONS}
1327e5c31af7Sopenharmony_ci
1328e5c31af7Sopenharmony_ci				ivec3[3][3] func(ivec3 p)
1329e5c31af7Sopenharmony_ci				{
1330e5c31af7Sopenharmony_ci					ivec3[3][3] a = ivec3[3][3] (	ivec3[3] (	ivec3(p.x, p.y, -p.z),
1331e5c31af7Sopenharmony_ci																ivec3(p.x, p.y, -p.z),
1332e5c31af7Sopenharmony_ci																ivec3(p.x, p.y, -p.z)),
1333e5c31af7Sopenharmony_ci
1334e5c31af7Sopenharmony_ci													ivec3[3] (	ivec3(p.y, -p.z, p.x),
1335e5c31af7Sopenharmony_ci																ivec3(p.y, -p.z, p.x),
1336e5c31af7Sopenharmony_ci																ivec3(p.y, -p.z, p.x)),
1337e5c31af7Sopenharmony_ci
1338e5c31af7Sopenharmony_ci													ivec3[3] (	ivec3(-p.z, p.x, p.y),
1339e5c31af7Sopenharmony_ci																ivec3(-p.z, p.x, p.y),
1340e5c31af7Sopenharmony_ci																ivec3(-p.z, p.x, p.y)) );
1341e5c31af7Sopenharmony_ci					return a;
1342e5c31af7Sopenharmony_ci				}
1343e5c31af7Sopenharmony_ci
1344e5c31af7Sopenharmony_ci				void main()
1345e5c31af7Sopenharmony_ci				{
1346e5c31af7Sopenharmony_ci					${SETUP}
1347e5c31af7Sopenharmony_ci					ivec3[3][3] x = func(in0);
1348e5c31af7Sopenharmony_ci					out0 = ivec3(x[1][0].x, x[2][0].y, x[0][2].z);
1349e5c31af7Sopenharmony_ci					${OUTPUT}
1350e5c31af7Sopenharmony_ci				}
1351e5c31af7Sopenharmony_ci			""
1352e5c31af7Sopenharmony_ci		end
1353e5c31af7Sopenharmony_ci
1354e5c31af7Sopenharmony_ci		case bvec4_4x2
1355e5c31af7Sopenharmony_ci			version 450
1356e5c31af7Sopenharmony_ci			desc "Testing arrays of arrays as function return values with explicit array size"
1357e5c31af7Sopenharmony_ci			values
1358e5c31af7Sopenharmony_ci			{
1359e5c31af7Sopenharmony_ci				input bvec4 in0 =	[ bvec4(true, false, false, true) ];
1360e5c31af7Sopenharmony_ci				output bvec4 out0 = [ bvec4(true, true, false, true) ];
1361e5c31af7Sopenharmony_ci			}
1362e5c31af7Sopenharmony_ci
1363e5c31af7Sopenharmony_ci			both ""
1364e5c31af7Sopenharmony_ci				#version 450
1365e5c31af7Sopenharmony_ci				precision mediump int;
1366e5c31af7Sopenharmony_ci				precision mediump float;
1367e5c31af7Sopenharmony_ci				${DECLARATIONS}
1368e5c31af7Sopenharmony_ci
1369e5c31af7Sopenharmony_ci				bvec4[4][2] func(bvec4 p)
1370e5c31af7Sopenharmony_ci				{
1371e5c31af7Sopenharmony_ci					bvec4[4] x = bvec4[4](	bvec4(p.x, p.y, p.z, p.w),
1372e5c31af7Sopenharmony_ci											bvec4(p.w, p.y, p.z, p.x),
1373e5c31af7Sopenharmony_ci											bvec4(p.z, p.w, p.x, p.y),
1374e5c31af7Sopenharmony_ci											bvec4(p.y, p.x, p.z, p.w) );
1375e5c31af7Sopenharmony_ci
1376e5c31af7Sopenharmony_ci					return bvec4[4][2] ( bvec4[2] (bvec4(x[0]),
1377e5c31af7Sopenharmony_ci												  bvec4(x[1])),
1378e5c31af7Sopenharmony_ci
1379e5c31af7Sopenharmony_ci										 bvec4[2] (bvec4(x[2]),
1380e5c31af7Sopenharmony_ci												  bvec4(x[3])),
1381e5c31af7Sopenharmony_ci
1382e5c31af7Sopenharmony_ci										 bvec4[2] (bvec4(x[1]),
1383e5c31af7Sopenharmony_ci												  bvec4(x[2])),
1384e5c31af7Sopenharmony_ci
1385e5c31af7Sopenharmony_ci										 bvec4[2] (bvec4(x[3]),
1386e5c31af7Sopenharmony_ci												  bvec4(x[0])) );
1387e5c31af7Sopenharmony_ci				}
1388e5c31af7Sopenharmony_ci
1389e5c31af7Sopenharmony_ci				void main()
1390e5c31af7Sopenharmony_ci				{
1391e5c31af7Sopenharmony_ci					${SETUP}
1392e5c31af7Sopenharmony_ci					bvec4[4][2] x = func(in0);
1393e5c31af7Sopenharmony_ci					out0 = bvec4(x[0][1].x, x[1][0].y, x[2][0].z, x[3][1].w);
1394e5c31af7Sopenharmony_ci					${OUTPUT}
1395e5c31af7Sopenharmony_ci				}
1396e5c31af7Sopenharmony_ci			""
1397e5c31af7Sopenharmony_ci		end
1398e5c31af7Sopenharmony_ci
1399e5c31af7Sopenharmony_ci		case mat3_3x2
1400e5c31af7Sopenharmony_ci			version 450
1401e5c31af7Sopenharmony_ci			desc "Testing arrays of arrays as function return values with explicit array size"
1402e5c31af7Sopenharmony_ci			values
1403e5c31af7Sopenharmony_ci			{
1404e5c31af7Sopenharmony_ci				input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(-1.5, 0.0, -2.3) ];
1405e5c31af7Sopenharmony_ci				output vec3 out0 = [ vec3(0.5, -1.0, 1.0) | vec3(-1.5, 0.0, 0.0) ];
1406e5c31af7Sopenharmony_ci			}
1407e5c31af7Sopenharmony_ci
1408e5c31af7Sopenharmony_ci			both ""
1409e5c31af7Sopenharmony_ci				#version 450
1410e5c31af7Sopenharmony_ci				precision mediump float;
1411e5c31af7Sopenharmony_ci				${DECLARATIONS}
1412e5c31af7Sopenharmony_ci
1413e5c31af7Sopenharmony_ci				mat3[3][2] func(vec3 p)
1414e5c31af7Sopenharmony_ci				{
1415e5c31af7Sopenharmony_ci					mat3[3][2] a = mat3[3][2] (	mat3[2] (mat3(	p.x, p.y, p.z,
1416e5c31af7Sopenharmony_ci																p.x, p.y, p.z,
1417e5c31af7Sopenharmony_ci																p.x, p.y, p.z),
1418e5c31af7Sopenharmony_ci														mat3(	p.z, p.x, -p.y,
1419e5c31af7Sopenharmony_ci																p.z, p.x, -p.y,
1420e5c31af7Sopenharmony_ci																p.z, p.x, -p.y)),
1421e5c31af7Sopenharmony_ci
1422e5c31af7Sopenharmony_ci												mat3[2] (mat3(	-p.z, -p.z, p.z,
1423e5c31af7Sopenharmony_ci																-p.y, -p.y, p.y,
1424e5c31af7Sopenharmony_ci																-p.x, -p.x, p.x),
1425e5c31af7Sopenharmony_ci														mat3(	p.x, p.y, p.z,
1426e5c31af7Sopenharmony_ci																p.x, p.y, p.z,
1427e5c31af7Sopenharmony_ci																p.x, p.y, p.z)),
1428e5c31af7Sopenharmony_ci
1429e5c31af7Sopenharmony_ci												mat3[2] (mat3(	p.z, p.x, -p.y,
1430e5c31af7Sopenharmony_ci																p.z, p.x, -p.y,
1431e5c31af7Sopenharmony_ci																p.z, p.x, -p.y),
1432e5c31af7Sopenharmony_ci														mat3(	-p.z, -p.z, p.z,
1433e5c31af7Sopenharmony_ci																-p.y, -p.y, p.y,
1434e5c31af7Sopenharmony_ci																-p.x, -p.x, p.x)) );
1435e5c31af7Sopenharmony_ci
1436e5c31af7Sopenharmony_ci					return a;
1437e5c31af7Sopenharmony_ci				}
1438e5c31af7Sopenharmony_ci
1439e5c31af7Sopenharmony_ci				void main()
1440e5c31af7Sopenharmony_ci				{
1441e5c31af7Sopenharmony_ci					${SETUP}
1442e5c31af7Sopenharmony_ci
1443e5c31af7Sopenharmony_ci					mat3 a[3][2] = func(in0);
1444e5c31af7Sopenharmony_ci
1445e5c31af7Sopenharmony_ci					mat3 a0 = a[0][0];
1446e5c31af7Sopenharmony_ci					mat3 a1 = a[0][1];
1447e5c31af7Sopenharmony_ci					mat3 a2 = a[2][1];
1448e5c31af7Sopenharmony_ci
1449e5c31af7Sopenharmony_ci					float ret0 = a0[2][0];
1450e5c31af7Sopenharmony_ci					float ret1 = a1[0][2];
1451e5c31af7Sopenharmony_ci					float ret2 = a2[1][2];
1452e5c31af7Sopenharmony_ci
1453e5c31af7Sopenharmony_ci					out0 = vec3(ret0, ret1, ret2);
1454e5c31af7Sopenharmony_ci					${OUTPUT}
1455e5c31af7Sopenharmony_ci				}
1456e5c31af7Sopenharmony_ci			""
1457e5c31af7Sopenharmony_ci		end
1458e5c31af7Sopenharmony_ci
1459e5c31af7Sopenharmony_ci		case mat3_3x3x3
1460e5c31af7Sopenharmony_ci			version 450
1461e5c31af7Sopenharmony_ci			desc "Testing arrays of arrays as function return values with explicit array size"
1462e5c31af7Sopenharmony_ci			values
1463e5c31af7Sopenharmony_ci			{
1464e5c31af7Sopenharmony_ci				input ivec3 in0 = [ ivec3(0, 1, 2) | ivec3(-1, 0, -2) ];
1465e5c31af7Sopenharmony_ci				output ivec3 out0 = [ ivec3(0, -1, 1) | ivec3(-1, 0, 0) ];
1466e5c31af7Sopenharmony_ci			}
1467e5c31af7Sopenharmony_ci
1468e5c31af7Sopenharmony_ci			both ""
1469e5c31af7Sopenharmony_ci				#version 450
1470e5c31af7Sopenharmony_ci				precision mediump int;
1471e5c31af7Sopenharmony_ci				precision mediump float;
1472e5c31af7Sopenharmony_ci				${DECLARATIONS}
1473e5c31af7Sopenharmony_ci
1474e5c31af7Sopenharmony_ci				mat3[3][3][3] func(ivec3 p)
1475e5c31af7Sopenharmony_ci				{
1476e5c31af7Sopenharmony_ci					mat3 a = mat3(	p.x, p.y, p.z,
1477e5c31af7Sopenharmony_ci									p.x, p.y, p.z,
1478e5c31af7Sopenharmony_ci									p.x, p.y, p.z);
1479e5c31af7Sopenharmony_ci					mat3 b = mat3(	p.z, p.x, -p.y,
1480e5c31af7Sopenharmony_ci									p.z, p.x, -p.y,
1481e5c31af7Sopenharmony_ci									p.z, p.x, -p.y);
1482e5c31af7Sopenharmony_ci					mat3 c = mat3(	-p.z, -p.z, p.z,
1483e5c31af7Sopenharmony_ci									-p.y, -p.y, p.y,
1484e5c31af7Sopenharmony_ci									-p.x, -p.x, p.x);
1485e5c31af7Sopenharmony_ci
1486e5c31af7Sopenharmony_ci					return mat3[3][3][3] (	mat3[3][3] (mat3[3] (a, a, a),
1487e5c31af7Sopenharmony_ci														mat3[3] (b, b, b),
1488e5c31af7Sopenharmony_ci														mat3[3] (c, c, c)),
1489e5c31af7Sopenharmony_ci
1490e5c31af7Sopenharmony_ci											mat3[3][3] (mat3[3] (b, b, b),
1491e5c31af7Sopenharmony_ci														mat3[3] (a, a, a),
1492e5c31af7Sopenharmony_ci														mat3[3] (c, c, c)),
1493e5c31af7Sopenharmony_ci
1494e5c31af7Sopenharmony_ci											mat3[3][3] (mat3[3] (c, c, c),
1495e5c31af7Sopenharmony_ci														mat3[3] (a, a, a),
1496e5c31af7Sopenharmony_ci														mat3[3] (b, b, b)) );
1497e5c31af7Sopenharmony_ci				}
1498e5c31af7Sopenharmony_ci
1499e5c31af7Sopenharmony_ci				void main()
1500e5c31af7Sopenharmony_ci				{
1501e5c31af7Sopenharmony_ci					${SETUP}
1502e5c31af7Sopenharmony_ci
1503e5c31af7Sopenharmony_ci					mat3 x[3][3][3] = func(in0);
1504e5c31af7Sopenharmony_ci
1505e5c31af7Sopenharmony_ci					mat3 x0 = x[0][0][0];
1506e5c31af7Sopenharmony_ci					mat3 x1 = x[1][0][0];
1507e5c31af7Sopenharmony_ci					mat3 x2 = x[2][0][0];
1508e5c31af7Sopenharmony_ci
1509e5c31af7Sopenharmony_ci					float ret0 = x0[2][0];
1510e5c31af7Sopenharmony_ci					float ret1 = x1[0][2];
1511e5c31af7Sopenharmony_ci					float ret2 = x2[1][2];
1512e5c31af7Sopenharmony_ci
1513e5c31af7Sopenharmony_ci					out0 = ivec3(ret0, ret1, ret2);
1514e5c31af7Sopenharmony_ci					${OUTPUT}
1515e5c31af7Sopenharmony_ci				}
1516e5c31af7Sopenharmony_ci			""
1517e5c31af7Sopenharmony_ci		end
1518e5c31af7Sopenharmony_ci
1519e5c31af7Sopenharmony_ci		case mat3_3x4
1520e5c31af7Sopenharmony_ci			version 450
1521e5c31af7Sopenharmony_ci			desc "Testing arrays of arrays as function return values with explicit array size"
1522e5c31af7Sopenharmony_ci			values
1523e5c31af7Sopenharmony_ci			{
1524e5c31af7Sopenharmony_ci				input bvec3 in0 = [ bvec3(true, false, true) ];
1525e5c31af7Sopenharmony_ci				output bvec3 out0 = [ bvec3(true, false, false) ];
1526e5c31af7Sopenharmony_ci			}
1527e5c31af7Sopenharmony_ci
1528e5c31af7Sopenharmony_ci			both ""
1529e5c31af7Sopenharmony_ci				#version 450
1530e5c31af7Sopenharmony_ci				precision mediump float;
1531e5c31af7Sopenharmony_ci				${DECLARATIONS}
1532e5c31af7Sopenharmony_ci
1533e5c31af7Sopenharmony_ci				mat3[3][4] func(bvec3 p)
1534e5c31af7Sopenharmony_ci				{
1535e5c31af7Sopenharmony_ci					mat3 a = mat3(	p.x, p.y, p.z,
1536e5c31af7Sopenharmony_ci									p.x, p.y, p.z,
1537e5c31af7Sopenharmony_ci									p.x, p.y, p.z);
1538e5c31af7Sopenharmony_ci
1539e5c31af7Sopenharmony_ci					mat3 b = mat3(	p.z, p.x, p.y,
1540e5c31af7Sopenharmony_ci									p.z, p.x, p.y,
1541e5c31af7Sopenharmony_ci									p.z, p.x, p.y);
1542e5c31af7Sopenharmony_ci
1543e5c31af7Sopenharmony_ci					mat3 c = mat3(	p.z, p.z, p.z,
1544e5c31af7Sopenharmony_ci									p.y, p.y, p.y,
1545e5c31af7Sopenharmony_ci									p.x, p.x, p.x);
1546e5c31af7Sopenharmony_ci
1547e5c31af7Sopenharmony_ci					return mat3[3][4] (	mat3[4] (a, b, c, a),
1548e5c31af7Sopenharmony_ci										mat3[4] (b, c, a, b),
1549e5c31af7Sopenharmony_ci										mat3[4] (c, a, b, c) );
1550e5c31af7Sopenharmony_ci				}
1551e5c31af7Sopenharmony_ci
1552e5c31af7Sopenharmony_ci				void main()
1553e5c31af7Sopenharmony_ci				{
1554e5c31af7Sopenharmony_ci					${SETUP}
1555e5c31af7Sopenharmony_ci
1556e5c31af7Sopenharmony_ci					mat3[4] x[3] = func(in0);
1557e5c31af7Sopenharmony_ci
1558e5c31af7Sopenharmony_ci					mat3 x0 = x[0][0];
1559e5c31af7Sopenharmony_ci					mat3 x1 = x[1][3];
1560e5c31af7Sopenharmony_ci					mat3 x2 = x[2][0];
1561e5c31af7Sopenharmony_ci
1562e5c31af7Sopenharmony_ci					float ret0 = x0[2][0];
1563e5c31af7Sopenharmony_ci					float ret1 = x1[0][2];
1564e5c31af7Sopenharmony_ci					float ret2 = x2[1][2];
1565e5c31af7Sopenharmony_ci
1566e5c31af7Sopenharmony_ci					out0 = bvec3(ret0, ret1, ret2);
1567e5c31af7Sopenharmony_ci					${OUTPUT}
1568e5c31af7Sopenharmony_ci				}
1569e5c31af7Sopenharmony_ci			""
1570e5c31af7Sopenharmony_ci		end
1571e5c31af7Sopenharmony_ci
1572e5c31af7Sopenharmony_ci	end # explicit
1573e5c31af7Sopenharmony_ci
1574e5c31af7Sopenharmony_ci	group implicit "Test return value with implicit constructor"
1575e5c31af7Sopenharmony_ci
1576e5c31af7Sopenharmony_ci		case float_3x3
1577e5c31af7Sopenharmony_ci			version 450
1578e5c31af7Sopenharmony_ci			desc "Testing arrays of arrays as function return values with implicit array size"
1579e5c31af7Sopenharmony_ci			values
1580e5c31af7Sopenharmony_ci			{
1581e5c31af7Sopenharmony_ci				input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(7.4, -1.0, 2.0) | vec3(3.0, 1.6, -2.0) ];
1582e5c31af7Sopenharmony_ci				output vec3 out0 = [ vec3(2.0, -0.5, 1.0) | vec3(2.0, -7.4, -1.0) | vec3(-2.0, -3.0, 1.6) ];
1583e5c31af7Sopenharmony_ci			}
1584e5c31af7Sopenharmony_ci
1585e5c31af7Sopenharmony_ci			both ""
1586e5c31af7Sopenharmony_ci				#version 450
1587e5c31af7Sopenharmony_ci				precision mediump float;
1588e5c31af7Sopenharmony_ci				${DECLARATIONS}
1589e5c31af7Sopenharmony_ci
1590e5c31af7Sopenharmony_ci				float[3][3] func(vec3 a)
1591e5c31af7Sopenharmony_ci				{
1592e5c31af7Sopenharmony_ci					return float[][] (	float[] (a.z, 0.0, 0.0),
1593e5c31af7Sopenharmony_ci										float[] (0.0, -a.x, 0.0),
1594e5c31af7Sopenharmony_ci										float[] (0.0, 0.0, a.y) );
1595e5c31af7Sopenharmony_ci				}
1596e5c31af7Sopenharmony_ci
1597e5c31af7Sopenharmony_ci				void main()
1598e5c31af7Sopenharmony_ci				{
1599e5c31af7Sopenharmony_ci					${SETUP}
1600e5c31af7Sopenharmony_ci					float[3][3] x = func(in0);
1601e5c31af7Sopenharmony_ci					out0 = vec3(x[0][0], x[1][1], x[2][2]);
1602e5c31af7Sopenharmony_ci					${OUTPUT}
1603e5c31af7Sopenharmony_ci				}
1604e5c31af7Sopenharmony_ci			""
1605e5c31af7Sopenharmony_ci		end
1606e5c31af7Sopenharmony_ci
1607e5c31af7Sopenharmony_ci		case int_2x2x2
1608e5c31af7Sopenharmony_ci			version 450
1609e5c31af7Sopenharmony_ci			desc "Testing arrays of arrays as function return values with implicit array size"
1610e5c31af7Sopenharmony_ci			values
1611e5c31af7Sopenharmony_ci			{
1612e5c31af7Sopenharmony_ci				input ivec2 in0 = [ ivec2(4, 1) | ivec2(7, -1) | ivec2(3, 1) ];
1613e5c31af7Sopenharmony_ci				output ivec2 out0 =	[ ivec2(1, -4) | ivec2(-1, -7) | ivec2(1, -3) ];
1614e5c31af7Sopenharmony_ci			}
1615e5c31af7Sopenharmony_ci
1616e5c31af7Sopenharmony_ci			both ""
1617e5c31af7Sopenharmony_ci				#version 450
1618e5c31af7Sopenharmony_ci				precision mediump int;
1619e5c31af7Sopenharmony_ci				precision mediump float;
1620e5c31af7Sopenharmony_ci				${DECLARATIONS}
1621e5c31af7Sopenharmony_ci
1622e5c31af7Sopenharmony_ci				int[2][2][2] func(ivec2 a)
1623e5c31af7Sopenharmony_ci				{
1624e5c31af7Sopenharmony_ci					return int[][][] (	int[][] (	int[] (a.y, -a.x),
1625e5c31af7Sopenharmony_ci													int[] (0, 0)),
1626e5c31af7Sopenharmony_ci										int[][] (	int[] (0, 0),
1627e5c31af7Sopenharmony_ci													int[] (a.y, -a.x)) );
1628e5c31af7Sopenharmony_ci				}
1629e5c31af7Sopenharmony_ci
1630e5c31af7Sopenharmony_ci				void main()
1631e5c31af7Sopenharmony_ci				{
1632e5c31af7Sopenharmony_ci					${SETUP}
1633e5c31af7Sopenharmony_ci					int[2][2][2] x = func(in0);
1634e5c31af7Sopenharmony_ci					out0 = ivec2(x[0][0][0], x[1][1][1]);
1635e5c31af7Sopenharmony_ci					${OUTPUT}
1636e5c31af7Sopenharmony_ci				}
1637e5c31af7Sopenharmony_ci			""
1638e5c31af7Sopenharmony_ci		end
1639e5c31af7Sopenharmony_ci
1640e5c31af7Sopenharmony_ci		case bool_3x2x3
1641e5c31af7Sopenharmony_ci			version 450
1642e5c31af7Sopenharmony_ci			desc "Testing arrays of arrays as function return values with implicit array size"
1643e5c31af7Sopenharmony_ci			values
1644e5c31af7Sopenharmony_ci			{
1645e5c31af7Sopenharmony_ci				input bvec3 in0 =	[ bvec3(false, true, true) ];
1646e5c31af7Sopenharmony_ci				output bvec3 out0 = [ bvec3(true, false, true) ];
1647e5c31af7Sopenharmony_ci			}
1648e5c31af7Sopenharmony_ci
1649e5c31af7Sopenharmony_ci			both ""
1650e5c31af7Sopenharmony_ci				#version 450
1651e5c31af7Sopenharmony_ci				precision mediump float;
1652e5c31af7Sopenharmony_ci				${DECLARATIONS}
1653e5c31af7Sopenharmony_ci
1654e5c31af7Sopenharmony_ci				bool[3][2][3] func(bvec3 a)
1655e5c31af7Sopenharmony_ci				{
1656e5c31af7Sopenharmony_ci					return bool[][][] (	bool[][] (	bool[] (a.z, a.x, a.y),
1657e5c31af7Sopenharmony_ci													bool[] (a.x, a.y, a.z)),
1658e5c31af7Sopenharmony_ci										bool[][] (	bool[] (a.x, a.y, a.z),
1659e5c31af7Sopenharmony_ci													bool[] (a.z, a.x, a.y)),
1660e5c31af7Sopenharmony_ci										bool[][] (	bool[] (a.y, a.z, a.x),
1661e5c31af7Sopenharmony_ci													bool[] (a.y, a.z, a.x)) );
1662e5c31af7Sopenharmony_ci				}
1663e5c31af7Sopenharmony_ci
1664e5c31af7Sopenharmony_ci				void main()
1665e5c31af7Sopenharmony_ci				{
1666e5c31af7Sopenharmony_ci					${SETUP}
1667e5c31af7Sopenharmony_ci					bool[3] x[3][2] = func(in0);
1668e5c31af7Sopenharmony_ci					out0 = bvec3(x[0][0][0], x[1][1][1], x[2][1][0]);
1669e5c31af7Sopenharmony_ci					${OUTPUT}
1670e5c31af7Sopenharmony_ci				}
1671e5c31af7Sopenharmony_ci			""
1672e5c31af7Sopenharmony_ci		end
1673e5c31af7Sopenharmony_ci
1674e5c31af7Sopenharmony_ci		case vec3_2x3
1675e5c31af7Sopenharmony_ci			version 450
1676e5c31af7Sopenharmony_ci			desc "Testing arrays of arrays as function return values with implicit array size"
1677e5c31af7Sopenharmony_ci			values
1678e5c31af7Sopenharmony_ci			{
1679e5c31af7Sopenharmony_ci				input vec3 in0 =	[ vec3(0.5, 1.0, 2.0) | vec3(-0.5, 11.2, -1.0) ];
1680e5c31af7Sopenharmony_ci				output vec3 out0 = [ vec3(1.0, 0.5, -2.0) | vec3(11.2, -0.5, 1.0) ];
1681e5c31af7Sopenharmony_ci			}
1682e5c31af7Sopenharmony_ci
1683e5c31af7Sopenharmony_ci			both ""
1684e5c31af7Sopenharmony_ci				#version 450
1685e5c31af7Sopenharmony_ci				precision mediump float;
1686e5c31af7Sopenharmony_ci				${DECLARATIONS}
1687e5c31af7Sopenharmony_ci
1688e5c31af7Sopenharmony_ci				vec3[2][3] func(vec3 p)
1689e5c31af7Sopenharmony_ci				{
1690e5c31af7Sopenharmony_ci					vec3[2][3] a = vec3[2][3](	vec3[3] (	vec3(p.x, p.y, -p.z),
1691e5c31af7Sopenharmony_ci															vec3(p.y, -p.z, p.x),
1692e5c31af7Sopenharmony_ci															vec3(-p.z, p.x, p.y)),
1693e5c31af7Sopenharmony_ci												vec3[3] (	vec3(p.y, -p.z, p.x),
1694e5c31af7Sopenharmony_ci															vec3(p.x, p.y, -p.z),
1695e5c31af7Sopenharmony_ci															vec3(-p.z, p.x, p.y)) );
1696e5c31af7Sopenharmony_ci
1697e5c31af7Sopenharmony_ci					return vec3[][] (	vec3[] (a[0][1], a[0][2], a[0][0]),
1698e5c31af7Sopenharmony_ci										vec3[] (a[1][1], a[1][2], a[1][0]));
1699e5c31af7Sopenharmony_ci				}
1700e5c31af7Sopenharmony_ci
1701e5c31af7Sopenharmony_ci				void main()
1702e5c31af7Sopenharmony_ci				{
1703e5c31af7Sopenharmony_ci					${SETUP}
1704e5c31af7Sopenharmony_ci
1705e5c31af7Sopenharmony_ci					vec3[2][3] x = func(in0);
1706e5c31af7Sopenharmony_ci					out0 = vec3(x[0][0].x, x[1][1].y, x[0][2].z);
1707e5c31af7Sopenharmony_ci					${OUTPUT}
1708e5c31af7Sopenharmony_ci				}
1709e5c31af7Sopenharmony_ci			""
1710e5c31af7Sopenharmony_ci		end
1711e5c31af7Sopenharmony_ci
1712e5c31af7Sopenharmony_ci		case struct_3x1x3
1713e5c31af7Sopenharmony_ci			version 450
1714e5c31af7Sopenharmony_ci			desc "Testing arrays of arrays as function return values with implicit array size"
1715e5c31af7Sopenharmony_ci			values
1716e5c31af7Sopenharmony_ci			{
1717e5c31af7Sopenharmony_ci				input vec3 in0 = [ vec3(0.5, 1.0, 2.0) ];
1718e5c31af7Sopenharmony_ci				output vec3 out0 = [ vec3(-1.0, 2.0, 0.5) ];
1719e5c31af7Sopenharmony_ci			}
1720e5c31af7Sopenharmony_ci
1721e5c31af7Sopenharmony_ci			both ""
1722e5c31af7Sopenharmony_ci				#version 450
1723e5c31af7Sopenharmony_ci				precision mediump float;
1724e5c31af7Sopenharmony_ci				${DECLARATIONS}
1725e5c31af7Sopenharmony_ci
1726e5c31af7Sopenharmony_ci				struct Test
1727e5c31af7Sopenharmony_ci				{
1728e5c31af7Sopenharmony_ci					float f;
1729e5c31af7Sopenharmony_ci					vec3 v;
1730e5c31af7Sopenharmony_ci				};
1731e5c31af7Sopenharmony_ci
1732e5c31af7Sopenharmony_ci				Test[3][1][3] func(vec3 p)
1733e5c31af7Sopenharmony_ci				{
1734e5c31af7Sopenharmony_ci					Test a = Test(p.z, vec3(p.x, p.y, p.z));
1735e5c31af7Sopenharmony_ci					Test b = Test(p.y, vec3(-p.z, -p.x, -p.y));
1736e5c31af7Sopenharmony_ci					Test c = Test(p.x, vec3(-p.y, p.z, -p.x));
1737e5c31af7Sopenharmony_ci
1738e5c31af7Sopenharmony_ci					return Test[][][] (	Test[][] (Test[] (b, b, b)),
1739e5c31af7Sopenharmony_ci										Test[][] (Test[] (a, a, a)),
1740e5c31af7Sopenharmony_ci										Test[][] (Test[] (c, c, c)) );
1741e5c31af7Sopenharmony_ci				}
1742e5c31af7Sopenharmony_ci
1743e5c31af7Sopenharmony_ci				void main()
1744e5c31af7Sopenharmony_ci				{
1745e5c31af7Sopenharmony_ci					${SETUP}
1746e5c31af7Sopenharmony_ci					Test[3][1][3] x = func(in0);
1747e5c31af7Sopenharmony_ci					out0 = vec3(x[0][0][0].v.z, x[2][0][2].v.y, x[1][0][1].v.x);
1748e5c31af7Sopenharmony_ci					${OUTPUT}
1749e5c31af7Sopenharmony_ci				}
1750e5c31af7Sopenharmony_ci			""
1751e5c31af7Sopenharmony_ci		end
1752e5c31af7Sopenharmony_ci
1753e5c31af7Sopenharmony_ci		case ivec3_3x3
1754e5c31af7Sopenharmony_ci			version 450
1755e5c31af7Sopenharmony_ci			desc "Testing arrays of arrays as function return values with implicit array size"
1756e5c31af7Sopenharmony_ci			values
1757e5c31af7Sopenharmony_ci			{
1758e5c31af7Sopenharmony_ci				input ivec3 in0 = [ ivec3(5, 1, 2) | ivec3(-5, 11, -1) ];
1759e5c31af7Sopenharmony_ci				output ivec3 out0 = [ ivec3(1, 5, -2) | ivec3(11, -5, 1) ];
1760e5c31af7Sopenharmony_ci			}
1761e5c31af7Sopenharmony_ci
1762e5c31af7Sopenharmony_ci			both ""
1763e5c31af7Sopenharmony_ci				#version 450
1764e5c31af7Sopenharmony_ci				precision mediump int;
1765e5c31af7Sopenharmony_ci				precision mediump float;
1766e5c31af7Sopenharmony_ci				${DECLARATIONS}
1767e5c31af7Sopenharmony_ci
1768e5c31af7Sopenharmony_ci				ivec3[3][3] func(ivec3 p)
1769e5c31af7Sopenharmony_ci				{
1770e5c31af7Sopenharmony_ci					return ivec3[][] (	ivec3[] (	ivec3(p.x, p.y, -p.z),
1771e5c31af7Sopenharmony_ci													ivec3(p.x, p.y, -p.z),
1772e5c31af7Sopenharmony_ci													ivec3(p.x, p.y, -p.z)),
1773e5c31af7Sopenharmony_ci
1774e5c31af7Sopenharmony_ci										ivec3[] (	ivec3(p.y, -p.z, p.x),
1775e5c31af7Sopenharmony_ci													ivec3(p.y, -p.z, p.x),
1776e5c31af7Sopenharmony_ci													ivec3(p.y, -p.z, p.x)),
1777e5c31af7Sopenharmony_ci
1778e5c31af7Sopenharmony_ci										ivec3[] (	ivec3(-p.z, p.x, p.y),
1779e5c31af7Sopenharmony_ci													ivec3(-p.z, p.x, p.y),
1780e5c31af7Sopenharmony_ci													ivec3(-p.z, p.x, p.y)) );
1781e5c31af7Sopenharmony_ci				}
1782e5c31af7Sopenharmony_ci
1783e5c31af7Sopenharmony_ci				void main()
1784e5c31af7Sopenharmony_ci				{
1785e5c31af7Sopenharmony_ci					${SETUP}
1786e5c31af7Sopenharmony_ci					ivec3[3][3] x = func(in0);
1787e5c31af7Sopenharmony_ci					out0 = ivec3(x[1][0].x, x[2][0].y, x[0][2].z);
1788e5c31af7Sopenharmony_ci					${OUTPUT}
1789e5c31af7Sopenharmony_ci				}
1790e5c31af7Sopenharmony_ci			""
1791e5c31af7Sopenharmony_ci		end
1792e5c31af7Sopenharmony_ci
1793e5c31af7Sopenharmony_ci		case bvec4_4x2
1794e5c31af7Sopenharmony_ci			version 450
1795e5c31af7Sopenharmony_ci			desc "Testing arrays of arrays as function return values with implicit array size"
1796e5c31af7Sopenharmony_ci			values
1797e5c31af7Sopenharmony_ci			{
1798e5c31af7Sopenharmony_ci				input bvec4 in0 =	[ bvec4(true, false, false, true) ];
1799e5c31af7Sopenharmony_ci				output bvec4 out0 = [ bvec4(true, true, false, true) ];
1800e5c31af7Sopenharmony_ci			}
1801e5c31af7Sopenharmony_ci
1802e5c31af7Sopenharmony_ci			both ""
1803e5c31af7Sopenharmony_ci				#version 450
1804e5c31af7Sopenharmony_ci				precision mediump int;
1805e5c31af7Sopenharmony_ci				precision mediump float;
1806e5c31af7Sopenharmony_ci				${DECLARATIONS}
1807e5c31af7Sopenharmony_ci
1808e5c31af7Sopenharmony_ci				bvec4[4][2] func(bvec4 p)
1809e5c31af7Sopenharmony_ci				{
1810e5c31af7Sopenharmony_ci					bvec4[4] x = bvec4[4](	bvec4(p.x, p.y, p.z, p.w),
1811e5c31af7Sopenharmony_ci											bvec4(p.w, p.y, p.z, p.x),
1812e5c31af7Sopenharmony_ci											bvec4(p.z, p.w, p.x, p.y),
1813e5c31af7Sopenharmony_ci											bvec4(p.y, p.x, p.z, p.w) );
1814e5c31af7Sopenharmony_ci
1815e5c31af7Sopenharmony_ci					return bvec4[][] (	bvec4[] (bvec4(x[0]),
1816e5c31af7Sopenharmony_ci												 bvec4(x[1])),
1817e5c31af7Sopenharmony_ci
1818e5c31af7Sopenharmony_ci										bvec4[] (bvec4(x[2]),
1819e5c31af7Sopenharmony_ci												 bvec4(x[3])),
1820e5c31af7Sopenharmony_ci
1821e5c31af7Sopenharmony_ci										bvec4[] (bvec4(x[1]),
1822e5c31af7Sopenharmony_ci												 bvec4(x[2])),
1823e5c31af7Sopenharmony_ci
1824e5c31af7Sopenharmony_ci										bvec4[] (bvec4(x[3]),
1825e5c31af7Sopenharmony_ci												 bvec4(x[0])) );
1826e5c31af7Sopenharmony_ci				}
1827e5c31af7Sopenharmony_ci
1828e5c31af7Sopenharmony_ci				void main()
1829e5c31af7Sopenharmony_ci				{
1830e5c31af7Sopenharmony_ci					${SETUP}
1831e5c31af7Sopenharmony_ci					bvec4[4][2] x = func(in0);
1832e5c31af7Sopenharmony_ci					out0 = bvec4(x[0][1].x, x[1][0].y, x[2][0].z, x[3][1].w);
1833e5c31af7Sopenharmony_ci					${OUTPUT}
1834e5c31af7Sopenharmony_ci				}
1835e5c31af7Sopenharmony_ci			""
1836e5c31af7Sopenharmony_ci		end
1837e5c31af7Sopenharmony_ci
1838e5c31af7Sopenharmony_ci		case mat3_3x2
1839e5c31af7Sopenharmony_ci			version 450
1840e5c31af7Sopenharmony_ci			desc "Testing arrays of arrays as function return values with implicit array size"
1841e5c31af7Sopenharmony_ci			values
1842e5c31af7Sopenharmony_ci			{
1843e5c31af7Sopenharmony_ci				input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(-1.5, 0.0, -2.3) ];
1844e5c31af7Sopenharmony_ci				output vec3 out0 = [ vec3(0.5, -1.0, 1.0) | vec3(-1.5, 0.0, 0.0) ];
1845e5c31af7Sopenharmony_ci			}
1846e5c31af7Sopenharmony_ci
1847e5c31af7Sopenharmony_ci			both ""
1848e5c31af7Sopenharmony_ci				#version 450
1849e5c31af7Sopenharmony_ci				precision mediump float;
1850e5c31af7Sopenharmony_ci				${DECLARATIONS}
1851e5c31af7Sopenharmony_ci
1852e5c31af7Sopenharmony_ci				mat3[3][2] func(vec3 p)
1853e5c31af7Sopenharmony_ci				{
1854e5c31af7Sopenharmony_ci					return mat3[][] (	mat3[] (mat3(	p.x, p.y, p.z,
1855e5c31af7Sopenharmony_ci														p.x, p.y, p.z,
1856e5c31af7Sopenharmony_ci														p.x, p.y, p.z),
1857e5c31af7Sopenharmony_ci												mat3(	p.z, p.x, -p.y,
1858e5c31af7Sopenharmony_ci														p.z, p.x, -p.y,
1859e5c31af7Sopenharmony_ci														p.z, p.x, -p.y)),
1860e5c31af7Sopenharmony_ci
1861e5c31af7Sopenharmony_ci										mat3[] (mat3(	-p.z, -p.z, p.z,
1862e5c31af7Sopenharmony_ci														-p.y, -p.y, p.y,
1863e5c31af7Sopenharmony_ci														-p.x, -p.x, p.x),
1864e5c31af7Sopenharmony_ci												mat3(	p.x, p.y, p.z,
1865e5c31af7Sopenharmony_ci														p.x, p.y, p.z,
1866e5c31af7Sopenharmony_ci														p.x, p.y, p.z)),
1867e5c31af7Sopenharmony_ci
1868e5c31af7Sopenharmony_ci										mat3[] (mat3(	p.z, p.x, -p.y,
1869e5c31af7Sopenharmony_ci														p.z, p.x, -p.y,
1870e5c31af7Sopenharmony_ci														p.z, p.x, -p.y),
1871e5c31af7Sopenharmony_ci												mat3(	-p.z, -p.z, p.z,
1872e5c31af7Sopenharmony_ci														-p.y, -p.y, p.y,
1873e5c31af7Sopenharmony_ci														-p.x, -p.x, p.x)) );
1874e5c31af7Sopenharmony_ci
1875e5c31af7Sopenharmony_ci				}
1876e5c31af7Sopenharmony_ci
1877e5c31af7Sopenharmony_ci				void main()
1878e5c31af7Sopenharmony_ci				{
1879e5c31af7Sopenharmony_ci					${SETUP}
1880e5c31af7Sopenharmony_ci
1881e5c31af7Sopenharmony_ci					mat3 a[3][2] = func(in0);
1882e5c31af7Sopenharmony_ci
1883e5c31af7Sopenharmony_ci					mat3 a0 = a[0][0];
1884e5c31af7Sopenharmony_ci					mat3 a1 = a[0][1];
1885e5c31af7Sopenharmony_ci					mat3 a2 = a[2][1];
1886e5c31af7Sopenharmony_ci
1887e5c31af7Sopenharmony_ci					float ret0 = a0[2][0];
1888e5c31af7Sopenharmony_ci					float ret1 = a1[0][2];
1889e5c31af7Sopenharmony_ci					float ret2 = a2[1][2];
1890e5c31af7Sopenharmony_ci
1891e5c31af7Sopenharmony_ci					out0 = vec3(ret0, ret1, ret2);
1892e5c31af7Sopenharmony_ci					${OUTPUT}
1893e5c31af7Sopenharmony_ci				}
1894e5c31af7Sopenharmony_ci			""
1895e5c31af7Sopenharmony_ci		end
1896e5c31af7Sopenharmony_ci
1897e5c31af7Sopenharmony_ci		case mat3_3x3x3
1898e5c31af7Sopenharmony_ci			version 450
1899e5c31af7Sopenharmony_ci			desc "Testing arrays of arrays as function return values with implicit array size"
1900e5c31af7Sopenharmony_ci			values
1901e5c31af7Sopenharmony_ci			{
1902e5c31af7Sopenharmony_ci				input ivec3 in0 = [ ivec3(0, 1, 2) | ivec3(-1, 0, -2) ];
1903e5c31af7Sopenharmony_ci				output ivec3 out0 = [ ivec3(0, -1, 1) | ivec3(-1, 0, 0) ];
1904e5c31af7Sopenharmony_ci			}
1905e5c31af7Sopenharmony_ci
1906e5c31af7Sopenharmony_ci			both ""
1907e5c31af7Sopenharmony_ci				#version 450
1908e5c31af7Sopenharmony_ci				precision mediump int;
1909e5c31af7Sopenharmony_ci				precision mediump float;
1910e5c31af7Sopenharmony_ci				${DECLARATIONS}
1911e5c31af7Sopenharmony_ci
1912e5c31af7Sopenharmony_ci				mat3[3][3][3] func(ivec3 p)
1913e5c31af7Sopenharmony_ci				{
1914e5c31af7Sopenharmony_ci					mat3 a = mat3(	p.x, p.y, p.z,
1915e5c31af7Sopenharmony_ci									p.x, p.y, p.z,
1916e5c31af7Sopenharmony_ci									p.x, p.y, p.z);
1917e5c31af7Sopenharmony_ci					mat3 b = mat3(	p.z, p.x, -p.y,
1918e5c31af7Sopenharmony_ci									p.z, p.x, -p.y,
1919e5c31af7Sopenharmony_ci									p.z, p.x, -p.y);
1920e5c31af7Sopenharmony_ci					mat3 c = mat3(	-p.z, -p.z, p.z,
1921e5c31af7Sopenharmony_ci									-p.y, -p.y, p.y,
1922e5c31af7Sopenharmony_ci									-p.x, -p.x, p.x);
1923e5c31af7Sopenharmony_ci
1924e5c31af7Sopenharmony_ci					return mat3[][][] (	mat3[][] (	mat3[] (a, a, a),
1925e5c31af7Sopenharmony_ci													mat3[] (b, b, b),
1926e5c31af7Sopenharmony_ci													mat3[] (c, c, c)),
1927e5c31af7Sopenharmony_ci
1928e5c31af7Sopenharmony_ci										mat3[][] (	mat3[] (b, b, b),
1929e5c31af7Sopenharmony_ci													mat3[] (a, a, a),
1930e5c31af7Sopenharmony_ci													mat3[] (c, c, c)),
1931e5c31af7Sopenharmony_ci
1932e5c31af7Sopenharmony_ci										mat3[][] (	mat3[] (c, c, c),
1933e5c31af7Sopenharmony_ci													mat3[] (a, a, a),
1934e5c31af7Sopenharmony_ci													mat3[] (b, b, b)) );
1935e5c31af7Sopenharmony_ci				}
1936e5c31af7Sopenharmony_ci
1937e5c31af7Sopenharmony_ci				void main()
1938e5c31af7Sopenharmony_ci				{
1939e5c31af7Sopenharmony_ci					${SETUP}
1940e5c31af7Sopenharmony_ci
1941e5c31af7Sopenharmony_ci					mat3 x[3][3][3] = func(in0);
1942e5c31af7Sopenharmony_ci
1943e5c31af7Sopenharmony_ci					mat3 x0 = x[0][0][0];
1944e5c31af7Sopenharmony_ci					mat3 x1 = x[1][0][0];
1945e5c31af7Sopenharmony_ci					mat3 x2 = x[2][0][0];
1946e5c31af7Sopenharmony_ci
1947e5c31af7Sopenharmony_ci					float ret0 = x0[2][0];
1948e5c31af7Sopenharmony_ci					float ret1 = x1[0][2];
1949e5c31af7Sopenharmony_ci					float ret2 = x2[1][2];
1950e5c31af7Sopenharmony_ci
1951e5c31af7Sopenharmony_ci					out0 = ivec3(ret0, ret1, ret2);
1952e5c31af7Sopenharmony_ci					${OUTPUT}
1953e5c31af7Sopenharmony_ci				}
1954e5c31af7Sopenharmony_ci			""
1955e5c31af7Sopenharmony_ci		end
1956e5c31af7Sopenharmony_ci
1957e5c31af7Sopenharmony_ci		case mat3_3x4
1958e5c31af7Sopenharmony_ci			version 450
1959e5c31af7Sopenharmony_ci			desc "Testing arrays of arrays as function return values with implicit array size"
1960e5c31af7Sopenharmony_ci			values
1961e5c31af7Sopenharmony_ci			{
1962e5c31af7Sopenharmony_ci				input bvec3 in0 = [ bvec3(true, false, true) ];
1963e5c31af7Sopenharmony_ci				output bvec3 out0 = [ bvec3(true, false, false) ];
1964e5c31af7Sopenharmony_ci			}
1965e5c31af7Sopenharmony_ci
1966e5c31af7Sopenharmony_ci			both ""
1967e5c31af7Sopenharmony_ci				#version 450
1968e5c31af7Sopenharmony_ci				precision mediump float;
1969e5c31af7Sopenharmony_ci				${DECLARATIONS}
1970e5c31af7Sopenharmony_ci
1971e5c31af7Sopenharmony_ci				mat3[3][4] func(bvec3 p)
1972e5c31af7Sopenharmony_ci				{
1973e5c31af7Sopenharmony_ci					mat3 a = mat3(	p.x, p.y, p.z,
1974e5c31af7Sopenharmony_ci									p.x, p.y, p.z,
1975e5c31af7Sopenharmony_ci									p.x, p.y, p.z);
1976e5c31af7Sopenharmony_ci
1977e5c31af7Sopenharmony_ci					mat3 b = mat3(	p.z, p.x, p.y,
1978e5c31af7Sopenharmony_ci									p.z, p.x, p.y,
1979e5c31af7Sopenharmony_ci									p.z, p.x, p.y);
1980e5c31af7Sopenharmony_ci
1981e5c31af7Sopenharmony_ci					mat3 c = mat3(	p.z, p.z, p.z,
1982e5c31af7Sopenharmony_ci									p.y, p.y, p.y,
1983e5c31af7Sopenharmony_ci									p.x, p.x, p.x);
1984e5c31af7Sopenharmony_ci
1985e5c31af7Sopenharmony_ci					return mat3[][] (	mat3[] (a, b, c, a),
1986e5c31af7Sopenharmony_ci										mat3[] (b, c, a, b),
1987e5c31af7Sopenharmony_ci										mat3[] (c, a, b, c) );
1988e5c31af7Sopenharmony_ci				}
1989e5c31af7Sopenharmony_ci
1990e5c31af7Sopenharmony_ci				void main()
1991e5c31af7Sopenharmony_ci				{
1992e5c31af7Sopenharmony_ci					${SETUP}
1993e5c31af7Sopenharmony_ci
1994e5c31af7Sopenharmony_ci					mat3[4] x[3] = func(in0);
1995e5c31af7Sopenharmony_ci
1996e5c31af7Sopenharmony_ci					mat3 x0 = x[0][0];
1997e5c31af7Sopenharmony_ci					mat3 x1 = x[1][3];
1998e5c31af7Sopenharmony_ci					mat3 x2 = x[2][0];
1999e5c31af7Sopenharmony_ci
2000e5c31af7Sopenharmony_ci					float ret0 = x0[2][0];
2001e5c31af7Sopenharmony_ci					float ret1 = x1[0][2];
2002e5c31af7Sopenharmony_ci					float ret2 = x2[1][2];
2003e5c31af7Sopenharmony_ci
2004e5c31af7Sopenharmony_ci					out0 = bvec3(ret0, ret1, ret2);
2005e5c31af7Sopenharmony_ci					${OUTPUT}
2006e5c31af7Sopenharmony_ci				}
2007e5c31af7Sopenharmony_ci			""
2008e5c31af7Sopenharmony_ci		end
2009e5c31af7Sopenharmony_ci
2010e5c31af7Sopenharmony_ci	end # implicit
2011e5c31af7Sopenharmony_ci
2012e5c31af7Sopenharmony_ciend # return
2013e5c31af7Sopenharmony_ci
2014e5c31af7Sopenharmony_cigroup parameter "Array of arrays as a function parameter"
2015e5c31af7Sopenharmony_ci
2016e5c31af7Sopenharmony_ci	# in
2017e5c31af7Sopenharmony_ci	group in "Array of arrays as an in-function parameter"
2018e5c31af7Sopenharmony_ci
2019e5c31af7Sopenharmony_ci		case float_3x3
2020e5c31af7Sopenharmony_ci			version 450
2021e5c31af7Sopenharmony_ci			desc "Testing array of arrays as an in-function parameter"
2022e5c31af7Sopenharmony_ci			values
2023e5c31af7Sopenharmony_ci			{
2024e5c31af7Sopenharmony_ci				input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(7.4, -1.0, 2.0) | vec3(3.0, 1.6, -2.0) ];
2025e5c31af7Sopenharmony_ci				output vec3 out0 = [ vec3(2.0, -0.5, 1.0) | vec3(2.0, -7.4, -1.0) | vec3(-2.0, -3.0, 1.6) ];
2026e5c31af7Sopenharmony_ci			}
2027e5c31af7Sopenharmony_ci
2028e5c31af7Sopenharmony_ci			both ""
2029e5c31af7Sopenharmony_ci				#version 450
2030e5c31af7Sopenharmony_ci				precision mediump float;
2031e5c31af7Sopenharmony_ci				${DECLARATIONS}
2032e5c31af7Sopenharmony_ci
2033e5c31af7Sopenharmony_ci				vec3 func(in float[3][3] x)
2034e5c31af7Sopenharmony_ci				{
2035e5c31af7Sopenharmony_ci					return vec3(x[0][0], x[1][1], x[2][2]);
2036e5c31af7Sopenharmony_ci				}
2037e5c31af7Sopenharmony_ci
2038e5c31af7Sopenharmony_ci				void main()
2039e5c31af7Sopenharmony_ci				{
2040e5c31af7Sopenharmony_ci					${SETUP}
2041e5c31af7Sopenharmony_ci					float[3][3] x = float[3][3] (	float[3] (in0.z, 0.0, 0.0),
2042e5c31af7Sopenharmony_ci													float[3] (0.0, -in0.x, 0.0),
2043e5c31af7Sopenharmony_ci													float[3] (0.0, 0.0, in0.y) );
2044e5c31af7Sopenharmony_ci
2045e5c31af7Sopenharmony_ci					out0 = func(x);
2046e5c31af7Sopenharmony_ci					${OUTPUT}
2047e5c31af7Sopenharmony_ci				}
2048e5c31af7Sopenharmony_ci			""
2049e5c31af7Sopenharmony_ci		end
2050e5c31af7Sopenharmony_ci
2051e5c31af7Sopenharmony_ci		case int_2x2x2
2052e5c31af7Sopenharmony_ci			version 450
2053e5c31af7Sopenharmony_ci			desc "Testing array of arrays as an in-function parameter"
2054e5c31af7Sopenharmony_ci			values
2055e5c31af7Sopenharmony_ci			{
2056e5c31af7Sopenharmony_ci				input ivec2 in0 = [ ivec2(4, 1) | ivec2(7, -1) | ivec2(3, 1) ];
2057e5c31af7Sopenharmony_ci				output ivec2 out0 =	[ ivec2(1, -4) | ivec2(-1, -7) | ivec2(1, -3) ];
2058e5c31af7Sopenharmony_ci			}
2059e5c31af7Sopenharmony_ci
2060e5c31af7Sopenharmony_ci			both ""
2061e5c31af7Sopenharmony_ci				#version 450
2062e5c31af7Sopenharmony_ci				precision mediump int;
2063e5c31af7Sopenharmony_ci				precision mediump float;
2064e5c31af7Sopenharmony_ci				${DECLARATIONS}
2065e5c31af7Sopenharmony_ci
2066e5c31af7Sopenharmony_ci				ivec2 func(in int[2][2][2] x)
2067e5c31af7Sopenharmony_ci				{
2068e5c31af7Sopenharmony_ci					return ivec2(x[0][0][0], x[1][1][1]);
2069e5c31af7Sopenharmony_ci				}
2070e5c31af7Sopenharmony_ci
2071e5c31af7Sopenharmony_ci				void main()
2072e5c31af7Sopenharmony_ci				{
2073e5c31af7Sopenharmony_ci					${SETUP}
2074e5c31af7Sopenharmony_ci					int[2][2][2] x = int[2][2][2] (	int[2][2] (	int[2] (in0.y, -in0.x),
2075e5c31af7Sopenharmony_ci																int[2] (0, 0)),
2076e5c31af7Sopenharmony_ci													int[2][2] (	int[2] (0, 0),
2077e5c31af7Sopenharmony_ci																int[2] (in0.y, -in0.x)) );
2078e5c31af7Sopenharmony_ci
2079e5c31af7Sopenharmony_ci					out0 = func(x);
2080e5c31af7Sopenharmony_ci					${OUTPUT}
2081e5c31af7Sopenharmony_ci				}
2082e5c31af7Sopenharmony_ci			""
2083e5c31af7Sopenharmony_ci		end
2084e5c31af7Sopenharmony_ci
2085e5c31af7Sopenharmony_ci		case bool_3x2x3
2086e5c31af7Sopenharmony_ci			version 450
2087e5c31af7Sopenharmony_ci			desc "Testing array of arrays as an in-function parameter"
2088e5c31af7Sopenharmony_ci			values
2089e5c31af7Sopenharmony_ci			{
2090e5c31af7Sopenharmony_ci				input bvec3 in0 =	[ bvec3(false, true, true) ];
2091e5c31af7Sopenharmony_ci				output bvec3 out0 = [ bvec3(true, false, true) ];
2092e5c31af7Sopenharmony_ci			}
2093e5c31af7Sopenharmony_ci
2094e5c31af7Sopenharmony_ci			both ""
2095e5c31af7Sopenharmony_ci				#version 450
2096e5c31af7Sopenharmony_ci				precision mediump float;
2097e5c31af7Sopenharmony_ci				${DECLARATIONS}
2098e5c31af7Sopenharmony_ci
2099e5c31af7Sopenharmony_ci				bvec3 func(in bool x[3][2][3])
2100e5c31af7Sopenharmony_ci				{
2101e5c31af7Sopenharmony_ci					return bvec3(x[0][0][0], x[1][1][1], x[2][1][0]);
2102e5c31af7Sopenharmony_ci				}
2103e5c31af7Sopenharmony_ci
2104e5c31af7Sopenharmony_ci				void main()
2105e5c31af7Sopenharmony_ci				{
2106e5c31af7Sopenharmony_ci					${SETUP}
2107e5c31af7Sopenharmony_ci					bool[3] x[3][2] = bool[3][2][3] (	bool[2][3] (bool[3] (in0.z, in0.x, in0.y),
2108e5c31af7Sopenharmony_ci																	bool[3] (in0.x, in0.y, in0.z)),
2109e5c31af7Sopenharmony_ci														bool[2][3] (bool[3] (in0.x, in0.y, in0.z),
2110e5c31af7Sopenharmony_ci																	bool[3] (in0.z, in0.x, in0.y)),
2111e5c31af7Sopenharmony_ci														bool[2][3] (bool[3] (in0.y, in0.z, in0.x),
2112e5c31af7Sopenharmony_ci																	bool[3] (in0.y, in0.z, in0.x)) );
2113e5c31af7Sopenharmony_ci
2114e5c31af7Sopenharmony_ci					out0 = func(x);
2115e5c31af7Sopenharmony_ci					${OUTPUT}
2116e5c31af7Sopenharmony_ci				}
2117e5c31af7Sopenharmony_ci			""
2118e5c31af7Sopenharmony_ci		end
2119e5c31af7Sopenharmony_ci
2120e5c31af7Sopenharmony_ci		case vec3_2x3
2121e5c31af7Sopenharmony_ci			version 450
2122e5c31af7Sopenharmony_ci			desc "Testing array of arrays as an in-function parameter"
2123e5c31af7Sopenharmony_ci			values
2124e5c31af7Sopenharmony_ci			{
2125e5c31af7Sopenharmony_ci				input vec3 in0 =	[ vec3(0.5, 1.0, 2.0) | vec3(-0.5, 11.2, -1.0) ];
2126e5c31af7Sopenharmony_ci				output vec3 out0 = [ vec3(1.0, 0.5, -2.0) | vec3(11.2, -0.5, 1.0) ];
2127e5c31af7Sopenharmony_ci			}
2128e5c31af7Sopenharmony_ci
2129e5c31af7Sopenharmony_ci			both ""
2130e5c31af7Sopenharmony_ci				#version 450
2131e5c31af7Sopenharmony_ci				precision mediump float;
2132e5c31af7Sopenharmony_ci				${DECLARATIONS}
2133e5c31af7Sopenharmony_ci
2134e5c31af7Sopenharmony_ci				vec3 func(in vec3[3] x[2])
2135e5c31af7Sopenharmony_ci				{
2136e5c31af7Sopenharmony_ci					return vec3(x[0][0].x, x[1][1].y, x[0][2].z);
2137e5c31af7Sopenharmony_ci				}
2138e5c31af7Sopenharmony_ci
2139e5c31af7Sopenharmony_ci				void main()
2140e5c31af7Sopenharmony_ci				{
2141e5c31af7Sopenharmony_ci					${SETUP}
2142e5c31af7Sopenharmony_ci					vec3[2][3] x = vec3[2][3](	vec3[3] (	vec3(in0.x, in0.y, -in0.z),
2143e5c31af7Sopenharmony_ci															vec3(in0.y, -in0.z, in0.x),
2144e5c31af7Sopenharmony_ci															vec3(-in0.z, in0.x, in0.y)),
2145e5c31af7Sopenharmony_ci												vec3[3] (	vec3(in0.y, -in0.z, in0.x),
2146e5c31af7Sopenharmony_ci															vec3(in0.x, in0.y, -in0.z),
2147e5c31af7Sopenharmony_ci															vec3(-in0.z, in0.x, in0.y)) );
2148e5c31af7Sopenharmony_ci
2149e5c31af7Sopenharmony_ci					x = vec3[2][3] (vec3[3] (x[0][1], x[0][2], x[0][0]),
2150e5c31af7Sopenharmony_ci									vec3[3] (x[1][1], x[1][2], x[1][0]) );
2151e5c31af7Sopenharmony_ci
2152e5c31af7Sopenharmony_ci					out0 = func(x);
2153e5c31af7Sopenharmony_ci					${OUTPUT}
2154e5c31af7Sopenharmony_ci				}
2155e5c31af7Sopenharmony_ci			""
2156e5c31af7Sopenharmony_ci		end
2157e5c31af7Sopenharmony_ci
2158e5c31af7Sopenharmony_ci		case struct_3x1x3
2159e5c31af7Sopenharmony_ci			version 450
2160e5c31af7Sopenharmony_ci			desc "Testing array of arrays as an in-function parameter"
2161e5c31af7Sopenharmony_ci			values
2162e5c31af7Sopenharmony_ci			{
2163e5c31af7Sopenharmony_ci				input vec3 in0 = [ vec3(0.5, 1.0, 2.0) ];
2164e5c31af7Sopenharmony_ci				output vec3 out0 = [ vec3(-1.0, 2.0, 0.5) ];
2165e5c31af7Sopenharmony_ci			}
2166e5c31af7Sopenharmony_ci
2167e5c31af7Sopenharmony_ci			both ""
2168e5c31af7Sopenharmony_ci				#version 450
2169e5c31af7Sopenharmony_ci				precision mediump float;
2170e5c31af7Sopenharmony_ci				${DECLARATIONS}
2171e5c31af7Sopenharmony_ci
2172e5c31af7Sopenharmony_ci				struct Test
2173e5c31af7Sopenharmony_ci				{
2174e5c31af7Sopenharmony_ci					float f;
2175e5c31af7Sopenharmony_ci					vec3 v;
2176e5c31af7Sopenharmony_ci				};
2177e5c31af7Sopenharmony_ci
2178e5c31af7Sopenharmony_ci				vec3 func(in Test[3] x[3][1])
2179e5c31af7Sopenharmony_ci				{
2180e5c31af7Sopenharmony_ci					return vec3(x[0][0][0].v.z, x[2][0][2].v.y, x[1][0][1].v.x);
2181e5c31af7Sopenharmony_ci				}
2182e5c31af7Sopenharmony_ci
2183e5c31af7Sopenharmony_ci				void main()
2184e5c31af7Sopenharmony_ci				{
2185e5c31af7Sopenharmony_ci					${SETUP}
2186e5c31af7Sopenharmony_ci					Test a = Test(in0.z, vec3(in0.x, in0.y, in0.z));
2187e5c31af7Sopenharmony_ci					Test b = Test(in0.y, vec3(-in0.z, -in0.x, -in0.y));
2188e5c31af7Sopenharmony_ci					Test c = Test(in0.x, vec3(-in0.y, in0.z, -in0.x));
2189e5c31af7Sopenharmony_ci
2190e5c31af7Sopenharmony_ci					Test x[3][1][3] = Test[3][1][3] (	Test[1][3] (Test[3] (b, b, b)),
2191e5c31af7Sopenharmony_ci														Test[1][3] (Test[3] (a, a, a)),
2192e5c31af7Sopenharmony_ci														Test[1][3] (Test[3] (c, c, c)) );
2193e5c31af7Sopenharmony_ci
2194e5c31af7Sopenharmony_ci					out0 = func(x);
2195e5c31af7Sopenharmony_ci					${OUTPUT}
2196e5c31af7Sopenharmony_ci				}
2197e5c31af7Sopenharmony_ci			""
2198e5c31af7Sopenharmony_ci		end
2199e5c31af7Sopenharmony_ci
2200e5c31af7Sopenharmony_ci		case ivec3_3x3
2201e5c31af7Sopenharmony_ci			version 450
2202e5c31af7Sopenharmony_ci			desc "Testing array of arrays as an in-function parameter"
2203e5c31af7Sopenharmony_ci			values
2204e5c31af7Sopenharmony_ci			{
2205e5c31af7Sopenharmony_ci				input ivec3 in0 = [ ivec3(5, 1, 2) | ivec3(-5, 11, -1) ];
2206e5c31af7Sopenharmony_ci				output ivec3 out0 = [ ivec3(1, 5, -2) | ivec3(11, -5, 1) ];
2207e5c31af7Sopenharmony_ci			}
2208e5c31af7Sopenharmony_ci
2209e5c31af7Sopenharmony_ci			both ""
2210e5c31af7Sopenharmony_ci				#version 450
2211e5c31af7Sopenharmony_ci				precision mediump int;
2212e5c31af7Sopenharmony_ci				precision mediump float;
2213e5c31af7Sopenharmony_ci				${DECLARATIONS}
2214e5c31af7Sopenharmony_ci
2215e5c31af7Sopenharmony_ci				ivec3 func(in ivec3 x[3][3])
2216e5c31af7Sopenharmony_ci				{
2217e5c31af7Sopenharmony_ci					return ivec3(x[1][0].x, x[2][0].y, x[0][2].z);
2218e5c31af7Sopenharmony_ci				}
2219e5c31af7Sopenharmony_ci
2220e5c31af7Sopenharmony_ci				void main()
2221e5c31af7Sopenharmony_ci				{
2222e5c31af7Sopenharmony_ci					${SETUP}
2223e5c31af7Sopenharmony_ci					ivec3[3][3] x = ivec3[3][3] (	ivec3[3] (	ivec3(in0.x, in0.y, -in0.z),
2224e5c31af7Sopenharmony_ci																ivec3(in0.x, in0.y, -in0.z),
2225e5c31af7Sopenharmony_ci																ivec3(in0.x, in0.y, -in0.z)),
2226e5c31af7Sopenharmony_ci
2227e5c31af7Sopenharmony_ci													ivec3[3] (	ivec3(in0.y, -in0.z, in0.x),
2228e5c31af7Sopenharmony_ci																ivec3(in0.y, -in0.z, in0.x),
2229e5c31af7Sopenharmony_ci																ivec3(in0.y, -in0.z, in0.x)),
2230e5c31af7Sopenharmony_ci
2231e5c31af7Sopenharmony_ci													ivec3[3] (	ivec3(-in0.z, in0.x, in0.y),
2232e5c31af7Sopenharmony_ci																ivec3(-in0.z, in0.x, in0.y),
2233e5c31af7Sopenharmony_ci																ivec3(-in0.z, in0.x, in0.y)) );
2234e5c31af7Sopenharmony_ci
2235e5c31af7Sopenharmony_ci					out0 = func(x);
2236e5c31af7Sopenharmony_ci					${OUTPUT}
2237e5c31af7Sopenharmony_ci				}
2238e5c31af7Sopenharmony_ci			""
2239e5c31af7Sopenharmony_ci		end
2240e5c31af7Sopenharmony_ci
2241e5c31af7Sopenharmony_ci		case bvec4_4x2
2242e5c31af7Sopenharmony_ci			version 450
2243e5c31af7Sopenharmony_ci			desc "Testing array of arrays as an in-function parameter"
2244e5c31af7Sopenharmony_ci			values
2245e5c31af7Sopenharmony_ci			{
2246e5c31af7Sopenharmony_ci				input bvec4 in0 =	[ bvec4(true, false, false, true) ];
2247e5c31af7Sopenharmony_ci				output bvec4 out0 = [ bvec4(true, true, false, true) ];
2248e5c31af7Sopenharmony_ci			}
2249e5c31af7Sopenharmony_ci
2250e5c31af7Sopenharmony_ci			both ""
2251e5c31af7Sopenharmony_ci				#version 450
2252e5c31af7Sopenharmony_ci				precision mediump int;
2253e5c31af7Sopenharmony_ci				precision mediump float;
2254e5c31af7Sopenharmony_ci				${DECLARATIONS}
2255e5c31af7Sopenharmony_ci
2256e5c31af7Sopenharmony_ci				bvec4 func(in bvec4[4][2] x)
2257e5c31af7Sopenharmony_ci				{
2258e5c31af7Sopenharmony_ci					return bvec4(x[0][1].x, x[1][0].y, x[2][0].z, x[3][1].w);
2259e5c31af7Sopenharmony_ci				}
2260e5c31af7Sopenharmony_ci
2261e5c31af7Sopenharmony_ci				void main()
2262e5c31af7Sopenharmony_ci				{
2263e5c31af7Sopenharmony_ci					${SETUP}
2264e5c31af7Sopenharmony_ci					bvec4[4] a = bvec4[4](	bvec4(in0.x, in0.y, in0.z, in0.w),
2265e5c31af7Sopenharmony_ci											bvec4(in0.w, in0.y, in0.z, in0.x),
2266e5c31af7Sopenharmony_ci											bvec4(in0.z, in0.w, in0.x, in0.y),
2267e5c31af7Sopenharmony_ci											bvec4(in0.y, in0.x, in0.z, in0.w) );
2268e5c31af7Sopenharmony_ci
2269e5c31af7Sopenharmony_ci					bvec4 x[4][2] = bvec4[4][2] (	bvec4[2] (bvec4(a[0]),
2270e5c31af7Sopenharmony_ci															  bvec4(a[1])),
2271e5c31af7Sopenharmony_ci
2272e5c31af7Sopenharmony_ci													bvec4[2] (bvec4(a[2]),
2273e5c31af7Sopenharmony_ci															  bvec4(a[3])),
2274e5c31af7Sopenharmony_ci
2275e5c31af7Sopenharmony_ci													bvec4[2] (bvec4(a[1]),
2276e5c31af7Sopenharmony_ci															  bvec4(a[2])),
2277e5c31af7Sopenharmony_ci
2278e5c31af7Sopenharmony_ci													bvec4[2] (bvec4(a[3]),
2279e5c31af7Sopenharmony_ci															  bvec4(a[0])) );
2280e5c31af7Sopenharmony_ci
2281e5c31af7Sopenharmony_ci					out0 = func(x);
2282e5c31af7Sopenharmony_ci					${OUTPUT}
2283e5c31af7Sopenharmony_ci				}
2284e5c31af7Sopenharmony_ci			""
2285e5c31af7Sopenharmony_ci		end
2286e5c31af7Sopenharmony_ci
2287e5c31af7Sopenharmony_ci		case mat3_3x2
2288e5c31af7Sopenharmony_ci			version 450
2289e5c31af7Sopenharmony_ci			desc "Testing array of arrays as an in-function parameter"
2290e5c31af7Sopenharmony_ci			values
2291e5c31af7Sopenharmony_ci			{
2292e5c31af7Sopenharmony_ci				input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(-1.5, 0.0, -2.3) ];
2293e5c31af7Sopenharmony_ci				output vec3 out0 = [ vec3(0.5, -1.0, 1.0) | vec3(-1.5, 0.0, 0.0) ];
2294e5c31af7Sopenharmony_ci			}
2295e5c31af7Sopenharmony_ci
2296e5c31af7Sopenharmony_ci			both ""
2297e5c31af7Sopenharmony_ci				#version 450
2298e5c31af7Sopenharmony_ci				precision mediump float;
2299e5c31af7Sopenharmony_ci				${DECLARATIONS}
2300e5c31af7Sopenharmony_ci
2301e5c31af7Sopenharmony_ci				vec3 func(in mat3[2] x[3])
2302e5c31af7Sopenharmony_ci				{
2303e5c31af7Sopenharmony_ci					mat3 a0 = x[0][0];
2304e5c31af7Sopenharmony_ci					mat3 a1 = x[0][1];
2305e5c31af7Sopenharmony_ci					mat3 a2 = x[2][1];
2306e5c31af7Sopenharmony_ci
2307e5c31af7Sopenharmony_ci					float ret0 = a0[2][0];
2308e5c31af7Sopenharmony_ci					float ret1 = a1[0][2];
2309e5c31af7Sopenharmony_ci					float ret2 = a2[1][2];
2310e5c31af7Sopenharmony_ci
2311e5c31af7Sopenharmony_ci					return vec3(ret0, ret1, ret2);
2312e5c31af7Sopenharmony_ci				}
2313e5c31af7Sopenharmony_ci
2314e5c31af7Sopenharmony_ci				void main()
2315e5c31af7Sopenharmony_ci				{
2316e5c31af7Sopenharmony_ci					${SETUP}
2317e5c31af7Sopenharmony_ci
2318e5c31af7Sopenharmony_ci					mat3 a = mat3(	in0.x, in0.y, in0.z,
2319e5c31af7Sopenharmony_ci									in0.x, in0.y, in0.z,
2320e5c31af7Sopenharmony_ci									in0.x, in0.y, in0.z);
2321e5c31af7Sopenharmony_ci
2322e5c31af7Sopenharmony_ci					mat3 b = mat3(	in0.z, in0.x, -in0.y,
2323e5c31af7Sopenharmony_ci									in0.z, in0.x, -in0.y,
2324e5c31af7Sopenharmony_ci									in0.z, in0.x, -in0.y);
2325e5c31af7Sopenharmony_ci
2326e5c31af7Sopenharmony_ci					mat3 c = mat3 (	-in0.z, -in0.z, in0.z,
2327e5c31af7Sopenharmony_ci									-in0.y, -in0.y, in0.y,
2328e5c31af7Sopenharmony_ci									-in0.x, -in0.x, in0.x);
2329e5c31af7Sopenharmony_ci
2330e5c31af7Sopenharmony_ci					mat3[3][2] x = mat3[3][2] (	mat3[2] (a, b),
2331e5c31af7Sopenharmony_ci												mat3[2] (c, a),
2332e5c31af7Sopenharmony_ci												mat3[2] (b, c) );
2333e5c31af7Sopenharmony_ci
2334e5c31af7Sopenharmony_ci					out0 = func(x);
2335e5c31af7Sopenharmony_ci					${OUTPUT}
2336e5c31af7Sopenharmony_ci				}
2337e5c31af7Sopenharmony_ci			""
2338e5c31af7Sopenharmony_ci		end
2339e5c31af7Sopenharmony_ci
2340e5c31af7Sopenharmony_ci		case mat3_3x3x3
2341e5c31af7Sopenharmony_ci			version 450
2342e5c31af7Sopenharmony_ci			desc "Testing array of arrays as an in-function parameter"
2343e5c31af7Sopenharmony_ci			values
2344e5c31af7Sopenharmony_ci			{
2345e5c31af7Sopenharmony_ci				input ivec3 in0 = [ ivec3(0, 1, 2) | ivec3(-1, 0, -2) ];
2346e5c31af7Sopenharmony_ci				output ivec3 out0 = [ ivec3(0, -1, 1) | ivec3(-1, 0, 0) ];
2347e5c31af7Sopenharmony_ci			}
2348e5c31af7Sopenharmony_ci
2349e5c31af7Sopenharmony_ci			both ""
2350e5c31af7Sopenharmony_ci				#version 450
2351e5c31af7Sopenharmony_ci				precision mediump int;
2352e5c31af7Sopenharmony_ci				precision mediump float;
2353e5c31af7Sopenharmony_ci				${DECLARATIONS}
2354e5c31af7Sopenharmony_ci
2355e5c31af7Sopenharmony_ci				ivec3 func(in mat3[3][3] x[3])
2356e5c31af7Sopenharmony_ci				{
2357e5c31af7Sopenharmony_ci					mat3 x0 = x[0][0][0];
2358e5c31af7Sopenharmony_ci					mat3 x1 = x[1][0][0];
2359e5c31af7Sopenharmony_ci					mat3 x2 = x[2][0][0];
2360e5c31af7Sopenharmony_ci
2361e5c31af7Sopenharmony_ci					float ret0 = x0[2][0];
2362e5c31af7Sopenharmony_ci					float ret1 = x1[0][2];
2363e5c31af7Sopenharmony_ci					float ret2 = x2[1][2];
2364e5c31af7Sopenharmony_ci
2365e5c31af7Sopenharmony_ci					return ivec3(ret0, ret1, ret2);
2366e5c31af7Sopenharmony_ci				}
2367e5c31af7Sopenharmony_ci
2368e5c31af7Sopenharmony_ci				void main()
2369e5c31af7Sopenharmony_ci				{
2370e5c31af7Sopenharmony_ci					${SETUP}
2371e5c31af7Sopenharmony_ci
2372e5c31af7Sopenharmony_ci					mat3 a = mat3(	in0.x, in0.y, in0.z,
2373e5c31af7Sopenharmony_ci									in0.x, in0.y, in0.z,
2374e5c31af7Sopenharmony_ci									in0.x, in0.y, in0.z);
2375e5c31af7Sopenharmony_ci					mat3 b = mat3(	in0.z, in0.x, -in0.y,
2376e5c31af7Sopenharmony_ci									in0.z, in0.x, -in0.y,
2377e5c31af7Sopenharmony_ci									in0.z, in0.x, -in0.y);
2378e5c31af7Sopenharmony_ci					mat3 c = mat3(	-in0.z, -in0.z, in0.z,
2379e5c31af7Sopenharmony_ci									-in0.y, -in0.y, in0.y,
2380e5c31af7Sopenharmony_ci									-in0.x, -in0.x, in0.x);
2381e5c31af7Sopenharmony_ci
2382e5c31af7Sopenharmony_ci					mat3 x[3][3][3] = mat3[3][3][3] (	mat3[3][3] (mat3[3] (a, a, a),
2383e5c31af7Sopenharmony_ci																	mat3[3] (b, b, b),
2384e5c31af7Sopenharmony_ci																	mat3[3] (c, c, c)),
2385e5c31af7Sopenharmony_ci
2386e5c31af7Sopenharmony_ci														mat3[3][3] (mat3[3] (b, b, b),
2387e5c31af7Sopenharmony_ci																	mat3[3] (a, a, a),
2388e5c31af7Sopenharmony_ci																	mat3[3] (c, c, c)),
2389e5c31af7Sopenharmony_ci
2390e5c31af7Sopenharmony_ci														mat3[3][3] (mat3[3] (c, c, c),
2391e5c31af7Sopenharmony_ci																	mat3[3] (a, a, a),
2392e5c31af7Sopenharmony_ci																	mat3[3] (b, b, b)) );
2393e5c31af7Sopenharmony_ci
2394e5c31af7Sopenharmony_ci					out0 = func(x);
2395e5c31af7Sopenharmony_ci					${OUTPUT}
2396e5c31af7Sopenharmony_ci				}
2397e5c31af7Sopenharmony_ci			""
2398e5c31af7Sopenharmony_ci		end
2399e5c31af7Sopenharmony_ci
2400e5c31af7Sopenharmony_ci		case mat3_3x4
2401e5c31af7Sopenharmony_ci			version 450
2402e5c31af7Sopenharmony_ci			desc "Testing array of arrays as an in-function parameter"
2403e5c31af7Sopenharmony_ci			values
2404e5c31af7Sopenharmony_ci			{
2405e5c31af7Sopenharmony_ci				input bvec3 in0 = [ bvec3(true, false, true) ];
2406e5c31af7Sopenharmony_ci				output bvec3 out0 = [ bvec3(true, false, false) ];
2407e5c31af7Sopenharmony_ci			}
2408e5c31af7Sopenharmony_ci
2409e5c31af7Sopenharmony_ci			both ""
2410e5c31af7Sopenharmony_ci				#version 450
2411e5c31af7Sopenharmony_ci				precision mediump float;
2412e5c31af7Sopenharmony_ci				${DECLARATIONS}
2413e5c31af7Sopenharmony_ci
2414e5c31af7Sopenharmony_ci				bvec3 func(in mat3[4] x[3])
2415e5c31af7Sopenharmony_ci				{
2416e5c31af7Sopenharmony_ci					mat3 x0 = x[0][0];
2417e5c31af7Sopenharmony_ci					mat3 x1 = x[1][3];
2418e5c31af7Sopenharmony_ci					mat3 x2 = x[2][0];
2419e5c31af7Sopenharmony_ci
2420e5c31af7Sopenharmony_ci					float ret0 = x0[2][0];
2421e5c31af7Sopenharmony_ci					float ret1 = x1[0][2];
2422e5c31af7Sopenharmony_ci					float ret2 = x2[1][2];
2423e5c31af7Sopenharmony_ci
2424e5c31af7Sopenharmony_ci					return bvec3(ret0, ret1, ret2);
2425e5c31af7Sopenharmony_ci				}
2426e5c31af7Sopenharmony_ci
2427e5c31af7Sopenharmony_ci				void main()
2428e5c31af7Sopenharmony_ci				{
2429e5c31af7Sopenharmony_ci					${SETUP}
2430e5c31af7Sopenharmony_ci
2431e5c31af7Sopenharmony_ci					mat3 a = mat3(	in0.x, in0.y, in0.z,
2432e5c31af7Sopenharmony_ci									in0.x, in0.y, in0.z,
2433e5c31af7Sopenharmony_ci									in0.x, in0.y, in0.z);
2434e5c31af7Sopenharmony_ci
2435e5c31af7Sopenharmony_ci					mat3 b = mat3(	in0.z, in0.x, in0.y,
2436e5c31af7Sopenharmony_ci									in0.z, in0.x, in0.y,
2437e5c31af7Sopenharmony_ci									in0.z, in0.x, in0.y);
2438e5c31af7Sopenharmony_ci
2439e5c31af7Sopenharmony_ci					mat3 c = mat3(	in0.z, in0.z, in0.z,
2440e5c31af7Sopenharmony_ci									in0.y, in0.y, in0.y,
2441e5c31af7Sopenharmony_ci									in0.x, in0.x, in0.x);
2442e5c31af7Sopenharmony_ci
2443e5c31af7Sopenharmony_ci					mat3 x[3][4] = mat3[3][4] (	mat3[4] (a, b, c, a),
2444e5c31af7Sopenharmony_ci												mat3[4] (b, c, a, b),
2445e5c31af7Sopenharmony_ci												mat3[4] (c, a, b, c) );
2446e5c31af7Sopenharmony_ci
2447e5c31af7Sopenharmony_ci					out0 = func(x);
2448e5c31af7Sopenharmony_ci
2449e5c31af7Sopenharmony_ci					${OUTPUT}
2450e5c31af7Sopenharmony_ci				}
2451e5c31af7Sopenharmony_ci			""
2452e5c31af7Sopenharmony_ci		end
2453e5c31af7Sopenharmony_ci
2454e5c31af7Sopenharmony_ci	end # in
2455e5c31af7Sopenharmony_ci
2456e5c31af7Sopenharmony_ci	# out
2457e5c31af7Sopenharmony_ci	group out "Array of arrays as an out-function paramter"
2458e5c31af7Sopenharmony_ci
2459e5c31af7Sopenharmony_ci		case float_3x3
2460e5c31af7Sopenharmony_ci			version 450
2461e5c31af7Sopenharmony_ci			desc "Testing array of arrays as an out-function parameter"
2462e5c31af7Sopenharmony_ci			values
2463e5c31af7Sopenharmony_ci			{
2464e5c31af7Sopenharmony_ci				input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(7.4, -1.0, 2.0) | vec3(3.0, 1.6, -2.0) ];
2465e5c31af7Sopenharmony_ci				output vec3 out0 = [ vec3(2.0, -0.5, 1.0) | vec3(2.0, -7.4, -1.0) | vec3(-2.0, -3.0, 1.6) ];
2466e5c31af7Sopenharmony_ci			}
2467e5c31af7Sopenharmony_ci
2468e5c31af7Sopenharmony_ci			both ""
2469e5c31af7Sopenharmony_ci				#version 450
2470e5c31af7Sopenharmony_ci				precision mediump float;
2471e5c31af7Sopenharmony_ci				${DECLARATIONS}
2472e5c31af7Sopenharmony_ci
2473e5c31af7Sopenharmony_ci				void func(out float[3][3] x, in vec3 p)
2474e5c31af7Sopenharmony_ci				{
2475e5c31af7Sopenharmony_ci					x = float[3][3] (	float[3] (p.z, 0.0, 0.0),
2476e5c31af7Sopenharmony_ci										float[3] (0.0, -p.x, 0.0),
2477e5c31af7Sopenharmony_ci										float[3] (0.0, 0.0, p.y) );
2478e5c31af7Sopenharmony_ci				}
2479e5c31af7Sopenharmony_ci
2480e5c31af7Sopenharmony_ci				void main()
2481e5c31af7Sopenharmony_ci				{
2482e5c31af7Sopenharmony_ci					${SETUP}
2483e5c31af7Sopenharmony_ci					float[3][3] x;
2484e5c31af7Sopenharmony_ci					func(x, in0);
2485e5c31af7Sopenharmony_ci					out0 = vec3(x[0][0], x[1][1], x[2][2]);
2486e5c31af7Sopenharmony_ci					${OUTPUT}
2487e5c31af7Sopenharmony_ci				}
2488e5c31af7Sopenharmony_ci			""
2489e5c31af7Sopenharmony_ci		end
2490e5c31af7Sopenharmony_ci
2491e5c31af7Sopenharmony_ci		case int_2x2x2
2492e5c31af7Sopenharmony_ci			version 450
2493e5c31af7Sopenharmony_ci			desc "Testing array of arrays as an out-function parameter"
2494e5c31af7Sopenharmony_ci			values
2495e5c31af7Sopenharmony_ci			{
2496e5c31af7Sopenharmony_ci				input ivec2 in0 = [ ivec2(4, 1) | ivec2(7, -1) | ivec2(3, 1) ];
2497e5c31af7Sopenharmony_ci				output ivec2 out0 =	[ ivec2(1, -4) | ivec2(-1, -7) | ivec2(1, -3) ];
2498e5c31af7Sopenharmony_ci			}
2499e5c31af7Sopenharmony_ci
2500e5c31af7Sopenharmony_ci			both ""
2501e5c31af7Sopenharmony_ci				#version 450
2502e5c31af7Sopenharmony_ci				precision mediump int;
2503e5c31af7Sopenharmony_ci				precision mediump float;
2504e5c31af7Sopenharmony_ci				${DECLARATIONS}
2505e5c31af7Sopenharmony_ci
2506e5c31af7Sopenharmony_ci				void func(out int[2][2][2] x, in ivec2 p)
2507e5c31af7Sopenharmony_ci				{
2508e5c31af7Sopenharmony_ci					x = int[2][2][2] (	int[2][2] (	int[2] (p.y, -p.x),
2509e5c31af7Sopenharmony_ci													int[2] (0, 0)),
2510e5c31af7Sopenharmony_ci										int[2][2] (	int[2] (0, 0),
2511e5c31af7Sopenharmony_ci													int[2] (p.y, -p.x)) );
2512e5c31af7Sopenharmony_ci				}
2513e5c31af7Sopenharmony_ci
2514e5c31af7Sopenharmony_ci				void main()
2515e5c31af7Sopenharmony_ci				{
2516e5c31af7Sopenharmony_ci					${SETUP}
2517e5c31af7Sopenharmony_ci					int[2][2][2] x;
2518e5c31af7Sopenharmony_ci					func(x, in0);
2519e5c31af7Sopenharmony_ci					out0 = ivec2(x[0][0][0], x[1][1][1]);
2520e5c31af7Sopenharmony_ci					${OUTPUT}
2521e5c31af7Sopenharmony_ci				}
2522e5c31af7Sopenharmony_ci			""
2523e5c31af7Sopenharmony_ci		end
2524e5c31af7Sopenharmony_ci
2525e5c31af7Sopenharmony_ci		case bool_3x2x3
2526e5c31af7Sopenharmony_ci			version 450
2527e5c31af7Sopenharmony_ci			desc "Testing array of arrays as an out-function parameter"
2528e5c31af7Sopenharmony_ci			values
2529e5c31af7Sopenharmony_ci			{
2530e5c31af7Sopenharmony_ci				input bvec3 in0 =	[ bvec3(false, true, true) ];
2531e5c31af7Sopenharmony_ci				output bvec3 out0 = [ bvec3(true, false, true) ];
2532e5c31af7Sopenharmony_ci			}
2533e5c31af7Sopenharmony_ci
2534e5c31af7Sopenharmony_ci			both ""
2535e5c31af7Sopenharmony_ci				#version 450
2536e5c31af7Sopenharmony_ci				precision mediump float;
2537e5c31af7Sopenharmony_ci				${DECLARATIONS}
2538e5c31af7Sopenharmony_ci
2539e5c31af7Sopenharmony_ci				void func(out bool x[3][2][3], in bvec3 p)
2540e5c31af7Sopenharmony_ci				{
2541e5c31af7Sopenharmony_ci					x = bool[3][2][3] (	bool[2][3] (bool[3] (p.z, p.x, p.y),
2542e5c31af7Sopenharmony_ci													bool[3] (p.x, p.y, p.z)),
2543e5c31af7Sopenharmony_ci										bool[2][3] (bool[3] (p.x, p.y, p.z),
2544e5c31af7Sopenharmony_ci													bool[3] (p.z, p.x, p.y)),
2545e5c31af7Sopenharmony_ci										bool[2][3] (bool[3] (p.y, p.z, p.x),
2546e5c31af7Sopenharmony_ci													bool[3] (p.y, p.z, p.x)) );
2547e5c31af7Sopenharmony_ci				}
2548e5c31af7Sopenharmony_ci
2549e5c31af7Sopenharmony_ci				void main()
2550e5c31af7Sopenharmony_ci				{
2551e5c31af7Sopenharmony_ci					${SETUP}
2552e5c31af7Sopenharmony_ci					bool[3] x[3][2];
2553e5c31af7Sopenharmony_ci					func(x, in0);
2554e5c31af7Sopenharmony_ci					out0 = bvec3(x[0][0][0], x[1][1][1], x[2][1][0]);
2555e5c31af7Sopenharmony_ci					${OUTPUT}
2556e5c31af7Sopenharmony_ci				}
2557e5c31af7Sopenharmony_ci			""
2558e5c31af7Sopenharmony_ci		end
2559e5c31af7Sopenharmony_ci
2560e5c31af7Sopenharmony_ci		case vec3_2x3
2561e5c31af7Sopenharmony_ci			version 450
2562e5c31af7Sopenharmony_ci			desc "Testing array of arrays as an out-function parameter"
2563e5c31af7Sopenharmony_ci			values
2564e5c31af7Sopenharmony_ci			{
2565e5c31af7Sopenharmony_ci				input vec3 in0 =	[ vec3(0.5, 1.0, 2.0) | vec3(-0.5, 11.2, -1.0) ];
2566e5c31af7Sopenharmony_ci				output vec3 out0 = [ vec3(1.0, 0.5, -2.0) | vec3(11.2, -0.5, 1.0) ];
2567e5c31af7Sopenharmony_ci			}
2568e5c31af7Sopenharmony_ci
2569e5c31af7Sopenharmony_ci			both ""
2570e5c31af7Sopenharmony_ci				#version 450
2571e5c31af7Sopenharmony_ci				precision mediump float;
2572e5c31af7Sopenharmony_ci				${DECLARATIONS}
2573e5c31af7Sopenharmony_ci
2574e5c31af7Sopenharmony_ci				void func(out vec3[3] x[2], in vec3 p)
2575e5c31af7Sopenharmony_ci				{
2576e5c31af7Sopenharmony_ci					x = vec3[2][3](	vec3[3] (vec3(p.x, p.y, -p.z),
2577e5c31af7Sopenharmony_ci											vec3(p.y, -p.z, p.x),
2578e5c31af7Sopenharmony_ci											vec3(-p.z, p.x, p.y)),
2579e5c31af7Sopenharmony_ci									vec3[3] (vec3(p.y, -p.z, p.x),
2580e5c31af7Sopenharmony_ci											vec3(p.x, p.y, -p.z),
2581e5c31af7Sopenharmony_ci											vec3(-p.z, p.x, p.y)) );
2582e5c31af7Sopenharmony_ci
2583e5c31af7Sopenharmony_ci					x = vec3[2][3] (vec3[3] (x[0][1], x[0][2], x[0][0]),
2584e5c31af7Sopenharmony_ci									vec3[3] (x[1][1], x[1][2], x[1][0]) );
2585e5c31af7Sopenharmony_ci				}
2586e5c31af7Sopenharmony_ci
2587e5c31af7Sopenharmony_ci				void main()
2588e5c31af7Sopenharmony_ci				{
2589e5c31af7Sopenharmony_ci					${SETUP}
2590e5c31af7Sopenharmony_ci					vec3[2][3] x;
2591e5c31af7Sopenharmony_ci					func(x, in0);
2592e5c31af7Sopenharmony_ci					out0 = vec3(x[0][0].x, x[1][1].y, x[0][2].z);
2593e5c31af7Sopenharmony_ci					${OUTPUT}
2594e5c31af7Sopenharmony_ci				}
2595e5c31af7Sopenharmony_ci			""
2596e5c31af7Sopenharmony_ci		end
2597e5c31af7Sopenharmony_ci
2598e5c31af7Sopenharmony_ci		case struct_3x1x3
2599e5c31af7Sopenharmony_ci			version 450
2600e5c31af7Sopenharmony_ci			desc "Testing array of arrays as an out-function parameter"
2601e5c31af7Sopenharmony_ci			values
2602e5c31af7Sopenharmony_ci			{
2603e5c31af7Sopenharmony_ci				input vec3 in0 = [ vec3(0.5, 1.0, 2.0) ];
2604e5c31af7Sopenharmony_ci				output vec3 out0 = [ vec3(-1.0, 2.0, 0.5) ];
2605e5c31af7Sopenharmony_ci			}
2606e5c31af7Sopenharmony_ci
2607e5c31af7Sopenharmony_ci			both ""
2608e5c31af7Sopenharmony_ci				#version 450
2609e5c31af7Sopenharmony_ci				precision mediump float;
2610e5c31af7Sopenharmony_ci				${DECLARATIONS}
2611e5c31af7Sopenharmony_ci
2612e5c31af7Sopenharmony_ci				struct Test
2613e5c31af7Sopenharmony_ci				{
2614e5c31af7Sopenharmony_ci					float f;
2615e5c31af7Sopenharmony_ci					vec3 v;
2616e5c31af7Sopenharmony_ci				};
2617e5c31af7Sopenharmony_ci
2618e5c31af7Sopenharmony_ci				void func(out Test[3] x[3][1], in vec3 p)
2619e5c31af7Sopenharmony_ci				{
2620e5c31af7Sopenharmony_ci					Test a = Test(p.z, vec3(p.x, p.y, p.z));
2621e5c31af7Sopenharmony_ci					Test b = Test(p.y, vec3(-p.z, -p.x, -p.y));
2622e5c31af7Sopenharmony_ci					Test c = Test(p.x, vec3(-p.y, p.z, -p.x));
2623e5c31af7Sopenharmony_ci
2624e5c31af7Sopenharmony_ci					x = Test[3][1][3] (	Test[1][3] (Test[3] (b, b, b)),
2625e5c31af7Sopenharmony_ci										Test[1][3] (Test[3] (a, a, a)),
2626e5c31af7Sopenharmony_ci										Test[1][3] (Test[3] (c, c, c)) );
2627e5c31af7Sopenharmony_ci				}
2628e5c31af7Sopenharmony_ci
2629e5c31af7Sopenharmony_ci				void main()
2630e5c31af7Sopenharmony_ci				{
2631e5c31af7Sopenharmony_ci					${SETUP}
2632e5c31af7Sopenharmony_ci					Test x[3][1][3];
2633e5c31af7Sopenharmony_ci					func(x, in0);
2634e5c31af7Sopenharmony_ci					out0 = vec3(x[0][0][0].v.z, x[2][0][2].v.y, x[1][0][1].v.x);
2635e5c31af7Sopenharmony_ci					${OUTPUT}
2636e5c31af7Sopenharmony_ci				}
2637e5c31af7Sopenharmony_ci			""
2638e5c31af7Sopenharmony_ci		end
2639e5c31af7Sopenharmony_ci
2640e5c31af7Sopenharmony_ci		case ivec3_3x3
2641e5c31af7Sopenharmony_ci			version 450
2642e5c31af7Sopenharmony_ci			desc "Testing array of arrays as an out-function parameter"
2643e5c31af7Sopenharmony_ci			values
2644e5c31af7Sopenharmony_ci			{
2645e5c31af7Sopenharmony_ci				input ivec3 in0 = [ ivec3(5, 1, 2) | ivec3(-5, 11, -1) ];
2646e5c31af7Sopenharmony_ci				output ivec3 out0 = [ ivec3(1, 5, -2) | ivec3(11, -5, 1) ];
2647e5c31af7Sopenharmony_ci			}
2648e5c31af7Sopenharmony_ci
2649e5c31af7Sopenharmony_ci			both ""
2650e5c31af7Sopenharmony_ci				#version 450
2651e5c31af7Sopenharmony_ci				precision mediump int;
2652e5c31af7Sopenharmony_ci				precision mediump float;
2653e5c31af7Sopenharmony_ci				${DECLARATIONS}
2654e5c31af7Sopenharmony_ci
2655e5c31af7Sopenharmony_ci				void func(out ivec3 x[3][3], in ivec3 p)
2656e5c31af7Sopenharmony_ci				{
2657e5c31af7Sopenharmony_ci					x = ivec3[3][3] (ivec3[3] (	ivec3(p.x, p.y, -p.z),
2658e5c31af7Sopenharmony_ci												ivec3(p.x, p.y, -p.z),
2659e5c31af7Sopenharmony_ci												ivec3(p.x, p.y, -p.z)),
2660e5c31af7Sopenharmony_ci
2661e5c31af7Sopenharmony_ci									ivec3[3] (	ivec3(p.y, -p.z, p.x),
2662e5c31af7Sopenharmony_ci												ivec3(p.y, -p.z, p.x),
2663e5c31af7Sopenharmony_ci												ivec3(p.y, -p.z, p.x)),
2664e5c31af7Sopenharmony_ci
2665e5c31af7Sopenharmony_ci									ivec3[3] (	ivec3(-p.z, p.x, p.y),
2666e5c31af7Sopenharmony_ci												ivec3(-p.z, p.x, p.y),
2667e5c31af7Sopenharmony_ci												ivec3(-p.z, p.x, p.y)) );
2668e5c31af7Sopenharmony_ci				}
2669e5c31af7Sopenharmony_ci
2670e5c31af7Sopenharmony_ci
2671e5c31af7Sopenharmony_ci				void main()
2672e5c31af7Sopenharmony_ci				{
2673e5c31af7Sopenharmony_ci					${SETUP}
2674e5c31af7Sopenharmony_ci					ivec3[3][3] x;
2675e5c31af7Sopenharmony_ci					func(x, in0);
2676e5c31af7Sopenharmony_ci					out0 = ivec3(x[1][0].x, x[2][0].y, x[0][2].z);
2677e5c31af7Sopenharmony_ci					${OUTPUT}
2678e5c31af7Sopenharmony_ci				}
2679e5c31af7Sopenharmony_ci			""
2680e5c31af7Sopenharmony_ci		end
2681e5c31af7Sopenharmony_ci
2682e5c31af7Sopenharmony_ci		case bvec4_4x2
2683e5c31af7Sopenharmony_ci			version 450
2684e5c31af7Sopenharmony_ci			desc "Testing array of arrays as an out-function parameter"
2685e5c31af7Sopenharmony_ci			values
2686e5c31af7Sopenharmony_ci			{
2687e5c31af7Sopenharmony_ci				input bvec4 in0 =	[ bvec4(true, false, false, true) ];
2688e5c31af7Sopenharmony_ci				output bvec4 out0 = [ bvec4(true, true, false, true) ];
2689e5c31af7Sopenharmony_ci			}
2690e5c31af7Sopenharmony_ci
2691e5c31af7Sopenharmony_ci			both ""
2692e5c31af7Sopenharmony_ci				#version 450
2693e5c31af7Sopenharmony_ci				precision mediump int;
2694e5c31af7Sopenharmony_ci				precision mediump float;
2695e5c31af7Sopenharmony_ci				${DECLARATIONS}
2696e5c31af7Sopenharmony_ci
2697e5c31af7Sopenharmony_ci				void func(out bvec4[4][2] x, in bvec4 p)
2698e5c31af7Sopenharmony_ci				{
2699e5c31af7Sopenharmony_ci					bvec4[4] a = bvec4[4](	bvec4(p.x, p.y, p.z, p.w),
2700e5c31af7Sopenharmony_ci											bvec4(p.w, p.y, p.z, p.x),
2701e5c31af7Sopenharmony_ci											bvec4(p.z, p.w, p.x, p.y),
2702e5c31af7Sopenharmony_ci											bvec4(p.y, p.x, p.z, p.w) );
2703e5c31af7Sopenharmony_ci
2704e5c31af7Sopenharmony_ci					x = bvec4[4][2] (	bvec4[2] (bvec4(a[0]),
2705e5c31af7Sopenharmony_ci												  bvec4(a[1])),
2706e5c31af7Sopenharmony_ci
2707e5c31af7Sopenharmony_ci										bvec4[2] (bvec4(a[2]),
2708e5c31af7Sopenharmony_ci												  bvec4(a[3])),
2709e5c31af7Sopenharmony_ci
2710e5c31af7Sopenharmony_ci										bvec4[2] (bvec4(a[1]),
2711e5c31af7Sopenharmony_ci												  bvec4(a[2])),
2712e5c31af7Sopenharmony_ci
2713e5c31af7Sopenharmony_ci										bvec4[2] (bvec4(a[3]),
2714e5c31af7Sopenharmony_ci												  bvec4(a[0])) );
2715e5c31af7Sopenharmony_ci				}
2716e5c31af7Sopenharmony_ci
2717e5c31af7Sopenharmony_ci				void main()
2718e5c31af7Sopenharmony_ci				{
2719e5c31af7Sopenharmony_ci					${SETUP}
2720e5c31af7Sopenharmony_ci					bvec4 x[4][2];
2721e5c31af7Sopenharmony_ci					func(x, in0);
2722e5c31af7Sopenharmony_ci					out0 = bvec4(x[0][1].x, x[1][0].y, x[2][0].z, x[3][1].w);
2723e5c31af7Sopenharmony_ci					${OUTPUT}
2724e5c31af7Sopenharmony_ci				}
2725e5c31af7Sopenharmony_ci			""
2726e5c31af7Sopenharmony_ci		end
2727e5c31af7Sopenharmony_ci
2728e5c31af7Sopenharmony_ci		case mat3_3x2
2729e5c31af7Sopenharmony_ci			version 450
2730e5c31af7Sopenharmony_ci			desc "Testing array of arrays as an out-function parameter"
2731e5c31af7Sopenharmony_ci			values
2732e5c31af7Sopenharmony_ci			{
2733e5c31af7Sopenharmony_ci				input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(-1.5, 0.0, -2.3) ];
2734e5c31af7Sopenharmony_ci				output vec3 out0 = [ vec3(0.5, -1.0, 1.0) | vec3(-1.5, 0.0, 0.0) ];
2735e5c31af7Sopenharmony_ci			}
2736e5c31af7Sopenharmony_ci
2737e5c31af7Sopenharmony_ci			both ""
2738e5c31af7Sopenharmony_ci				#version 450
2739e5c31af7Sopenharmony_ci				precision mediump float;
2740e5c31af7Sopenharmony_ci				${DECLARATIONS}
2741e5c31af7Sopenharmony_ci
2742e5c31af7Sopenharmony_ci				void func(out mat3[2] x[3], in vec3 p)
2743e5c31af7Sopenharmony_ci				{
2744e5c31af7Sopenharmony_ci					mat3 a = mat3(	p.x, p.y, p.z,
2745e5c31af7Sopenharmony_ci									p.x, p.y, p.z,
2746e5c31af7Sopenharmony_ci									p.x, p.y, p.z);
2747e5c31af7Sopenharmony_ci
2748e5c31af7Sopenharmony_ci					mat3 b = mat3(	p.z, p.x, -p.y,
2749e5c31af7Sopenharmony_ci									p.z, p.x, -p.y,
2750e5c31af7Sopenharmony_ci									p.z, p.x, -p.y);
2751e5c31af7Sopenharmony_ci
2752e5c31af7Sopenharmony_ci					mat3 c = mat3 (	-p.z, -p.z, p.z,
2753e5c31af7Sopenharmony_ci									-p.y, -p.y, p.y,
2754e5c31af7Sopenharmony_ci									-p.x, -p.x, p.x);
2755e5c31af7Sopenharmony_ci
2756e5c31af7Sopenharmony_ci					x = mat3[3][2] (mat3[2] (a, b),
2757e5c31af7Sopenharmony_ci									mat3[2] (c, a),
2758e5c31af7Sopenharmony_ci									mat3[2] (b, c) );
2759e5c31af7Sopenharmony_ci				}
2760e5c31af7Sopenharmony_ci
2761e5c31af7Sopenharmony_ci				void main()
2762e5c31af7Sopenharmony_ci				{
2763e5c31af7Sopenharmony_ci					${SETUP}
2764e5c31af7Sopenharmony_ci
2765e5c31af7Sopenharmony_ci					mat3[3][2] x;
2766e5c31af7Sopenharmony_ci					func(x, in0);
2767e5c31af7Sopenharmony_ci
2768e5c31af7Sopenharmony_ci					mat3 a0 = x[0][0];
2769e5c31af7Sopenharmony_ci					mat3 a1 = x[0][1];
2770e5c31af7Sopenharmony_ci					mat3 a2 = x[2][1];
2771e5c31af7Sopenharmony_ci
2772e5c31af7Sopenharmony_ci					float ret0 = a0[2][0];
2773e5c31af7Sopenharmony_ci					float ret1 = a1[0][2];
2774e5c31af7Sopenharmony_ci					float ret2 = a2[1][2];
2775e5c31af7Sopenharmony_ci
2776e5c31af7Sopenharmony_ci					out0 = vec3(ret0, ret1, ret2);
2777e5c31af7Sopenharmony_ci
2778e5c31af7Sopenharmony_ci					${OUTPUT}
2779e5c31af7Sopenharmony_ci				}
2780e5c31af7Sopenharmony_ci			""
2781e5c31af7Sopenharmony_ci		end
2782e5c31af7Sopenharmony_ci
2783e5c31af7Sopenharmony_ci		case mat3_3x3x3
2784e5c31af7Sopenharmony_ci			version 450
2785e5c31af7Sopenharmony_ci			desc "Testing array of arrays as an out-function parameter"
2786e5c31af7Sopenharmony_ci			values
2787e5c31af7Sopenharmony_ci			{
2788e5c31af7Sopenharmony_ci				input ivec3 in0 = [ ivec3(0, 1, 2) | ivec3(-1, 0, -2) ];
2789e5c31af7Sopenharmony_ci				output ivec3 out0 = [ ivec3(0, -1, 1) | ivec3(-1, 0, 0) ];
2790e5c31af7Sopenharmony_ci			}
2791e5c31af7Sopenharmony_ci
2792e5c31af7Sopenharmony_ci			both ""
2793e5c31af7Sopenharmony_ci				#version 450
2794e5c31af7Sopenharmony_ci				precision mediump int;
2795e5c31af7Sopenharmony_ci				precision mediump float;
2796e5c31af7Sopenharmony_ci				${DECLARATIONS}
2797e5c31af7Sopenharmony_ci
2798e5c31af7Sopenharmony_ci				void func(out mat3[3] x[3][3], in ivec3 p)
2799e5c31af7Sopenharmony_ci				{
2800e5c31af7Sopenharmony_ci					mat3 a = mat3(	p.x, p.y, p.z,
2801e5c31af7Sopenharmony_ci									p.x, p.y, p.z,
2802e5c31af7Sopenharmony_ci									p.x, p.y, p.z);
2803e5c31af7Sopenharmony_ci					mat3 b = mat3(	p.z, p.x, -p.y,
2804e5c31af7Sopenharmony_ci									p.z, p.x, -p.y,
2805e5c31af7Sopenharmony_ci									p.z, p.x, -p.y);
2806e5c31af7Sopenharmony_ci					mat3 c = mat3(	-p.z, -p.z, p.z,
2807e5c31af7Sopenharmony_ci									-p.y, -p.y, p.y,
2808e5c31af7Sopenharmony_ci									-p.x, -p.x, p.x);
2809e5c31af7Sopenharmony_ci
2810e5c31af7Sopenharmony_ci					x = mat3[3][3][3] (	mat3[3][3] (mat3[3] (a, a, a),
2811e5c31af7Sopenharmony_ci													mat3[3] (b, b, b),
2812e5c31af7Sopenharmony_ci													mat3[3] (c, c, c)),
2813e5c31af7Sopenharmony_ci
2814e5c31af7Sopenharmony_ci										mat3[3][3] (mat3[3] (b, b, b),
2815e5c31af7Sopenharmony_ci													mat3[3] (a, a, a),
2816e5c31af7Sopenharmony_ci													mat3[3] (c, c, c)),
2817e5c31af7Sopenharmony_ci
2818e5c31af7Sopenharmony_ci										mat3[3][3] (mat3[3] (c, c, c),
2819e5c31af7Sopenharmony_ci													mat3[3] (a, a, a),
2820e5c31af7Sopenharmony_ci													mat3[3] (b, b, b)) );
2821e5c31af7Sopenharmony_ci				}
2822e5c31af7Sopenharmony_ci
2823e5c31af7Sopenharmony_ci				void main()
2824e5c31af7Sopenharmony_ci				{
2825e5c31af7Sopenharmony_ci					${SETUP}
2826e5c31af7Sopenharmony_ci
2827e5c31af7Sopenharmony_ci					mat3 x[3][3][3];
2828e5c31af7Sopenharmony_ci					func(x, in0);
2829e5c31af7Sopenharmony_ci
2830e5c31af7Sopenharmony_ci					mat3 x0 = x[0][0][0];
2831e5c31af7Sopenharmony_ci					mat3 x1 = x[1][0][0];
2832e5c31af7Sopenharmony_ci					mat3 x2 = x[2][0][0];
2833e5c31af7Sopenharmony_ci
2834e5c31af7Sopenharmony_ci					float ret0 = x0[2][0];
2835e5c31af7Sopenharmony_ci					float ret1 = x1[0][2];
2836e5c31af7Sopenharmony_ci					float ret2 = x2[1][2];
2837e5c31af7Sopenharmony_ci
2838e5c31af7Sopenharmony_ci					out0 = ivec3(ret0, ret1, ret2);
2839e5c31af7Sopenharmony_ci
2840e5c31af7Sopenharmony_ci					${OUTPUT}
2841e5c31af7Sopenharmony_ci				}
2842e5c31af7Sopenharmony_ci			""
2843e5c31af7Sopenharmony_ci		end
2844e5c31af7Sopenharmony_ci
2845e5c31af7Sopenharmony_ci		case mat3_3x4
2846e5c31af7Sopenharmony_ci			version 450
2847e5c31af7Sopenharmony_ci			desc "Testing array of arrays as an out-function parameter"
2848e5c31af7Sopenharmony_ci			values
2849e5c31af7Sopenharmony_ci			{
2850e5c31af7Sopenharmony_ci				input bvec3 in0 = [ bvec3(true, false, true) ];
2851e5c31af7Sopenharmony_ci				output bvec3 out0 = [ bvec3(true, false, false) ];
2852e5c31af7Sopenharmony_ci			}
2853e5c31af7Sopenharmony_ci
2854e5c31af7Sopenharmony_ci			both ""
2855e5c31af7Sopenharmony_ci				#version 450
2856e5c31af7Sopenharmony_ci				precision mediump float;
2857e5c31af7Sopenharmony_ci				${DECLARATIONS}
2858e5c31af7Sopenharmony_ci
2859e5c31af7Sopenharmony_ci				void func(out mat3[4] x[3], in bvec3 p)
2860e5c31af7Sopenharmony_ci				{
2861e5c31af7Sopenharmony_ci					mat3 a = mat3(	p.x, p.y, p.z,
2862e5c31af7Sopenharmony_ci									p.x, p.y, p.z,
2863e5c31af7Sopenharmony_ci									p.x, p.y, p.z);
2864e5c31af7Sopenharmony_ci
2865e5c31af7Sopenharmony_ci					mat3 b = mat3(	p.z, p.x, p.y,
2866e5c31af7Sopenharmony_ci									p.z, p.x, p.y,
2867e5c31af7Sopenharmony_ci									p.z, p.x, p.y);
2868e5c31af7Sopenharmony_ci
2869e5c31af7Sopenharmony_ci					mat3 c = mat3(	p.z, p.z, p.z,
2870e5c31af7Sopenharmony_ci									p.y, p.y, p.y,
2871e5c31af7Sopenharmony_ci									p.x, p.x, p.x);
2872e5c31af7Sopenharmony_ci
2873e5c31af7Sopenharmony_ci					x = mat3[3][4] (mat3[4] (a, b, c, a),
2874e5c31af7Sopenharmony_ci									mat3[4] (b, c, a, b),
2875e5c31af7Sopenharmony_ci									mat3[4] (c, a, b, c) );
2876e5c31af7Sopenharmony_ci				}
2877e5c31af7Sopenharmony_ci
2878e5c31af7Sopenharmony_ci				void main()
2879e5c31af7Sopenharmony_ci				{
2880e5c31af7Sopenharmony_ci					${SETUP}
2881e5c31af7Sopenharmony_ci
2882e5c31af7Sopenharmony_ci					mat3 x[3][4];
2883e5c31af7Sopenharmony_ci					func(x, in0);
2884e5c31af7Sopenharmony_ci
2885e5c31af7Sopenharmony_ci					mat3 x0 = x[0][0];
2886e5c31af7Sopenharmony_ci					mat3 x1 = x[1][3];
2887e5c31af7Sopenharmony_ci					mat3 x2 = x[2][0];
2888e5c31af7Sopenharmony_ci
2889e5c31af7Sopenharmony_ci					float ret0 = x0[2][0];
2890e5c31af7Sopenharmony_ci					float ret1 = x1[0][2];
2891e5c31af7Sopenharmony_ci					float ret2 = x2[1][2];
2892e5c31af7Sopenharmony_ci
2893e5c31af7Sopenharmony_ci					out0 = bvec3(ret0, ret1, ret2);
2894e5c31af7Sopenharmony_ci
2895e5c31af7Sopenharmony_ci					${OUTPUT}
2896e5c31af7Sopenharmony_ci				}
2897e5c31af7Sopenharmony_ci			""
2898e5c31af7Sopenharmony_ci		end
2899e5c31af7Sopenharmony_ci
2900e5c31af7Sopenharmony_ci	end # out
2901e5c31af7Sopenharmony_ci
2902e5c31af7Sopenharmony_ci	group unnamed "Array of arrays as unnamed parameter of a function prototype"
2903e5c31af7Sopenharmony_ci
2904e5c31af7Sopenharmony_ci		case float_3x3
2905e5c31af7Sopenharmony_ci			version 450
2906e5c31af7Sopenharmony_ci			desc "Testing array of arrays as unnamed parameter of a function prototype"
2907e5c31af7Sopenharmony_ci			values
2908e5c31af7Sopenharmony_ci			{
2909e5c31af7Sopenharmony_ci				input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(7.4, -1.0, 2.0) | vec3(3.0, 1.6, -2.0) ];
2910e5c31af7Sopenharmony_ci				output vec3 out0 = [ vec3(2.0, -0.5, 1.0) | vec3(2.0, -7.4, -1.0) | vec3(-2.0, -3.0, 1.6) ];
2911e5c31af7Sopenharmony_ci			}
2912e5c31af7Sopenharmony_ci
2913e5c31af7Sopenharmony_ci			both ""
2914e5c31af7Sopenharmony_ci				#version 450
2915e5c31af7Sopenharmony_ci				precision mediump float;
2916e5c31af7Sopenharmony_ci				${DECLARATIONS}
2917e5c31af7Sopenharmony_ci
2918e5c31af7Sopenharmony_ci				vec3 func(in float[3][3]);
2919e5c31af7Sopenharmony_ci
2920e5c31af7Sopenharmony_ci				void main()
2921e5c31af7Sopenharmony_ci				{
2922e5c31af7Sopenharmony_ci					${SETUP}
2923e5c31af7Sopenharmony_ci					float[3][3] x = float[3][3] (	float[3] (in0.z, 0.0, 0.0),
2924e5c31af7Sopenharmony_ci													float[3] (0.0, -in0.x, 0.0),
2925e5c31af7Sopenharmony_ci													float[3] (0.0, 0.0, in0.y) );
2926e5c31af7Sopenharmony_ci					out0 = func(x);
2927e5c31af7Sopenharmony_ci					${OUTPUT}
2928e5c31af7Sopenharmony_ci				}
2929e5c31af7Sopenharmony_ci
2930e5c31af7Sopenharmony_ci				vec3 func(in float[3][3] x)
2931e5c31af7Sopenharmony_ci				{
2932e5c31af7Sopenharmony_ci					return vec3(x[0][0], x[1][1], x[2][2]);
2933e5c31af7Sopenharmony_ci				}
2934e5c31af7Sopenharmony_ci			""
2935e5c31af7Sopenharmony_ci		end
2936e5c31af7Sopenharmony_ci
2937e5c31af7Sopenharmony_ci		case int_2x2x2
2938e5c31af7Sopenharmony_ci			version 450
2939e5c31af7Sopenharmony_ci			desc "Testing array of arrays as unnamed parameter of a function prototype"
2940e5c31af7Sopenharmony_ci			values
2941e5c31af7Sopenharmony_ci			{
2942e5c31af7Sopenharmony_ci				input ivec2 in0 = [ ivec2(4, 1) | ivec2(7, -1) | ivec2(3, 1) ];
2943e5c31af7Sopenharmony_ci				output ivec2 out0 =	[ ivec2(1, -4) | ivec2(-1, -7) | ivec2(1, -3) ];
2944e5c31af7Sopenharmony_ci			}
2945e5c31af7Sopenharmony_ci
2946e5c31af7Sopenharmony_ci			both ""
2947e5c31af7Sopenharmony_ci				#version 450
2948e5c31af7Sopenharmony_ci				precision mediump int;
2949e5c31af7Sopenharmony_ci				precision mediump float;
2950e5c31af7Sopenharmony_ci				${DECLARATIONS}
2951e5c31af7Sopenharmony_ci
2952e5c31af7Sopenharmony_ci				ivec2 func(in int[2][2][2]);
2953e5c31af7Sopenharmony_ci
2954e5c31af7Sopenharmony_ci				void main()
2955e5c31af7Sopenharmony_ci				{
2956e5c31af7Sopenharmony_ci					${SETUP}
2957e5c31af7Sopenharmony_ci					int[2][2][2] x = int[2][2][2] (	int[2][2] (	int[2] (in0.y, -in0.x),
2958e5c31af7Sopenharmony_ci																int[2] (0, 0)),
2959e5c31af7Sopenharmony_ci													int[2][2] (	int[2] (0, 0),
2960e5c31af7Sopenharmony_ci																int[2] (in0.y, -in0.x)) );
2961e5c31af7Sopenharmony_ci					out0 = func(x);
2962e5c31af7Sopenharmony_ci					${OUTPUT}
2963e5c31af7Sopenharmony_ci				}
2964e5c31af7Sopenharmony_ci
2965e5c31af7Sopenharmony_ci				ivec2 func(in int[2][2][2] x)
2966e5c31af7Sopenharmony_ci				{
2967e5c31af7Sopenharmony_ci					return ivec2(x[0][0][0], x[1][1][1]);
2968e5c31af7Sopenharmony_ci				}
2969e5c31af7Sopenharmony_ci
2970e5c31af7Sopenharmony_ci			""
2971e5c31af7Sopenharmony_ci		end
2972e5c31af7Sopenharmony_ci
2973e5c31af7Sopenharmony_ci		case bool_3x2x3
2974e5c31af7Sopenharmony_ci			version 450
2975e5c31af7Sopenharmony_ci			desc "Testing array of arrays as unnamed parameter of a function prototype"
2976e5c31af7Sopenharmony_ci			values
2977e5c31af7Sopenharmony_ci			{
2978e5c31af7Sopenharmony_ci				input bvec3 in0 =	[ bvec3(false, true, true) ];
2979e5c31af7Sopenharmony_ci				output bvec3 out0 = [ bvec3(true, false, true) ];
2980e5c31af7Sopenharmony_ci			}
2981e5c31af7Sopenharmony_ci
2982e5c31af7Sopenharmony_ci			both ""
2983e5c31af7Sopenharmony_ci				#version 450
2984e5c31af7Sopenharmony_ci				precision mediump float;
2985e5c31af7Sopenharmony_ci				${DECLARATIONS}
2986e5c31af7Sopenharmony_ci
2987e5c31af7Sopenharmony_ci				bvec3 func(in bool[3][2][3]);
2988e5c31af7Sopenharmony_ci
2989e5c31af7Sopenharmony_ci				void main()
2990e5c31af7Sopenharmony_ci				{
2991e5c31af7Sopenharmony_ci					${SETUP}
2992e5c31af7Sopenharmony_ci					bool[3] x[3][2] = bool[3][2][3] (	bool[2][3] (bool[3] (in0.z, in0.x, in0.y),
2993e5c31af7Sopenharmony_ci																	bool[3] (in0.x, in0.y, in0.z)),
2994e5c31af7Sopenharmony_ci														bool[2][3] (bool[3] (in0.x, in0.y, in0.z),
2995e5c31af7Sopenharmony_ci																	bool[3] (in0.z, in0.x, in0.y)),
2996e5c31af7Sopenharmony_ci														bool[2][3] (bool[3] (in0.y, in0.z, in0.x),
2997e5c31af7Sopenharmony_ci																	bool[3] (in0.y, in0.z, in0.x)) );
2998e5c31af7Sopenharmony_ci					out0 = func(x);
2999e5c31af7Sopenharmony_ci					${OUTPUT}
3000e5c31af7Sopenharmony_ci				}
3001e5c31af7Sopenharmony_ci
3002e5c31af7Sopenharmony_ci				bvec3 func(in bool x[3][2][3])
3003e5c31af7Sopenharmony_ci				{
3004e5c31af7Sopenharmony_ci					return bvec3(x[0][0][0], x[1][1][1], x[2][1][0]);
3005e5c31af7Sopenharmony_ci				}
3006e5c31af7Sopenharmony_ci			""
3007e5c31af7Sopenharmony_ci		end
3008e5c31af7Sopenharmony_ci
3009e5c31af7Sopenharmony_ci		case vec3_2x3
3010e5c31af7Sopenharmony_ci			version 450
3011e5c31af7Sopenharmony_ci			desc "Testing array of arrays as unnamed parameter of a function prototype"
3012e5c31af7Sopenharmony_ci			values
3013e5c31af7Sopenharmony_ci			{
3014e5c31af7Sopenharmony_ci				input vec3 in0 =	[ vec3(0.5, 1.0, 2.0) | vec3(-0.5, 11.2, -1.0) ];
3015e5c31af7Sopenharmony_ci				output vec3 out0 = [ vec3(1.0, 0.5, -2.0) | vec3(11.2, -0.5, 1.0) ];
3016e5c31af7Sopenharmony_ci			}
3017e5c31af7Sopenharmony_ci
3018e5c31af7Sopenharmony_ci			both ""
3019e5c31af7Sopenharmony_ci				#version 450
3020e5c31af7Sopenharmony_ci				precision mediump float;
3021e5c31af7Sopenharmony_ci				${DECLARATIONS}
3022e5c31af7Sopenharmony_ci
3023e5c31af7Sopenharmony_ci				vec3 func(in vec3[2][3]);
3024e5c31af7Sopenharmony_ci
3025e5c31af7Sopenharmony_ci				void main()
3026e5c31af7Sopenharmony_ci				{
3027e5c31af7Sopenharmony_ci					${SETUP}
3028e5c31af7Sopenharmony_ci					vec3[2][3] x = vec3[2][3](	vec3[3] (	vec3(in0.x, in0.y, -in0.z),
3029e5c31af7Sopenharmony_ci															vec3(in0.y, -in0.z, in0.x),
3030e5c31af7Sopenharmony_ci															vec3(-in0.z, in0.x, in0.y)),
3031e5c31af7Sopenharmony_ci												vec3[3] (	vec3(in0.y, -in0.z, in0.x),
3032e5c31af7Sopenharmony_ci															vec3(in0.x, in0.y, -in0.z),
3033e5c31af7Sopenharmony_ci															vec3(-in0.z, in0.x, in0.y)) );
3034e5c31af7Sopenharmony_ci
3035e5c31af7Sopenharmony_ci					x = vec3[2][3] (vec3[3] (x[0][1], x[0][2], x[0][0]),
3036e5c31af7Sopenharmony_ci									vec3[3] (x[1][1], x[1][2], x[1][0]) );
3037e5c31af7Sopenharmony_ci					out0 = func(x);
3038e5c31af7Sopenharmony_ci					${OUTPUT}
3039e5c31af7Sopenharmony_ci				}
3040e5c31af7Sopenharmony_ci
3041e5c31af7Sopenharmony_ci				vec3 func(in vec3[3] x[2])
3042e5c31af7Sopenharmony_ci				{
3043e5c31af7Sopenharmony_ci					return vec3(x[0][0].x, x[1][1].y, x[0][2].z);
3044e5c31af7Sopenharmony_ci				}
3045e5c31af7Sopenharmony_ci			""
3046e5c31af7Sopenharmony_ci		end
3047e5c31af7Sopenharmony_ci
3048e5c31af7Sopenharmony_ci		case struct_3x1x3
3049e5c31af7Sopenharmony_ci			version 450
3050e5c31af7Sopenharmony_ci			desc "Testing array of arrays as unnamed parameter of a function prototype"
3051e5c31af7Sopenharmony_ci			values
3052e5c31af7Sopenharmony_ci			{
3053e5c31af7Sopenharmony_ci				input vec3 in0 = [ vec3(0.5, 1.0, 2.0) ];
3054e5c31af7Sopenharmony_ci				output vec3 out0 = [ vec3(-1.0, 2.0, 0.5) ];
3055e5c31af7Sopenharmony_ci			}
3056e5c31af7Sopenharmony_ci
3057e5c31af7Sopenharmony_ci			both ""
3058e5c31af7Sopenharmony_ci				#version 450
3059e5c31af7Sopenharmony_ci				precision mediump float;
3060e5c31af7Sopenharmony_ci				${DECLARATIONS}
3061e5c31af7Sopenharmony_ci
3062e5c31af7Sopenharmony_ci				struct Test
3063e5c31af7Sopenharmony_ci				{
3064e5c31af7Sopenharmony_ci					float f;
3065e5c31af7Sopenharmony_ci					vec3 v;
3066e5c31af7Sopenharmony_ci				};
3067e5c31af7Sopenharmony_ci
3068e5c31af7Sopenharmony_ci				vec3 func(in Test[3] x[3][1])
3069e5c31af7Sopenharmony_ci				{
3070e5c31af7Sopenharmony_ci					return vec3(x[0][0][0].v.z, x[2][0][2].v.y, x[1][0][1].v.x);
3071e5c31af7Sopenharmony_ci				}
3072e5c31af7Sopenharmony_ci
3073e5c31af7Sopenharmony_ci				void main()
3074e5c31af7Sopenharmony_ci				{
3075e5c31af7Sopenharmony_ci					${SETUP}
3076e5c31af7Sopenharmony_ci					Test a = Test(in0.z, vec3(in0.x, in0.y, in0.z));
3077e5c31af7Sopenharmony_ci					Test b = Test(in0.y, vec3(-in0.z, -in0.x, -in0.y));
3078e5c31af7Sopenharmony_ci					Test c = Test(in0.x, vec3(-in0.y, in0.z, -in0.x));
3079e5c31af7Sopenharmony_ci
3080e5c31af7Sopenharmony_ci					Test x[3][1][3] = Test[3][1][3] (	Test[1][3] (Test[3] (b, b, b)),
3081e5c31af7Sopenharmony_ci														Test[1][3] (Test[3] (a, a, a)),
3082e5c31af7Sopenharmony_ci														Test[1][3] (Test[3] (c, c, c)) );
3083e5c31af7Sopenharmony_ci
3084e5c31af7Sopenharmony_ci					out0 = func(x);
3085e5c31af7Sopenharmony_ci					${OUTPUT}
3086e5c31af7Sopenharmony_ci				}
3087e5c31af7Sopenharmony_ci			""
3088e5c31af7Sopenharmony_ci		end
3089e5c31af7Sopenharmony_ci
3090e5c31af7Sopenharmony_ci		case ivec3_3x3
3091e5c31af7Sopenharmony_ci			version 450
3092e5c31af7Sopenharmony_ci			desc "Testing array of arrays as unnamed parameter of a function prototype"
3093e5c31af7Sopenharmony_ci			values
3094e5c31af7Sopenharmony_ci			{
3095e5c31af7Sopenharmony_ci				input ivec3 in0 = [ ivec3(5, 1, 2) | ivec3(-5, 11, -1) ];
3096e5c31af7Sopenharmony_ci				output ivec3 out0 = [ ivec3(1, 5, -2) | ivec3(11, -5, 1) ];
3097e5c31af7Sopenharmony_ci			}
3098e5c31af7Sopenharmony_ci
3099e5c31af7Sopenharmony_ci			both ""
3100e5c31af7Sopenharmony_ci				#version 450
3101e5c31af7Sopenharmony_ci				precision mediump int;
3102e5c31af7Sopenharmony_ci				precision mediump float;
3103e5c31af7Sopenharmony_ci				${DECLARATIONS}
3104e5c31af7Sopenharmony_ci
3105e5c31af7Sopenharmony_ci				ivec3 func(in ivec3[3][3]);
3106e5c31af7Sopenharmony_ci
3107e5c31af7Sopenharmony_ci				void main()
3108e5c31af7Sopenharmony_ci				{
3109e5c31af7Sopenharmony_ci					${SETUP}
3110e5c31af7Sopenharmony_ci					ivec3[3][3] x = ivec3[3][3] (	ivec3[3] (	ivec3(in0.x, in0.y, -in0.z),
3111e5c31af7Sopenharmony_ci																ivec3(in0.x, in0.y, -in0.z),
3112e5c31af7Sopenharmony_ci																ivec3(in0.x, in0.y, -in0.z)),
3113e5c31af7Sopenharmony_ci
3114e5c31af7Sopenharmony_ci													ivec3[3] (	ivec3(in0.y, -in0.z, in0.x),
3115e5c31af7Sopenharmony_ci																ivec3(in0.y, -in0.z, in0.x),
3116e5c31af7Sopenharmony_ci																ivec3(in0.y, -in0.z, in0.x)),
3117e5c31af7Sopenharmony_ci
3118e5c31af7Sopenharmony_ci													ivec3[3] (	ivec3(-in0.z, in0.x, in0.y),
3119e5c31af7Sopenharmony_ci																ivec3(-in0.z, in0.x, in0.y),
3120e5c31af7Sopenharmony_ci																ivec3(-in0.z, in0.x, in0.y)) );
3121e5c31af7Sopenharmony_ci					out0 = func(x);
3122e5c31af7Sopenharmony_ci					${OUTPUT}
3123e5c31af7Sopenharmony_ci				}
3124e5c31af7Sopenharmony_ci
3125e5c31af7Sopenharmony_ci				ivec3 func(in ivec3 x[3][3])
3126e5c31af7Sopenharmony_ci				{
3127e5c31af7Sopenharmony_ci					return ivec3(x[1][0].x, x[2][0].y, x[0][2].z);
3128e5c31af7Sopenharmony_ci				}
3129e5c31af7Sopenharmony_ci
3130e5c31af7Sopenharmony_ci			""
3131e5c31af7Sopenharmony_ci		end
3132e5c31af7Sopenharmony_ci
3133e5c31af7Sopenharmony_ci		case bvec4_4x2
3134e5c31af7Sopenharmony_ci			version 450
3135e5c31af7Sopenharmony_ci			desc "Testing array of arrays as unnamed parameter of a function prototype"
3136e5c31af7Sopenharmony_ci			values
3137e5c31af7Sopenharmony_ci			{
3138e5c31af7Sopenharmony_ci				input bvec4 in0 =	[ bvec4(true, false, false, true) ];
3139e5c31af7Sopenharmony_ci				output bvec4 out0 = [ bvec4(true, true, false, true) ];
3140e5c31af7Sopenharmony_ci			}
3141e5c31af7Sopenharmony_ci
3142e5c31af7Sopenharmony_ci			both ""
3143e5c31af7Sopenharmony_ci				#version 450
3144e5c31af7Sopenharmony_ci				precision mediump int;
3145e5c31af7Sopenharmony_ci				precision mediump float;
3146e5c31af7Sopenharmony_ci				${DECLARATIONS}
3147e5c31af7Sopenharmony_ci
3148e5c31af7Sopenharmony_ci				bvec4 func(in bvec4[4][2]);
3149e5c31af7Sopenharmony_ci
3150e5c31af7Sopenharmony_ci				void main()
3151e5c31af7Sopenharmony_ci				{
3152e5c31af7Sopenharmony_ci					${SETUP}
3153e5c31af7Sopenharmony_ci					bvec4[4] a = bvec4[4](	bvec4(in0.x, in0.y, in0.z, in0.w),
3154e5c31af7Sopenharmony_ci											bvec4(in0.w, in0.y, in0.z, in0.x),
3155e5c31af7Sopenharmony_ci											bvec4(in0.z, in0.w, in0.x, in0.y),
3156e5c31af7Sopenharmony_ci											bvec4(in0.y, in0.x, in0.z, in0.w) );
3157e5c31af7Sopenharmony_ci
3158e5c31af7Sopenharmony_ci					bvec4 x[4][2] = bvec4[4][2] (	bvec4[2] (bvec4(a[0]),
3159e5c31af7Sopenharmony_ci															  bvec4(a[1])),
3160e5c31af7Sopenharmony_ci
3161e5c31af7Sopenharmony_ci													bvec4[2] (bvec4(a[2]),
3162e5c31af7Sopenharmony_ci															  bvec4(a[3])),
3163e5c31af7Sopenharmony_ci
3164e5c31af7Sopenharmony_ci													bvec4[2] (bvec4(a[1]),
3165e5c31af7Sopenharmony_ci															  bvec4(a[2])),
3166e5c31af7Sopenharmony_ci
3167e5c31af7Sopenharmony_ci													bvec4[2] (bvec4(a[3]),
3168e5c31af7Sopenharmony_ci															  bvec4(a[0])) );
3169e5c31af7Sopenharmony_ci
3170e5c31af7Sopenharmony_ci					out0 = func(x);
3171e5c31af7Sopenharmony_ci					${OUTPUT}
3172e5c31af7Sopenharmony_ci				}
3173e5c31af7Sopenharmony_ci
3174e5c31af7Sopenharmony_ci				bvec4 func(in bvec4[4][2] x)
3175e5c31af7Sopenharmony_ci				{
3176e5c31af7Sopenharmony_ci					return bvec4(x[0][1].x, x[1][0].y, x[2][0].z, x[3][1].w);
3177e5c31af7Sopenharmony_ci				}
3178e5c31af7Sopenharmony_ci			""
3179e5c31af7Sopenharmony_ci		end
3180e5c31af7Sopenharmony_ci
3181e5c31af7Sopenharmony_ci		case mat3_3x2
3182e5c31af7Sopenharmony_ci			version 450
3183e5c31af7Sopenharmony_ci			desc "Testing array of arrays as unnamed parameter of a function prototype"
3184e5c31af7Sopenharmony_ci			values
3185e5c31af7Sopenharmony_ci			{
3186e5c31af7Sopenharmony_ci				input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(-1.5, 0.0, -2.3) ];
3187e5c31af7Sopenharmony_ci				output vec3 out0 = [ vec3(0.5, -1.0, 1.0) | vec3(-1.5, 0.0, 0.0) ];
3188e5c31af7Sopenharmony_ci			}
3189e5c31af7Sopenharmony_ci
3190e5c31af7Sopenharmony_ci			both ""
3191e5c31af7Sopenharmony_ci				#version 450
3192e5c31af7Sopenharmony_ci				precision mediump float;
3193e5c31af7Sopenharmony_ci				${DECLARATIONS}
3194e5c31af7Sopenharmony_ci
3195e5c31af7Sopenharmony_ci				vec3 func(in mat3[3][2]);
3196e5c31af7Sopenharmony_ci
3197e5c31af7Sopenharmony_ci				void main()
3198e5c31af7Sopenharmony_ci				{
3199e5c31af7Sopenharmony_ci					${SETUP}
3200e5c31af7Sopenharmony_ci
3201e5c31af7Sopenharmony_ci					mat3 a = mat3(	in0.x, in0.y, in0.z,
3202e5c31af7Sopenharmony_ci									in0.x, in0.y, in0.z,
3203e5c31af7Sopenharmony_ci									in0.x, in0.y, in0.z);
3204e5c31af7Sopenharmony_ci
3205e5c31af7Sopenharmony_ci					mat3 b = mat3(	in0.z, in0.x, -in0.y,
3206e5c31af7Sopenharmony_ci									in0.z, in0.x, -in0.y,
3207e5c31af7Sopenharmony_ci									in0.z, in0.x, -in0.y);
3208e5c31af7Sopenharmony_ci
3209e5c31af7Sopenharmony_ci					mat3 c = mat3 (	-in0.z, -in0.z, in0.z,
3210e5c31af7Sopenharmony_ci									-in0.y, -in0.y, in0.y,
3211e5c31af7Sopenharmony_ci									-in0.x, -in0.x, in0.x);
3212e5c31af7Sopenharmony_ci
3213e5c31af7Sopenharmony_ci					mat3[3][2] x = mat3[3][2] (	mat3[2] (a, b),
3214e5c31af7Sopenharmony_ci												mat3[2] (c, a),
3215e5c31af7Sopenharmony_ci												mat3[2] (b, c) );
3216e5c31af7Sopenharmony_ci
3217e5c31af7Sopenharmony_ci					out0 = func(x);
3218e5c31af7Sopenharmony_ci					${OUTPUT}
3219e5c31af7Sopenharmony_ci				}
3220e5c31af7Sopenharmony_ci
3221e5c31af7Sopenharmony_ci				vec3 func(in mat3[2] x[3])
3222e5c31af7Sopenharmony_ci				{
3223e5c31af7Sopenharmony_ci					mat3 a0 = x[0][0];
3224e5c31af7Sopenharmony_ci					mat3 a1 = x[0][1];
3225e5c31af7Sopenharmony_ci					mat3 a2 = x[2][1];
3226e5c31af7Sopenharmony_ci
3227e5c31af7Sopenharmony_ci					float ret0 = a0[2][0];
3228e5c31af7Sopenharmony_ci					float ret1 = a1[0][2];
3229e5c31af7Sopenharmony_ci					float ret2 = a2[1][2];
3230e5c31af7Sopenharmony_ci
3231e5c31af7Sopenharmony_ci					return vec3(ret0, ret1, ret2);
3232e5c31af7Sopenharmony_ci				}
3233e5c31af7Sopenharmony_ci			""
3234e5c31af7Sopenharmony_ci		end
3235e5c31af7Sopenharmony_ci
3236e5c31af7Sopenharmony_ci		case mat3_3x3x3
3237e5c31af7Sopenharmony_ci			version 450
3238e5c31af7Sopenharmony_ci			desc "Testing array of arrays as unnamed parameter of a function prototype"
3239e5c31af7Sopenharmony_ci			values
3240e5c31af7Sopenharmony_ci			{
3241e5c31af7Sopenharmony_ci				input ivec3 in0 = [ ivec3(0, 1, 2) | ivec3(-1, 0, -2) ];
3242e5c31af7Sopenharmony_ci				output ivec3 out0 = [ ivec3(0, -1, 1) | ivec3(-1, 0, 0) ];
3243e5c31af7Sopenharmony_ci			}
3244e5c31af7Sopenharmony_ci
3245e5c31af7Sopenharmony_ci			both ""
3246e5c31af7Sopenharmony_ci				#version 450
3247e5c31af7Sopenharmony_ci				precision mediump int;
3248e5c31af7Sopenharmony_ci				precision mediump float;
3249e5c31af7Sopenharmony_ci				${DECLARATIONS}
3250e5c31af7Sopenharmony_ci
3251e5c31af7Sopenharmony_ci				ivec3 func(in mat3[3][3][3]);
3252e5c31af7Sopenharmony_ci
3253e5c31af7Sopenharmony_ci				void main()
3254e5c31af7Sopenharmony_ci				{
3255e5c31af7Sopenharmony_ci					${SETUP}
3256e5c31af7Sopenharmony_ci
3257e5c31af7Sopenharmony_ci					mat3 a = mat3(	in0.x, in0.y, in0.z,
3258e5c31af7Sopenharmony_ci									in0.x, in0.y, in0.z,
3259e5c31af7Sopenharmony_ci									in0.x, in0.y, in0.z);
3260e5c31af7Sopenharmony_ci					mat3 b = mat3(	in0.z, in0.x, -in0.y,
3261e5c31af7Sopenharmony_ci									in0.z, in0.x, -in0.y,
3262e5c31af7Sopenharmony_ci									in0.z, in0.x, -in0.y);
3263e5c31af7Sopenharmony_ci					mat3 c = mat3(	-in0.z, -in0.z, in0.z,
3264e5c31af7Sopenharmony_ci									-in0.y, -in0.y, in0.y,
3265e5c31af7Sopenharmony_ci									-in0.x, -in0.x, in0.x);
3266e5c31af7Sopenharmony_ci
3267e5c31af7Sopenharmony_ci					mat3 x[3][3][3] = mat3[3][3][3] (mat3[3][3] (mat3[3] (a, a, a),
3268e5c31af7Sopenharmony_ci																mat3[3] (b, b, b),
3269e5c31af7Sopenharmony_ci																mat3[3] (c, c, c)),
3270e5c31af7Sopenharmony_ci
3271e5c31af7Sopenharmony_ci													mat3[3][3] (mat3[3] (b, b, b),
3272e5c31af7Sopenharmony_ci																mat3[3] (a, a, a),
3273e5c31af7Sopenharmony_ci																mat3[3] (c, c, c)),
3274e5c31af7Sopenharmony_ci
3275e5c31af7Sopenharmony_ci													mat3[3][3] (mat3[3] (c, c, c),
3276e5c31af7Sopenharmony_ci																mat3[3] (a, a, a),
3277e5c31af7Sopenharmony_ci																mat3[3] (b, b, b)) );
3278e5c31af7Sopenharmony_ci
3279e5c31af7Sopenharmony_ci					out0 = func(x);
3280e5c31af7Sopenharmony_ci					${OUTPUT}
3281e5c31af7Sopenharmony_ci				}
3282e5c31af7Sopenharmony_ci
3283e5c31af7Sopenharmony_ci				ivec3 func(in mat3[3][3] x[3])
3284e5c31af7Sopenharmony_ci				{
3285e5c31af7Sopenharmony_ci					mat3 x0 = x[0][0][0];
3286e5c31af7Sopenharmony_ci					mat3 x1 = x[1][0][0];
3287e5c31af7Sopenharmony_ci					mat3 x2 = x[2][0][0];
3288e5c31af7Sopenharmony_ci
3289e5c31af7Sopenharmony_ci					float ret0 = x0[2][0];
3290e5c31af7Sopenharmony_ci					float ret1 = x1[0][2];
3291e5c31af7Sopenharmony_ci					float ret2 = x2[1][2];
3292e5c31af7Sopenharmony_ci
3293e5c31af7Sopenharmony_ci					return ivec3(ret0, ret1, ret2);
3294e5c31af7Sopenharmony_ci				}
3295e5c31af7Sopenharmony_ci			""
3296e5c31af7Sopenharmony_ci		end
3297e5c31af7Sopenharmony_ci
3298e5c31af7Sopenharmony_ci		case mat3_3x4
3299e5c31af7Sopenharmony_ci			version 450
3300e5c31af7Sopenharmony_ci			desc "Testing array of arrays as unnamed parameter of a function prototype"
3301e5c31af7Sopenharmony_ci			values
3302e5c31af7Sopenharmony_ci			{
3303e5c31af7Sopenharmony_ci				input bvec3 in0 = [ bvec3(true, false, true) ];
3304e5c31af7Sopenharmony_ci				output bvec3 out0 = [ bvec3(true, false, false) ];
3305e5c31af7Sopenharmony_ci			}
3306e5c31af7Sopenharmony_ci
3307e5c31af7Sopenharmony_ci			both ""
3308e5c31af7Sopenharmony_ci				#version 450
3309e5c31af7Sopenharmony_ci				precision mediump float;
3310e5c31af7Sopenharmony_ci				${DECLARATIONS}
3311e5c31af7Sopenharmony_ci
3312e5c31af7Sopenharmony_ci				bvec3 func(in mat3[3][4]);
3313e5c31af7Sopenharmony_ci
3314e5c31af7Sopenharmony_ci				void main()
3315e5c31af7Sopenharmony_ci				{
3316e5c31af7Sopenharmony_ci					${SETUP}
3317e5c31af7Sopenharmony_ci
3318e5c31af7Sopenharmony_ci					mat3 a = mat3(	in0.x, in0.y, in0.z,
3319e5c31af7Sopenharmony_ci									in0.x, in0.y, in0.z,
3320e5c31af7Sopenharmony_ci									in0.x, in0.y, in0.z);
3321e5c31af7Sopenharmony_ci
3322e5c31af7Sopenharmony_ci					mat3 b = mat3(	in0.z, in0.x, in0.y,
3323e5c31af7Sopenharmony_ci									in0.z, in0.x, in0.y,
3324e5c31af7Sopenharmony_ci									in0.z, in0.x, in0.y);
3325e5c31af7Sopenharmony_ci
3326e5c31af7Sopenharmony_ci					mat3 c = mat3(	in0.z, in0.z, in0.z,
3327e5c31af7Sopenharmony_ci									in0.y, in0.y, in0.y,
3328e5c31af7Sopenharmony_ci									in0.x, in0.x, in0.x);
3329e5c31af7Sopenharmony_ci
3330e5c31af7Sopenharmony_ci					mat3 x[3][4] = mat3[3][4] (	mat3[4] (a, b, c, a),
3331e5c31af7Sopenharmony_ci												mat3[4] (b, c, a, b),
3332e5c31af7Sopenharmony_ci												mat3[4] (c, a, b, c) );
3333e5c31af7Sopenharmony_ci
3334e5c31af7Sopenharmony_ci					out0 = func(x);
3335e5c31af7Sopenharmony_ci
3336e5c31af7Sopenharmony_ci					${OUTPUT}
3337e5c31af7Sopenharmony_ci				}
3338e5c31af7Sopenharmony_ci
3339e5c31af7Sopenharmony_ci				bvec3 func(in mat3[4] x[3])
3340e5c31af7Sopenharmony_ci				{
3341e5c31af7Sopenharmony_ci					mat3 x0 = x[0][0];
3342e5c31af7Sopenharmony_ci					mat3 x1 = x[1][3];
3343e5c31af7Sopenharmony_ci					mat3 x2 = x[2][0];
3344e5c31af7Sopenharmony_ci
3345e5c31af7Sopenharmony_ci					float ret0 = x0[2][0];
3346e5c31af7Sopenharmony_ci					float ret1 = x1[0][2];
3347e5c31af7Sopenharmony_ci					float ret2 = x2[1][2];
3348e5c31af7Sopenharmony_ci
3349e5c31af7Sopenharmony_ci					return bvec3(ret0, ret1, ret2);
3350e5c31af7Sopenharmony_ci				}
3351e5c31af7Sopenharmony_ci			""
3352e5c31af7Sopenharmony_ci		end
3353e5c31af7Sopenharmony_ci
3354e5c31af7Sopenharmony_ci	end # unnamed_parameter
3355e5c31af7Sopenharmony_ci
3356e5c31af7Sopenharmony_ciend # parameter
3357e5c31af7Sopenharmony_ci
3358e5c31af7Sopenharmony_cigroup implicit_size "Declaring arrays of arrays with implicit size"
3359e5c31af7Sopenharmony_ci
3360e5c31af7Sopenharmony_ci	case float_3x3
3361e5c31af7Sopenharmony_ci		version 450
3362e5c31af7Sopenharmony_ci		desc "Testing declaring arrays of arrays with implicit size"
3363e5c31af7Sopenharmony_ci		values
3364e5c31af7Sopenharmony_ci		{
3365e5c31af7Sopenharmony_ci			input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(7.4, -1.0, 2.0) | vec3(3.0, 1.6, -2.0) ];
3366e5c31af7Sopenharmony_ci			output vec3 out0 = [ vec3(2.0, 0.5, 1.0) | vec3(2.0, 7.4, -1.0) | vec3(-2.0, 3.0, 1.6) ];
3367e5c31af7Sopenharmony_ci		}
3368e5c31af7Sopenharmony_ci
3369e5c31af7Sopenharmony_ci		both ""
3370e5c31af7Sopenharmony_ci			#version 450
3371e5c31af7Sopenharmony_ci			precision mediump float;
3372e5c31af7Sopenharmony_ci			${DECLARATIONS}
3373e5c31af7Sopenharmony_ci
3374e5c31af7Sopenharmony_ci			void main()
3375e5c31af7Sopenharmony_ci			{
3376e5c31af7Sopenharmony_ci				${SETUP}
3377e5c31af7Sopenharmony_ci				float x[][] = float[][] (	float[] (in0.z, in0.x, in0.y),
3378e5c31af7Sopenharmony_ci											float[] (in0.z, in0.x, in0.y),
3379e5c31af7Sopenharmony_ci											float[] (in0.z, in0.x, in0.y) );
3380e5c31af7Sopenharmony_ci
3381e5c31af7Sopenharmony_ci				out0 = vec3(x[0][0], x[1][1], x[2][2]);
3382e5c31af7Sopenharmony_ci				${OUTPUT}
3383e5c31af7Sopenharmony_ci			}
3384e5c31af7Sopenharmony_ci		""
3385e5c31af7Sopenharmony_ci	end
3386e5c31af7Sopenharmony_ci
3387e5c31af7Sopenharmony_ci	case int_2x3
3388e5c31af7Sopenharmony_ci		version 450
3389e5c31af7Sopenharmony_ci		desc "Testing declaring arrays of arrays with implicit size"
3390e5c31af7Sopenharmony_ci		values
3391e5c31af7Sopenharmony_ci		{
3392e5c31af7Sopenharmony_ci			input ivec3 in0 = [ ivec3(0, 1, 2) | ivec3(7, -1, 2) | ivec3(3, 1, -2) ];
3393e5c31af7Sopenharmony_ci			output ivec3 out0 = [ ivec3(2, 0, 1) | ivec3(2, 7, -1) | ivec3(-2, 3, 1) ];
3394e5c31af7Sopenharmony_ci		}
3395e5c31af7Sopenharmony_ci
3396e5c31af7Sopenharmony_ci		both ""
3397e5c31af7Sopenharmony_ci			#version 450
3398e5c31af7Sopenharmony_ci			precision mediump int;
3399e5c31af7Sopenharmony_ci			precision mediump float;
3400e5c31af7Sopenharmony_ci			${DECLARATIONS}
3401e5c31af7Sopenharmony_ci
3402e5c31af7Sopenharmony_ci			void main()
3403e5c31af7Sopenharmony_ci			{
3404e5c31af7Sopenharmony_ci				${SETUP}
3405e5c31af7Sopenharmony_ci				int[][] x = int[][] (	int[] (in0.z, in0.x, in0.y),
3406e5c31af7Sopenharmony_ci										int[] (in0.z, in0.x, in0.y) );;
3407e5c31af7Sopenharmony_ci
3408e5c31af7Sopenharmony_ci				out0 = ivec3(x[0][0], x[1][1], x[0][2]);
3409e5c31af7Sopenharmony_ci				${OUTPUT}
3410e5c31af7Sopenharmony_ci			}
3411e5c31af7Sopenharmony_ci		""
3412e5c31af7Sopenharmony_ci	end
3413e5c31af7Sopenharmony_ci
3414e5c31af7Sopenharmony_ci	case bool_3x3x3
3415e5c31af7Sopenharmony_ci		version 450
3416e5c31af7Sopenharmony_ci		desc "Testing declaring arrays of arrays with implicit size"
3417e5c31af7Sopenharmony_ci		values
3418e5c31af7Sopenharmony_ci		{
3419e5c31af7Sopenharmony_ci			input bvec3 in0 = [ bvec3(false, true, true) ];
3420e5c31af7Sopenharmony_ci			output bvec3 out0 = [ bvec3(true, false, true) ];
3421e5c31af7Sopenharmony_ci		}
3422e5c31af7Sopenharmony_ci
3423e5c31af7Sopenharmony_ci		both ""
3424e5c31af7Sopenharmony_ci			#version 450
3425e5c31af7Sopenharmony_ci			precision mediump float;
3426e5c31af7Sopenharmony_ci			${DECLARATIONS}
3427e5c31af7Sopenharmony_ci
3428e5c31af7Sopenharmony_ci			void main()
3429e5c31af7Sopenharmony_ci			{
3430e5c31af7Sopenharmony_ci				${SETUP}
3431e5c31af7Sopenharmony_ci				bool[][] x[] = bool[][][] ( bool[][] (	bool[](in0.z, in0.z, in0.z),
3432e5c31af7Sopenharmony_ci														bool[](in0.z, in0.z, in0.z),
3433e5c31af7Sopenharmony_ci														bool[](in0.z, in0.z, in0.z)),
3434e5c31af7Sopenharmony_ci
3435e5c31af7Sopenharmony_ci											bool[][] (	bool[](in0.x, in0.x, in0.x),
3436e5c31af7Sopenharmony_ci														bool[](in0.x, in0.x, in0.x),
3437e5c31af7Sopenharmony_ci														bool[](in0.x, in0.x, in0.x)),
3438e5c31af7Sopenharmony_ci
3439e5c31af7Sopenharmony_ci											bool[][] (	bool[](in0.y, in0.y, in0.y),
3440e5c31af7Sopenharmony_ci														bool[](in0.y, in0.y, in0.y),
3441e5c31af7Sopenharmony_ci														bool[](in0.y, in0.y, in0.y)) );
3442e5c31af7Sopenharmony_ci
3443e5c31af7Sopenharmony_ci				out0 = bvec3(x[0][0][0], x[1][1][1], x[2][2][2]);
3444e5c31af7Sopenharmony_ci				${OUTPUT}
3445e5c31af7Sopenharmony_ci			}
3446e5c31af7Sopenharmony_ci		""
3447e5c31af7Sopenharmony_ci	end
3448e5c31af7Sopenharmony_ci
3449e5c31af7Sopenharmony_ci	case struct_5x5x4
3450e5c31af7Sopenharmony_ci		version 450
3451e5c31af7Sopenharmony_ci		desc "Testing declaring arrays of arrays with implicit size"
3452e5c31af7Sopenharmony_ci		values
3453e5c31af7Sopenharmony_ci		{
3454e5c31af7Sopenharmony_ci			input vec3 in0 = [ vec3(0.5, 1.0, 2.0) ];
3455e5c31af7Sopenharmony_ci			output vec3 out0 = [ vec3(-1.0, -0.5, 2.0) ];
3456e5c31af7Sopenharmony_ci		}
3457e5c31af7Sopenharmony_ci
3458e5c31af7Sopenharmony_ci		both ""
3459e5c31af7Sopenharmony_ci			#version 450
3460e5c31af7Sopenharmony_ci			precision mediump float;
3461e5c31af7Sopenharmony_ci			${DECLARATIONS}
3462e5c31af7Sopenharmony_ci
3463e5c31af7Sopenharmony_ci			struct Test
3464e5c31af7Sopenharmony_ci			{
3465e5c31af7Sopenharmony_ci				float f;
3466e5c31af7Sopenharmony_ci				vec3 v;
3467e5c31af7Sopenharmony_ci			};
3468e5c31af7Sopenharmony_ci
3469e5c31af7Sopenharmony_ci			void main()
3470e5c31af7Sopenharmony_ci			{
3471e5c31af7Sopenharmony_ci				${SETUP}
3472e5c31af7Sopenharmony_ci
3473e5c31af7Sopenharmony_ci				Test a = Test(in0.z, vec3(in0.x, in0.y, in0.z));
3474e5c31af7Sopenharmony_ci				Test b = Test(in0.y, vec3(-in0.z, -in0.x, -in0.y));
3475e5c31af7Sopenharmony_ci				Test c = Test(in0.x, vec3(-in0.y, in0.z, -in0.x));
3476e5c31af7Sopenharmony_ci
3477e5c31af7Sopenharmony_ci				Test[] x[][] = Test[][][] (	Test[][] (	Test[] (c, c, c, c),
3478e5c31af7Sopenharmony_ci														Test[] (b, b, b, b),
3479e5c31af7Sopenharmony_ci														Test[] (a, a, a, a),
3480e5c31af7Sopenharmony_ci														Test[] (c, c, c, c),
3481e5c31af7Sopenharmony_ci														Test[] (b, b, b, b) ),
3482e5c31af7Sopenharmony_ci
3483e5c31af7Sopenharmony_ci											Test[][] (	Test[] (a, a, a, a),
3484e5c31af7Sopenharmony_ci														Test[] (b, b, b, b),
3485e5c31af7Sopenharmony_ci														Test[] (c, c, c, c),
3486e5c31af7Sopenharmony_ci														Test[] (a, a, a, a),
3487e5c31af7Sopenharmony_ci														Test[] (b, b, b, b) ),
3488e5c31af7Sopenharmony_ci
3489e5c31af7Sopenharmony_ci											Test[][] (	Test[] (b, b, b, b),
3490e5c31af7Sopenharmony_ci														Test[] (c, c, c, c),
3491e5c31af7Sopenharmony_ci														Test[] (a, a, a, a),
3492e5c31af7Sopenharmony_ci														Test[] (b, b, b, b),
3493e5c31af7Sopenharmony_ci														Test[] (c, c, c, c) ),
3494e5c31af7Sopenharmony_ci
3495e5c31af7Sopenharmony_ci											Test[][] (	Test[] (c, c, c, c),
3496e5c31af7Sopenharmony_ci														Test[] (b, b, b, b),
3497e5c31af7Sopenharmony_ci														Test[] (a, a, a, a),
3498e5c31af7Sopenharmony_ci														Test[] (c, c, c, c),
3499e5c31af7Sopenharmony_ci														Test[] (b, b, b, b) ),
3500e5c31af7Sopenharmony_ci
3501e5c31af7Sopenharmony_ci											Test[][] (	Test[] (a, a, a, a),
3502e5c31af7Sopenharmony_ci														Test[] (b, b, b, b),
3503e5c31af7Sopenharmony_ci														Test[] (c, c, c, c),
3504e5c31af7Sopenharmony_ci														Test[] (a, a, a, a),
3505e5c31af7Sopenharmony_ci														Test[] (b, b, b, b) ) );
3506e5c31af7Sopenharmony_ci
3507e5c31af7Sopenharmony_ci				out0 = vec3(x[0][0][0].v.x, x[1][1][1].v.y, x[4][3][3].v.z);
3508e5c31af7Sopenharmony_ci				${OUTPUT}
3509e5c31af7Sopenharmony_ci			}
3510e5c31af7Sopenharmony_ci		""
3511e5c31af7Sopenharmony_ci	end
3512e5c31af7Sopenharmony_ci
3513e5c31af7Sopenharmony_ci	case vec3_1x3
3514e5c31af7Sopenharmony_ci		version 450
3515e5c31af7Sopenharmony_ci		desc "Testing declaring arrays of arrays with implicit size"
3516e5c31af7Sopenharmony_ci		values
3517e5c31af7Sopenharmony_ci		{
3518e5c31af7Sopenharmony_ci			input vec3 in0 =	[ vec3(0.5, 1.0, 2.0) | vec3(-0.5, 11.2, -1.0) ];
3519e5c31af7Sopenharmony_ci			output vec3 out0 = [ vec3(0.5, -2.0, 1.0) | vec3(-0.5, 1.0, 11.2) ];
3520e5c31af7Sopenharmony_ci		}
3521e5c31af7Sopenharmony_ci
3522e5c31af7Sopenharmony_ci		both ""
3523e5c31af7Sopenharmony_ci			#version 450
3524e5c31af7Sopenharmony_ci			precision mediump float;
3525e5c31af7Sopenharmony_ci			${DECLARATIONS}
3526e5c31af7Sopenharmony_ci
3527e5c31af7Sopenharmony_ci			void main()
3528e5c31af7Sopenharmony_ci			{
3529e5c31af7Sopenharmony_ci				${SETUP}
3530e5c31af7Sopenharmony_ci				vec3 x[][] = vec3[][] (	vec3[] (vec3(in0.x, in0.y, -in0.z)	,
3531e5c31af7Sopenharmony_ci												vec3(in0.y, -in0.z, in0.x)	,
3532e5c31af7Sopenharmony_ci												vec3(-in0.z, in0.x, in0.y)) );
3533e5c31af7Sopenharmony_ci
3534e5c31af7Sopenharmony_ci				out0 = vec3(x[0][0].x, x[0][1].y, x[0][2].z);
3535e5c31af7Sopenharmony_ci				${OUTPUT}
3536e5c31af7Sopenharmony_ci			}
3537e5c31af7Sopenharmony_ci		""
3538e5c31af7Sopenharmony_ci	end
3539e5c31af7Sopenharmony_ci
3540e5c31af7Sopenharmony_ci	case ivec3_3x1x3
3541e5c31af7Sopenharmony_ci		version 450
3542e5c31af7Sopenharmony_ci		desc "Testing declaring arrays of arrays with implicit size"
3543e5c31af7Sopenharmony_ci		values
3544e5c31af7Sopenharmony_ci		{
3545e5c31af7Sopenharmony_ci			input ivec3 in0 =	[ ivec3(0, 1, 2) | ivec3(5, 11, -1) ];
3546e5c31af7Sopenharmony_ci			output ivec3 out0 = [ ivec3(0, -2, 1) | ivec3(5, 1, 11) ];
3547e5c31af7Sopenharmony_ci		}
3548e5c31af7Sopenharmony_ci
3549e5c31af7Sopenharmony_ci		both ""
3550e5c31af7Sopenharmony_ci			#version 450
3551e5c31af7Sopenharmony_ci			precision mediump int;
3552e5c31af7Sopenharmony_ci			precision mediump float;
3553e5c31af7Sopenharmony_ci			${DECLARATIONS}
3554e5c31af7Sopenharmony_ci
3555e5c31af7Sopenharmony_ci			void main()
3556e5c31af7Sopenharmony_ci			{
3557e5c31af7Sopenharmony_ci				${SETUP}
3558e5c31af7Sopenharmony_ci				ivec3[][][] x = ivec3[][][] (	ivec3[][] (	ivec3[] (	ivec3(in0.x, in0.y, -in0.z),
3559e5c31af7Sopenharmony_ci																		ivec3(0.0, 0.0, 0.0),
3560e5c31af7Sopenharmony_ci																		ivec3(0.0, 0.0, 0.0)) ),
3561e5c31af7Sopenharmony_ci
3562e5c31af7Sopenharmony_ci												ivec3[][] ( ivec3[] (	ivec3(0.0, 0.0, 0.0),
3563e5c31af7Sopenharmony_ci																		ivec3(in0.y, -in0.z, in0.x),
3564e5c31af7Sopenharmony_ci																		ivec3(0.0, 0.0, 0.0)) ),
3565e5c31af7Sopenharmony_ci
3566e5c31af7Sopenharmony_ci												ivec3[][] (	ivec3[] (	ivec3(0.0, 0.0, 0.0),
3567e5c31af7Sopenharmony_ci																		ivec3(0.0, 0.0, 0.0),
3568e5c31af7Sopenharmony_ci																		ivec3(-in0.z, in0.x, in0.y)) ) );
3569e5c31af7Sopenharmony_ci
3570e5c31af7Sopenharmony_ci				out0 = ivec3(x[0][0][0].x, x[1][0][1].y, x[2][0][2].z);
3571e5c31af7Sopenharmony_ci				${OUTPUT}
3572e5c31af7Sopenharmony_ci			}
3573e5c31af7Sopenharmony_ci		""
3574e5c31af7Sopenharmony_ci	end
3575e5c31af7Sopenharmony_ci
3576e5c31af7Sopenharmony_ci	case bvec3_3x1
3577e5c31af7Sopenharmony_ci		version 450
3578e5c31af7Sopenharmony_ci		desc "Testing declaring arrays of arrays with implicit size"
3579e5c31af7Sopenharmony_ci		values
3580e5c31af7Sopenharmony_ci		{
3581e5c31af7Sopenharmony_ci			input bvec3 in0 =	[ bvec3(true, false, true) ];
3582e5c31af7Sopenharmony_ci			output bvec3 out0 = [ bvec3(true, true, false) ];
3583e5c31af7Sopenharmony_ci		}
3584e5c31af7Sopenharmony_ci
3585e5c31af7Sopenharmony_ci		both ""
3586e5c31af7Sopenharmony_ci			#version 450
3587e5c31af7Sopenharmony_ci			precision mediump float;
3588e5c31af7Sopenharmony_ci			${DECLARATIONS}
3589e5c31af7Sopenharmony_ci
3590e5c31af7Sopenharmony_ci			void main()
3591e5c31af7Sopenharmony_ci			{
3592e5c31af7Sopenharmony_ci				${SETUP}
3593e5c31af7Sopenharmony_ci				bvec3[][] x = bvec3[][] (	bvec3[] ( bvec3(in0.x, in0.y, in0.z)),
3594e5c31af7Sopenharmony_ci											bvec3[] ( bvec3(in0.y, in0.z, in0.x)),
3595e5c31af7Sopenharmony_ci											bvec3[] ( bvec3(in0.z, in0.x, in0.y)) );
3596e5c31af7Sopenharmony_ci
3597e5c31af7Sopenharmony_ci				out0 = bvec3(x[0][0].x, x[1][0].y, x[2][0].z);
3598e5c31af7Sopenharmony_ci				${OUTPUT}
3599e5c31af7Sopenharmony_ci			}
3600e5c31af7Sopenharmony_ci		""
3601e5c31af7Sopenharmony_ci	end
3602e5c31af7Sopenharmony_ci
3603e5c31af7Sopenharmony_ci	case mat3_3x2
3604e5c31af7Sopenharmony_ci		version 450
3605e5c31af7Sopenharmony_ci		desc "Testing declaring arrays of arrays with implicit size"
3606e5c31af7Sopenharmony_ci		values
3607e5c31af7Sopenharmony_ci		{
3608e5c31af7Sopenharmony_ci			input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(-1.5, 0.0, -2.3) ];
3609e5c31af7Sopenharmony_ci			output vec3 out0 = [ vec3(0.5, -1.0, 1.0) | vec3(-1.5, 0.0, 0.0) ];
3610e5c31af7Sopenharmony_ci		}
3611e5c31af7Sopenharmony_ci
3612e5c31af7Sopenharmony_ci		both ""
3613e5c31af7Sopenharmony_ci			#version 450
3614e5c31af7Sopenharmony_ci			precision mediump float;
3615e5c31af7Sopenharmony_ci			${DECLARATIONS}
3616e5c31af7Sopenharmony_ci
3617e5c31af7Sopenharmony_ci			void main()
3618e5c31af7Sopenharmony_ci			{
3619e5c31af7Sopenharmony_ci				${SETUP}
3620e5c31af7Sopenharmony_ci				mat3[][] a = mat3[][] (	mat3[] ( mat3(	in0.x, in0.y, in0.z,
3621e5c31af7Sopenharmony_ci														in0.x, in0.y, in0.z,
3622e5c31af7Sopenharmony_ci														in0.x, in0.y, in0.z),
3623e5c31af7Sopenharmony_ci												 mat3(	in0.z, in0.x, -in0.y,
3624e5c31af7Sopenharmony_ci														in0.z, in0.x, -in0.y,
3625e5c31af7Sopenharmony_ci														in0.z, in0.x, -in0.y)),
3626e5c31af7Sopenharmony_ci
3627e5c31af7Sopenharmony_ci										mat3[] ( mat3(	-in0.z, -in0.z, in0.z,
3628e5c31af7Sopenharmony_ci														-in0.y, -in0.y, in0.y,
3629e5c31af7Sopenharmony_ci														-in0.x, -in0.x, in0.x),
3630e5c31af7Sopenharmony_ci												 mat3(	in0.x, in0.y, in0.z,
3631e5c31af7Sopenharmony_ci														in0.x, in0.y, in0.z,
3632e5c31af7Sopenharmony_ci														in0.x, in0.y, in0.z)),
3633e5c31af7Sopenharmony_ci
3634e5c31af7Sopenharmony_ci										mat3[] ( mat3(	in0.z, in0.x, -in0.y,
3635e5c31af7Sopenharmony_ci														in0.z, in0.x, -in0.y,
3636e5c31af7Sopenharmony_ci														in0.z, in0.x, -in0.y),
3637e5c31af7Sopenharmony_ci												 mat3(	-in0.z, -in0.z, in0.z,
3638e5c31af7Sopenharmony_ci														-in0.y, -in0.y, in0.y,
3639e5c31af7Sopenharmony_ci														-in0.x, -in0.x, in0.x)) );
3640e5c31af7Sopenharmony_ci
3641e5c31af7Sopenharmony_ci				mat3 a0 = a[0][0];
3642e5c31af7Sopenharmony_ci				mat3 a1 = a[0][1];
3643e5c31af7Sopenharmony_ci				mat3 a2 = a[2][1];
3644e5c31af7Sopenharmony_ci
3645e5c31af7Sopenharmony_ci				float ret0 = a0[2][0];
3646e5c31af7Sopenharmony_ci				float ret1 = a1[0][2];
3647e5c31af7Sopenharmony_ci				float ret2 = a2[1][2];
3648e5c31af7Sopenharmony_ci
3649e5c31af7Sopenharmony_ci				out0 = vec3(ret0, ret1, ret2);
3650e5c31af7Sopenharmony_ci				${OUTPUT}
3651e5c31af7Sopenharmony_ci			}
3652e5c31af7Sopenharmony_ci		""
3653e5c31af7Sopenharmony_ci	end
3654e5c31af7Sopenharmony_ci
3655e5c31af7Sopenharmony_ci	case mat3_3x3x3
3656e5c31af7Sopenharmony_ci		version 450
3657e5c31af7Sopenharmony_ci		desc "Testing declaring arrays of arrays with implicit size"
3658e5c31af7Sopenharmony_ci		values
3659e5c31af7Sopenharmony_ci		{
3660e5c31af7Sopenharmony_ci			input ivec3 in0 = [ ivec3(0, 1, 2) | ivec3(-1, 0, -2) ];
3661e5c31af7Sopenharmony_ci			output ivec3 out0 = [ ivec3(0, -1, 1) | ivec3(-1, 0, 0) ];
3662e5c31af7Sopenharmony_ci		}
3663e5c31af7Sopenharmony_ci
3664e5c31af7Sopenharmony_ci		both ""
3665e5c31af7Sopenharmony_ci			#version 450
3666e5c31af7Sopenharmony_ci			precision mediump int;
3667e5c31af7Sopenharmony_ci			precision mediump float;
3668e5c31af7Sopenharmony_ci			${DECLARATIONS}
3669e5c31af7Sopenharmony_ci
3670e5c31af7Sopenharmony_ci			void main()
3671e5c31af7Sopenharmony_ci			{
3672e5c31af7Sopenharmony_ci				${SETUP}
3673e5c31af7Sopenharmony_ci
3674e5c31af7Sopenharmony_ci				mat3 a = mat3(	in0.x, in0.y, in0.z,
3675e5c31af7Sopenharmony_ci								in0.x, in0.y, in0.z,
3676e5c31af7Sopenharmony_ci								in0.x, in0.y, in0.z);
3677e5c31af7Sopenharmony_ci				mat3 b = mat3(	in0.z, in0.x, -in0.y,
3678e5c31af7Sopenharmony_ci								in0.z, in0.x, -in0.y,
3679e5c31af7Sopenharmony_ci								in0.z, in0.x, -in0.y);
3680e5c31af7Sopenharmony_ci				mat3 c = mat3(	-in0.z, -in0.z, in0.z,
3681e5c31af7Sopenharmony_ci								-in0.y, -in0.y, in0.y,
3682e5c31af7Sopenharmony_ci								-in0.x, -in0.x, in0.x);
3683e5c31af7Sopenharmony_ci
3684e5c31af7Sopenharmony_ci				mat3[][][] x = mat3[][][] (	mat3[][] (	mat3[] (a, a, a),
3685e5c31af7Sopenharmony_ci														mat3[] (b, b, b),
3686e5c31af7Sopenharmony_ci														mat3[] (c, c, c)),
3687e5c31af7Sopenharmony_ci
3688e5c31af7Sopenharmony_ci											mat3[][] (	mat3[] (b, b, b),
3689e5c31af7Sopenharmony_ci														mat3[] (a, a, a),
3690e5c31af7Sopenharmony_ci														mat3[] (c, c, c)),
3691e5c31af7Sopenharmony_ci
3692e5c31af7Sopenharmony_ci											mat3[][] (	mat3[] (c, c, c),
3693e5c31af7Sopenharmony_ci														mat3[] (a, a, a),
3694e5c31af7Sopenharmony_ci														mat3[] (b, b, b)) );
3695e5c31af7Sopenharmony_ci
3696e5c31af7Sopenharmony_ci				mat3 x0 = x[0][0][0];
3697e5c31af7Sopenharmony_ci				mat3 x1 = x[1][0][0];
3698e5c31af7Sopenharmony_ci				mat3 x2 = x[2][0][0];
3699e5c31af7Sopenharmony_ci
3700e5c31af7Sopenharmony_ci				float ret0 = x0[2][0];
3701e5c31af7Sopenharmony_ci				float ret1 = x1[0][2];
3702e5c31af7Sopenharmony_ci				float ret2 = x2[1][2];
3703e5c31af7Sopenharmony_ci
3704e5c31af7Sopenharmony_ci				out0 = ivec3(ret0, ret1, ret2);
3705e5c31af7Sopenharmony_ci				${OUTPUT}
3706e5c31af7Sopenharmony_ci			}
3707e5c31af7Sopenharmony_ci		""
3708e5c31af7Sopenharmony_ci	end
3709e5c31af7Sopenharmony_ci
3710e5c31af7Sopenharmony_ci	case mat3_3x4
3711e5c31af7Sopenharmony_ci		version 450
3712e5c31af7Sopenharmony_ci		desc "Testing declaring arrays of arrays with implicit size"
3713e5c31af7Sopenharmony_ci		values
3714e5c31af7Sopenharmony_ci		{
3715e5c31af7Sopenharmony_ci			input bvec3 in0 = [ bvec3(true, false, true) ];
3716e5c31af7Sopenharmony_ci			output bvec3 out0 = [ bvec3(true, false, false) ];
3717e5c31af7Sopenharmony_ci		}
3718e5c31af7Sopenharmony_ci
3719e5c31af7Sopenharmony_ci		both ""
3720e5c31af7Sopenharmony_ci			#version 450
3721e5c31af7Sopenharmony_ci			precision mediump float;
3722e5c31af7Sopenharmony_ci			${DECLARATIONS}
3723e5c31af7Sopenharmony_ci
3724e5c31af7Sopenharmony_ci			void main()
3725e5c31af7Sopenharmony_ci			{
3726e5c31af7Sopenharmony_ci				${SETUP}
3727e5c31af7Sopenharmony_ci
3728e5c31af7Sopenharmony_ci				mat3 a = mat3(	in0.x, in0.y, in0.z,
3729e5c31af7Sopenharmony_ci								in0.x, in0.y, in0.z,
3730e5c31af7Sopenharmony_ci								in0.x, in0.y, in0.z);
3731e5c31af7Sopenharmony_ci
3732e5c31af7Sopenharmony_ci				mat3 b = mat3(	in0.z, in0.x, in0.y,
3733e5c31af7Sopenharmony_ci								in0.z, in0.x, in0.y,
3734e5c31af7Sopenharmony_ci								in0.z, in0.x, in0.y);
3735e5c31af7Sopenharmony_ci
3736e5c31af7Sopenharmony_ci				mat3 c = mat3(	in0.z, in0.z, in0.z,
3737e5c31af7Sopenharmony_ci								in0.y, in0.y, in0.y,
3738e5c31af7Sopenharmony_ci								in0.x, in0.x, in0.x);
3739e5c31af7Sopenharmony_ci
3740e5c31af7Sopenharmony_ci				mat3[] x[] = mat3[][] (	mat3[] (a, b, c, a),
3741e5c31af7Sopenharmony_ci										mat3[] (b, c, a, b),
3742e5c31af7Sopenharmony_ci										mat3[] (c, a, b, c) );
3743e5c31af7Sopenharmony_ci
3744e5c31af7Sopenharmony_ci				mat3 x0 = x[0][0];
3745e5c31af7Sopenharmony_ci				mat3 x1 = x[1][3];
3746e5c31af7Sopenharmony_ci				mat3 x2 = x[2][0];
3747e5c31af7Sopenharmony_ci
3748e5c31af7Sopenharmony_ci				float ret0 = x0[2][0];
3749e5c31af7Sopenharmony_ci				float ret1 = x1[0][2];
3750e5c31af7Sopenharmony_ci				float ret2 = x2[1][2];
3751e5c31af7Sopenharmony_ci
3752e5c31af7Sopenharmony_ci				out0 = bvec3(ret0, ret1, ret2);
3753e5c31af7Sopenharmony_ci				${OUTPUT}
3754e5c31af7Sopenharmony_ci			}
3755e5c31af7Sopenharmony_ci		""
3756e5c31af7Sopenharmony_ci	end
3757e5c31af7Sopenharmony_ci
3758e5c31af7Sopenharmony_ciend # implicit_size
3759e5c31af7Sopenharmony_ci
3760e5c31af7Sopenharmony_cigroup assignment "Testing assignment of arrays of arrays"
3761e5c31af7Sopenharmony_ci
3762e5c31af7Sopenharmony_ci	group explicit_to_explicit "Declaring an array of arrays with explicit size and assigning it to another array of arrays with explicit size"
3763e5c31af7Sopenharmony_ci
3764e5c31af7Sopenharmony_ci		case float_3x3
3765e5c31af7Sopenharmony_ci			version 450
3766e5c31af7Sopenharmony_ci			desc "Testing assignment of arrays of arrays with explicit size"
3767e5c31af7Sopenharmony_ci			values
3768e5c31af7Sopenharmony_ci			{
3769e5c31af7Sopenharmony_ci				input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(7.4, -1.0, 2.0) | vec3(3.0, 1.6, -2.0) ];
3770e5c31af7Sopenharmony_ci				output vec3 out0 = [ vec3(2.0, 0.5, 1.0) | vec3(2.0, 7.4, -1.0) | vec3(-2.0, 3.0, 1.6) ];
3771e5c31af7Sopenharmony_ci			}
3772e5c31af7Sopenharmony_ci
3773e5c31af7Sopenharmony_ci			both ""
3774e5c31af7Sopenharmony_ci				#version 450
3775e5c31af7Sopenharmony_ci				precision mediump float;
3776e5c31af7Sopenharmony_ci				${DECLARATIONS}
3777e5c31af7Sopenharmony_ci
3778e5c31af7Sopenharmony_ci				void main()
3779e5c31af7Sopenharmony_ci				{
3780e5c31af7Sopenharmony_ci					${SETUP}
3781e5c31af7Sopenharmony_ci					float x[3][3] = float[3][3] (	float[3] (in0.z, in0.x, in0.y),
3782e5c31af7Sopenharmony_ci													float[3] (in0.z, in0.x, in0.y),
3783e5c31af7Sopenharmony_ci													float[3] (in0.z, in0.x, in0.y) );
3784e5c31af7Sopenharmony_ci
3785e5c31af7Sopenharmony_ci					float[3] y[3] = x;
3786e5c31af7Sopenharmony_ci
3787e5c31af7Sopenharmony_ci					out0 = vec3(y[0][0], y[1][1], y[2][2]);
3788e5c31af7Sopenharmony_ci					${OUTPUT}
3789e5c31af7Sopenharmony_ci				}
3790e5c31af7Sopenharmony_ci			""
3791e5c31af7Sopenharmony_ci		end
3792e5c31af7Sopenharmony_ci
3793e5c31af7Sopenharmony_ci		case int_2x3
3794e5c31af7Sopenharmony_ci			version 450
3795e5c31af7Sopenharmony_ci			desc "Testing assignment of arrays of arrays with explicit size"
3796e5c31af7Sopenharmony_ci			values
3797e5c31af7Sopenharmony_ci			{
3798e5c31af7Sopenharmony_ci				input ivec3 in0 = [ ivec3(0, 1, 2) | ivec3(7, -1, 2) | ivec3(3, 1, -2) ];
3799e5c31af7Sopenharmony_ci				output ivec3 out0 = [ ivec3(2, 0, 1) | ivec3(2, 7, -1) | ivec3(-2, 3, 1) ];
3800e5c31af7Sopenharmony_ci			}
3801e5c31af7Sopenharmony_ci
3802e5c31af7Sopenharmony_ci			both ""
3803e5c31af7Sopenharmony_ci				#version 450
3804e5c31af7Sopenharmony_ci				precision mediump int;
3805e5c31af7Sopenharmony_ci				precision mediump float;
3806e5c31af7Sopenharmony_ci				${DECLARATIONS}
3807e5c31af7Sopenharmony_ci
3808e5c31af7Sopenharmony_ci				void main()
3809e5c31af7Sopenharmony_ci				{
3810e5c31af7Sopenharmony_ci					${SETUP}
3811e5c31af7Sopenharmony_ci					int[2][3] x = int[2][3] (	int[3] (in0.z, in0.x, in0.y),
3812e5c31af7Sopenharmony_ci												int[3] (in0.z, in0.x, in0.y) );;
3813e5c31af7Sopenharmony_ci					int y[2][3] = x;
3814e5c31af7Sopenharmony_ci
3815e5c31af7Sopenharmony_ci					out0 = ivec3(y[0][0], y[1][1], y[0][2]);
3816e5c31af7Sopenharmony_ci					${OUTPUT}
3817e5c31af7Sopenharmony_ci				}
3818e5c31af7Sopenharmony_ci			""
3819e5c31af7Sopenharmony_ci		end
3820e5c31af7Sopenharmony_ci
3821e5c31af7Sopenharmony_ci		case bool_3x3x3
3822e5c31af7Sopenharmony_ci			version 450
3823e5c31af7Sopenharmony_ci			desc "Testing assignment of arrays of arrays with explicit size"
3824e5c31af7Sopenharmony_ci			values
3825e5c31af7Sopenharmony_ci			{
3826e5c31af7Sopenharmony_ci				input bvec3 in0 = [ bvec3(false, true, true) ];
3827e5c31af7Sopenharmony_ci				output bvec3 out0 = [ bvec3(true, false, true) ];
3828e5c31af7Sopenharmony_ci			}
3829e5c31af7Sopenharmony_ci
3830e5c31af7Sopenharmony_ci			both ""
3831e5c31af7Sopenharmony_ci				#version 450
3832e5c31af7Sopenharmony_ci				precision mediump float;
3833e5c31af7Sopenharmony_ci				${DECLARATIONS}
3834e5c31af7Sopenharmony_ci
3835e5c31af7Sopenharmony_ci				void main()
3836e5c31af7Sopenharmony_ci				{
3837e5c31af7Sopenharmony_ci					${SETUP}
3838e5c31af7Sopenharmony_ci					bool[3][3] x[3] = bool[3][3][3] (bool[3][3] (bool[3](in0.z, in0.z, in0.z),
3839e5c31af7Sopenharmony_ci																bool[3](in0.z, in0.z, in0.z),
3840e5c31af7Sopenharmony_ci																bool[3](in0.z, in0.z, in0.z)),
3841e5c31af7Sopenharmony_ci
3842e5c31af7Sopenharmony_ci													bool[3][3] (bool[3](in0.x, in0.x, in0.x),
3843e5c31af7Sopenharmony_ci																bool[3](in0.x, in0.x, in0.x),
3844e5c31af7Sopenharmony_ci																bool[3](in0.x, in0.x, in0.x)),
3845e5c31af7Sopenharmony_ci
3846e5c31af7Sopenharmony_ci													bool[3][3] (bool[3](in0.y, in0.y, in0.y),
3847e5c31af7Sopenharmony_ci																bool[3](in0.y, in0.y, in0.y),
3848e5c31af7Sopenharmony_ci																bool[3](in0.y, in0.y, in0.y)) );
3849e5c31af7Sopenharmony_ci
3850e5c31af7Sopenharmony_ci					bool[3] y[3][3] = x;
3851e5c31af7Sopenharmony_ci
3852e5c31af7Sopenharmony_ci					out0 = bvec3(y[0][0][0], y[1][1][1], y[2][2][2]);
3853e5c31af7Sopenharmony_ci					${OUTPUT}
3854e5c31af7Sopenharmony_ci				}
3855e5c31af7Sopenharmony_ci			""
3856e5c31af7Sopenharmony_ci		end
3857e5c31af7Sopenharmony_ci
3858e5c31af7Sopenharmony_ci		case struct_5x5x4
3859e5c31af7Sopenharmony_ci			version 450
3860e5c31af7Sopenharmony_ci			desc "Testing assignment of arrays of arrays with explicit size"
3861e5c31af7Sopenharmony_ci			values
3862e5c31af7Sopenharmony_ci			{
3863e5c31af7Sopenharmony_ci				input vec3 in0 = [ vec3(0.5, 1.0, 2.0) ];
3864e5c31af7Sopenharmony_ci				output vec3 out0 = [ vec3(-1.0, -0.5, 2.0) ];
3865e5c31af7Sopenharmony_ci			}
3866e5c31af7Sopenharmony_ci
3867e5c31af7Sopenharmony_ci			both ""
3868e5c31af7Sopenharmony_ci				#version 450
3869e5c31af7Sopenharmony_ci				precision mediump float;
3870e5c31af7Sopenharmony_ci				${DECLARATIONS}
3871e5c31af7Sopenharmony_ci
3872e5c31af7Sopenharmony_ci				struct Test
3873e5c31af7Sopenharmony_ci				{
3874e5c31af7Sopenharmony_ci					float f;
3875e5c31af7Sopenharmony_ci					vec3 v;
3876e5c31af7Sopenharmony_ci				};
3877e5c31af7Sopenharmony_ci
3878e5c31af7Sopenharmony_ci				void main()
3879e5c31af7Sopenharmony_ci				{
3880e5c31af7Sopenharmony_ci					${SETUP}
3881e5c31af7Sopenharmony_ci
3882e5c31af7Sopenharmony_ci					Test a = Test(in0.z, vec3(in0.x, in0.y, in0.z));
3883e5c31af7Sopenharmony_ci					Test b = Test(in0.y, vec3(-in0.z, -in0.x, -in0.y));
3884e5c31af7Sopenharmony_ci					Test c = Test(in0.x, vec3(-in0.y, in0.z, -in0.x));
3885e5c31af7Sopenharmony_ci
3886e5c31af7Sopenharmony_ci					Test[4] x[5][5] = Test[5][5][4] (	Test[5][4] (Test[4] (c, c, c, c),
3887e5c31af7Sopenharmony_ci																	Test[4] (b, b, b, b),
3888e5c31af7Sopenharmony_ci																	Test[4] (a, a, a, a),
3889e5c31af7Sopenharmony_ci																	Test[4] (c, c, c, c),
3890e5c31af7Sopenharmony_ci																	Test[4] (b, b, b, b) ),
3891e5c31af7Sopenharmony_ci
3892e5c31af7Sopenharmony_ci														Test[5][4] (Test[4] (a, a, a, a),
3893e5c31af7Sopenharmony_ci																	Test[4] (b, b, b, b),
3894e5c31af7Sopenharmony_ci																	Test[4] (c, c, c, c),
3895e5c31af7Sopenharmony_ci																	Test[4] (a, a, a, a),
3896e5c31af7Sopenharmony_ci																	Test[4] (b, b, b, b) ),
3897e5c31af7Sopenharmony_ci
3898e5c31af7Sopenharmony_ci														Test[5][4] (Test[4] (b, b, b, b),
3899e5c31af7Sopenharmony_ci																	Test[4] (c, c, c, c),
3900e5c31af7Sopenharmony_ci																	Test[4] (a, a, a, a),
3901e5c31af7Sopenharmony_ci																	Test[4] (b, b, b, b),
3902e5c31af7Sopenharmony_ci																	Test[4] (c, c, c, c) ),
3903e5c31af7Sopenharmony_ci
3904e5c31af7Sopenharmony_ci														Test[5][4] (Test[4] (c, c, c, c),
3905e5c31af7Sopenharmony_ci																	Test[4] (b, b, b, b),
3906e5c31af7Sopenharmony_ci																	Test[4] (a, a, a, a),
3907e5c31af7Sopenharmony_ci																	Test[4] (c, c, c, c),
3908e5c31af7Sopenharmony_ci																	Test[4] (b, b, b, b) ),
3909e5c31af7Sopenharmony_ci
3910e5c31af7Sopenharmony_ci														Test[5][4] (Test[4] (a, a, a, a),
3911e5c31af7Sopenharmony_ci																	Test[4] (b, b, b, b),
3912e5c31af7Sopenharmony_ci																	Test[4] (c, c, c, c),
3913e5c31af7Sopenharmony_ci																	Test[4] (a, a, a, a),
3914e5c31af7Sopenharmony_ci																	Test[4] (b, b, b, b) ) );
3915e5c31af7Sopenharmony_ci
3916e5c31af7Sopenharmony_ci					Test y[5][5][4] = x;
3917e5c31af7Sopenharmony_ci
3918e5c31af7Sopenharmony_ci					out0 = vec3(y[0][0][0].v.x, y[1][1][1].v.y, y[4][3][3].v.z);
3919e5c31af7Sopenharmony_ci					${OUTPUT}
3920e5c31af7Sopenharmony_ci				}
3921e5c31af7Sopenharmony_ci			""
3922e5c31af7Sopenharmony_ci		end
3923e5c31af7Sopenharmony_ci
3924e5c31af7Sopenharmony_ci		case vec3_1x3
3925e5c31af7Sopenharmony_ci			version 450
3926e5c31af7Sopenharmony_ci			desc "Testing assignment of arrays of arrays with explicit size"
3927e5c31af7Sopenharmony_ci			values
3928e5c31af7Sopenharmony_ci			{
3929e5c31af7Sopenharmony_ci				input vec3 in0 =	[ vec3(0.5, 1.0, 2.0) | vec3(-0.5, 11.2, -1.0) ];
3930e5c31af7Sopenharmony_ci				output vec3 out0 = [ vec3(0.5, -2.0, 1.0) | vec3(-0.5, 1.0, 11.2) ];
3931e5c31af7Sopenharmony_ci			}
3932e5c31af7Sopenharmony_ci
3933e5c31af7Sopenharmony_ci			both ""
3934e5c31af7Sopenharmony_ci				#version 450
3935e5c31af7Sopenharmony_ci				precision mediump float;
3936e5c31af7Sopenharmony_ci				${DECLARATIONS}
3937e5c31af7Sopenharmony_ci
3938e5c31af7Sopenharmony_ci				void main()
3939e5c31af7Sopenharmony_ci				{
3940e5c31af7Sopenharmony_ci					${SETUP}
3941e5c31af7Sopenharmony_ci					vec3 x[1][3] = vec3[1][3] (	vec3[3] (vec3(in0.x, in0.y, -in0.z),
3942e5c31af7Sopenharmony_ci														vec3(in0.y, -in0.z, in0.x),
3943e5c31af7Sopenharmony_ci														vec3(-in0.z, in0.x, in0.y)) );
3944e5c31af7Sopenharmony_ci
3945e5c31af7Sopenharmony_ci					vec3 y[1][3] = x;
3946e5c31af7Sopenharmony_ci
3947e5c31af7Sopenharmony_ci					out0 = vec3(y[0][0].x, y[0][1].y, y[0][2].z);
3948e5c31af7Sopenharmony_ci					${OUTPUT}
3949e5c31af7Sopenharmony_ci				}
3950e5c31af7Sopenharmony_ci			""
3951e5c31af7Sopenharmony_ci		end
3952e5c31af7Sopenharmony_ci
3953e5c31af7Sopenharmony_ci		case ivec3_3x1x3
3954e5c31af7Sopenharmony_ci			version 450
3955e5c31af7Sopenharmony_ci			desc "Testing assignment of arrays of arrays with explicit size"
3956e5c31af7Sopenharmony_ci			values
3957e5c31af7Sopenharmony_ci			{
3958e5c31af7Sopenharmony_ci				input ivec3 in0 =	[ ivec3(0, 1, 2) | ivec3(5, 11, -1) ];
3959e5c31af7Sopenharmony_ci				output ivec3 out0 = [ ivec3(0, -2, 1) | ivec3(5, 1, 11) ];
3960e5c31af7Sopenharmony_ci			}
3961e5c31af7Sopenharmony_ci
3962e5c31af7Sopenharmony_ci			both ""
3963e5c31af7Sopenharmony_ci				#version 450
3964e5c31af7Sopenharmony_ci				precision mediump int;
3965e5c31af7Sopenharmony_ci				precision mediump float;
3966e5c31af7Sopenharmony_ci				${DECLARATIONS}
3967e5c31af7Sopenharmony_ci
3968e5c31af7Sopenharmony_ci				void main()
3969e5c31af7Sopenharmony_ci				{
3970e5c31af7Sopenharmony_ci					${SETUP}
3971e5c31af7Sopenharmony_ci					ivec3[3][1][3] x = ivec3[3][1][3] (	ivec3[1][3] (ivec3[3] (	ivec3(in0.x, in0.y, -in0.z),
3972e5c31af7Sopenharmony_ci																				ivec3(0.0, 0.0, 0.0),
3973e5c31af7Sopenharmony_ci																				ivec3(0.0, 0.0, 0.0)) ),
3974e5c31af7Sopenharmony_ci
3975e5c31af7Sopenharmony_ci														ivec3[1][3] (ivec3[3] (	ivec3(0.0, 0.0, 0.0),
3976e5c31af7Sopenharmony_ci																				ivec3(in0.y, -in0.z, in0.x),
3977e5c31af7Sopenharmony_ci																				ivec3(0.0, 0.0, 0.0)) ),
3978e5c31af7Sopenharmony_ci
3979e5c31af7Sopenharmony_ci														ivec3[1][3] (ivec3[3] (	ivec3(0.0, 0.0, 0.0),
3980e5c31af7Sopenharmony_ci																				ivec3(0.0, 0.0, 0.0),
3981e5c31af7Sopenharmony_ci																				ivec3(-in0.z, in0.x, in0.y)) ) );
3982e5c31af7Sopenharmony_ci
3983e5c31af7Sopenharmony_ci					ivec3[3] y[3][1] = x;
3984e5c31af7Sopenharmony_ci
3985e5c31af7Sopenharmony_ci					out0 = ivec3(y[0][0][0].x, y[1][0][1].y, y[2][0][2].z);
3986e5c31af7Sopenharmony_ci					${OUTPUT}
3987e5c31af7Sopenharmony_ci				}
3988e5c31af7Sopenharmony_ci			""
3989e5c31af7Sopenharmony_ci		end
3990e5c31af7Sopenharmony_ci
3991e5c31af7Sopenharmony_ci		case bvec3_3x1
3992e5c31af7Sopenharmony_ci			version 450
3993e5c31af7Sopenharmony_ci			desc "Testing assignment of arrays of arrays with explicit size"
3994e5c31af7Sopenharmony_ci			values
3995e5c31af7Sopenharmony_ci			{
3996e5c31af7Sopenharmony_ci				input bvec3 in0 =	[ bvec3(true, false, true) ];
3997e5c31af7Sopenharmony_ci				output bvec3 out0 = [ bvec3(true, true, false) ];
3998e5c31af7Sopenharmony_ci			}
3999e5c31af7Sopenharmony_ci
4000e5c31af7Sopenharmony_ci			both ""
4001e5c31af7Sopenharmony_ci				#version 450
4002e5c31af7Sopenharmony_ci				precision mediump float;
4003e5c31af7Sopenharmony_ci				${DECLARATIONS}
4004e5c31af7Sopenharmony_ci
4005e5c31af7Sopenharmony_ci				void main()
4006e5c31af7Sopenharmony_ci				{
4007e5c31af7Sopenharmony_ci					${SETUP}
4008e5c31af7Sopenharmony_ci					bvec3[3][1] x = bvec3[3][1] (	bvec3[1] ( bvec3(in0.x, in0.y, in0.z)),
4009e5c31af7Sopenharmony_ci													bvec3[1] ( bvec3(in0.y, in0.z, in0.x)),
4010e5c31af7Sopenharmony_ci													bvec3[1] ( bvec3(in0.z, in0.x, in0.y)) );
4011e5c31af7Sopenharmony_ci
4012e5c31af7Sopenharmony_ci					bvec3[3][1] y = x;
4013e5c31af7Sopenharmony_ci
4014e5c31af7Sopenharmony_ci					out0 = bvec3(y[0][0].x, y[1][0].y, y[2][0].z);
4015e5c31af7Sopenharmony_ci					${OUTPUT}
4016e5c31af7Sopenharmony_ci				}
4017e5c31af7Sopenharmony_ci			""
4018e5c31af7Sopenharmony_ci		end
4019e5c31af7Sopenharmony_ci
4020e5c31af7Sopenharmony_ci		case mat3_3x2
4021e5c31af7Sopenharmony_ci			version 450
4022e5c31af7Sopenharmony_ci			desc "Testing assignment of arrays of arrays with explicit size"
4023e5c31af7Sopenharmony_ci			values
4024e5c31af7Sopenharmony_ci			{
4025e5c31af7Sopenharmony_ci				input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(-1.5, 0.0, -2.3) ];
4026e5c31af7Sopenharmony_ci				output vec3 out0 = [ vec3(0.5, -1.0, 1.0) | vec3(-1.5, 0.0, 0.0) ];
4027e5c31af7Sopenharmony_ci			}
4028e5c31af7Sopenharmony_ci
4029e5c31af7Sopenharmony_ci			both ""
4030e5c31af7Sopenharmony_ci				#version 450
4031e5c31af7Sopenharmony_ci				precision mediump float;
4032e5c31af7Sopenharmony_ci				${DECLARATIONS}
4033e5c31af7Sopenharmony_ci
4034e5c31af7Sopenharmony_ci				void main()
4035e5c31af7Sopenharmony_ci				{
4036e5c31af7Sopenharmony_ci					${SETUP}
4037e5c31af7Sopenharmony_ci					mat3[3][2] a = mat3[3][2] (	mat3[2] (mat3(	in0.x, in0.y, in0.z,
4038e5c31af7Sopenharmony_ci																in0.x, in0.y, in0.z,
4039e5c31af7Sopenharmony_ci																in0.x, in0.y, in0.z),
4040e5c31af7Sopenharmony_ci														 mat3(	in0.z, in0.x, -in0.y,
4041e5c31af7Sopenharmony_ci																in0.z, in0.x, -in0.y,
4042e5c31af7Sopenharmony_ci																in0.z, in0.x, -in0.y)),
4043e5c31af7Sopenharmony_ci
4044e5c31af7Sopenharmony_ci												mat3[2] (mat3(	-in0.z, -in0.z, in0.z,
4045e5c31af7Sopenharmony_ci																-in0.y, -in0.y, in0.y,
4046e5c31af7Sopenharmony_ci																-in0.x, -in0.x, in0.x),
4047e5c31af7Sopenharmony_ci														 mat3(	in0.x, in0.y, in0.z,
4048e5c31af7Sopenharmony_ci																in0.x, in0.y, in0.z,
4049e5c31af7Sopenharmony_ci																in0.x, in0.y, in0.z)),
4050e5c31af7Sopenharmony_ci
4051e5c31af7Sopenharmony_ci												mat3[2] (mat3(	in0.z, in0.x, -in0.y,
4052e5c31af7Sopenharmony_ci																in0.z, in0.x, -in0.y,
4053e5c31af7Sopenharmony_ci																in0.z, in0.x, -in0.y),
4054e5c31af7Sopenharmony_ci														 mat3(	-in0.z, -in0.z, in0.z,
4055e5c31af7Sopenharmony_ci																-in0.y, -in0.y, in0.y,
4056e5c31af7Sopenharmony_ci																-in0.x, -in0.x, in0.x)) );
4057e5c31af7Sopenharmony_ci
4058e5c31af7Sopenharmony_ci					mat3[2] y[3] = a;
4059e5c31af7Sopenharmony_ci
4060e5c31af7Sopenharmony_ci					mat3 a0 = y[0][0];
4061e5c31af7Sopenharmony_ci					mat3 a1 = y[0][1];
4062e5c31af7Sopenharmony_ci					mat3 a2 = y[2][1];
4063e5c31af7Sopenharmony_ci
4064e5c31af7Sopenharmony_ci					float ret0 = a0[2][0];
4065e5c31af7Sopenharmony_ci					float ret1 = a1[0][2];
4066e5c31af7Sopenharmony_ci					float ret2 = a2[1][2];
4067e5c31af7Sopenharmony_ci
4068e5c31af7Sopenharmony_ci					out0 = vec3(ret0, ret1, ret2);
4069e5c31af7Sopenharmony_ci					${OUTPUT}
4070e5c31af7Sopenharmony_ci				}
4071e5c31af7Sopenharmony_ci			""
4072e5c31af7Sopenharmony_ci		end
4073e5c31af7Sopenharmony_ci
4074e5c31af7Sopenharmony_ci		case mat3_3x3x3
4075e5c31af7Sopenharmony_ci			version 450
4076e5c31af7Sopenharmony_ci			desc "Testing assignment of arrays of arrays with explicit size"
4077e5c31af7Sopenharmony_ci			values
4078e5c31af7Sopenharmony_ci			{
4079e5c31af7Sopenharmony_ci				input ivec3 in0 = [ ivec3(0, 1, 2) | ivec3(-1, 0, -2) ];
4080e5c31af7Sopenharmony_ci				output ivec3 out0 = [ ivec3(0, -1, 1) | ivec3(-1, 0, 0) ];
4081e5c31af7Sopenharmony_ci			}
4082e5c31af7Sopenharmony_ci
4083e5c31af7Sopenharmony_ci			both ""
4084e5c31af7Sopenharmony_ci				#version 450
4085e5c31af7Sopenharmony_ci				precision mediump int;
4086e5c31af7Sopenharmony_ci				precision mediump float;
4087e5c31af7Sopenharmony_ci				${DECLARATIONS}
4088e5c31af7Sopenharmony_ci
4089e5c31af7Sopenharmony_ci				void main()
4090e5c31af7Sopenharmony_ci				{
4091e5c31af7Sopenharmony_ci					${SETUP}
4092e5c31af7Sopenharmony_ci
4093e5c31af7Sopenharmony_ci					mat3 a = mat3(	in0.x, in0.y, in0.z,
4094e5c31af7Sopenharmony_ci									in0.x, in0.y, in0.z,
4095e5c31af7Sopenharmony_ci									in0.x, in0.y, in0.z);
4096e5c31af7Sopenharmony_ci					mat3 b = mat3(	in0.z, in0.x, -in0.y,
4097e5c31af7Sopenharmony_ci									in0.z, in0.x, -in0.y,
4098e5c31af7Sopenharmony_ci									in0.z, in0.x, -in0.y);
4099e5c31af7Sopenharmony_ci					mat3 c = mat3(	-in0.z, -in0.z, in0.z,
4100e5c31af7Sopenharmony_ci									-in0.y, -in0.y, in0.y,
4101e5c31af7Sopenharmony_ci									-in0.x, -in0.x, in0.x);
4102e5c31af7Sopenharmony_ci
4103e5c31af7Sopenharmony_ci					mat3[3][3][3] x = mat3[3][3][3] (mat3[3][3] (mat3[3] (a, a, a),
4104e5c31af7Sopenharmony_ci																mat3[3] (b, b, b),
4105e5c31af7Sopenharmony_ci																mat3[3] (c, c, c)),
4106e5c31af7Sopenharmony_ci
4107e5c31af7Sopenharmony_ci													mat3[3][3] (mat3[3] (b, b, b),
4108e5c31af7Sopenharmony_ci																mat3[3] (a, a, a),
4109e5c31af7Sopenharmony_ci																mat3[3] (c, c, c)),
4110e5c31af7Sopenharmony_ci
4111e5c31af7Sopenharmony_ci													mat3[3][3] (mat3[3] (c, c, c),
4112e5c31af7Sopenharmony_ci																mat3[3] (a, a, a),
4113e5c31af7Sopenharmony_ci																mat3[3] (b, b, b)) );
4114e5c31af7Sopenharmony_ci
4115e5c31af7Sopenharmony_ci					mat3 y[3][3][3] = x;
4116e5c31af7Sopenharmony_ci
4117e5c31af7Sopenharmony_ci					mat3 x0 = y[0][0][0];
4118e5c31af7Sopenharmony_ci					mat3 x1 = y[1][0][0];
4119e5c31af7Sopenharmony_ci					mat3 x2 = y[2][0][0];
4120e5c31af7Sopenharmony_ci
4121e5c31af7Sopenharmony_ci					float ret0 = x0[2][0];
4122e5c31af7Sopenharmony_ci					float ret1 = x1[0][2];
4123e5c31af7Sopenharmony_ci					float ret2 = x2[1][2];
4124e5c31af7Sopenharmony_ci
4125e5c31af7Sopenharmony_ci					out0 = ivec3(ret0, ret1, ret2);
4126e5c31af7Sopenharmony_ci					${OUTPUT}
4127e5c31af7Sopenharmony_ci				}
4128e5c31af7Sopenharmony_ci			""
4129e5c31af7Sopenharmony_ci		end
4130e5c31af7Sopenharmony_ci
4131e5c31af7Sopenharmony_ci		case mat3_3x4
4132e5c31af7Sopenharmony_ci			version 450
4133e5c31af7Sopenharmony_ci			desc "Testing assignment of arrays of arrays with explicit size"
4134e5c31af7Sopenharmony_ci			values
4135e5c31af7Sopenharmony_ci			{
4136e5c31af7Sopenharmony_ci				input bvec3 in0 = [ bvec3(true, false, true) ];
4137e5c31af7Sopenharmony_ci				output bvec3 out0 = [ bvec3(true, false, false) ];
4138e5c31af7Sopenharmony_ci			}
4139e5c31af7Sopenharmony_ci
4140e5c31af7Sopenharmony_ci			both ""
4141e5c31af7Sopenharmony_ci				#version 450
4142e5c31af7Sopenharmony_ci				precision mediump float;
4143e5c31af7Sopenharmony_ci				${DECLARATIONS}
4144e5c31af7Sopenharmony_ci
4145e5c31af7Sopenharmony_ci				void main()
4146e5c31af7Sopenharmony_ci				{
4147e5c31af7Sopenharmony_ci					${SETUP}
4148e5c31af7Sopenharmony_ci
4149e5c31af7Sopenharmony_ci					mat3 a = mat3(	in0.x, in0.y, in0.z,
4150e5c31af7Sopenharmony_ci									in0.x, in0.y, in0.z,
4151e5c31af7Sopenharmony_ci									in0.x, in0.y, in0.z);
4152e5c31af7Sopenharmony_ci
4153e5c31af7Sopenharmony_ci					mat3 b = mat3(	in0.z, in0.x, in0.y,
4154e5c31af7Sopenharmony_ci									in0.z, in0.x, in0.y,
4155e5c31af7Sopenharmony_ci									in0.z, in0.x, in0.y);
4156e5c31af7Sopenharmony_ci
4157e5c31af7Sopenharmony_ci					mat3 c = mat3(	in0.z, in0.z, in0.z,
4158e5c31af7Sopenharmony_ci									in0.y, in0.y, in0.y,
4159e5c31af7Sopenharmony_ci									in0.x, in0.x, in0.x);
4160e5c31af7Sopenharmony_ci
4161e5c31af7Sopenharmony_ci					mat3[4] x[3] = mat3[3][4] (	mat3[4] (a, b, c, a),
4162e5c31af7Sopenharmony_ci												mat3[4] (b, c, a, b),
4163e5c31af7Sopenharmony_ci												mat3[4] (c, a, b, c) );
4164e5c31af7Sopenharmony_ci
4165e5c31af7Sopenharmony_ci					mat3 y[3][4] = x;
4166e5c31af7Sopenharmony_ci
4167e5c31af7Sopenharmony_ci					mat3 x0 = y[0][0];
4168e5c31af7Sopenharmony_ci					mat3 x1 = y[1][3];
4169e5c31af7Sopenharmony_ci					mat3 x2 = y[2][0];
4170e5c31af7Sopenharmony_ci
4171e5c31af7Sopenharmony_ci					float ret0 = x0[2][0];
4172e5c31af7Sopenharmony_ci					float ret1 = x1[0][2];
4173e5c31af7Sopenharmony_ci					float ret2 = x2[1][2];
4174e5c31af7Sopenharmony_ci
4175e5c31af7Sopenharmony_ci					out0 = bvec3(ret0, ret1, ret2);
4176e5c31af7Sopenharmony_ci					${OUTPUT}
4177e5c31af7Sopenharmony_ci				}
4178e5c31af7Sopenharmony_ci			""
4179e5c31af7Sopenharmony_ci		end
4180e5c31af7Sopenharmony_ci
4181e5c31af7Sopenharmony_ci	end # explicit_to_explicit
4182e5c31af7Sopenharmony_ci
4183e5c31af7Sopenharmony_ci	group explicit_to_implicit "Declaring an array of arrays with explicit size and assigning it to another array of arrays with implicit size"
4184e5c31af7Sopenharmony_ci
4185e5c31af7Sopenharmony_ci		case float_3x3
4186e5c31af7Sopenharmony_ci			version 450
4187e5c31af7Sopenharmony_ci			desc "Testing assignment of arrays of arrays from explicitly sized to implicitly sized"
4188e5c31af7Sopenharmony_ci			values
4189e5c31af7Sopenharmony_ci			{
4190e5c31af7Sopenharmony_ci				input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(7.4, -1.0, 2.0) | vec3(3.0, 1.6, -2.0) ];
4191e5c31af7Sopenharmony_ci				output vec3 out0 = [ vec3(2.0, 0.5, 1.0) | vec3(2.0, 7.4, -1.0) | vec3(-2.0, 3.0, 1.6) ];
4192e5c31af7Sopenharmony_ci			}
4193e5c31af7Sopenharmony_ci
4194e5c31af7Sopenharmony_ci			both ""
4195e5c31af7Sopenharmony_ci				#version 450
4196e5c31af7Sopenharmony_ci				precision mediump float;
4197e5c31af7Sopenharmony_ci				${DECLARATIONS}
4198e5c31af7Sopenharmony_ci
4199e5c31af7Sopenharmony_ci				void main()
4200e5c31af7Sopenharmony_ci				{
4201e5c31af7Sopenharmony_ci					${SETUP}
4202e5c31af7Sopenharmony_ci					float x[3][3] = float[3][3] (	float[3] (in0.z, in0.x, in0.y),
4203e5c31af7Sopenharmony_ci													float[3] (in0.z, in0.x, in0.y),
4204e5c31af7Sopenharmony_ci													float[3] (in0.z, in0.x, in0.y) );
4205e5c31af7Sopenharmony_ci
4206e5c31af7Sopenharmony_ci					float[] y[] = x;
4207e5c31af7Sopenharmony_ci
4208e5c31af7Sopenharmony_ci					out0 = vec3(y[0][0], y[1][1], y[2][2]);
4209e5c31af7Sopenharmony_ci					${OUTPUT}
4210e5c31af7Sopenharmony_ci				}
4211e5c31af7Sopenharmony_ci			""
4212e5c31af7Sopenharmony_ci		end
4213e5c31af7Sopenharmony_ci
4214e5c31af7Sopenharmony_ci		case int_2x3
4215e5c31af7Sopenharmony_ci			version 450
4216e5c31af7Sopenharmony_ci			desc "Testing assignment of arrays of arrays from explicitly sized to implicitly sized"
4217e5c31af7Sopenharmony_ci			values
4218e5c31af7Sopenharmony_ci			{
4219e5c31af7Sopenharmony_ci				input ivec3 in0 = [ ivec3(0, 1, 2) | ivec3(7, -1, 2) | ivec3(3, 1, -2) ];
4220e5c31af7Sopenharmony_ci				output ivec3 out0 = [ ivec3(2, 0, 1) | ivec3(2, 7, -1) | ivec3(-2, 3, 1) ];
4221e5c31af7Sopenharmony_ci			}
4222e5c31af7Sopenharmony_ci
4223e5c31af7Sopenharmony_ci			both ""
4224e5c31af7Sopenharmony_ci				#version 450
4225e5c31af7Sopenharmony_ci				precision mediump int;
4226e5c31af7Sopenharmony_ci				precision mediump float;
4227e5c31af7Sopenharmony_ci				${DECLARATIONS}
4228e5c31af7Sopenharmony_ci
4229e5c31af7Sopenharmony_ci				void main()
4230e5c31af7Sopenharmony_ci				{
4231e5c31af7Sopenharmony_ci					${SETUP}
4232e5c31af7Sopenharmony_ci					int[2][3] x = int[2][3] (	int[3] (in0.z, in0.x, in0.y),
4233e5c31af7Sopenharmony_ci												int[3] (in0.z, in0.x, in0.y) );;
4234e5c31af7Sopenharmony_ci					int y[][] = x;
4235e5c31af7Sopenharmony_ci
4236e5c31af7Sopenharmony_ci					out0 = ivec3(y[0][0], y[1][1], y[0][2]);
4237e5c31af7Sopenharmony_ci					${OUTPUT}
4238e5c31af7Sopenharmony_ci				}
4239e5c31af7Sopenharmony_ci			""
4240e5c31af7Sopenharmony_ci		end
4241e5c31af7Sopenharmony_ci
4242e5c31af7Sopenharmony_ci		case bool_3x3x3
4243e5c31af7Sopenharmony_ci			version 450
4244e5c31af7Sopenharmony_ci			desc "Testing assignment of arrays of arrays from explicitly sized to implicitly sized"
4245e5c31af7Sopenharmony_ci			values
4246e5c31af7Sopenharmony_ci			{
4247e5c31af7Sopenharmony_ci				input bvec3 in0 = [ bvec3(false, true, true) ];
4248e5c31af7Sopenharmony_ci				output bvec3 out0 = [ bvec3(true, false, true) ];
4249e5c31af7Sopenharmony_ci			}
4250e5c31af7Sopenharmony_ci
4251e5c31af7Sopenharmony_ci			both ""
4252e5c31af7Sopenharmony_ci				#version 450
4253e5c31af7Sopenharmony_ci				precision mediump float;
4254e5c31af7Sopenharmony_ci				${DECLARATIONS}
4255e5c31af7Sopenharmony_ci
4256e5c31af7Sopenharmony_ci				void main()
4257e5c31af7Sopenharmony_ci				{
4258e5c31af7Sopenharmony_ci					${SETUP}
4259e5c31af7Sopenharmony_ci					bool[3][3] x[3] = bool[3][3][3] (bool[3][3] (bool[3](in0.z, in0.z, in0.z),
4260e5c31af7Sopenharmony_ci																bool[3](in0.z, in0.z, in0.z),
4261e5c31af7Sopenharmony_ci																bool[3](in0.z, in0.z, in0.z)),
4262e5c31af7Sopenharmony_ci
4263e5c31af7Sopenharmony_ci													bool[3][3] (bool[3](in0.x, in0.x, in0.x),
4264e5c31af7Sopenharmony_ci																bool[3](in0.x, in0.x, in0.x),
4265e5c31af7Sopenharmony_ci																bool[3](in0.x, in0.x, in0.x)),
4266e5c31af7Sopenharmony_ci
4267e5c31af7Sopenharmony_ci													bool[3][3] (bool[3](in0.y, in0.y, in0.y),
4268e5c31af7Sopenharmony_ci																bool[3](in0.y, in0.y, in0.y),
4269e5c31af7Sopenharmony_ci																bool[3](in0.y, in0.y, in0.y)) );
4270e5c31af7Sopenharmony_ci
4271e5c31af7Sopenharmony_ci					bool[] y[][] = x;
4272e5c31af7Sopenharmony_ci
4273e5c31af7Sopenharmony_ci					out0 = bvec3(y[0][0][0], y[1][1][1], y[2][2][2]);
4274e5c31af7Sopenharmony_ci					${OUTPUT}
4275e5c31af7Sopenharmony_ci				}
4276e5c31af7Sopenharmony_ci			""
4277e5c31af7Sopenharmony_ci		end
4278e5c31af7Sopenharmony_ci
4279e5c31af7Sopenharmony_ci		case struct_5x5x4
4280e5c31af7Sopenharmony_ci			version 450
4281e5c31af7Sopenharmony_ci			desc "Testing assignment of arrays of arrays from explicitly sized to implicitly sized"
4282e5c31af7Sopenharmony_ci			values
4283e5c31af7Sopenharmony_ci			{
4284e5c31af7Sopenharmony_ci				input vec3 in0 = [ vec3(0.5, 1.0, 2.0) ];
4285e5c31af7Sopenharmony_ci				output vec3 out0 = [ vec3(-1.0, -0.5, 2.0) ];
4286e5c31af7Sopenharmony_ci			}
4287e5c31af7Sopenharmony_ci
4288e5c31af7Sopenharmony_ci			both ""
4289e5c31af7Sopenharmony_ci				#version 450
4290e5c31af7Sopenharmony_ci				precision mediump float;
4291e5c31af7Sopenharmony_ci				${DECLARATIONS}
4292e5c31af7Sopenharmony_ci
4293e5c31af7Sopenharmony_ci				struct Test
4294e5c31af7Sopenharmony_ci				{
4295e5c31af7Sopenharmony_ci					float f;
4296e5c31af7Sopenharmony_ci					vec3 v;
4297e5c31af7Sopenharmony_ci				};
4298e5c31af7Sopenharmony_ci
4299e5c31af7Sopenharmony_ci				void main()
4300e5c31af7Sopenharmony_ci				{
4301e5c31af7Sopenharmony_ci					${SETUP}
4302e5c31af7Sopenharmony_ci
4303e5c31af7Sopenharmony_ci					Test a = Test(in0.z, vec3(in0.x, in0.y, in0.z));
4304e5c31af7Sopenharmony_ci					Test b = Test(in0.y, vec3(-in0.z, -in0.x, -in0.y));
4305e5c31af7Sopenharmony_ci					Test c = Test(in0.x, vec3(-in0.y, in0.z, -in0.x));
4306e5c31af7Sopenharmony_ci
4307e5c31af7Sopenharmony_ci					Test[4] x[5][5] = Test[5][5][4] (Test[5][4] (Test[4] (c, c, c, c),
4308e5c31af7Sopenharmony_ci																Test[4] (b, b, b, b),
4309e5c31af7Sopenharmony_ci																Test[4] (a, a, a, a),
4310e5c31af7Sopenharmony_ci																Test[4] (c, c, c, c),
4311e5c31af7Sopenharmony_ci																Test[4] (b, b, b, b) ),
4312e5c31af7Sopenharmony_ci
4313e5c31af7Sopenharmony_ci													Test[5][4] (Test[4] (a, a, a, a),
4314e5c31af7Sopenharmony_ci																Test[4] (b, b, b, b),
4315e5c31af7Sopenharmony_ci																Test[4] (c, c, c, c),
4316e5c31af7Sopenharmony_ci																Test[4] (a, a, a, a),
4317e5c31af7Sopenharmony_ci																Test[4] (b, b, b, b) ),
4318e5c31af7Sopenharmony_ci
4319e5c31af7Sopenharmony_ci													Test[5][4] (Test[4] (b, b, b, b),
4320e5c31af7Sopenharmony_ci																Test[4] (c, c, c, c),
4321e5c31af7Sopenharmony_ci																Test[4] (a, a, a, a),
4322e5c31af7Sopenharmony_ci																Test[4] (b, b, b, b),
4323e5c31af7Sopenharmony_ci																Test[4] (c, c, c, c) ),
4324e5c31af7Sopenharmony_ci
4325e5c31af7Sopenharmony_ci													Test[5][4] (Test[4] (c, c, c, c),
4326e5c31af7Sopenharmony_ci																Test[4] (b, b, b, b),
4327e5c31af7Sopenharmony_ci																Test[4] (a, a, a, a),
4328e5c31af7Sopenharmony_ci																Test[4] (c, c, c, c),
4329e5c31af7Sopenharmony_ci																Test[4] (b, b, b, b) ),
4330e5c31af7Sopenharmony_ci
4331e5c31af7Sopenharmony_ci													Test[5][4] (Test[4] (a, a, a, a),
4332e5c31af7Sopenharmony_ci																Test[4] (b, b, b, b),
4333e5c31af7Sopenharmony_ci																Test[4] (c, c, c, c),
4334e5c31af7Sopenharmony_ci																Test[4] (a, a, a, a),
4335e5c31af7Sopenharmony_ci																Test[4] (b, b, b, b) ) );
4336e5c31af7Sopenharmony_ci
4337e5c31af7Sopenharmony_ci					Test y[][][] = x;
4338e5c31af7Sopenharmony_ci
4339e5c31af7Sopenharmony_ci					out0 = vec3(y[0][0][0].v.x, y[1][1][1].v.y, y[4][3][3].v.z);
4340e5c31af7Sopenharmony_ci					${OUTPUT}
4341e5c31af7Sopenharmony_ci				}
4342e5c31af7Sopenharmony_ci			""
4343e5c31af7Sopenharmony_ci		end
4344e5c31af7Sopenharmony_ci
4345e5c31af7Sopenharmony_ci		case vec3_1x3
4346e5c31af7Sopenharmony_ci			version 450
4347e5c31af7Sopenharmony_ci			desc "Testing assignment of arrays of arrays from explicitly sized to implicitly sized"
4348e5c31af7Sopenharmony_ci			values
4349e5c31af7Sopenharmony_ci			{
4350e5c31af7Sopenharmony_ci				input vec3 in0 =	[ vec3(0.5, 1.0, 2.0) | vec3(-0.5, 11.2, -1.0) ];
4351e5c31af7Sopenharmony_ci				output vec3 out0 = [ vec3(0.5, -2.0, 1.0) | vec3(-0.5, 1.0, 11.2) ];
4352e5c31af7Sopenharmony_ci			}
4353e5c31af7Sopenharmony_ci
4354e5c31af7Sopenharmony_ci			both ""
4355e5c31af7Sopenharmony_ci				#version 450
4356e5c31af7Sopenharmony_ci				precision mediump float;
4357e5c31af7Sopenharmony_ci				${DECLARATIONS}
4358e5c31af7Sopenharmony_ci
4359e5c31af7Sopenharmony_ci				void main()
4360e5c31af7Sopenharmony_ci				{
4361e5c31af7Sopenharmony_ci					${SETUP}
4362e5c31af7Sopenharmony_ci					vec3 x[1][3] = vec3[1][3] (	vec3[3] (vec3(in0.x, in0.y, -in0.z),
4363e5c31af7Sopenharmony_ci														vec3(in0.y, -in0.z, in0.x),
4364e5c31af7Sopenharmony_ci														vec3(-in0.z, in0.x, in0.y)) );
4365e5c31af7Sopenharmony_ci
4366e5c31af7Sopenharmony_ci					vec3 y[][] = x;
4367e5c31af7Sopenharmony_ci
4368e5c31af7Sopenharmony_ci					out0 = vec3(y[0][0].x, y[0][1].y, y[0][2].z);
4369e5c31af7Sopenharmony_ci					${OUTPUT}
4370e5c31af7Sopenharmony_ci				}
4371e5c31af7Sopenharmony_ci			""
4372e5c31af7Sopenharmony_ci		end
4373e5c31af7Sopenharmony_ci
4374e5c31af7Sopenharmony_ci		case ivec3_3x1x3
4375e5c31af7Sopenharmony_ci			version 450
4376e5c31af7Sopenharmony_ci			desc "Testing assignment of arrays of arrays from explicitly sized to implicitly sized"
4377e5c31af7Sopenharmony_ci			values
4378e5c31af7Sopenharmony_ci			{
4379e5c31af7Sopenharmony_ci				input ivec3 in0 =	[ ivec3(0, 1, 2) | ivec3(5, 11, -1) ];
4380e5c31af7Sopenharmony_ci				output ivec3 out0 = [ ivec3(0, -2, 1) | ivec3(5, 1, 11) ];
4381e5c31af7Sopenharmony_ci			}
4382e5c31af7Sopenharmony_ci
4383e5c31af7Sopenharmony_ci			both ""
4384e5c31af7Sopenharmony_ci				#version 450
4385e5c31af7Sopenharmony_ci				precision mediump int;
4386e5c31af7Sopenharmony_ci				precision mediump float;
4387e5c31af7Sopenharmony_ci				${DECLARATIONS}
4388e5c31af7Sopenharmony_ci
4389e5c31af7Sopenharmony_ci				void main()
4390e5c31af7Sopenharmony_ci				{
4391e5c31af7Sopenharmony_ci					${SETUP}
4392e5c31af7Sopenharmony_ci					ivec3[3][1][3] x = ivec3[3][1][3] (	ivec3[1][3] (ivec3[3] (	ivec3(in0.x, in0.y, -in0.z),
4393e5c31af7Sopenharmony_ci																				ivec3(0.0, 0.0, 0.0),
4394e5c31af7Sopenharmony_ci																				ivec3(0.0, 0.0, 0.0)) ),
4395e5c31af7Sopenharmony_ci
4396e5c31af7Sopenharmony_ci														ivec3[1][3] (ivec3[3] (	ivec3(0.0, 0.0, 0.0),
4397e5c31af7Sopenharmony_ci																				ivec3(in0.y, -in0.z, in0.x),
4398e5c31af7Sopenharmony_ci																				ivec3(0.0, 0.0, 0.0)) ),
4399e5c31af7Sopenharmony_ci
4400e5c31af7Sopenharmony_ci														ivec3[1][3] (ivec3[3] (	ivec3(0.0, 0.0, 0.0),
4401e5c31af7Sopenharmony_ci																				ivec3(0.0, 0.0, 0.0),
4402e5c31af7Sopenharmony_ci																				ivec3(-in0.z, in0.x, in0.y)) ) );
4403e5c31af7Sopenharmony_ci
4404e5c31af7Sopenharmony_ci					ivec3[] y[][] = x;
4405e5c31af7Sopenharmony_ci
4406e5c31af7Sopenharmony_ci					out0 = ivec3(y[0][0][0].x, y[1][0][1].y, y[2][0][2].z);
4407e5c31af7Sopenharmony_ci					${OUTPUT}
4408e5c31af7Sopenharmony_ci				}
4409e5c31af7Sopenharmony_ci			""
4410e5c31af7Sopenharmony_ci		end
4411e5c31af7Sopenharmony_ci
4412e5c31af7Sopenharmony_ci		case bvec3_3x1
4413e5c31af7Sopenharmony_ci			version 450
4414e5c31af7Sopenharmony_ci			desc "Testing assignment of arrays of arrays from explicitly sized to implicitly sized"
4415e5c31af7Sopenharmony_ci			values
4416e5c31af7Sopenharmony_ci			{
4417e5c31af7Sopenharmony_ci				input bvec3 in0 =	[ bvec3(true, false, true) ];
4418e5c31af7Sopenharmony_ci				output bvec3 out0 = [ bvec3(true, true, false) ];
4419e5c31af7Sopenharmony_ci			}
4420e5c31af7Sopenharmony_ci
4421e5c31af7Sopenharmony_ci			both ""
4422e5c31af7Sopenharmony_ci				#version 450
4423e5c31af7Sopenharmony_ci				precision mediump float;
4424e5c31af7Sopenharmony_ci				${DECLARATIONS}
4425e5c31af7Sopenharmony_ci
4426e5c31af7Sopenharmony_ci				void main()
4427e5c31af7Sopenharmony_ci				{
4428e5c31af7Sopenharmony_ci					${SETUP}
4429e5c31af7Sopenharmony_ci					bvec3[3][1] x = bvec3[3][1] (	bvec3[1] ( bvec3(in0.x, in0.y, in0.z)),
4430e5c31af7Sopenharmony_ci													bvec3[1] ( bvec3(in0.y, in0.z, in0.x)),
4431e5c31af7Sopenharmony_ci													bvec3[1] ( bvec3(in0.z, in0.x, in0.y)) );
4432e5c31af7Sopenharmony_ci
4433e5c31af7Sopenharmony_ci					bvec3[][] y = x;
4434e5c31af7Sopenharmony_ci
4435e5c31af7Sopenharmony_ci					out0 = bvec3(y[0][0].x, y[1][0].y, y[2][0].z);
4436e5c31af7Sopenharmony_ci					${OUTPUT}
4437e5c31af7Sopenharmony_ci				}
4438e5c31af7Sopenharmony_ci			""
4439e5c31af7Sopenharmony_ci		end
4440e5c31af7Sopenharmony_ci
4441e5c31af7Sopenharmony_ci		case mat3_3x2
4442e5c31af7Sopenharmony_ci			version 450
4443e5c31af7Sopenharmony_ci			desc "Testing assignment of arrays of arrays from explicitly sized to implicitly sized"
4444e5c31af7Sopenharmony_ci			values
4445e5c31af7Sopenharmony_ci			{
4446e5c31af7Sopenharmony_ci				input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(-1.5, 0.0, -2.3) ];
4447e5c31af7Sopenharmony_ci				output vec3 out0 = [ vec3(0.5, -1.0, 1.0) | vec3(-1.5, 0.0, 0.0) ];
4448e5c31af7Sopenharmony_ci			}
4449e5c31af7Sopenharmony_ci
4450e5c31af7Sopenharmony_ci			both ""
4451e5c31af7Sopenharmony_ci				#version 450
4452e5c31af7Sopenharmony_ci				precision mediump float;
4453e5c31af7Sopenharmony_ci				${DECLARATIONS}
4454e5c31af7Sopenharmony_ci
4455e5c31af7Sopenharmony_ci				void main()
4456e5c31af7Sopenharmony_ci				{
4457e5c31af7Sopenharmony_ci					${SETUP}
4458e5c31af7Sopenharmony_ci					mat3[3][2] a = mat3[3][2] (	mat3[2] (mat3(	in0.x, in0.y, in0.z,
4459e5c31af7Sopenharmony_ci																in0.x, in0.y, in0.z,
4460e5c31af7Sopenharmony_ci																in0.x, in0.y, in0.z),
4461e5c31af7Sopenharmony_ci														 mat3(	in0.z, in0.x, -in0.y,
4462e5c31af7Sopenharmony_ci																in0.z, in0.x, -in0.y,
4463e5c31af7Sopenharmony_ci																in0.z, in0.x, -in0.y)),
4464e5c31af7Sopenharmony_ci
4465e5c31af7Sopenharmony_ci												mat3[2] (mat3(	-in0.z, -in0.z, in0.z,
4466e5c31af7Sopenharmony_ci																-in0.y, -in0.y, in0.y,
4467e5c31af7Sopenharmony_ci																-in0.x, -in0.x, in0.x),
4468e5c31af7Sopenharmony_ci														 mat3(	in0.x, in0.y, in0.z,
4469e5c31af7Sopenharmony_ci																in0.x, in0.y, in0.z,
4470e5c31af7Sopenharmony_ci																in0.x, in0.y, in0.z)),
4471e5c31af7Sopenharmony_ci
4472e5c31af7Sopenharmony_ci												mat3[2] (mat3(	in0.z, in0.x, -in0.y,
4473e5c31af7Sopenharmony_ci																in0.z, in0.x, -in0.y,
4474e5c31af7Sopenharmony_ci																in0.z, in0.x, -in0.y),
4475e5c31af7Sopenharmony_ci														 mat3(	-in0.z, -in0.z, in0.z,
4476e5c31af7Sopenharmony_ci																-in0.y, -in0.y, in0.y,
4477e5c31af7Sopenharmony_ci																-in0.x, -in0.x, in0.x)) );
4478e5c31af7Sopenharmony_ci
4479e5c31af7Sopenharmony_ci					mat3[] y[] = a;
4480e5c31af7Sopenharmony_ci
4481e5c31af7Sopenharmony_ci					mat3 a0 = y[0][0];
4482e5c31af7Sopenharmony_ci					mat3 a1 = y[0][1];
4483e5c31af7Sopenharmony_ci					mat3 a2 = y[2][1];
4484e5c31af7Sopenharmony_ci
4485e5c31af7Sopenharmony_ci					float ret0 = a0[2][0];
4486e5c31af7Sopenharmony_ci					float ret1 = a1[0][2];
4487e5c31af7Sopenharmony_ci					float ret2 = a2[1][2];
4488e5c31af7Sopenharmony_ci
4489e5c31af7Sopenharmony_ci					out0 = vec3(ret0, ret1, ret2);
4490e5c31af7Sopenharmony_ci					${OUTPUT}
4491e5c31af7Sopenharmony_ci				}
4492e5c31af7Sopenharmony_ci			""
4493e5c31af7Sopenharmony_ci		end
4494e5c31af7Sopenharmony_ci
4495e5c31af7Sopenharmony_ci		case mat3_3x3x3
4496e5c31af7Sopenharmony_ci			version 450
4497e5c31af7Sopenharmony_ci			desc "Testing assignment of arrays of arrays from explicitly sized to implicitly sized"
4498e5c31af7Sopenharmony_ci			values
4499e5c31af7Sopenharmony_ci			{
4500e5c31af7Sopenharmony_ci				input ivec3 in0 = [ ivec3(0, 1, 2) | ivec3(-1, 0, -2) ];
4501e5c31af7Sopenharmony_ci				output ivec3 out0 = [ ivec3(0, -1, 1) | ivec3(-1, 0, 0) ];
4502e5c31af7Sopenharmony_ci			}
4503e5c31af7Sopenharmony_ci
4504e5c31af7Sopenharmony_ci			both ""
4505e5c31af7Sopenharmony_ci				#version 450
4506e5c31af7Sopenharmony_ci				precision mediump int;
4507e5c31af7Sopenharmony_ci				precision mediump float;
4508e5c31af7Sopenharmony_ci				${DECLARATIONS}
4509e5c31af7Sopenharmony_ci
4510e5c31af7Sopenharmony_ci				void main()
4511e5c31af7Sopenharmony_ci				{
4512e5c31af7Sopenharmony_ci					${SETUP}
4513e5c31af7Sopenharmony_ci
4514e5c31af7Sopenharmony_ci					mat3 a = mat3(	in0.x, in0.y, in0.z,
4515e5c31af7Sopenharmony_ci									in0.x, in0.y, in0.z,
4516e5c31af7Sopenharmony_ci									in0.x, in0.y, in0.z);
4517e5c31af7Sopenharmony_ci					mat3 b = mat3(	in0.z, in0.x, -in0.y,
4518e5c31af7Sopenharmony_ci									in0.z, in0.x, -in0.y,
4519e5c31af7Sopenharmony_ci									in0.z, in0.x, -in0.y);
4520e5c31af7Sopenharmony_ci					mat3 c = mat3(	-in0.z, -in0.z, in0.z,
4521e5c31af7Sopenharmony_ci									-in0.y, -in0.y, in0.y,
4522e5c31af7Sopenharmony_ci									-in0.x, -in0.x, in0.x);
4523e5c31af7Sopenharmony_ci
4524e5c31af7Sopenharmony_ci					mat3[3][3][3] x = mat3[3][3][3] (mat3[3][3] (mat3[3] (a, a, a),
4525e5c31af7Sopenharmony_ci																mat3[3] (b, b, b),
4526e5c31af7Sopenharmony_ci																mat3[3] (c, c, c)),
4527e5c31af7Sopenharmony_ci
4528e5c31af7Sopenharmony_ci													mat3[3][3] (mat3[3] (b, b, b),
4529e5c31af7Sopenharmony_ci																mat3[3] (a, a, a),
4530e5c31af7Sopenharmony_ci																mat3[3] (c, c, c)),
4531e5c31af7Sopenharmony_ci
4532e5c31af7Sopenharmony_ci													mat3[3][3] (mat3[3] (c, c, c),
4533e5c31af7Sopenharmony_ci																mat3[3] (a, a, a),
4534e5c31af7Sopenharmony_ci																mat3[3] (b, b, b)) );
4535e5c31af7Sopenharmony_ci
4536e5c31af7Sopenharmony_ci					mat3 y[][][] = x;
4537e5c31af7Sopenharmony_ci
4538e5c31af7Sopenharmony_ci					mat3 x0 = y[0][0][0];
4539e5c31af7Sopenharmony_ci					mat3 x1 = y[1][0][0];
4540e5c31af7Sopenharmony_ci					mat3 x2 = y[2][0][0];
4541e5c31af7Sopenharmony_ci
4542e5c31af7Sopenharmony_ci					float ret0 = x0[2][0];
4543e5c31af7Sopenharmony_ci					float ret1 = x1[0][2];
4544e5c31af7Sopenharmony_ci					float ret2 = x2[1][2];
4545e5c31af7Sopenharmony_ci
4546e5c31af7Sopenharmony_ci					out0 = ivec3(ret0, ret1, ret2);
4547e5c31af7Sopenharmony_ci					${OUTPUT}
4548e5c31af7Sopenharmony_ci				}
4549e5c31af7Sopenharmony_ci			""
4550e5c31af7Sopenharmony_ci		end
4551e5c31af7Sopenharmony_ci
4552e5c31af7Sopenharmony_ci		case mat3_3x4
4553e5c31af7Sopenharmony_ci			version 450
4554e5c31af7Sopenharmony_ci			desc "Testing assignment of arrays of arrays from explicitly sized to implicitly sized"
4555e5c31af7Sopenharmony_ci			values
4556e5c31af7Sopenharmony_ci			{
4557e5c31af7Sopenharmony_ci				input bvec3 in0 = [ bvec3(true, false, true) ];
4558e5c31af7Sopenharmony_ci				output bvec3 out0 = [ bvec3(true, false, false) ];
4559e5c31af7Sopenharmony_ci			}
4560e5c31af7Sopenharmony_ci
4561e5c31af7Sopenharmony_ci			both ""
4562e5c31af7Sopenharmony_ci				#version 450
4563e5c31af7Sopenharmony_ci				precision mediump float;
4564e5c31af7Sopenharmony_ci				${DECLARATIONS}
4565e5c31af7Sopenharmony_ci
4566e5c31af7Sopenharmony_ci				void main()
4567e5c31af7Sopenharmony_ci				{
4568e5c31af7Sopenharmony_ci					${SETUP}
4569e5c31af7Sopenharmony_ci
4570e5c31af7Sopenharmony_ci					mat3 a = mat3(	in0.x, in0.y, in0.z,
4571e5c31af7Sopenharmony_ci									in0.x, in0.y, in0.z,
4572e5c31af7Sopenharmony_ci									in0.x, in0.y, in0.z);
4573e5c31af7Sopenharmony_ci
4574e5c31af7Sopenharmony_ci					mat3 b = mat3(	in0.z, in0.x, in0.y,
4575e5c31af7Sopenharmony_ci									in0.z, in0.x, in0.y,
4576e5c31af7Sopenharmony_ci									in0.z, in0.x, in0.y);
4577e5c31af7Sopenharmony_ci
4578e5c31af7Sopenharmony_ci					mat3 c = mat3(	in0.z, in0.z, in0.z,
4579e5c31af7Sopenharmony_ci									in0.y, in0.y, in0.y,
4580e5c31af7Sopenharmony_ci									in0.x, in0.x, in0.x);
4581e5c31af7Sopenharmony_ci
4582e5c31af7Sopenharmony_ci					mat3[4] x[3] = mat3[3][4] (	mat3[4] (a, b, c, a),
4583e5c31af7Sopenharmony_ci												mat3[4] (b, c, a, b),
4584e5c31af7Sopenharmony_ci												mat3[4] (c, a, b, c) );
4585e5c31af7Sopenharmony_ci
4586e5c31af7Sopenharmony_ci					mat3 y[][] = x;
4587e5c31af7Sopenharmony_ci
4588e5c31af7Sopenharmony_ci					mat3 x0 = y[0][0];
4589e5c31af7Sopenharmony_ci					mat3 x1 = y[1][3];
4590e5c31af7Sopenharmony_ci					mat3 x2 = y[2][0];
4591e5c31af7Sopenharmony_ci
4592e5c31af7Sopenharmony_ci					float ret0 = x0[2][0];
4593e5c31af7Sopenharmony_ci					float ret1 = x1[0][2];
4594e5c31af7Sopenharmony_ci					float ret2 = x2[1][2];
4595e5c31af7Sopenharmony_ci
4596e5c31af7Sopenharmony_ci					out0 = bvec3(ret0, ret1, ret2);
4597e5c31af7Sopenharmony_ci					${OUTPUT}
4598e5c31af7Sopenharmony_ci				}
4599e5c31af7Sopenharmony_ci			""
4600e5c31af7Sopenharmony_ci		end
4601e5c31af7Sopenharmony_ci
4602e5c31af7Sopenharmony_ci	end # explicit_to_implicit
4603e5c31af7Sopenharmony_ci
4604e5c31af7Sopenharmony_ci	group implicit_to_explicit "Declaring an array of arrays with implicit size and assigning it to another array of arrays with explicit size"
4605e5c31af7Sopenharmony_ci
4606e5c31af7Sopenharmony_ci		case float_3x3
4607e5c31af7Sopenharmony_ci			version 450
4608e5c31af7Sopenharmony_ci			desc "Testing assignment of arrays of arrays from implicitly sized to explicitly sized"
4609e5c31af7Sopenharmony_ci			values
4610e5c31af7Sopenharmony_ci			{
4611e5c31af7Sopenharmony_ci				input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(7.4, -1.0, 2.0) | vec3(3.0, 1.6, -2.0) ];
4612e5c31af7Sopenharmony_ci				output vec3 out0 = [ vec3(2.0, 0.5, 1.0) | vec3(2.0, 7.4, -1.0) | vec3(-2.0, 3.0, 1.6) ];
4613e5c31af7Sopenharmony_ci			}
4614e5c31af7Sopenharmony_ci
4615e5c31af7Sopenharmony_ci			both ""
4616e5c31af7Sopenharmony_ci				#version 450
4617e5c31af7Sopenharmony_ci				precision mediump float;
4618e5c31af7Sopenharmony_ci				${DECLARATIONS}
4619e5c31af7Sopenharmony_ci
4620e5c31af7Sopenharmony_ci				void main()
4621e5c31af7Sopenharmony_ci				{
4622e5c31af7Sopenharmony_ci					${SETUP}
4623e5c31af7Sopenharmony_ci					float x[][] = float[][] (	float[] (in0.z, in0.x, in0.y),
4624e5c31af7Sopenharmony_ci												float[] (in0.z, in0.x, in0.y),
4625e5c31af7Sopenharmony_ci												float[] (in0.z, in0.x, in0.y) );
4626e5c31af7Sopenharmony_ci
4627e5c31af7Sopenharmony_ci					float[3] y[3] = x;
4628e5c31af7Sopenharmony_ci
4629e5c31af7Sopenharmony_ci					out0 = vec3(y[0][0], y[1][1], y[2][2]);
4630e5c31af7Sopenharmony_ci					${OUTPUT}
4631e5c31af7Sopenharmony_ci				}
4632e5c31af7Sopenharmony_ci			""
4633e5c31af7Sopenharmony_ci		end
4634e5c31af7Sopenharmony_ci
4635e5c31af7Sopenharmony_ci		case int_2x3
4636e5c31af7Sopenharmony_ci			version 450
4637e5c31af7Sopenharmony_ci			desc "Testing assignment of arrays of arrays from implicitly sized to explicitly sized"
4638e5c31af7Sopenharmony_ci			values
4639e5c31af7Sopenharmony_ci			{
4640e5c31af7Sopenharmony_ci				input ivec3 in0 = [ ivec3(0, 1, 2) | ivec3(7, -1, 2) | ivec3(3, 1, -2) ];
4641e5c31af7Sopenharmony_ci				output ivec3 out0 = [ ivec3(2, 0, 1) | ivec3(2, 7, -1) | ivec3(-2, 3, 1) ];
4642e5c31af7Sopenharmony_ci			}
4643e5c31af7Sopenharmony_ci
4644e5c31af7Sopenharmony_ci			both ""
4645e5c31af7Sopenharmony_ci				#version 450
4646e5c31af7Sopenharmony_ci				precision mediump int;
4647e5c31af7Sopenharmony_ci				precision mediump float;
4648e5c31af7Sopenharmony_ci				${DECLARATIONS}
4649e5c31af7Sopenharmony_ci
4650e5c31af7Sopenharmony_ci				void main()
4651e5c31af7Sopenharmony_ci				{
4652e5c31af7Sopenharmony_ci					${SETUP}
4653e5c31af7Sopenharmony_ci					int[][] x = int[][] (	int[] (in0.z, in0.x, in0.y),
4654e5c31af7Sopenharmony_ci											int[] (in0.z, in0.x, in0.y) );;
4655e5c31af7Sopenharmony_ci					int y[2][3] = x;
4656e5c31af7Sopenharmony_ci
4657e5c31af7Sopenharmony_ci					out0 = ivec3(y[0][0], y[1][1], y[0][2]);
4658e5c31af7Sopenharmony_ci					${OUTPUT}
4659e5c31af7Sopenharmony_ci				}
4660e5c31af7Sopenharmony_ci			""
4661e5c31af7Sopenharmony_ci		end
4662e5c31af7Sopenharmony_ci
4663e5c31af7Sopenharmony_ci		case bool_3x3x3
4664e5c31af7Sopenharmony_ci			version 450
4665e5c31af7Sopenharmony_ci			desc "Testing assignment of arrays of arrays from implicitly sized to explicitly sized"
4666e5c31af7Sopenharmony_ci			values
4667e5c31af7Sopenharmony_ci			{
4668e5c31af7Sopenharmony_ci				input bvec3 in0 = [ bvec3(false, true, true) ];
4669e5c31af7Sopenharmony_ci				output bvec3 out0 = [ bvec3(true, false, true) ];
4670e5c31af7Sopenharmony_ci			}
4671e5c31af7Sopenharmony_ci
4672e5c31af7Sopenharmony_ci			both ""
4673e5c31af7Sopenharmony_ci				#version 450
4674e5c31af7Sopenharmony_ci				precision mediump float;
4675e5c31af7Sopenharmony_ci				${DECLARATIONS}
4676e5c31af7Sopenharmony_ci
4677e5c31af7Sopenharmony_ci				void main()
4678e5c31af7Sopenharmony_ci				{
4679e5c31af7Sopenharmony_ci					${SETUP}
4680e5c31af7Sopenharmony_ci					bool[][] x[] = bool[][][] ( bool[][] (	bool[](in0.z, in0.z, in0.z),
4681e5c31af7Sopenharmony_ci															bool[](in0.z, in0.z, in0.z),
4682e5c31af7Sopenharmony_ci															bool[](in0.z, in0.z, in0.z)),
4683e5c31af7Sopenharmony_ci
4684e5c31af7Sopenharmony_ci												bool[][] (	bool[](in0.x, in0.x, in0.x),
4685e5c31af7Sopenharmony_ci															bool[](in0.x, in0.x, in0.x),
4686e5c31af7Sopenharmony_ci															bool[](in0.x, in0.x, in0.x)),
4687e5c31af7Sopenharmony_ci
4688e5c31af7Sopenharmony_ci												bool[][] (	bool[](in0.y, in0.y, in0.y),
4689e5c31af7Sopenharmony_ci															bool[](in0.y, in0.y, in0.y),
4690e5c31af7Sopenharmony_ci															bool[](in0.y, in0.y, in0.y)) );
4691e5c31af7Sopenharmony_ci
4692e5c31af7Sopenharmony_ci					bool[3] y[3][3] = x;
4693e5c31af7Sopenharmony_ci
4694e5c31af7Sopenharmony_ci					out0 = bvec3(y[0][0][0], y[1][1][1], y[2][2][2]);
4695e5c31af7Sopenharmony_ci					${OUTPUT}
4696e5c31af7Sopenharmony_ci				}
4697e5c31af7Sopenharmony_ci			""
4698e5c31af7Sopenharmony_ci		end
4699e5c31af7Sopenharmony_ci
4700e5c31af7Sopenharmony_ci		case struct_5x5x4
4701e5c31af7Sopenharmony_ci			version 450
4702e5c31af7Sopenharmony_ci			desc "Testing assignment of arrays of arrays from implicitly sized to explicitly sized"
4703e5c31af7Sopenharmony_ci			values
4704e5c31af7Sopenharmony_ci			{
4705e5c31af7Sopenharmony_ci				input vec3 in0 = [ vec3(0.5, 1.0, 2.0) ];
4706e5c31af7Sopenharmony_ci				output vec3 out0 = [ vec3(-1.0, -0.5, 2.0) ];
4707e5c31af7Sopenharmony_ci			}
4708e5c31af7Sopenharmony_ci
4709e5c31af7Sopenharmony_ci			both ""
4710e5c31af7Sopenharmony_ci				#version 450
4711e5c31af7Sopenharmony_ci				precision mediump float;
4712e5c31af7Sopenharmony_ci				${DECLARATIONS}
4713e5c31af7Sopenharmony_ci
4714e5c31af7Sopenharmony_ci				struct Test
4715e5c31af7Sopenharmony_ci				{
4716e5c31af7Sopenharmony_ci					float f;
4717e5c31af7Sopenharmony_ci					vec3 v;
4718e5c31af7Sopenharmony_ci				};
4719e5c31af7Sopenharmony_ci
4720e5c31af7Sopenharmony_ci				void main()
4721e5c31af7Sopenharmony_ci				{
4722e5c31af7Sopenharmony_ci					${SETUP}
4723e5c31af7Sopenharmony_ci
4724e5c31af7Sopenharmony_ci					Test a = Test(in0.z, vec3(in0.x, in0.y, in0.z));
4725e5c31af7Sopenharmony_ci					Test b = Test(in0.y, vec3(-in0.z, -in0.x, -in0.y));
4726e5c31af7Sopenharmony_ci					Test c = Test(in0.x, vec3(-in0.y, in0.z, -in0.x));
4727e5c31af7Sopenharmony_ci
4728e5c31af7Sopenharmony_ci					Test[] x[][] = Test[][][] (	Test[][] (	Test[] (c, c, c, c),
4729e5c31af7Sopenharmony_ci															Test[] (b, b, b, b),
4730e5c31af7Sopenharmony_ci															Test[] (a, a, a, a),
4731e5c31af7Sopenharmony_ci															Test[] (c, c, c, c),
4732e5c31af7Sopenharmony_ci															Test[] (b, b, b, b) ),
4733e5c31af7Sopenharmony_ci
4734e5c31af7Sopenharmony_ci												Test[][] (	Test[] (a, a, a, a),
4735e5c31af7Sopenharmony_ci															Test[] (b, b, b, b),
4736e5c31af7Sopenharmony_ci															Test[] (c, c, c, c),
4737e5c31af7Sopenharmony_ci															Test[] (a, a, a, a),
4738e5c31af7Sopenharmony_ci															Test[] (b, b, b, b) ),
4739e5c31af7Sopenharmony_ci
4740e5c31af7Sopenharmony_ci												Test[][] (	Test[] (b, b, b, b),
4741e5c31af7Sopenharmony_ci															Test[] (c, c, c, c),
4742e5c31af7Sopenharmony_ci															Test[] (a, a, a, a),
4743e5c31af7Sopenharmony_ci															Test[] (b, b, b, b),
4744e5c31af7Sopenharmony_ci															Test[] (c, c, c, c) ),
4745e5c31af7Sopenharmony_ci
4746e5c31af7Sopenharmony_ci												Test[][] (	Test[] (c, c, c, c),
4747e5c31af7Sopenharmony_ci															Test[] (b, b, b, b),
4748e5c31af7Sopenharmony_ci															Test[] (a, a, a, a),
4749e5c31af7Sopenharmony_ci															Test[] (c, c, c, c),
4750e5c31af7Sopenharmony_ci															Test[] (b, b, b, b) ),
4751e5c31af7Sopenharmony_ci
4752e5c31af7Sopenharmony_ci												Test[][] (	Test[] (a, a, a, a),
4753e5c31af7Sopenharmony_ci															Test[] (b, b, b, b),
4754e5c31af7Sopenharmony_ci															Test[] (c, c, c, c),
4755e5c31af7Sopenharmony_ci															Test[] (a, a, a, a),
4756e5c31af7Sopenharmony_ci															Test[] (b, b, b, b) ) );
4757e5c31af7Sopenharmony_ci
4758e5c31af7Sopenharmony_ci					Test y[5][5][4] = x;
4759e5c31af7Sopenharmony_ci
4760e5c31af7Sopenharmony_ci					out0 = vec3(y[0][0][0].v.x, y[1][1][1].v.y, y[4][3][3].v.z);
4761e5c31af7Sopenharmony_ci					${OUTPUT}
4762e5c31af7Sopenharmony_ci				}
4763e5c31af7Sopenharmony_ci			""
4764e5c31af7Sopenharmony_ci		end
4765e5c31af7Sopenharmony_ci
4766e5c31af7Sopenharmony_ci		case vec3_1x3
4767e5c31af7Sopenharmony_ci			version 450
4768e5c31af7Sopenharmony_ci			desc "Testing assignment of arrays of arrays from implicitly sized to explicitly sized"
4769e5c31af7Sopenharmony_ci			values
4770e5c31af7Sopenharmony_ci			{
4771e5c31af7Sopenharmony_ci				input vec3 in0 =	[ vec3(0.5, 1.0, 2.0) | vec3(-0.5, 11.2, -1.0) ];
4772e5c31af7Sopenharmony_ci				output vec3 out0 = [ vec3(0.5, -2.0, 1.0) | vec3(-0.5, 1.0, 11.2) ];
4773e5c31af7Sopenharmony_ci			}
4774e5c31af7Sopenharmony_ci
4775e5c31af7Sopenharmony_ci			both ""
4776e5c31af7Sopenharmony_ci				#version 450
4777e5c31af7Sopenharmony_ci				precision mediump float;
4778e5c31af7Sopenharmony_ci				${DECLARATIONS}
4779e5c31af7Sopenharmony_ci
4780e5c31af7Sopenharmony_ci				void main()
4781e5c31af7Sopenharmony_ci				{
4782e5c31af7Sopenharmony_ci					${SETUP}
4783e5c31af7Sopenharmony_ci					vec3 x[][] = vec3[][] (	vec3[] (vec3(in0.x, in0.y, -in0.z),
4784e5c31af7Sopenharmony_ci													vec3(in0.y, -in0.z, in0.x),
4785e5c31af7Sopenharmony_ci													vec3(-in0.z, in0.x, in0.y)) );
4786e5c31af7Sopenharmony_ci
4787e5c31af7Sopenharmony_ci					vec3 y[1][3] = x;
4788e5c31af7Sopenharmony_ci
4789e5c31af7Sopenharmony_ci					out0 = vec3(y[0][0].x, y[0][1].y, y[0][2].z);
4790e5c31af7Sopenharmony_ci					${OUTPUT}
4791e5c31af7Sopenharmony_ci				}
4792e5c31af7Sopenharmony_ci			""
4793e5c31af7Sopenharmony_ci		end
4794e5c31af7Sopenharmony_ci
4795e5c31af7Sopenharmony_ci		case ivec3_3x1x3
4796e5c31af7Sopenharmony_ci			version 450
4797e5c31af7Sopenharmony_ci			desc "Testing assignment of arrays of arrays from implicitly sized to explicitly sized"
4798e5c31af7Sopenharmony_ci			values
4799e5c31af7Sopenharmony_ci			{
4800e5c31af7Sopenharmony_ci				input ivec3 in0 =	[ ivec3(0, 1, 2) | ivec3(5, 11, -1) ];
4801e5c31af7Sopenharmony_ci				output ivec3 out0 = [ ivec3(0, -2, 1) | ivec3(5, 1, 11) ];
4802e5c31af7Sopenharmony_ci			}
4803e5c31af7Sopenharmony_ci
4804e5c31af7Sopenharmony_ci			both ""
4805e5c31af7Sopenharmony_ci				#version 450
4806e5c31af7Sopenharmony_ci				precision mediump int;
4807e5c31af7Sopenharmony_ci				precision mediump float;
4808e5c31af7Sopenharmony_ci				${DECLARATIONS}
4809e5c31af7Sopenharmony_ci
4810e5c31af7Sopenharmony_ci				void main()
4811e5c31af7Sopenharmony_ci				{
4812e5c31af7Sopenharmony_ci					${SETUP}
4813e5c31af7Sopenharmony_ci					ivec3[][][] x = ivec3[][][] (	ivec3[][] (	ivec3[] (	ivec3(in0.x, in0.y, -in0.z),
4814e5c31af7Sopenharmony_ci																				ivec3(0.0, 0.0, 0.0),
4815e5c31af7Sopenharmony_ci																				ivec3(0.0, 0.0, 0.0)) ),
4816e5c31af7Sopenharmony_ci
4817e5c31af7Sopenharmony_ci														ivec3[][] ( ivec3[] (	ivec3(0.0, 0.0, 0.0),
4818e5c31af7Sopenharmony_ci																				ivec3(in0.y, -in0.z, in0.x),
4819e5c31af7Sopenharmony_ci																				ivec3(0.0, 0.0, 0.0)) ),
4820e5c31af7Sopenharmony_ci
4821e5c31af7Sopenharmony_ci														ivec3[][] (	ivec3[] (	ivec3(0.0, 0.0, 0.0),
4822e5c31af7Sopenharmony_ci																				ivec3(0.0, 0.0, 0.0),
4823e5c31af7Sopenharmony_ci																				ivec3(-in0.z, in0.x, in0.y)) ) );
4824e5c31af7Sopenharmony_ci
4825e5c31af7Sopenharmony_ci					ivec3[3] y[3][1] = x;
4826e5c31af7Sopenharmony_ci
4827e5c31af7Sopenharmony_ci					out0 = ivec3(y[0][0][0].x, y[1][0][1].y, y[2][0][2].z);
4828e5c31af7Sopenharmony_ci					${OUTPUT}
4829e5c31af7Sopenharmony_ci				}
4830e5c31af7Sopenharmony_ci			""
4831e5c31af7Sopenharmony_ci		end
4832e5c31af7Sopenharmony_ci
4833e5c31af7Sopenharmony_ci		case bvec3_3x1
4834e5c31af7Sopenharmony_ci			version 450
4835e5c31af7Sopenharmony_ci			desc "Testing assignment of arrays of arrays from implicitly sized to explicitly sized"
4836e5c31af7Sopenharmony_ci			values
4837e5c31af7Sopenharmony_ci			{
4838e5c31af7Sopenharmony_ci				input bvec3 in0 =	[ bvec3(true, false, true) ];
4839e5c31af7Sopenharmony_ci				output bvec3 out0 = [ bvec3(true, true, false) ];
4840e5c31af7Sopenharmony_ci			}
4841e5c31af7Sopenharmony_ci
4842e5c31af7Sopenharmony_ci			both ""
4843e5c31af7Sopenharmony_ci				#version 450
4844e5c31af7Sopenharmony_ci				precision mediump float;
4845e5c31af7Sopenharmony_ci				${DECLARATIONS}
4846e5c31af7Sopenharmony_ci
4847e5c31af7Sopenharmony_ci				void main()
4848e5c31af7Sopenharmony_ci				{
4849e5c31af7Sopenharmony_ci					${SETUP}
4850e5c31af7Sopenharmony_ci					bvec3[][] x = bvec3[][] (	bvec3[] ( bvec3(in0.x, in0.y, in0.z)),
4851e5c31af7Sopenharmony_ci												bvec3[] ( bvec3(in0.y, in0.z, in0.x)),
4852e5c31af7Sopenharmony_ci												bvec3[] ( bvec3(in0.z, in0.x, in0.y)) );
4853e5c31af7Sopenharmony_ci
4854e5c31af7Sopenharmony_ci					bvec3[3][1] y = x;
4855e5c31af7Sopenharmony_ci
4856e5c31af7Sopenharmony_ci					out0 = bvec3(y[0][0].x, y[1][0].y, y[2][0].z);
4857e5c31af7Sopenharmony_ci					${OUTPUT}
4858e5c31af7Sopenharmony_ci				}
4859e5c31af7Sopenharmony_ci			""
4860e5c31af7Sopenharmony_ci		end
4861e5c31af7Sopenharmony_ci
4862e5c31af7Sopenharmony_ci		case mat3_3x2
4863e5c31af7Sopenharmony_ci			version 450
4864e5c31af7Sopenharmony_ci			desc "Testing assignment of arrays of arrays from implicitly sized to explicitly sized"
4865e5c31af7Sopenharmony_ci			values
4866e5c31af7Sopenharmony_ci			{
4867e5c31af7Sopenharmony_ci				input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(-1.5, 0.0, -2.3) ];
4868e5c31af7Sopenharmony_ci				output vec3 out0 = [ vec3(0.5, -1.0, 1.0) | vec3(-1.5, 0.0, 0.0) ];
4869e5c31af7Sopenharmony_ci			}
4870e5c31af7Sopenharmony_ci
4871e5c31af7Sopenharmony_ci			both ""
4872e5c31af7Sopenharmony_ci				#version 450
4873e5c31af7Sopenharmony_ci				precision mediump float;
4874e5c31af7Sopenharmony_ci				${DECLARATIONS}
4875e5c31af7Sopenharmony_ci
4876e5c31af7Sopenharmony_ci				void main()
4877e5c31af7Sopenharmony_ci				{
4878e5c31af7Sopenharmony_ci					${SETUP}
4879e5c31af7Sopenharmony_ci					mat3[][] a = mat3[][] (	mat3[] ( mat3(	in0.x, in0.y, in0.z,
4880e5c31af7Sopenharmony_ci															in0.x, in0.y, in0.z,
4881e5c31af7Sopenharmony_ci															in0.x, in0.y, in0.z),
4882e5c31af7Sopenharmony_ci													 mat3(	in0.z, in0.x, -in0.y,
4883e5c31af7Sopenharmony_ci															in0.z, in0.x, -in0.y,
4884e5c31af7Sopenharmony_ci															in0.z, in0.x, -in0.y)),
4885e5c31af7Sopenharmony_ci
4886e5c31af7Sopenharmony_ci											mat3[] ( mat3(	-in0.z, -in0.z, in0.z,
4887e5c31af7Sopenharmony_ci															-in0.y, -in0.y, in0.y,
4888e5c31af7Sopenharmony_ci															-in0.x, -in0.x, in0.x),
4889e5c31af7Sopenharmony_ci													 mat3(	in0.x, in0.y, in0.z,
4890e5c31af7Sopenharmony_ci															in0.x, in0.y, in0.z,
4891e5c31af7Sopenharmony_ci															in0.x, in0.y, in0.z)),
4892e5c31af7Sopenharmony_ci
4893e5c31af7Sopenharmony_ci											mat3[] ( mat3(	in0.z, in0.x, -in0.y,
4894e5c31af7Sopenharmony_ci															in0.z, in0.x, -in0.y,
4895e5c31af7Sopenharmony_ci															in0.z, in0.x, -in0.y),
4896e5c31af7Sopenharmony_ci													 mat3(	-in0.z, -in0.z, in0.z,
4897e5c31af7Sopenharmony_ci															-in0.y, -in0.y, in0.y,
4898e5c31af7Sopenharmony_ci															-in0.x, -in0.x, in0.x)) );
4899e5c31af7Sopenharmony_ci
4900e5c31af7Sopenharmony_ci					mat3[2] y[3] = a;
4901e5c31af7Sopenharmony_ci
4902e5c31af7Sopenharmony_ci					mat3 a0 = y[0][0];
4903e5c31af7Sopenharmony_ci					mat3 a1 = y[0][1];
4904e5c31af7Sopenharmony_ci					mat3 a2 = y[2][1];
4905e5c31af7Sopenharmony_ci
4906e5c31af7Sopenharmony_ci					float ret0 = a0[2][0];
4907e5c31af7Sopenharmony_ci					float ret1 = a1[0][2];
4908e5c31af7Sopenharmony_ci					float ret2 = a2[1][2];
4909e5c31af7Sopenharmony_ci
4910e5c31af7Sopenharmony_ci					out0 = vec3(ret0, ret1, ret2);
4911e5c31af7Sopenharmony_ci					${OUTPUT}
4912e5c31af7Sopenharmony_ci				}
4913e5c31af7Sopenharmony_ci			""
4914e5c31af7Sopenharmony_ci		end
4915e5c31af7Sopenharmony_ci
4916e5c31af7Sopenharmony_ci		case mat3_3x3x3
4917e5c31af7Sopenharmony_ci			version 450
4918e5c31af7Sopenharmony_ci			desc "Testing assignment of arrays of arrays from implicitly sized to explicitly sized"
4919e5c31af7Sopenharmony_ci			values
4920e5c31af7Sopenharmony_ci			{
4921e5c31af7Sopenharmony_ci				input ivec3 in0 = [ ivec3(0, 1, 2) | ivec3(-1, 0, -2) ];
4922e5c31af7Sopenharmony_ci				output ivec3 out0 = [ ivec3(0, -1, 1) | ivec3(-1, 0, 0) ];
4923e5c31af7Sopenharmony_ci			}
4924e5c31af7Sopenharmony_ci
4925e5c31af7Sopenharmony_ci			both ""
4926e5c31af7Sopenharmony_ci				#version 450
4927e5c31af7Sopenharmony_ci				precision mediump int;
4928e5c31af7Sopenharmony_ci				precision mediump float;
4929e5c31af7Sopenharmony_ci				${DECLARATIONS}
4930e5c31af7Sopenharmony_ci
4931e5c31af7Sopenharmony_ci				void main()
4932e5c31af7Sopenharmony_ci				{
4933e5c31af7Sopenharmony_ci					${SETUP}
4934e5c31af7Sopenharmony_ci
4935e5c31af7Sopenharmony_ci					mat3 a = mat3(	in0.x, in0.y, in0.z,
4936e5c31af7Sopenharmony_ci									in0.x, in0.y, in0.z,
4937e5c31af7Sopenharmony_ci									in0.x, in0.y, in0.z);
4938e5c31af7Sopenharmony_ci					mat3 b = mat3(	in0.z, in0.x, -in0.y,
4939e5c31af7Sopenharmony_ci									in0.z, in0.x, -in0.y,
4940e5c31af7Sopenharmony_ci									in0.z, in0.x, -in0.y);
4941e5c31af7Sopenharmony_ci					mat3 c = mat3(	-in0.z, -in0.z, in0.z,
4942e5c31af7Sopenharmony_ci									-in0.y, -in0.y, in0.y,
4943e5c31af7Sopenharmony_ci									-in0.x, -in0.x, in0.x);
4944e5c31af7Sopenharmony_ci
4945e5c31af7Sopenharmony_ci					mat3[][][] x = mat3[][][] (	mat3[][] (	mat3[] (a, a, a),
4946e5c31af7Sopenharmony_ci															mat3[] (b, b, b),
4947e5c31af7Sopenharmony_ci															mat3[] (c, c, c)),
4948e5c31af7Sopenharmony_ci
4949e5c31af7Sopenharmony_ci												mat3[][] (	mat3[] (b, b, b),
4950e5c31af7Sopenharmony_ci															mat3[] (a, a, a),
4951e5c31af7Sopenharmony_ci															mat3[] (c, c, c)),
4952e5c31af7Sopenharmony_ci
4953e5c31af7Sopenharmony_ci												mat3[][] (	mat3[] (c, c, c),
4954e5c31af7Sopenharmony_ci															mat3[] (a, a, a),
4955e5c31af7Sopenharmony_ci															mat3[] (b, b, b)) );
4956e5c31af7Sopenharmony_ci
4957e5c31af7Sopenharmony_ci					mat3 y[3][3][3] = x;
4958e5c31af7Sopenharmony_ci
4959e5c31af7Sopenharmony_ci					mat3 x0 = y[0][0][0];
4960e5c31af7Sopenharmony_ci					mat3 x1 = y[1][0][0];
4961e5c31af7Sopenharmony_ci					mat3 x2 = y[2][0][0];
4962e5c31af7Sopenharmony_ci
4963e5c31af7Sopenharmony_ci					float ret0 = x0[2][0];
4964e5c31af7Sopenharmony_ci					float ret1 = x1[0][2];
4965e5c31af7Sopenharmony_ci					float ret2 = x2[1][2];
4966e5c31af7Sopenharmony_ci
4967e5c31af7Sopenharmony_ci					out0 = ivec3(ret0, ret1, ret2);
4968e5c31af7Sopenharmony_ci					${OUTPUT}
4969e5c31af7Sopenharmony_ci				}
4970e5c31af7Sopenharmony_ci			""
4971e5c31af7Sopenharmony_ci		end
4972e5c31af7Sopenharmony_ci
4973e5c31af7Sopenharmony_ci		case mat3_3x4
4974e5c31af7Sopenharmony_ci			version 450
4975e5c31af7Sopenharmony_ci			desc "Testing assignment of arrays of arrays from implicitly sized to explicitly sized"
4976e5c31af7Sopenharmony_ci			values
4977e5c31af7Sopenharmony_ci			{
4978e5c31af7Sopenharmony_ci				input bvec3 in0 = [ bvec3(true, false, true) ];
4979e5c31af7Sopenharmony_ci				output bvec3 out0 = [ bvec3(true, false, false) ];
4980e5c31af7Sopenharmony_ci			}
4981e5c31af7Sopenharmony_ci
4982e5c31af7Sopenharmony_ci			both ""
4983e5c31af7Sopenharmony_ci				#version 450
4984e5c31af7Sopenharmony_ci				precision mediump float;
4985e5c31af7Sopenharmony_ci				${DECLARATIONS}
4986e5c31af7Sopenharmony_ci
4987e5c31af7Sopenharmony_ci				void main()
4988e5c31af7Sopenharmony_ci				{
4989e5c31af7Sopenharmony_ci					${SETUP}
4990e5c31af7Sopenharmony_ci
4991e5c31af7Sopenharmony_ci					mat3 a = mat3(	in0.x, in0.y, in0.z,
4992e5c31af7Sopenharmony_ci									in0.x, in0.y, in0.z,
4993e5c31af7Sopenharmony_ci									in0.x, in0.y, in0.z);
4994e5c31af7Sopenharmony_ci
4995e5c31af7Sopenharmony_ci					mat3 b = mat3(	in0.z, in0.x, in0.y,
4996e5c31af7Sopenharmony_ci									in0.z, in0.x, in0.y,
4997e5c31af7Sopenharmony_ci									in0.z, in0.x, in0.y);
4998e5c31af7Sopenharmony_ci
4999e5c31af7Sopenharmony_ci					mat3 c = mat3(	in0.z, in0.z, in0.z,
5000e5c31af7Sopenharmony_ci									in0.y, in0.y, in0.y,
5001e5c31af7Sopenharmony_ci									in0.x, in0.x, in0.x);
5002e5c31af7Sopenharmony_ci
5003e5c31af7Sopenharmony_ci					mat3[] x[] = mat3[][] (	mat3[] (a, b, c, a),
5004e5c31af7Sopenharmony_ci											mat3[] (b, c, a, b),
5005e5c31af7Sopenharmony_ci											mat3[] (c, a, b, c) );
5006e5c31af7Sopenharmony_ci
5007e5c31af7Sopenharmony_ci					mat3 y[3][4] = x;
5008e5c31af7Sopenharmony_ci
5009e5c31af7Sopenharmony_ci					mat3 x0 = y[0][0];
5010e5c31af7Sopenharmony_ci					mat3 x1 = y[1][3];
5011e5c31af7Sopenharmony_ci					mat3 x2 = y[2][0];
5012e5c31af7Sopenharmony_ci
5013e5c31af7Sopenharmony_ci					float ret0 = x0[2][0];
5014e5c31af7Sopenharmony_ci					float ret1 = x1[0][2];
5015e5c31af7Sopenharmony_ci					float ret2 = x2[1][2];
5016e5c31af7Sopenharmony_ci
5017e5c31af7Sopenharmony_ci					out0 = bvec3(ret0, ret1, ret2);
5018e5c31af7Sopenharmony_ci					${OUTPUT}
5019e5c31af7Sopenharmony_ci				}
5020e5c31af7Sopenharmony_ci			""
5021e5c31af7Sopenharmony_ci		end
5022e5c31af7Sopenharmony_ci
5023e5c31af7Sopenharmony_ci	end # implicit_to_explicit
5024e5c31af7Sopenharmony_ci
5025e5c31af7Sopenharmony_ci	group implicit_to_implicit "Declaring an array of arrays with implicit size and assigning it to another array of arrays with implicit size"
5026e5c31af7Sopenharmony_ci
5027e5c31af7Sopenharmony_ci		case float_3x3
5028e5c31af7Sopenharmony_ci			version 450
5029e5c31af7Sopenharmony_ci			desc "Testing assignment of arrays of arrays with implicit sizes"
5030e5c31af7Sopenharmony_ci			values
5031e5c31af7Sopenharmony_ci			{
5032e5c31af7Sopenharmony_ci				input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(7.4, -1.0, 2.0) | vec3(3.0, 1.6, -2.0) ];
5033e5c31af7Sopenharmony_ci				output vec3 out0 = [ vec3(2.0, 0.5, 1.0) | vec3(2.0, 7.4, -1.0) | vec3(-2.0, 3.0, 1.6) ];
5034e5c31af7Sopenharmony_ci			}
5035e5c31af7Sopenharmony_ci
5036e5c31af7Sopenharmony_ci			both ""
5037e5c31af7Sopenharmony_ci				#version 450
5038e5c31af7Sopenharmony_ci				precision mediump float;
5039e5c31af7Sopenharmony_ci				${DECLARATIONS}
5040e5c31af7Sopenharmony_ci
5041e5c31af7Sopenharmony_ci				void main()
5042e5c31af7Sopenharmony_ci				{
5043e5c31af7Sopenharmony_ci					${SETUP}
5044e5c31af7Sopenharmony_ci					float x[][] = float[][] (	float[] (in0.z, in0.x, in0.y),
5045e5c31af7Sopenharmony_ci												float[] (in0.z, in0.x, in0.y),
5046e5c31af7Sopenharmony_ci												float[] (in0.z, in0.x, in0.y) );
5047e5c31af7Sopenharmony_ci
5048e5c31af7Sopenharmony_ci					float[] y[] = x;
5049e5c31af7Sopenharmony_ci
5050e5c31af7Sopenharmony_ci					out0 = vec3(y[0][0], y[1][1], y[2][2]);
5051e5c31af7Sopenharmony_ci					${OUTPUT}
5052e5c31af7Sopenharmony_ci				}
5053e5c31af7Sopenharmony_ci			""
5054e5c31af7Sopenharmony_ci		end
5055e5c31af7Sopenharmony_ci
5056e5c31af7Sopenharmony_ci		case int_2x3
5057e5c31af7Sopenharmony_ci			version 450
5058e5c31af7Sopenharmony_ci			desc "Testing assignment of arrays of arrays with implicit sizes"
5059e5c31af7Sopenharmony_ci			values
5060e5c31af7Sopenharmony_ci			{
5061e5c31af7Sopenharmony_ci				input ivec3 in0 = [ ivec3(0, 1, 2) | ivec3(7, -1, 2) | ivec3(3, 1, -2) ];
5062e5c31af7Sopenharmony_ci				output ivec3 out0 = [ ivec3(2, 0, 1) | ivec3(2, 7, -1) | ivec3(-2, 3, 1) ];
5063e5c31af7Sopenharmony_ci			}
5064e5c31af7Sopenharmony_ci
5065e5c31af7Sopenharmony_ci			both ""
5066e5c31af7Sopenharmony_ci				#version 450
5067e5c31af7Sopenharmony_ci				precision mediump int;
5068e5c31af7Sopenharmony_ci				precision mediump float;
5069e5c31af7Sopenharmony_ci				${DECLARATIONS}
5070e5c31af7Sopenharmony_ci
5071e5c31af7Sopenharmony_ci				void main()
5072e5c31af7Sopenharmony_ci				{
5073e5c31af7Sopenharmony_ci					${SETUP}
5074e5c31af7Sopenharmony_ci					int[][] x = int[][] (	int[] (in0.z, in0.x, in0.y),
5075e5c31af7Sopenharmony_ci											int[] (in0.z, in0.x, in0.y) );;
5076e5c31af7Sopenharmony_ci					int y[][] = x;
5077e5c31af7Sopenharmony_ci
5078e5c31af7Sopenharmony_ci					out0 = ivec3(y[0][0], y[1][1], y[0][2]);
5079e5c31af7Sopenharmony_ci					${OUTPUT}
5080e5c31af7Sopenharmony_ci				}
5081e5c31af7Sopenharmony_ci			""
5082e5c31af7Sopenharmony_ci		end
5083e5c31af7Sopenharmony_ci
5084e5c31af7Sopenharmony_ci		case bool_3x3x3
5085e5c31af7Sopenharmony_ci			version 450
5086e5c31af7Sopenharmony_ci			desc "Testing assignment of arrays of arrays with implicit sizes"
5087e5c31af7Sopenharmony_ci			values
5088e5c31af7Sopenharmony_ci			{
5089e5c31af7Sopenharmony_ci				input bvec3 in0 = [ bvec3(false, true, true) ];
5090e5c31af7Sopenharmony_ci				output bvec3 out0 = [ bvec3(true, false, true) ];
5091e5c31af7Sopenharmony_ci			}
5092e5c31af7Sopenharmony_ci
5093e5c31af7Sopenharmony_ci			both ""
5094e5c31af7Sopenharmony_ci				#version 450
5095e5c31af7Sopenharmony_ci				precision mediump float;
5096e5c31af7Sopenharmony_ci				${DECLARATIONS}
5097e5c31af7Sopenharmony_ci
5098e5c31af7Sopenharmony_ci				void main()
5099e5c31af7Sopenharmony_ci				{
5100e5c31af7Sopenharmony_ci					${SETUP}
5101e5c31af7Sopenharmony_ci					bool[][] x[] = bool[][][] ( bool[][] (	bool[](in0.z, in0.z, in0.z),
5102e5c31af7Sopenharmony_ci															bool[](in0.z, in0.z, in0.z),
5103e5c31af7Sopenharmony_ci															bool[](in0.z, in0.z, in0.z)),
5104e5c31af7Sopenharmony_ci
5105e5c31af7Sopenharmony_ci												bool[][] (	bool[](in0.x, in0.x, in0.x),
5106e5c31af7Sopenharmony_ci															bool[](in0.x, in0.x, in0.x),
5107e5c31af7Sopenharmony_ci															bool[](in0.x, in0.x, in0.x)),
5108e5c31af7Sopenharmony_ci
5109e5c31af7Sopenharmony_ci												bool[][] (	bool[](in0.y, in0.y, in0.y),
5110e5c31af7Sopenharmony_ci															bool[](in0.y, in0.y, in0.y),
5111e5c31af7Sopenharmony_ci															bool[](in0.y, in0.y, in0.y)) );
5112e5c31af7Sopenharmony_ci
5113e5c31af7Sopenharmony_ci					bool[] y[][] = x;
5114e5c31af7Sopenharmony_ci
5115e5c31af7Sopenharmony_ci					out0 = bvec3(y[0][0][0], y[1][1][1], y[2][2][2]);
5116e5c31af7Sopenharmony_ci					${OUTPUT}
5117e5c31af7Sopenharmony_ci				}
5118e5c31af7Sopenharmony_ci			""
5119e5c31af7Sopenharmony_ci		end
5120e5c31af7Sopenharmony_ci
5121e5c31af7Sopenharmony_ci		case struct_5x5x4
5122e5c31af7Sopenharmony_ci			version 450
5123e5c31af7Sopenharmony_ci			desc "Testing assignment of arrays of arrays with implicit sizes"
5124e5c31af7Sopenharmony_ci			values
5125e5c31af7Sopenharmony_ci			{
5126e5c31af7Sopenharmony_ci				input vec3 in0 = [ vec3(0.5, 1.0, 2.0) ];
5127e5c31af7Sopenharmony_ci				output vec3 out0 = [ vec3(-1.0, -0.5, 2.0) ];
5128e5c31af7Sopenharmony_ci			}
5129e5c31af7Sopenharmony_ci
5130e5c31af7Sopenharmony_ci			both ""
5131e5c31af7Sopenharmony_ci				#version 450
5132e5c31af7Sopenharmony_ci				precision mediump float;
5133e5c31af7Sopenharmony_ci				${DECLARATIONS}
5134e5c31af7Sopenharmony_ci
5135e5c31af7Sopenharmony_ci				struct Test
5136e5c31af7Sopenharmony_ci				{
5137e5c31af7Sopenharmony_ci					float f;
5138e5c31af7Sopenharmony_ci					vec3 v;
5139e5c31af7Sopenharmony_ci				};
5140e5c31af7Sopenharmony_ci
5141e5c31af7Sopenharmony_ci				void main()
5142e5c31af7Sopenharmony_ci				{
5143e5c31af7Sopenharmony_ci					${SETUP}
5144e5c31af7Sopenharmony_ci
5145e5c31af7Sopenharmony_ci					Test a = Test(in0.z, vec3(in0.x, in0.y, in0.z));
5146e5c31af7Sopenharmony_ci					Test b = Test(in0.y, vec3(-in0.z, -in0.x, -in0.y));
5147e5c31af7Sopenharmony_ci					Test c = Test(in0.x, vec3(-in0.y, in0.z, -in0.x));
5148e5c31af7Sopenharmony_ci
5149e5c31af7Sopenharmony_ci					Test[] x[][] = Test[][][] (	Test[][] (	Test[] (c, c, c, c),
5150e5c31af7Sopenharmony_ci															Test[] (b, b, b, b),
5151e5c31af7Sopenharmony_ci															Test[] (a, a, a, a),
5152e5c31af7Sopenharmony_ci															Test[] (c, c, c, c),
5153e5c31af7Sopenharmony_ci															Test[] (b, b, b, b) ),
5154e5c31af7Sopenharmony_ci
5155e5c31af7Sopenharmony_ci												Test[][] (	Test[] (a, a, a, a),
5156e5c31af7Sopenharmony_ci															Test[] (b, b, b, b),
5157e5c31af7Sopenharmony_ci															Test[] (c, c, c, c),
5158e5c31af7Sopenharmony_ci															Test[] (a, a, a, a),
5159e5c31af7Sopenharmony_ci															Test[] (b, b, b, b) ),
5160e5c31af7Sopenharmony_ci
5161e5c31af7Sopenharmony_ci												Test[][] (	Test[] (b, b, b, b),
5162e5c31af7Sopenharmony_ci															Test[] (c, c, c, c),
5163e5c31af7Sopenharmony_ci															Test[] (a, a, a, a),
5164e5c31af7Sopenharmony_ci															Test[] (b, b, b, b),
5165e5c31af7Sopenharmony_ci															Test[] (c, c, c, c) ),
5166e5c31af7Sopenharmony_ci
5167e5c31af7Sopenharmony_ci												Test[][] (	Test[] (c, c, c, c),
5168e5c31af7Sopenharmony_ci															Test[] (b, b, b, b),
5169e5c31af7Sopenharmony_ci															Test[] (a, a, a, a),
5170e5c31af7Sopenharmony_ci															Test[] (c, c, c, c),
5171e5c31af7Sopenharmony_ci															Test[] (b, b, b, b) ),
5172e5c31af7Sopenharmony_ci
5173e5c31af7Sopenharmony_ci												Test[][] (	Test[] (a, a, a, a),
5174e5c31af7Sopenharmony_ci															Test[] (b, b, b, b),
5175e5c31af7Sopenharmony_ci															Test[] (c, c, c, c),
5176e5c31af7Sopenharmony_ci															Test[] (a, a, a, a),
5177e5c31af7Sopenharmony_ci															Test[] (b, b, b, b) ) );
5178e5c31af7Sopenharmony_ci
5179e5c31af7Sopenharmony_ci					Test y[][][] = x;
5180e5c31af7Sopenharmony_ci
5181e5c31af7Sopenharmony_ci					out0 = vec3(y[0][0][0].v.x, y[1][1][1].v.y, y[4][3][3].v.z);
5182e5c31af7Sopenharmony_ci					${OUTPUT}
5183e5c31af7Sopenharmony_ci				}
5184e5c31af7Sopenharmony_ci			""
5185e5c31af7Sopenharmony_ci		end
5186e5c31af7Sopenharmony_ci
5187e5c31af7Sopenharmony_ci		case vec3_1x3
5188e5c31af7Sopenharmony_ci			version 450
5189e5c31af7Sopenharmony_ci			desc "Testing assignment of arrays of arrays with implicit sizes"
5190e5c31af7Sopenharmony_ci			values
5191e5c31af7Sopenharmony_ci			{
5192e5c31af7Sopenharmony_ci				input vec3 in0 =	[ vec3(0.5, 1.0, 2.0) | vec3(-0.5, 11.2, -1.0) ];
5193e5c31af7Sopenharmony_ci				output vec3 out0 = [ vec3(0.5, -2.0, 1.0) | vec3(-0.5, 1.0, 11.2) ];
5194e5c31af7Sopenharmony_ci			}
5195e5c31af7Sopenharmony_ci
5196e5c31af7Sopenharmony_ci			both ""
5197e5c31af7Sopenharmony_ci				#version 450
5198e5c31af7Sopenharmony_ci				precision mediump float;
5199e5c31af7Sopenharmony_ci				${DECLARATIONS}
5200e5c31af7Sopenharmony_ci
5201e5c31af7Sopenharmony_ci				void main()
5202e5c31af7Sopenharmony_ci				{
5203e5c31af7Sopenharmony_ci					${SETUP}
5204e5c31af7Sopenharmony_ci					vec3 x[][] = vec3[][] (	vec3[] (vec3(in0.x, in0.y, -in0.z)	,
5205e5c31af7Sopenharmony_ci													vec3(in0.y, -in0.z, in0.x)	,
5206e5c31af7Sopenharmony_ci													vec3(-in0.z, in0.x, in0.y)) );
5207e5c31af7Sopenharmony_ci
5208e5c31af7Sopenharmony_ci					vec3 y[][] = x;
5209e5c31af7Sopenharmony_ci
5210e5c31af7Sopenharmony_ci					out0 = vec3(y[0][0].x, y[0][1].y, y[0][2].z);
5211e5c31af7Sopenharmony_ci					${OUTPUT}
5212e5c31af7Sopenharmony_ci				}
5213e5c31af7Sopenharmony_ci			""
5214e5c31af7Sopenharmony_ci		end
5215e5c31af7Sopenharmony_ci
5216e5c31af7Sopenharmony_ci		case ivec3_3x1x3
5217e5c31af7Sopenharmony_ci			version 450
5218e5c31af7Sopenharmony_ci			desc "Testing assignment of arrays of arrays with implicit sizes"
5219e5c31af7Sopenharmony_ci			values
5220e5c31af7Sopenharmony_ci			{
5221e5c31af7Sopenharmony_ci				input ivec3 in0 =	[ ivec3(0, 1, 2) | ivec3(5, 11, -1) ];
5222e5c31af7Sopenharmony_ci				output ivec3 out0 = [ ivec3(0, -2, 1) | ivec3(5, 1, 11) ];
5223e5c31af7Sopenharmony_ci			}
5224e5c31af7Sopenharmony_ci
5225e5c31af7Sopenharmony_ci			both ""
5226e5c31af7Sopenharmony_ci				#version 450
5227e5c31af7Sopenharmony_ci				precision mediump int;
5228e5c31af7Sopenharmony_ci				precision mediump float;
5229e5c31af7Sopenharmony_ci				${DECLARATIONS}
5230e5c31af7Sopenharmony_ci
5231e5c31af7Sopenharmony_ci				void main()
5232e5c31af7Sopenharmony_ci				{
5233e5c31af7Sopenharmony_ci					${SETUP}
5234e5c31af7Sopenharmony_ci					ivec3[][][] x = ivec3[][][] (	ivec3[][] (	ivec3[] (	ivec3(in0.x, in0.y, -in0.z),
5235e5c31af7Sopenharmony_ci																			ivec3(0.0, 0.0, 0.0),
5236e5c31af7Sopenharmony_ci																			ivec3(0.0, 0.0, 0.0)) ),
5237e5c31af7Sopenharmony_ci
5238e5c31af7Sopenharmony_ci													ivec3[][] ( ivec3[] (	ivec3(0.0, 0.0, 0.0),
5239e5c31af7Sopenharmony_ci																			ivec3(in0.y, -in0.z, in0.x),
5240e5c31af7Sopenharmony_ci																			ivec3(0.0, 0.0, 0.0)) ),
5241e5c31af7Sopenharmony_ci
5242e5c31af7Sopenharmony_ci													ivec3[][] (	ivec3[] (	ivec3(0.0, 0.0, 0.0),
5243e5c31af7Sopenharmony_ci																			ivec3(0.0, 0.0, 0.0),
5244e5c31af7Sopenharmony_ci																			ivec3(-in0.z, in0.x, in0.y)) ) );
5245e5c31af7Sopenharmony_ci
5246e5c31af7Sopenharmony_ci					ivec3[] y[][] = x;
5247e5c31af7Sopenharmony_ci
5248e5c31af7Sopenharmony_ci					out0 = ivec3(y[0][0][0].x, y[1][0][1].y, y[2][0][2].z);
5249e5c31af7Sopenharmony_ci					${OUTPUT}
5250e5c31af7Sopenharmony_ci				}
5251e5c31af7Sopenharmony_ci			""
5252e5c31af7Sopenharmony_ci		end
5253e5c31af7Sopenharmony_ci
5254e5c31af7Sopenharmony_ci		case bvec3_3x1
5255e5c31af7Sopenharmony_ci			version 450
5256e5c31af7Sopenharmony_ci			desc "Testing assignment of arrays of arrays with implicit sizes"
5257e5c31af7Sopenharmony_ci			values
5258e5c31af7Sopenharmony_ci			{
5259e5c31af7Sopenharmony_ci				input bvec3 in0 =	[ bvec3(true, false, true) ];
5260e5c31af7Sopenharmony_ci				output bvec3 out0 = [ bvec3(true, true, false) ];
5261e5c31af7Sopenharmony_ci			}
5262e5c31af7Sopenharmony_ci
5263e5c31af7Sopenharmony_ci			both ""
5264e5c31af7Sopenharmony_ci				#version 450
5265e5c31af7Sopenharmony_ci				precision mediump float;
5266e5c31af7Sopenharmony_ci				${DECLARATIONS}
5267e5c31af7Sopenharmony_ci
5268e5c31af7Sopenharmony_ci				void main()
5269e5c31af7Sopenharmony_ci				{
5270e5c31af7Sopenharmony_ci					${SETUP}
5271e5c31af7Sopenharmony_ci					bvec3[][] x = bvec3[][] (	bvec3[] ( bvec3(in0.x, in0.y, in0.z)),
5272e5c31af7Sopenharmony_ci												bvec3[] ( bvec3(in0.y, in0.z, in0.x)),
5273e5c31af7Sopenharmony_ci												bvec3[] ( bvec3(in0.z, in0.x, in0.y)) );
5274e5c31af7Sopenharmony_ci
5275e5c31af7Sopenharmony_ci					bvec3[][] y = x;
5276e5c31af7Sopenharmony_ci
5277e5c31af7Sopenharmony_ci					out0 = bvec3(y[0][0].x, y[1][0].y, y[2][0].z);
5278e5c31af7Sopenharmony_ci					${OUTPUT}
5279e5c31af7Sopenharmony_ci				}
5280e5c31af7Sopenharmony_ci			""
5281e5c31af7Sopenharmony_ci		end
5282e5c31af7Sopenharmony_ci
5283e5c31af7Sopenharmony_ci		case mat3_3x2
5284e5c31af7Sopenharmony_ci			version 450
5285e5c31af7Sopenharmony_ci			desc "Testing assignment of arrays of arrays with implicit sizes"
5286e5c31af7Sopenharmony_ci			values
5287e5c31af7Sopenharmony_ci			{
5288e5c31af7Sopenharmony_ci				input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(-1.5, 0.0, -2.3) ];
5289e5c31af7Sopenharmony_ci				output vec3 out0 = [ vec3(0.5, -1.0, 1.0) | vec3(-1.5, 0.0, 0.0) ];
5290e5c31af7Sopenharmony_ci			}
5291e5c31af7Sopenharmony_ci
5292e5c31af7Sopenharmony_ci			both ""
5293e5c31af7Sopenharmony_ci				#version 450
5294e5c31af7Sopenharmony_ci				precision mediump float;
5295e5c31af7Sopenharmony_ci				${DECLARATIONS}
5296e5c31af7Sopenharmony_ci
5297e5c31af7Sopenharmony_ci				void main()
5298e5c31af7Sopenharmony_ci				{
5299e5c31af7Sopenharmony_ci					${SETUP}
5300e5c31af7Sopenharmony_ci					mat3[][] a = mat3[][] (	mat3[] ( mat3(	in0.x, in0.y, in0.z,
5301e5c31af7Sopenharmony_ci															in0.x, in0.y, in0.z,
5302e5c31af7Sopenharmony_ci															in0.x, in0.y, in0.z),
5303e5c31af7Sopenharmony_ci													 mat3(	in0.z, in0.x, -in0.y,
5304e5c31af7Sopenharmony_ci															in0.z, in0.x, -in0.y,
5305e5c31af7Sopenharmony_ci															in0.z, in0.x, -in0.y)),
5306e5c31af7Sopenharmony_ci
5307e5c31af7Sopenharmony_ci											mat3[] ( mat3(	-in0.z, -in0.z, in0.z,
5308e5c31af7Sopenharmony_ci															-in0.y, -in0.y, in0.y,
5309e5c31af7Sopenharmony_ci															-in0.x, -in0.x, in0.x),
5310e5c31af7Sopenharmony_ci													 mat3(	in0.x, in0.y, in0.z,
5311e5c31af7Sopenharmony_ci															in0.x, in0.y, in0.z,
5312e5c31af7Sopenharmony_ci															in0.x, in0.y, in0.z)),
5313e5c31af7Sopenharmony_ci
5314e5c31af7Sopenharmony_ci											mat3[] ( mat3(	in0.z, in0.x, -in0.y,
5315e5c31af7Sopenharmony_ci															in0.z, in0.x, -in0.y,
5316e5c31af7Sopenharmony_ci															in0.z, in0.x, -in0.y),
5317e5c31af7Sopenharmony_ci													 mat3(	-in0.z, -in0.z, in0.z,
5318e5c31af7Sopenharmony_ci															-in0.y, -in0.y, in0.y,
5319e5c31af7Sopenharmony_ci															-in0.x, -in0.x, in0.x)) );
5320e5c31af7Sopenharmony_ci
5321e5c31af7Sopenharmony_ci					mat3[] y[] = a;
5322e5c31af7Sopenharmony_ci
5323e5c31af7Sopenharmony_ci					mat3 a0 = y[0][0];
5324e5c31af7Sopenharmony_ci					mat3 a1 = y[0][1];
5325e5c31af7Sopenharmony_ci					mat3 a2 = y[2][1];
5326e5c31af7Sopenharmony_ci
5327e5c31af7Sopenharmony_ci					float ret0 = a0[2][0];
5328e5c31af7Sopenharmony_ci					float ret1 = a1[0][2];
5329e5c31af7Sopenharmony_ci					float ret2 = a2[1][2];
5330e5c31af7Sopenharmony_ci
5331e5c31af7Sopenharmony_ci					out0 = vec3(ret0, ret1, ret2);
5332e5c31af7Sopenharmony_ci					${OUTPUT}
5333e5c31af7Sopenharmony_ci				}
5334e5c31af7Sopenharmony_ci			""
5335e5c31af7Sopenharmony_ci		end
5336e5c31af7Sopenharmony_ci
5337e5c31af7Sopenharmony_ci		case mat3_3x3x3
5338e5c31af7Sopenharmony_ci			version 450
5339e5c31af7Sopenharmony_ci			desc "Testing assignment of arrays of arrays with implicit sizes"
5340e5c31af7Sopenharmony_ci			values
5341e5c31af7Sopenharmony_ci			{
5342e5c31af7Sopenharmony_ci				input ivec3 in0 = [ ivec3(0, 1, 2) | ivec3(-1, 0, -2) ];
5343e5c31af7Sopenharmony_ci				output ivec3 out0 = [ ivec3(0, -1, 1) | ivec3(-1, 0, 0) ];
5344e5c31af7Sopenharmony_ci			}
5345e5c31af7Sopenharmony_ci
5346e5c31af7Sopenharmony_ci			both ""
5347e5c31af7Sopenharmony_ci				#version 450
5348e5c31af7Sopenharmony_ci				precision mediump int;
5349e5c31af7Sopenharmony_ci				precision mediump float;
5350e5c31af7Sopenharmony_ci				${DECLARATIONS}
5351e5c31af7Sopenharmony_ci
5352e5c31af7Sopenharmony_ci				void main()
5353e5c31af7Sopenharmony_ci				{
5354e5c31af7Sopenharmony_ci					${SETUP}
5355e5c31af7Sopenharmony_ci
5356e5c31af7Sopenharmony_ci					mat3 a = mat3(	in0.x, in0.y, in0.z,
5357e5c31af7Sopenharmony_ci									in0.x, in0.y, in0.z,
5358e5c31af7Sopenharmony_ci									in0.x, in0.y, in0.z);
5359e5c31af7Sopenharmony_ci					mat3 b = mat3(	in0.z, in0.x, -in0.y,
5360e5c31af7Sopenharmony_ci									in0.z, in0.x, -in0.y,
5361e5c31af7Sopenharmony_ci									in0.z, in0.x, -in0.y);
5362e5c31af7Sopenharmony_ci					mat3 c = mat3(	-in0.z, -in0.z, in0.z,
5363e5c31af7Sopenharmony_ci									-in0.y, -in0.y, in0.y,
5364e5c31af7Sopenharmony_ci									-in0.x, -in0.x, in0.x);
5365e5c31af7Sopenharmony_ci
5366e5c31af7Sopenharmony_ci					mat3[][][] x = mat3[][][] (	mat3[][] (	mat3[] (a, a, a),
5367e5c31af7Sopenharmony_ci															mat3[] (b, b, b),
5368e5c31af7Sopenharmony_ci															mat3[] (c, c, c)),
5369e5c31af7Sopenharmony_ci
5370e5c31af7Sopenharmony_ci												mat3[][] (	mat3[] (b, b, b),
5371e5c31af7Sopenharmony_ci															mat3[] (a, a, a),
5372e5c31af7Sopenharmony_ci															mat3[] (c, c, c)),
5373e5c31af7Sopenharmony_ci
5374e5c31af7Sopenharmony_ci												mat3[][] (	mat3[] (c, c, c),
5375e5c31af7Sopenharmony_ci															mat3[] (a, a, a),
5376e5c31af7Sopenharmony_ci															mat3[] (b, b, b)) );
5377e5c31af7Sopenharmony_ci
5378e5c31af7Sopenharmony_ci					mat3 y[][][] = x;
5379e5c31af7Sopenharmony_ci
5380e5c31af7Sopenharmony_ci					mat3 x0 = y[0][0][0];
5381e5c31af7Sopenharmony_ci					mat3 x1 = y[1][0][0];
5382e5c31af7Sopenharmony_ci					mat3 x2 = y[2][0][0];
5383e5c31af7Sopenharmony_ci
5384e5c31af7Sopenharmony_ci					float ret0 = x0[2][0];
5385e5c31af7Sopenharmony_ci					float ret1 = x1[0][2];
5386e5c31af7Sopenharmony_ci					float ret2 = x2[1][2];
5387e5c31af7Sopenharmony_ci
5388e5c31af7Sopenharmony_ci					out0 = ivec3(ret0, ret1, ret2);
5389e5c31af7Sopenharmony_ci					${OUTPUT}
5390e5c31af7Sopenharmony_ci				}
5391e5c31af7Sopenharmony_ci			""
5392e5c31af7Sopenharmony_ci		end
5393e5c31af7Sopenharmony_ci
5394e5c31af7Sopenharmony_ci		case mat3_3x4
5395e5c31af7Sopenharmony_ci			version 450
5396e5c31af7Sopenharmony_ci			desc "Testing assignment of arrays of arrays with implicit sizes"
5397e5c31af7Sopenharmony_ci			values
5398e5c31af7Sopenharmony_ci			{
5399e5c31af7Sopenharmony_ci				input bvec3 in0 = [ bvec3(true, false, true) ];
5400e5c31af7Sopenharmony_ci				output bvec3 out0 = [ bvec3(true, false, false) ];
5401e5c31af7Sopenharmony_ci			}
5402e5c31af7Sopenharmony_ci
5403e5c31af7Sopenharmony_ci			both ""
5404e5c31af7Sopenharmony_ci				#version 450
5405e5c31af7Sopenharmony_ci				precision mediump float;
5406e5c31af7Sopenharmony_ci				${DECLARATIONS}
5407e5c31af7Sopenharmony_ci
5408e5c31af7Sopenharmony_ci				void main()
5409e5c31af7Sopenharmony_ci				{
5410e5c31af7Sopenharmony_ci					${SETUP}
5411e5c31af7Sopenharmony_ci
5412e5c31af7Sopenharmony_ci					mat3 a = mat3(	in0.x, in0.y, in0.z,
5413e5c31af7Sopenharmony_ci									in0.x, in0.y, in0.z,
5414e5c31af7Sopenharmony_ci									in0.x, in0.y, in0.z);
5415e5c31af7Sopenharmony_ci
5416e5c31af7Sopenharmony_ci					mat3 b = mat3(	in0.z, in0.x, in0.y,
5417e5c31af7Sopenharmony_ci									in0.z, in0.x, in0.y,
5418e5c31af7Sopenharmony_ci									in0.z, in0.x, in0.y);
5419e5c31af7Sopenharmony_ci
5420e5c31af7Sopenharmony_ci					mat3 c = mat3(	in0.z, in0.z, in0.z,
5421e5c31af7Sopenharmony_ci									in0.y, in0.y, in0.y,
5422e5c31af7Sopenharmony_ci									in0.x, in0.x, in0.x);
5423e5c31af7Sopenharmony_ci
5424e5c31af7Sopenharmony_ci					mat3[] x[] = mat3[][] (	mat3[] (a, b, c, a),
5425e5c31af7Sopenharmony_ci											mat3[] (b, c, a, b),
5426e5c31af7Sopenharmony_ci											mat3[] (c, a, b, c) );
5427e5c31af7Sopenharmony_ci
5428e5c31af7Sopenharmony_ci					mat3 y[][] = x;
5429e5c31af7Sopenharmony_ci
5430e5c31af7Sopenharmony_ci					mat3 x0 = y[0][0];
5431e5c31af7Sopenharmony_ci					mat3 x1 = y[1][3];
5432e5c31af7Sopenharmony_ci					mat3 x2 = y[2][0];
5433e5c31af7Sopenharmony_ci
5434e5c31af7Sopenharmony_ci					float ret0 = x0[2][0];
5435e5c31af7Sopenharmony_ci					float ret1 = x1[0][2];
5436e5c31af7Sopenharmony_ci					float ret2 = x2[1][2];
5437e5c31af7Sopenharmony_ci
5438e5c31af7Sopenharmony_ci					out0 = bvec3(ret0, ret1, ret2);
5439e5c31af7Sopenharmony_ci					${OUTPUT}
5440e5c31af7Sopenharmony_ci				}
5441e5c31af7Sopenharmony_ci			""
5442e5c31af7Sopenharmony_ci		end
5443e5c31af7Sopenharmony_ci
5444e5c31af7Sopenharmony_ci	end # implicit_to_implicit
5445e5c31af7Sopenharmony_ci
5446e5c31af7Sopenharmony_ciend # assignment
5447e5c31af7Sopenharmony_ci
5448e5c31af7Sopenharmony_cigroup length "Testing the array length property with arrays of arrays"
5449e5c31af7Sopenharmony_ci
5450e5c31af7Sopenharmony_ci	case float
5451e5c31af7Sopenharmony_ci		version 450
5452e5c31af7Sopenharmony_ci		desc "Testing the array length property with arrays of arrays"
5453e5c31af7Sopenharmony_ci		values
5454e5c31af7Sopenharmony_ci		{
5455e5c31af7Sopenharmony_ci			input vec3 in0 = [ vec3(0.5, 1.0, 2.0) ];
5456e5c31af7Sopenharmony_ci			output ivec2 out0 = [ ivec2(3, 5) ];
5457e5c31af7Sopenharmony_ci			output ivec3 out1 = [ ivec3(3, 4, 5) ];
5458e5c31af7Sopenharmony_ci			output ivec3 out2 = [ ivec3(1, 2, 13) ];
5459e5c31af7Sopenharmony_ci		}
5460e5c31af7Sopenharmony_ci
5461e5c31af7Sopenharmony_ci		both ""
5462e5c31af7Sopenharmony_ci			#version 450
5463e5c31af7Sopenharmony_ci			precision mediump float;
5464e5c31af7Sopenharmony_ci			${DECLARATIONS}
5465e5c31af7Sopenharmony_ci
5466e5c31af7Sopenharmony_ci			void main()
5467e5c31af7Sopenharmony_ci			{
5468e5c31af7Sopenharmony_ci				${SETUP}
5469e5c31af7Sopenharmony_ci				float[][] x = float[3][5] (	float[5] (in0.z, in0.x, in0.y, in0.x, in0.y),
5470e5c31af7Sopenharmony_ci											float[5] (in0.z, in0.x, in0.y, in0.x, in0.y),
5471e5c31af7Sopenharmony_ci											float[5] (in0.z, in0.x, in0.y, in0.x, in0.y) );
5472e5c31af7Sopenharmony_ci
5473e5c31af7Sopenharmony_ci				float[][] y[] = float[][][] (	float[][] ( float[] (in0.z, in0.x, in0.y, in0.x, in0.y),
5474e5c31af7Sopenharmony_ci															float[] (in0.z, in0.x, in0.y, in0.x, in0.y),
5475e5c31af7Sopenharmony_ci															float[] (in0.z, in0.x, in0.y, in0.x, in0.y),
5476e5c31af7Sopenharmony_ci															float[] (in0.z, in0.x, in0.y, in0.x, in0.y) ),
5477e5c31af7Sopenharmony_ci
5478e5c31af7Sopenharmony_ci												float[][] ( float[] (in0.z, in0.x, in0.y, in0.x, in0.y),
5479e5c31af7Sopenharmony_ci															float[] (in0.z, in0.x, in0.y, in0.x, in0.y),
5480e5c31af7Sopenharmony_ci															float[] (in0.z, in0.x, in0.y, in0.x, in0.y),
5481e5c31af7Sopenharmony_ci															float[] (in0.z, in0.x, in0.y, in0.x, in0.y) ),
5482e5c31af7Sopenharmony_ci
5483e5c31af7Sopenharmony_ci												float[][] ( float[] (in0.z, in0.x, in0.y, in0.x, in0.y),
5484e5c31af7Sopenharmony_ci															float[] (in0.z, in0.x, in0.y, in0.x, in0.y),
5485e5c31af7Sopenharmony_ci															float[] (in0.z, in0.x, in0.y, in0.x, in0.y),
5486e5c31af7Sopenharmony_ci															float[] (in0.z, in0.x, in0.y, in0.x, in0.y) ) );
5487e5c31af7Sopenharmony_ci
5488e5c31af7Sopenharmony_ci				float[1][2][13] z;
5489e5c31af7Sopenharmony_ci
5490e5c31af7Sopenharmony_ci				out0 = ivec2(x.length(), x[0].length());
5491e5c31af7Sopenharmony_ci				out1 = ivec3(y.length(), y[0].length(), y[0][0].length());
5492e5c31af7Sopenharmony_ci				out2 = ivec3(z.length(), z[0].length(), z[0][0].length());
5493e5c31af7Sopenharmony_ci				${OUTPUT}
5494e5c31af7Sopenharmony_ci			}
5495e5c31af7Sopenharmony_ci		""
5496e5c31af7Sopenharmony_ci	end
5497e5c31af7Sopenharmony_ci
5498e5c31af7Sopenharmony_ci	case int
5499e5c31af7Sopenharmony_ci		version 450
5500e5c31af7Sopenharmony_ci		desc "Testing the array length property with arrays of arrays"
5501e5c31af7Sopenharmony_ci		values
5502e5c31af7Sopenharmony_ci		{
5503e5c31af7Sopenharmony_ci			input ivec3 in0 = [ ivec3(0, 1, 2) ];
5504e5c31af7Sopenharmony_ci			output ivec2 out0 = [ ivec2(2, 7) ];
5505e5c31af7Sopenharmony_ci			output ivec3 out1 = [ ivec3(1, 2, 3) ];
5506e5c31af7Sopenharmony_ci			output ivec3 out2 = [ ivec3(13, 7, 1) ];
5507e5c31af7Sopenharmony_ci		}
5508e5c31af7Sopenharmony_ci
5509e5c31af7Sopenharmony_ci		both ""
5510e5c31af7Sopenharmony_ci			#version 450
5511e5c31af7Sopenharmony_ci			precision mediump int;
5512e5c31af7Sopenharmony_ci			precision mediump float;
5513e5c31af7Sopenharmony_ci			${DECLARATIONS}
5514e5c31af7Sopenharmony_ci
5515e5c31af7Sopenharmony_ci			void main()
5516e5c31af7Sopenharmony_ci			{
5517e5c31af7Sopenharmony_ci				${SETUP}
5518e5c31af7Sopenharmony_ci
5519e5c31af7Sopenharmony_ci				int[] x[] = int[][] (	int[] (in0.z, in0.x, in0.y, in0.x, in0.y, in0.z, in0.x),
5520e5c31af7Sopenharmony_ci										int[] (in0.z, in0.x, in0.y, in0.x, in0.y, in0.z, in0.x) );
5521e5c31af7Sopenharmony_ci
5522e5c31af7Sopenharmony_ci				int[] y[][] = int[1][2][3] ( int[2][3] (	int[3] (in0.z, in0.x, in0.y),
5523e5c31af7Sopenharmony_ci															int[3] (in0.z, in0.x, in0.y) ));
5524e5c31af7Sopenharmony_ci
5525e5c31af7Sopenharmony_ci				int z[13][7][1];
5526e5c31af7Sopenharmony_ci
5527e5c31af7Sopenharmony_ci				out0 = ivec2(x.length(), x[0].length());
5528e5c31af7Sopenharmony_ci				out1 = ivec3(y.length(), y[0].length(), y[0][0].length());
5529e5c31af7Sopenharmony_ci				out2 = ivec3(z.length(), z[0].length(), z[0][0].length());
5530e5c31af7Sopenharmony_ci				${OUTPUT}
5531e5c31af7Sopenharmony_ci			}
5532e5c31af7Sopenharmony_ci		""
5533e5c31af7Sopenharmony_ci	end
5534e5c31af7Sopenharmony_ci
5535e5c31af7Sopenharmony_ci	case bool
5536e5c31af7Sopenharmony_ci		version 450
5537e5c31af7Sopenharmony_ci		desc "Testing the array length property with arrays of arrays"
5538e5c31af7Sopenharmony_ci		values
5539e5c31af7Sopenharmony_ci		{
5540e5c31af7Sopenharmony_ci			input bvec3 in0 = [ bvec3(true, false, true) ];
5541e5c31af7Sopenharmony_ci			output ivec2 out0 = [ ivec2(4, 3) ];
5542e5c31af7Sopenharmony_ci			output ivec3 out1 = [ ivec3(2, 1, 3) ];
5543e5c31af7Sopenharmony_ci			output ivec3 out2 = [ ivec3(7, 8, 9) ];
5544e5c31af7Sopenharmony_ci		}
5545e5c31af7Sopenharmony_ci
5546e5c31af7Sopenharmony_ci		both ""
5547e5c31af7Sopenharmony_ci			#version 450
5548e5c31af7Sopenharmony_ci			precision mediump float;
5549e5c31af7Sopenharmony_ci			${DECLARATIONS}
5550e5c31af7Sopenharmony_ci
5551e5c31af7Sopenharmony_ci			void main()
5552e5c31af7Sopenharmony_ci			{
5553e5c31af7Sopenharmony_ci				${SETUP}
5554e5c31af7Sopenharmony_ci				bool x[4][3] = bool[][] (	bool[] (in0.z, in0.x, in0.y),
5555e5c31af7Sopenharmony_ci											bool[] (in0.z, in0.x, in0.y),
5556e5c31af7Sopenharmony_ci											bool[] (in0.z, in0.x, in0.y),
5557e5c31af7Sopenharmony_ci											bool[] (in0.z, in0.x, in0.y) );
5558e5c31af7Sopenharmony_ci
5559e5c31af7Sopenharmony_ci				bool y[2][1][3] = bool[][][] (	bool[][] (	bool[] (in0.z, in0.x, in0.y) ),
5560e5c31af7Sopenharmony_ci												bool[][] (	bool[] (in0.z, in0.x, in0.y) ) );
5561e5c31af7Sopenharmony_ci
5562e5c31af7Sopenharmony_ci				int z[7][8][9];
5563e5c31af7Sopenharmony_ci
5564e5c31af7Sopenharmony_ci				out0 = ivec2(x.length(), x[0].length());
5565e5c31af7Sopenharmony_ci				out1 = ivec3(y.length(), y[0].length(), y[0][0].length());
5566e5c31af7Sopenharmony_ci				out2 = ivec3(z.length(), z[0].length(), z[0][0].length());
5567e5c31af7Sopenharmony_ci				${OUTPUT}
5568e5c31af7Sopenharmony_ci			}
5569e5c31af7Sopenharmony_ci		""
5570e5c31af7Sopenharmony_ci	end
5571e5c31af7Sopenharmony_ci
5572e5c31af7Sopenharmony_ci	case struct
5573e5c31af7Sopenharmony_ci		version 450
5574e5c31af7Sopenharmony_ci		desc "Testing the array length property with arrays of arrays"
5575e5c31af7Sopenharmony_ci		values
5576e5c31af7Sopenharmony_ci		{
5577e5c31af7Sopenharmony_ci			input vec3 in0 = [ vec3(0.5, 1.0, 2.0) ];
5578e5c31af7Sopenharmony_ci			output ivec2 out0 = [ ivec2(5, 1) ];
5579e5c31af7Sopenharmony_ci			output ivec3 out1 = [ ivec3(5, 4, 2) ];
5580e5c31af7Sopenharmony_ci			output ivec3 out2 = [ ivec3(100, 101, 102) ];
5581e5c31af7Sopenharmony_ci		}
5582e5c31af7Sopenharmony_ci
5583e5c31af7Sopenharmony_ci		both ""
5584e5c31af7Sopenharmony_ci			#version 450
5585e5c31af7Sopenharmony_ci			precision mediump float;
5586e5c31af7Sopenharmony_ci			${DECLARATIONS}
5587e5c31af7Sopenharmony_ci
5588e5c31af7Sopenharmony_ci			struct Test
5589e5c31af7Sopenharmony_ci			{
5590e5c31af7Sopenharmony_ci				float f;
5591e5c31af7Sopenharmony_ci				vec3 v;
5592e5c31af7Sopenharmony_ci			};
5593e5c31af7Sopenharmony_ci
5594e5c31af7Sopenharmony_ci			void main()
5595e5c31af7Sopenharmony_ci			{
5596e5c31af7Sopenharmony_ci				${SETUP}
5597e5c31af7Sopenharmony_ci
5598e5c31af7Sopenharmony_ci				Test a = Test(in0.z, vec3(in0.x, in0.y, in0.z));
5599e5c31af7Sopenharmony_ci				Test b = Test(in0.y, vec3(-in0.z, -in0.x, -in0.y));
5600e5c31af7Sopenharmony_ci				Test c = Test(in0.x, vec3(-in0.y, in0.z, -in0.x));
5601e5c31af7Sopenharmony_ci
5602e5c31af7Sopenharmony_ci				Test x[5][1] = Test[5][1] (	Test[1] (a),
5603e5c31af7Sopenharmony_ci											Test[1] (b),
5604e5c31af7Sopenharmony_ci											Test[1] (c),
5605e5c31af7Sopenharmony_ci											Test[1] (a),
5606e5c31af7Sopenharmony_ci											Test[1] (b) );
5607e5c31af7Sopenharmony_ci
5608e5c31af7Sopenharmony_ci				Test y[][][] = Test[][][] ( Test[][] (	Test[] (a, b),
5609e5c31af7Sopenharmony_ci														Test[] (a, b),
5610e5c31af7Sopenharmony_ci														Test[] (a, b),
5611e5c31af7Sopenharmony_ci														Test[] (a, b) ),
5612e5c31af7Sopenharmony_ci											Test[][] (	Test[] (a, b),
5613e5c31af7Sopenharmony_ci														Test[] (a, b),
5614e5c31af7Sopenharmony_ci														Test[] (a, b),
5615e5c31af7Sopenharmony_ci														Test[] (a, b) ),
5616e5c31af7Sopenharmony_ci											Test[][] (	Test[] (a, b),
5617e5c31af7Sopenharmony_ci														Test[] (a, b),
5618e5c31af7Sopenharmony_ci														Test[] (a, b),
5619e5c31af7Sopenharmony_ci														Test[] (a, b) ),
5620e5c31af7Sopenharmony_ci											Test[][] (	Test[] (a, b),
5621e5c31af7Sopenharmony_ci														Test[] (a, b),
5622e5c31af7Sopenharmony_ci														Test[] (a, b),
5623e5c31af7Sopenharmony_ci														Test[] (a, b) ),
5624e5c31af7Sopenharmony_ci											Test[][] (	Test[] (a, b),
5625e5c31af7Sopenharmony_ci														Test[] (a, b),
5626e5c31af7Sopenharmony_ci														Test[] (a, b),
5627e5c31af7Sopenharmony_ci														Test[] (a, b) ) );
5628e5c31af7Sopenharmony_ci
5629e5c31af7Sopenharmony_ci				int z[100][101][102];
5630e5c31af7Sopenharmony_ci
5631e5c31af7Sopenharmony_ci				out0 = ivec2(x.length(), x[0].length());
5632e5c31af7Sopenharmony_ci				out1 = ivec3(y.length(), y[0].length(), y[0][0].length());
5633e5c31af7Sopenharmony_ci				out2 = ivec3(z.length(), z[0].length(), z[0][0].length());
5634e5c31af7Sopenharmony_ci				${OUTPUT}
5635e5c31af7Sopenharmony_ci			}
5636e5c31af7Sopenharmony_ci		""
5637e5c31af7Sopenharmony_ci	end
5638e5c31af7Sopenharmony_ci
5639e5c31af7Sopenharmony_ci	case mat3
5640e5c31af7Sopenharmony_ci		version 450
5641e5c31af7Sopenharmony_ci		desc "Testing the array length property with arrays of arrays"
5642e5c31af7Sopenharmony_ci		values
5643e5c31af7Sopenharmony_ci		{
5644e5c31af7Sopenharmony_ci			input ivec3 in0 = [ ivec3(0, 1, 2)];
5645e5c31af7Sopenharmony_ci			output ivec2 out0 = [ ivec2(3, 4) ];
5646e5c31af7Sopenharmony_ci			output ivec3 out1 = [ ivec3(1, 2, 4) ];
5647e5c31af7Sopenharmony_ci			output ivec3 out2 = [ ivec3(3, 101, 88) ];
5648e5c31af7Sopenharmony_ci		}
5649e5c31af7Sopenharmony_ci
5650e5c31af7Sopenharmony_ci		both ""
5651e5c31af7Sopenharmony_ci			#version 450
5652e5c31af7Sopenharmony_ci			precision mediump int;
5653e5c31af7Sopenharmony_ci			precision mediump float;
5654e5c31af7Sopenharmony_ci			${DECLARATIONS}
5655e5c31af7Sopenharmony_ci
5656e5c31af7Sopenharmony_ci			void main()
5657e5c31af7Sopenharmony_ci			{
5658e5c31af7Sopenharmony_ci				${SETUP}
5659e5c31af7Sopenharmony_ci
5660e5c31af7Sopenharmony_ci				mat3 a = mat3(	in0.x, in0.y, in0.z,
5661e5c31af7Sopenharmony_ci								in0.x, in0.y, in0.z,
5662e5c31af7Sopenharmony_ci								in0.x, in0.y, in0.z);
5663e5c31af7Sopenharmony_ci				mat3 b = mat3(	in0.z, in0.x, -in0.y,
5664e5c31af7Sopenharmony_ci								in0.z, in0.x, -in0.y,
5665e5c31af7Sopenharmony_ci								in0.z, in0.x, -in0.y);
5666e5c31af7Sopenharmony_ci				mat3 c = mat3(	-in0.z, -in0.z, in0.z,
5667e5c31af7Sopenharmony_ci								-in0.y, -in0.y, in0.y,
5668e5c31af7Sopenharmony_ci								-in0.x, -in0.x, in0.x);
5669e5c31af7Sopenharmony_ci
5670e5c31af7Sopenharmony_ci				mat3[3][4] x = mat3[][] (	mat3[] (a, a, a, a),
5671e5c31af7Sopenharmony_ci											mat3[] (b, b, b, b),
5672e5c31af7Sopenharmony_ci											mat3[] (c, c, c, c) );
5673e5c31af7Sopenharmony_ci
5674e5c31af7Sopenharmony_ci				mat3 y[][][] = mat3[][][] ( mat3[][] (	mat3[] (a, a, a, a),
5675e5c31af7Sopenharmony_ci														mat3[] (b, b, b, b) ) );
5676e5c31af7Sopenharmony_ci
5677e5c31af7Sopenharmony_ci
5678e5c31af7Sopenharmony_ci				mat3 z[3][101][88];
5679e5c31af7Sopenharmony_ci
5680e5c31af7Sopenharmony_ci				out0 = ivec2(x.length(), x[0].length());
5681e5c31af7Sopenharmony_ci				out1 = ivec3(y.length(), y[0].length(), y[0][0].length());
5682e5c31af7Sopenharmony_ci				out2 = ivec3(z.length(), z[0].length(), z[0][0].length());
5683e5c31af7Sopenharmony_ci				${OUTPUT}
5684e5c31af7Sopenharmony_ci			}
5685e5c31af7Sopenharmony_ci		""
5686e5c31af7Sopenharmony_ci	end
5687e5c31af7Sopenharmony_ci
5688e5c31af7Sopenharmony_ci	case constant_expression
5689e5c31af7Sopenharmony_ci		version 450
5690e5c31af7Sopenharmony_ci		desc "Testing the array length property with arrays of arrays"
5691e5c31af7Sopenharmony_ci		values
5692e5c31af7Sopenharmony_ci		{
5693e5c31af7Sopenharmony_ci			input ivec3 in0 = [ ivec3(0, 1, 2) ];
5694e5c31af7Sopenharmony_ci			output ivec3 out0 = [ ivec3(2, 7, 3) ];
5695e5c31af7Sopenharmony_ci		}
5696e5c31af7Sopenharmony_ci
5697e5c31af7Sopenharmony_ci		both ""
5698e5c31af7Sopenharmony_ci			#version 450
5699e5c31af7Sopenharmony_ci			precision mediump int;
5700e5c31af7Sopenharmony_ci			precision mediump float;
5701e5c31af7Sopenharmony_ci			${DECLARATIONS}
5702e5c31af7Sopenharmony_ci
5703e5c31af7Sopenharmony_ci			void main()
5704e5c31af7Sopenharmony_ci			{
5705e5c31af7Sopenharmony_ci				${SETUP}
5706e5c31af7Sopenharmony_ci
5707e5c31af7Sopenharmony_ci				int[] x[] = int[][] (	int[] (in0.z, in0.x, in0.y, in0.x, in0.y, in0.z, in0.x),
5708e5c31af7Sopenharmony_ci										int[] (in0.z, in0.x, in0.y, in0.x, in0.y, in0.z, in0.x) );
5709e5c31af7Sopenharmony_ci
5710e5c31af7Sopenharmony_ci				int[] y[][] = int[1][2][3] ( int[2][3] (	int[3] (in0.z, in0.x, in0.y),
5711e5c31af7Sopenharmony_ci															int[3] (in0.z, in0.x, in0.y) ));
5712e5c31af7Sopenharmony_ci
5713e5c31af7Sopenharmony_ci				int z[13][7][1];
5714e5c31af7Sopenharmony_ci
5715e5c31af7Sopenharmony_ci				int ret[x.length()][z[0].length()][y[0][0].length()];
5716e5c31af7Sopenharmony_ci				out0 = ivec3(ret.length(), ret[0].length(), ret[0][0].length());
5717e5c31af7Sopenharmony_ci				${OUTPUT}
5718e5c31af7Sopenharmony_ci			}
5719e5c31af7Sopenharmony_ci		""
5720e5c31af7Sopenharmony_ci	end
5721e5c31af7Sopenharmony_ci
5722e5c31af7Sopenharmony_ciend # length
5723e5c31af7Sopenharmony_ci
5724e5c31af7Sopenharmony_cigroup array_access "Test accessing arrays of arrays"
5725e5c31af7Sopenharmony_ci
5726e5c31af7Sopenharmony_ci	case constant_expression_access
5727e5c31af7Sopenharmony_ci		version 450
5728e5c31af7Sopenharmony_ci		desc "Testing accessing arrays of arrays"
5729e5c31af7Sopenharmony_ci		values
5730e5c31af7Sopenharmony_ci		{
5731e5c31af7Sopenharmony_ci			input vec3 in0 = [ vec3(0.5, 1.0, 2.0) ];
5732e5c31af7Sopenharmony_ci			output vec3 out0 = [ vec3(-1.0, 0.5, -0.5) ];
5733e5c31af7Sopenharmony_ci		}
5734e5c31af7Sopenharmony_ci
5735e5c31af7Sopenharmony_ci		both ""
5736e5c31af7Sopenharmony_ci			#version 450
5737e5c31af7Sopenharmony_ci			precision mediump float;
5738e5c31af7Sopenharmony_ci			${DECLARATIONS}
5739e5c31af7Sopenharmony_ci
5740e5c31af7Sopenharmony_ci			const int a = 1;
5741e5c31af7Sopenharmony_ci
5742e5c31af7Sopenharmony_ci			void main ()
5743e5c31af7Sopenharmony_ci			{
5744e5c31af7Sopenharmony_ci				${SETUP}
5745e5c31af7Sopenharmony_ci				const int b = 2;
5746e5c31af7Sopenharmony_ci				float x = float[2][6] ( float[] (in0.x, in0.y, in0.z, -in0.z, -in0.y, -in0.x),
5747e5c31af7Sopenharmony_ci										float[] (-in0.z, -in0.y, -in0.x, in0.x, in0.y, in0.z) ) [a][a];
5748e5c31af7Sopenharmony_ci
5749e5c31af7Sopenharmony_ci				float y = float[][][] (	float[][] (		float[] (in0.x, in0.y, in0.z, -in0.z, -in0.y, -in0.x),
5750e5c31af7Sopenharmony_ci														float[] (-in0.z, -in0.y, -in0.x, in0.x, in0.y, in0.z) ),
5751e5c31af7Sopenharmony_ci										float[][] (		float[] (in0.x, in0.y, in0.z, -in0.z, -in0.y, -in0.x),
5752e5c31af7Sopenharmony_ci														float[] (-in0.z, -in0.y, -in0.x, in0.x, in0.y, in0.z) ),
5753e5c31af7Sopenharmony_ci										float[][] (		float[] (in0.x, in0.y, in0.z, -in0.z, -in0.y, -in0.x),
5754e5c31af7Sopenharmony_ci														float[] (-in0.z, -in0.y, -in0.x, in0.x, in0.y, in0.z) ),
5755e5c31af7Sopenharmony_ci										float[][] (		float[] (in0.x, in0.y, in0.z, -in0.z, -in0.y, -in0.x),
5756e5c31af7Sopenharmony_ci														float[] (-in0.z, -in0.y, -in0.x, in0.x, in0.y, in0.z) ),
5757e5c31af7Sopenharmony_ci										float[][] (		float[] (in0.x, in0.y, in0.z, -in0.z, -in0.y, -in0.x),
5758e5c31af7Sopenharmony_ci														float[] (-in0.z, -in0.y, -in0.x, in0.x, in0.y, in0.z) )) [b+2][b-1][b+1];
5759e5c31af7Sopenharmony_ci
5760e5c31af7Sopenharmony_ci				float z = float[][] (	float[] (-in0.z, -in0.y, -in0.x, in0.x, in0.y, in0.z),
5761e5c31af7Sopenharmony_ci										float[] (0.0, 0.0, 0.0, 0.0, 0.0, 0.0),
5762e5c31af7Sopenharmony_ci										float[] (in0.x, in0.y, in0.z, -in0.z, -in0.y, -in0.x) ) [2][5];
5763e5c31af7Sopenharmony_ci
5764e5c31af7Sopenharmony_ci				out0 = vec3(x, y, z);
5765e5c31af7Sopenharmony_ci				${OUTPUT}
5766e5c31af7Sopenharmony_ci			}
5767e5c31af7Sopenharmony_ci		""
5768e5c31af7Sopenharmony_ci	end # constant_expression_access
5769e5c31af7Sopenharmony_ci
5770e5c31af7Sopenharmony_ci	case dynamic_expression_access
5771e5c31af7Sopenharmony_ci		version 450
5772e5c31af7Sopenharmony_ci		desc "Testing accessing arrays of arrays"
5773e5c31af7Sopenharmony_ci		values
5774e5c31af7Sopenharmony_ci		{
5775e5c31af7Sopenharmony_ci			input vec3 in0 = [ vec3(0.5, 1.0, 2.0) ];
5776e5c31af7Sopenharmony_ci			input ivec3 in1 = ivec3(3, 2, 1);
5777e5c31af7Sopenharmony_ci			output vec3 out0 = [ vec3(0.5, 2.0, -1.0) ];
5778e5c31af7Sopenharmony_ci		}
5779e5c31af7Sopenharmony_ci
5780e5c31af7Sopenharmony_ci		both ""
5781e5c31af7Sopenharmony_ci			#version 450
5782e5c31af7Sopenharmony_ci			precision mediump float;
5783e5c31af7Sopenharmony_ci			${DECLARATIONS}
5784e5c31af7Sopenharmony_ci
5785e5c31af7Sopenharmony_ci			void main ()
5786e5c31af7Sopenharmony_ci			{
5787e5c31af7Sopenharmony_ci				${SETUP}
5788e5c31af7Sopenharmony_ci				float x = float[2][6] ( float[] (in0.x, in0.y, in0.z, -in0.z, -in0.y, -in0.x),
5789e5c31af7Sopenharmony_ci										float[] (-in0.z, -in0.y, -in0.x, in0.x, in0.y, in0.z) ) [in1.z][in1.x];
5790e5c31af7Sopenharmony_ci
5791e5c31af7Sopenharmony_ci				float y = float[][][] (	float[][] ( float[] (in0.x, in0.y, in0.z, -in0.z, -in0.y, -in0.x),
5792e5c31af7Sopenharmony_ci													float[] (-in0.z, -in0.y, -in0.x, in0.x, in0.y, in0.z) ),
5793e5c31af7Sopenharmony_ci										float[][] ( float[] (in0.x, in0.y, in0.z, -in0.z, -in0.y, -in0.x),
5794e5c31af7Sopenharmony_ci													float[] (-in0.z, -in0.y, -in0.x, in0.x, in0.y, in0.z) ),
5795e5c31af7Sopenharmony_ci										float[][] ( float[] (in0.x, in0.y, in0.z, -in0.z, -in0.y, -in0.x),
5796e5c31af7Sopenharmony_ci													float[] (-in0.z, -in0.y, -in0.x, in0.x, in0.y, in0.z) ),
5797e5c31af7Sopenharmony_ci										float[][] ( float[] (in0.x, in0.y, in0.z, -in0.z, -in0.y, -in0.x),
5798e5c31af7Sopenharmony_ci													float[] (-in0.z, -in0.y, -in0.x, in0.x, in0.y, in0.z) ),
5799e5c31af7Sopenharmony_ci										float[][] ( float[] (in0.x, in0.y, in0.z, -in0.z, -in0.y, -in0.x),
5800e5c31af7Sopenharmony_ci													float[] (-in0.z, -in0.y, -in0.x, in0.x, in0.y, in0.z) )) [in1.x+1][in1.y-1][in1.z+4];
5801e5c31af7Sopenharmony_ci
5802e5c31af7Sopenharmony_ci				float z = float[][] (	float[] (0.0, 0.0, 0.0, 0.0, 0.0, 0.0),
5803e5c31af7Sopenharmony_ci										float[] (-in0.z, -in0.y, -in0.x, in0.x, in0.y, in0.z),
5804e5c31af7Sopenharmony_ci										float[] (in0.x, in0.y, in0.z, -in0.z, -in0.y, -in0.x) ) [in1.x-in1.y][in1.z];
5805e5c31af7Sopenharmony_ci
5806e5c31af7Sopenharmony_ci				out0 = vec3(x, y, z);
5807e5c31af7Sopenharmony_ci				${OUTPUT}
5808e5c31af7Sopenharmony_ci			}
5809e5c31af7Sopenharmony_ci		""
5810e5c31af7Sopenharmony_ci	end # dynamic_expression_access
5811e5c31af7Sopenharmony_ci
5812e5c31af7Sopenharmony_ciend # array_access
5813e5c31af7Sopenharmony_ci
5814e5c31af7Sopenharmony_ci
5815e5c31af7Sopenharmony_cigroup single_statement_multiple_declarations "Testing multiple arrays of arrays declarations in a single statement"
5816e5c31af7Sopenharmony_ci
5817e5c31af7Sopenharmony_ci	group explicit_constructor "Testing single statement with multiple arrays of arrays with explicit constructor"
5818e5c31af7Sopenharmony_ci
5819e5c31af7Sopenharmony_ci		case float_2_dimensions
5820e5c31af7Sopenharmony_ci			version 450
5821e5c31af7Sopenharmony_ci			desc "Testing multiple two dimensional array declarations in a single statement"
5822e5c31af7Sopenharmony_ci			values
5823e5c31af7Sopenharmony_ci			{
5824e5c31af7Sopenharmony_ci				input vec4 in0 = [ vec4(0.5, 1.0, 2.0, 0.2) | vec4(7.4, -1.0, 2.0, -1.3) | vec4(3.0, 1.6, -2.0, 0.5) ];
5825e5c31af7Sopenharmony_ci				output vec4 out0 = [ vec4(2.5, 0.7, 2.0, 2.5) | vec4(9.4, 6.1, -2.0, 9.4) | vec4(1.0, 3.5, 3.2, 1.0) ];
5826e5c31af7Sopenharmony_ci			}
5827e5c31af7Sopenharmony_ci
5828e5c31af7Sopenharmony_ci			both ""
5829e5c31af7Sopenharmony_ci				#version 450
5830e5c31af7Sopenharmony_ci				precision mediump float;
5831e5c31af7Sopenharmony_ci				${DECLARATIONS}
5832e5c31af7Sopenharmony_ci
5833e5c31af7Sopenharmony_ci				void main()
5834e5c31af7Sopenharmony_ci				{
5835e5c31af7Sopenharmony_ci					${SETUP}
5836e5c31af7Sopenharmony_ci					float[][] x = float[3][3] (	float[3] (in0.z, in0.x, in0.y),
5837e5c31af7Sopenharmony_ci												float[3] (in0.z, in0.x, in0.y),
5838e5c31af7Sopenharmony_ci												float[3] (in0.z, in0.x, in0.y) ),
5839e5c31af7Sopenharmony_ci
5840e5c31af7Sopenharmony_ci							  y = float[3][4] ( float[4] (in0.z, in0.x, in0.w, in0.y),
5841e5c31af7Sopenharmony_ci												float[4] (in0.z, in0.x, in0.w, in0.y),
5842e5c31af7Sopenharmony_ci												float[4] (in0.z, in0.x, in0.w, in0.y) );
5843e5c31af7Sopenharmony_ci
5844e5c31af7Sopenharmony_ci					out0 = vec4(x[0][0]+y[1][1], x[1][1]+y[2][2], x[2][2]+y[2][3], x[0][1]+y[0][0]);
5845e5c31af7Sopenharmony_ci					${OUTPUT}
5846e5c31af7Sopenharmony_ci				}
5847e5c31af7Sopenharmony_ci			""
5848e5c31af7Sopenharmony_ci		end
5849e5c31af7Sopenharmony_ci
5850e5c31af7Sopenharmony_ci		case int_3_dimensions
5851e5c31af7Sopenharmony_ci			version 450
5852e5c31af7Sopenharmony_ci			desc "Testing multiple three dimensional array declarations in a single statement"
5853e5c31af7Sopenharmony_ci			values
5854e5c31af7Sopenharmony_ci			{
5855e5c31af7Sopenharmony_ci				input ivec4 in0 = [ ivec4(0, 1, 2, 0) | ivec4(7, -1, 2, -1) | ivec4(3, 1, -2, 0) ];
5856e5c31af7Sopenharmony_ci				output ivec4 out0 = [ ivec4(2, 1, 2, 1) | ivec4(9, 6, 1, -2) | ivec4(1, 4, -2, 1) ];
5857e5c31af7Sopenharmony_ci			}
5858e5c31af7Sopenharmony_ci
5859e5c31af7Sopenharmony_ci			both ""
5860e5c31af7Sopenharmony_ci				#version 450
5861e5c31af7Sopenharmony_ci				precision mediump int;
5862e5c31af7Sopenharmony_ci				precision mediump float;
5863e5c31af7Sopenharmony_ci				${DECLARATIONS}
5864e5c31af7Sopenharmony_ci
5865e5c31af7Sopenharmony_ci				void main()
5866e5c31af7Sopenharmony_ci				{
5867e5c31af7Sopenharmony_ci					${SETUP}
5868e5c31af7Sopenharmony_ci					int[][][] x = int[4][4][4] (int[4][4] (	(int[4] (in0.z, in0.x, in0.w, in0.y)),
5869e5c31af7Sopenharmony_ci															(int[4] (in0.z, in0.x, in0.w, in0.y)),
5870e5c31af7Sopenharmony_ci															(int[4] (in0.z, in0.x, in0.w, in0.y)),
5871e5c31af7Sopenharmony_ci															(int[4] (in0.z, in0.x, in0.w, in0.y))),
5872e5c31af7Sopenharmony_ci
5873e5c31af7Sopenharmony_ci												int[4][4] (	(int[4] (in0.z, in0.x, in0.w, in0.y)),
5874e5c31af7Sopenharmony_ci															(int[4] (in0.z, in0.x, in0.w, in0.y)),
5875e5c31af7Sopenharmony_ci															(int[4] (in0.z, in0.x, in0.w, in0.y)),
5876e5c31af7Sopenharmony_ci															(int[4] (in0.z, in0.x, in0.w, in0.y))),
5877e5c31af7Sopenharmony_ci
5878e5c31af7Sopenharmony_ci												int[4][4] (	(int[4] (in0.z, in0.x, in0.w, in0.y)),
5879e5c31af7Sopenharmony_ci															(int[4] (in0.z, in0.x, in0.w, in0.y)),
5880e5c31af7Sopenharmony_ci															(int[4] (in0.z, in0.x, in0.w, in0.y)),
5881e5c31af7Sopenharmony_ci															(int[4] (in0.z, in0.x, in0.w, in0.y))),
5882e5c31af7Sopenharmony_ci
5883e5c31af7Sopenharmony_ci												int[4][4] (	(int[4] (in0.z, in0.x, in0.w, in0.y)),
5884e5c31af7Sopenharmony_ci															(int[4] (in0.z, in0.x, in0.w, in0.y)),
5885e5c31af7Sopenharmony_ci															(int[4] (in0.z, in0.x, in0.w, in0.y)),
5886e5c31af7Sopenharmony_ci															(int[4] (in0.z, in0.x, in0.w, in0.y))) ),
5887e5c31af7Sopenharmony_ci
5888e5c31af7Sopenharmony_ci							  y = int[2][2][4] (int[2][4] (	(int[4] (in0.x, in0.y, in0.z, in0.w)),
5889e5c31af7Sopenharmony_ci															(int[4] (in0.x, in0.y, in0.z, in0.w))),
5890e5c31af7Sopenharmony_ci
5891e5c31af7Sopenharmony_ci												int[2][4] (	(int[4] (in0.x, in0.y, in0.z, in0.w)),
5892e5c31af7Sopenharmony_ci															(int[4] (in0.x, in0.y, in0.z, in0.w))) );
5893e5c31af7Sopenharmony_ci
5894e5c31af7Sopenharmony_ci					out0 = ivec4(x[0][0][0] + y[0][0][0], x[1][1][1] + y[1][1][1], x[2][2][2] + y[0][0][2], x[3][3][3] + y[0][0][3]);
5895e5c31af7Sopenharmony_ci					${OUTPUT}
5896e5c31af7Sopenharmony_ci				}
5897e5c31af7Sopenharmony_ci			""
5898e5c31af7Sopenharmony_ci		end
5899e5c31af7Sopenharmony_ci
5900e5c31af7Sopenharmony_ci	end # explicit_constructor
5901e5c31af7Sopenharmony_ci
5902e5c31af7Sopenharmony_ci	group implicit_constructor "Testing single statement with multiple arrays of arrays with implicit constructor"
5903e5c31af7Sopenharmony_ci
5904e5c31af7Sopenharmony_ci		case float_2_dimensions
5905e5c31af7Sopenharmony_ci			version 450
5906e5c31af7Sopenharmony_ci			desc "Testing multiple two dimensional array declarations in a single statement"
5907e5c31af7Sopenharmony_ci			values
5908e5c31af7Sopenharmony_ci			{
5909e5c31af7Sopenharmony_ci				input vec4 in0 = [ vec4(0.5, 1.0, 2.0, 0.2) | vec4(7.4, -1.0, 2.0, -1.3) | vec4(3.0, 1.6, -2.0, 0.5) ];
5910e5c31af7Sopenharmony_ci				output vec4 out0 = [ vec4(2.5, 0.7, 2.0, 2.5) | vec4(9.4, 6.1, -2.0, 9.4) | vec4(1.0, 3.5, 3.2, 1.0) ];
5911e5c31af7Sopenharmony_ci			}
5912e5c31af7Sopenharmony_ci
5913e5c31af7Sopenharmony_ci			both ""
5914e5c31af7Sopenharmony_ci				#version 450
5915e5c31af7Sopenharmony_ci				precision mediump float;
5916e5c31af7Sopenharmony_ci				${DECLARATIONS}
5917e5c31af7Sopenharmony_ci
5918e5c31af7Sopenharmony_ci				void main()
5919e5c31af7Sopenharmony_ci				{
5920e5c31af7Sopenharmony_ci					${SETUP}
5921e5c31af7Sopenharmony_ci					float[][] x = float[][] (float[] (in0.z, in0.x, in0.y),
5922e5c31af7Sopenharmony_ci											float[] (in0.z, in0.x, in0.y),
5923e5c31af7Sopenharmony_ci											float[] (in0.z, in0.x, in0.y) ),
5924e5c31af7Sopenharmony_ci
5925e5c31af7Sopenharmony_ci							  y = float[][] (float[] (in0.z, in0.x, in0.w, in0.y),
5926e5c31af7Sopenharmony_ci											float[] (in0.z, in0.x, in0.w, in0.y),
5927e5c31af7Sopenharmony_ci											float[] (in0.z, in0.x, in0.w, in0.y) );
5928e5c31af7Sopenharmony_ci
5929e5c31af7Sopenharmony_ci					out0 = vec4(x[0][0]+y[1][1], x[1][1]+y[2][2], x[2][2]+y[2][3], x[0][1]+y[0][0]);
5930e5c31af7Sopenharmony_ci					${OUTPUT}
5931e5c31af7Sopenharmony_ci				}
5932e5c31af7Sopenharmony_ci			""
5933e5c31af7Sopenharmony_ci		end
5934e5c31af7Sopenharmony_ci
5935e5c31af7Sopenharmony_ci		case int_3_dimensions
5936e5c31af7Sopenharmony_ci			version 450
5937e5c31af7Sopenharmony_ci			desc "Testing multiple three dimensional array declarations in a single statement"
5938e5c31af7Sopenharmony_ci			values
5939e5c31af7Sopenharmony_ci			{
5940e5c31af7Sopenharmony_ci				input ivec4 in0 = [ ivec4(0, 1, 2, 0) | ivec4(7, -1, 2, -1) | ivec4(3, 1, -2, 0) ];
5941e5c31af7Sopenharmony_ci				output ivec4 out0 = [ ivec4(2, 1, 2, 1) | ivec4(9, 6, 1, -2) | ivec4(1, 4, -2, 1) ];
5942e5c31af7Sopenharmony_ci			}
5943e5c31af7Sopenharmony_ci
5944e5c31af7Sopenharmony_ci			both ""
5945e5c31af7Sopenharmony_ci				#version 450
5946e5c31af7Sopenharmony_ci				precision mediump int;
5947e5c31af7Sopenharmony_ci				precision mediump float;
5948e5c31af7Sopenharmony_ci				${DECLARATIONS}
5949e5c31af7Sopenharmony_ci
5950e5c31af7Sopenharmony_ci				void main()
5951e5c31af7Sopenharmony_ci				{
5952e5c31af7Sopenharmony_ci					${SETUP}
5953e5c31af7Sopenharmony_ci					int[][][] x = int[][][] (int[][] (	(int[] (in0.z, in0.x, in0.w, in0.y)),
5954e5c31af7Sopenharmony_ci														(int[] (in0.z, in0.x, in0.w, in0.y)),
5955e5c31af7Sopenharmony_ci														(int[] (in0.z, in0.x, in0.w, in0.y)),
5956e5c31af7Sopenharmony_ci														(int[] (in0.z, in0.x, in0.w, in0.y))),
5957e5c31af7Sopenharmony_ci
5958e5c31af7Sopenharmony_ci											int[][] (	(int[] (in0.z, in0.x, in0.w, in0.y)),
5959e5c31af7Sopenharmony_ci														(int[] (in0.z, in0.x, in0.w, in0.y)),
5960e5c31af7Sopenharmony_ci														(int[] (in0.z, in0.x, in0.w, in0.y)),
5961e5c31af7Sopenharmony_ci														(int[] (in0.z, in0.x, in0.w, in0.y))),
5962e5c31af7Sopenharmony_ci
5963e5c31af7Sopenharmony_ci											int[][] (	(int[] (in0.z, in0.x, in0.w, in0.y)),
5964e5c31af7Sopenharmony_ci														(int[] (in0.z, in0.x, in0.w, in0.y)),
5965e5c31af7Sopenharmony_ci														(int[] (in0.z, in0.x, in0.w, in0.y)),
5966e5c31af7Sopenharmony_ci														(int[] (in0.z, in0.x, in0.w, in0.y))),
5967e5c31af7Sopenharmony_ci
5968e5c31af7Sopenharmony_ci											int[][] (	(int[] (in0.z, in0.x, in0.w, in0.y)),
5969e5c31af7Sopenharmony_ci														(int[] (in0.z, in0.x, in0.w, in0.y)),
5970e5c31af7Sopenharmony_ci														(int[] (in0.z, in0.x, in0.w, in0.y)),
5971e5c31af7Sopenharmony_ci														(int[] (in0.z, in0.x, in0.w, in0.y))) ),
5972e5c31af7Sopenharmony_ci
5973e5c31af7Sopenharmony_ci							  y = int[][][] (int[][] (	(int[] (in0.x, in0.y, in0.z, in0.w)),
5974e5c31af7Sopenharmony_ci														(int[] (in0.x, in0.y, in0.z, in0.w))),
5975e5c31af7Sopenharmony_ci
5976e5c31af7Sopenharmony_ci												int[][] ((int[] (in0.x, in0.y, in0.z, in0.w)),
5977e5c31af7Sopenharmony_ci														(int[] (in0.x, in0.y, in0.z, in0.w))) );
5978e5c31af7Sopenharmony_ci
5979e5c31af7Sopenharmony_ci					out0 = ivec4(x[0][0][0] + y[0][0][0], x[1][1][1] + y[1][1][1], x[2][2][2] + y[0][0][2], x[3][3][3] + y[0][0][3]);
5980e5c31af7Sopenharmony_ci					${OUTPUT}
5981e5c31af7Sopenharmony_ci				}
5982e5c31af7Sopenharmony_ci			""
5983e5c31af7Sopenharmony_ci		end
5984e5c31af7Sopenharmony_ci
5985e5c31af7Sopenharmony_ci	end # implicit_constructor
5986e5c31af7Sopenharmony_ci
5987e5c31af7Sopenharmony_ciend # single_statement_multiple_declarations
5988e5c31af7Sopenharmony_ci
5989e5c31af7Sopenharmony_ci
5990e5c31af7Sopenharmony_cigroup invalid "Invalid functions"
5991e5c31af7Sopenharmony_ci
5992e5c31af7Sopenharmony_ci	case dynamic_expression_array_size
5993e5c31af7Sopenharmony_ci		version 450
5994e5c31af7Sopenharmony_ci		desc "Testing that compiler doesn't allow dynamic expressions in arrays of arrays sizes"
5995e5c31af7Sopenharmony_ci		expect compile_fail
5996e5c31af7Sopenharmony_ci
5997e5c31af7Sopenharmony_ci		both ""
5998e5c31af7Sopenharmony_ci			#version 450
5999e5c31af7Sopenharmony_ci			precision mediump float;
6000e5c31af7Sopenharmony_ci			${DECLARATIONS}
6001e5c31af7Sopenharmony_ci
6002e5c31af7Sopenharmony_ci			void main ()
6003e5c31af7Sopenharmony_ci			{
6004e5c31af7Sopenharmony_ci				int a = 5;
6005e5c31af7Sopenharmony_ci				float[a][a] array;
6006e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(1.0);
6007e5c31af7Sopenharmony_ci			}
6008e5c31af7Sopenharmony_ci		""
6009e5c31af7Sopenharmony_ci	end # dynamic_expression_array_size
6010e5c31af7Sopenharmony_ci
6011e5c31af7Sopenharmony_ci	case empty_declaration_with_var_name
6012e5c31af7Sopenharmony_ci		version 450
6013e5c31af7Sopenharmony_ci		desc "Testing that compiler doesn't allow only an empty declaration"
6014e5c31af7Sopenharmony_ci		expect compile_or_link_fail
6015e5c31af7Sopenharmony_ci
6016e5c31af7Sopenharmony_ci		both ""
6017e5c31af7Sopenharmony_ci			#version 450
6018e5c31af7Sopenharmony_ci			precision mediump float;
6019e5c31af7Sopenharmony_ci			${DECLARATIONS}
6020e5c31af7Sopenharmony_ci
6021e5c31af7Sopenharmony_ci			void main ()
6022e5c31af7Sopenharmony_ci			{
6023e5c31af7Sopenharmony_ci				int[][] a;
6024e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(1.0);
6025e5c31af7Sopenharmony_ci			}
6026e5c31af7Sopenharmony_ci		""
6027e5c31af7Sopenharmony_ci	end # empty_declaration_with_var_name
6028e5c31af7Sopenharmony_ci
6029e5c31af7Sopenharmony_ciend # negative
6030