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