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