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