1e5c31af7Sopenharmony_ci#X1. Type: float[5] // An array type with 5 elements 2e5c31af7Sopenharmony_ci#X2. Return value: float[5] func() { ... } // Function with a 5-element array return value 3e5c31af7Sopenharmony_ci#X3. Array constructor: float[3] (1.0, 2.0, 5.5) // 3-element array with given elements 4e5c31af7Sopenharmony_ci# // Fails with array of matrices! 5e5c31af7Sopenharmony_ci#X4. As unnamed parameter: void func(float[5]); 6e5c31af7Sopenharmony_ci#X5. Variable declaration: float[5] a; // Equivalent to float a[5]; (?) 7e5c31af7Sopenharmony_ci#X6. Empty brackets: float x[] = float[] (1.0, 2.0, 3.0); // Size of x is 3 8e5c31af7Sopenharmony_ci# float y[] = float[3] (1.0, 2.0, 3.0); // Size of y is 3 (equivalent) 9e5c31af7Sopenharmony_ci# float z[] = y; // Size of z is 3 10e5c31af7Sopenharmony_ci#X7. Testing that 2-dimensional arrays don't work: float a[5][3]; // Illegal 11e5c31af7Sopenharmony_ci# float[5] a[3]; // Illegal 12e5c31af7Sopenharmony_ci#X8. Testing that array declaration with dynamic variables as array size won't work. 13e5c31af7Sopenharmony_ci#X9. Testing length() operator: z.length(); // Returns 3 for z defined before 14e5c31af7Sopenharmony_ci#X10. Test C/C++ style {}-constructor 15e5c31af7Sopenharmony_ci#X11. Test struct arrays 16e5c31af7Sopenharmony_ci#X12. Test array element access at initialization with const/dynamic values 17e5c31af7Sopenharmony_ci 18e5c31af7Sopenharmony_cigroup constructor "Array constructors" 19e5c31af7Sopenharmony_ci 20e5c31af7Sopenharmony_ci case float3 21e5c31af7Sopenharmony_ci version 310 es 22e5c31af7Sopenharmony_ci values 23e5c31af7Sopenharmony_ci { 24e5c31af7Sopenharmony_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) ]; 25e5c31af7Sopenharmony_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) ]; 26e5c31af7Sopenharmony_ci } 27e5c31af7Sopenharmony_ci 28e5c31af7Sopenharmony_ci both "" 29e5c31af7Sopenharmony_ci #version 310 es 30e5c31af7Sopenharmony_ci precision highp float; 31e5c31af7Sopenharmony_ci ${DECLARATIONS} 32e5c31af7Sopenharmony_ci 33e5c31af7Sopenharmony_ci void main() 34e5c31af7Sopenharmony_ci { 35e5c31af7Sopenharmony_ci ${SETUP} 36e5c31af7Sopenharmony_ci float[3] x; 37e5c31af7Sopenharmony_ci x = float[3] (in0.z, in0.x, in0.y); 38e5c31af7Sopenharmony_ci out0 = vec3(x[0], x[1], x[2]); 39e5c31af7Sopenharmony_ci ${OUTPUT} 40e5c31af7Sopenharmony_ci } 41e5c31af7Sopenharmony_ci "" 42e5c31af7Sopenharmony_ci end 43e5c31af7Sopenharmony_ci 44e5c31af7Sopenharmony_ci case float4 45e5c31af7Sopenharmony_ci version 310 es 46e5c31af7Sopenharmony_ci values 47e5c31af7Sopenharmony_ci { 48e5c31af7Sopenharmony_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) ]; 49e5c31af7Sopenharmony_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) ]; 50e5c31af7Sopenharmony_ci } 51e5c31af7Sopenharmony_ci 52e5c31af7Sopenharmony_ci both "" 53e5c31af7Sopenharmony_ci #version 310 es 54e5c31af7Sopenharmony_ci precision highp float; 55e5c31af7Sopenharmony_ci ${DECLARATIONS} 56e5c31af7Sopenharmony_ci 57e5c31af7Sopenharmony_ci void main() 58e5c31af7Sopenharmony_ci { 59e5c31af7Sopenharmony_ci ${SETUP} 60e5c31af7Sopenharmony_ci float[4] x; 61e5c31af7Sopenharmony_ci x = float[4] (in0.z, in0.x, in0.w, in0.y); 62e5c31af7Sopenharmony_ci out0 = vec4(x[0], x[1], x[2], x[3]); 63e5c31af7Sopenharmony_ci ${OUTPUT} 64e5c31af7Sopenharmony_ci } 65e5c31af7Sopenharmony_ci "" 66e5c31af7Sopenharmony_ci end 67e5c31af7Sopenharmony_ci 68e5c31af7Sopenharmony_ci case int3 69e5c31af7Sopenharmony_ci version 310 es 70e5c31af7Sopenharmony_ci values 71e5c31af7Sopenharmony_ci { 72e5c31af7Sopenharmony_ci input ivec3 in0 = [ ivec3(0, 1, 2) | ivec3(7, -1, 2) | ivec3(3, 1, -2) ]; 73e5c31af7Sopenharmony_ci output ivec3 out0 = [ ivec3(2, 0, 1) | ivec3(2, 7, -1) | ivec3(-2, 3, 1) ]; 74e5c31af7Sopenharmony_ci } 75e5c31af7Sopenharmony_ci 76e5c31af7Sopenharmony_ci both "" 77e5c31af7Sopenharmony_ci #version 310 es 78e5c31af7Sopenharmony_ci precision highp int; 79e5c31af7Sopenharmony_ci precision highp float; 80e5c31af7Sopenharmony_ci ${DECLARATIONS} 81e5c31af7Sopenharmony_ci 82e5c31af7Sopenharmony_ci void main() 83e5c31af7Sopenharmony_ci { 84e5c31af7Sopenharmony_ci ${SETUP} 85e5c31af7Sopenharmony_ci int[3] x; 86e5c31af7Sopenharmony_ci x = int[3] (in0.z, in0.x, in0.y); 87e5c31af7Sopenharmony_ci out0 = ivec3(x[0], x[1], x[2]); 88e5c31af7Sopenharmony_ci ${OUTPUT} 89e5c31af7Sopenharmony_ci } 90e5c31af7Sopenharmony_ci "" 91e5c31af7Sopenharmony_ci end 92e5c31af7Sopenharmony_ci 93e5c31af7Sopenharmony_ci case int4 94e5c31af7Sopenharmony_ci version 310 es 95e5c31af7Sopenharmony_ci values 96e5c31af7Sopenharmony_ci { 97e5c31af7Sopenharmony_ci input ivec4 in0 = [ ivec4(0, 1, 2, 0) | ivec4(7, -1, 2, -1) | ivec4(3, 1, -2, 0) ]; 98e5c31af7Sopenharmony_ci output ivec4 out0 = [ ivec4(2, 0, 0, 1) | ivec4(2, 7, -1, -1) | ivec4(-2, 3, 0, 1) ]; 99e5c31af7Sopenharmony_ci } 100e5c31af7Sopenharmony_ci 101e5c31af7Sopenharmony_ci both "" 102e5c31af7Sopenharmony_ci #version 310 es 103e5c31af7Sopenharmony_ci precision highp int; 104e5c31af7Sopenharmony_ci precision highp float; 105e5c31af7Sopenharmony_ci ${DECLARATIONS} 106e5c31af7Sopenharmony_ci 107e5c31af7Sopenharmony_ci void main() 108e5c31af7Sopenharmony_ci { 109e5c31af7Sopenharmony_ci ${SETUP} 110e5c31af7Sopenharmony_ci int[4] x; 111e5c31af7Sopenharmony_ci x = int[4] (in0.z, in0.x, in0.w, in0.y); 112e5c31af7Sopenharmony_ci out0 = ivec4(x[0], x[1], x[2], x[3]); 113e5c31af7Sopenharmony_ci ${OUTPUT} 114e5c31af7Sopenharmony_ci } 115e5c31af7Sopenharmony_ci "" 116e5c31af7Sopenharmony_ci end 117e5c31af7Sopenharmony_ci 118e5c31af7Sopenharmony_ci case bool3 119e5c31af7Sopenharmony_ci version 310 es 120e5c31af7Sopenharmony_ci values 121e5c31af7Sopenharmony_ci { 122e5c31af7Sopenharmony_ci input bvec3 in0 = [ bvec3(true, true, false) ]; 123e5c31af7Sopenharmony_ci output bvec3 out0 = [ bvec3(false, true, true) ]; 124e5c31af7Sopenharmony_ci } 125e5c31af7Sopenharmony_ci 126e5c31af7Sopenharmony_ci both "" 127e5c31af7Sopenharmony_ci #version 310 es 128e5c31af7Sopenharmony_ci precision highp int; 129e5c31af7Sopenharmony_ci precision highp float; 130e5c31af7Sopenharmony_ci ${DECLARATIONS} 131e5c31af7Sopenharmony_ci 132e5c31af7Sopenharmony_ci void main() 133e5c31af7Sopenharmony_ci { 134e5c31af7Sopenharmony_ci ${SETUP} 135e5c31af7Sopenharmony_ci bool[3] x; 136e5c31af7Sopenharmony_ci x = bool[3] (in0.z, in0.x, in0.y); 137e5c31af7Sopenharmony_ci out0 = bvec3(x[0], x[1], x[2]); 138e5c31af7Sopenharmony_ci ${OUTPUT} 139e5c31af7Sopenharmony_ci } 140e5c31af7Sopenharmony_ci "" 141e5c31af7Sopenharmony_ci end 142e5c31af7Sopenharmony_ci 143e5c31af7Sopenharmony_ci case bool4 144e5c31af7Sopenharmony_ci version 310 es 145e5c31af7Sopenharmony_ci values 146e5c31af7Sopenharmony_ci { 147e5c31af7Sopenharmony_ci input bvec4 in0 = [ bvec4(true, true, false, false) ]; 148e5c31af7Sopenharmony_ci output bvec4 out0 = [ bvec4(false, true, true, false) ]; 149e5c31af7Sopenharmony_ci } 150e5c31af7Sopenharmony_ci 151e5c31af7Sopenharmony_ci both "" 152e5c31af7Sopenharmony_ci #version 310 es 153e5c31af7Sopenharmony_ci precision highp int; 154e5c31af7Sopenharmony_ci precision highp float; 155e5c31af7Sopenharmony_ci ${DECLARATIONS} 156e5c31af7Sopenharmony_ci 157e5c31af7Sopenharmony_ci void main() 158e5c31af7Sopenharmony_ci { 159e5c31af7Sopenharmony_ci ${SETUP} 160e5c31af7Sopenharmony_ci bool[4] x; 161e5c31af7Sopenharmony_ci x = bool[4] (in0.z, in0.x, in0.y, in0.w); 162e5c31af7Sopenharmony_ci out0 = bvec4(x[0], x[1], x[2], x[3]); 163e5c31af7Sopenharmony_ci ${OUTPUT} 164e5c31af7Sopenharmony_ci } 165e5c31af7Sopenharmony_ci "" 166e5c31af7Sopenharmony_ci end 167e5c31af7Sopenharmony_ci 168e5c31af7Sopenharmony_ci case struct3 169e5c31af7Sopenharmony_ci version 310 es 170e5c31af7Sopenharmony_ci values 171e5c31af7Sopenharmony_ci { 172e5c31af7Sopenharmony_ci input vec3 in0 = [ vec3(0.5, 1.0, 2.0) ]; 173e5c31af7Sopenharmony_ci output vec3 out0 = [ vec3(2.0, -0.5, -1.0) ]; 174e5c31af7Sopenharmony_ci } 175e5c31af7Sopenharmony_ci 176e5c31af7Sopenharmony_ci both "" 177e5c31af7Sopenharmony_ci #version 310 es 178e5c31af7Sopenharmony_ci precision highp float; 179e5c31af7Sopenharmony_ci ${DECLARATIONS} 180e5c31af7Sopenharmony_ci 181e5c31af7Sopenharmony_ci 182e5c31af7Sopenharmony_ci 183e5c31af7Sopenharmony_ci void main() 184e5c31af7Sopenharmony_ci { 185e5c31af7Sopenharmony_ci ${SETUP} 186e5c31af7Sopenharmony_ci 187e5c31af7Sopenharmony_ci struct test 188e5c31af7Sopenharmony_ci { 189e5c31af7Sopenharmony_ci float f; 190e5c31af7Sopenharmony_ci vec3 v; 191e5c31af7Sopenharmony_ci }; 192e5c31af7Sopenharmony_ci 193e5c31af7Sopenharmony_ci test a = test(in0.z, vec3(in0.x, in0.y, in0.z)); 194e5c31af7Sopenharmony_ci test b = test(in0.y, vec3(-in0.z, -in0.x, -in0.y)); 195e5c31af7Sopenharmony_ci test c = test(in0.x, vec3(-in0.y, in0.z, -in0.x)); 196e5c31af7Sopenharmony_ci 197e5c31af7Sopenharmony_ci test[3] x = test[3] (a, b, c); 198e5c31af7Sopenharmony_ci 199e5c31af7Sopenharmony_ci out0 = vec3(x[0].f, x[1].v.y, x[2].v.x); 200e5c31af7Sopenharmony_ci ${OUTPUT} 201e5c31af7Sopenharmony_ci } 202e5c31af7Sopenharmony_ci "" 203e5c31af7Sopenharmony_ci end 204e5c31af7Sopenharmony_ci 205e5c31af7Sopenharmony_ci case struct4 206e5c31af7Sopenharmony_ci version 310 es 207e5c31af7Sopenharmony_ci values 208e5c31af7Sopenharmony_ci { 209e5c31af7Sopenharmony_ci input vec4 in0 = [ vec4(0.5, 1.0, 2.0, 1.5) ]; 210e5c31af7Sopenharmony_ci output vec4 out0 = [ vec4(2.0, -0.5, -1.0, -1.5) ]; 211e5c31af7Sopenharmony_ci } 212e5c31af7Sopenharmony_ci 213e5c31af7Sopenharmony_ci both "" 214e5c31af7Sopenharmony_ci #version 310 es 215e5c31af7Sopenharmony_ci precision highp float; 216e5c31af7Sopenharmony_ci ${DECLARATIONS} 217e5c31af7Sopenharmony_ci 218e5c31af7Sopenharmony_ci 219e5c31af7Sopenharmony_ci void main() 220e5c31af7Sopenharmony_ci { 221e5c31af7Sopenharmony_ci ${SETUP} 222e5c31af7Sopenharmony_ci 223e5c31af7Sopenharmony_ci 224e5c31af7Sopenharmony_ci struct test 225e5c31af7Sopenharmony_ci { 226e5c31af7Sopenharmony_ci float f; 227e5c31af7Sopenharmony_ci vec3 v; 228e5c31af7Sopenharmony_ci }; 229e5c31af7Sopenharmony_ci 230e5c31af7Sopenharmony_ci test a = test(in0.z, vec3(in0.x, in0.y, in0.z)); 231e5c31af7Sopenharmony_ci test b = test(in0.y, vec3(-in0.z, -in0.x, -in0.y)); 232e5c31af7Sopenharmony_ci test c = test(in0.x, vec3(-in0.y, in0.z, -in0.x)); 233e5c31af7Sopenharmony_ci test d = test(-in0.w, vec3(-in0.w, -in0.x, -in0.z)); 234e5c31af7Sopenharmony_ci 235e5c31af7Sopenharmony_ci test[4] x = test[4] (a, b, c, d); 236e5c31af7Sopenharmony_ci 237e5c31af7Sopenharmony_ci out0 = vec4(x[0].f, x[1].v.y, x[2].v.x, x[3].v.x); 238e5c31af7Sopenharmony_ci ${OUTPUT} 239e5c31af7Sopenharmony_ci } 240e5c31af7Sopenharmony_ci "" 241e5c31af7Sopenharmony_ci end 242e5c31af7Sopenharmony_ci 243e5c31af7Sopenharmony_ci 244e5c31af7Sopenharmony_ci case float_vec3 245e5c31af7Sopenharmony_ci version 310 es 246e5c31af7Sopenharmony_ci values 247e5c31af7Sopenharmony_ci { 248e5c31af7Sopenharmony_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) ]; 249e5c31af7Sopenharmony_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) ]; 250e5c31af7Sopenharmony_ci } 251e5c31af7Sopenharmony_ci 252e5c31af7Sopenharmony_ci both "" 253e5c31af7Sopenharmony_ci #version 310 es 254e5c31af7Sopenharmony_ci precision highp float; 255e5c31af7Sopenharmony_ci ${DECLARATIONS} 256e5c31af7Sopenharmony_ci 257e5c31af7Sopenharmony_ci void main() 258e5c31af7Sopenharmony_ci { 259e5c31af7Sopenharmony_ci ${SETUP} 260e5c31af7Sopenharmony_ci 261e5c31af7Sopenharmony_ci vec3[3] x; 262e5c31af7Sopenharmony_ci x = vec3[3] ( vec3(in0.x, in0.y, in0.z) , 263e5c31af7Sopenharmony_ci vec3(-in0.y, -in0.z, -in0.x), 264e5c31af7Sopenharmony_ci vec3(in0.z, in0.x, in0.y) ); 265e5c31af7Sopenharmony_ci out0 = vec3(x[0].x, x[1].y, x[2].z); 266e5c31af7Sopenharmony_ci ${OUTPUT} 267e5c31af7Sopenharmony_ci } 268e5c31af7Sopenharmony_ci "" 269e5c31af7Sopenharmony_ci end 270e5c31af7Sopenharmony_ci 271e5c31af7Sopenharmony_ci case int_vec3 272e5c31af7Sopenharmony_ci version 310 es 273e5c31af7Sopenharmony_ci values 274e5c31af7Sopenharmony_ci { 275e5c31af7Sopenharmony_ci input ivec3 in0 = [ ivec3(5, 1, 2) | ivec3(7, -1, 2) | ivec3(3, 1, -2) ]; 276e5c31af7Sopenharmony_ci output ivec3 out0 = [ ivec3(5, -2, 1) | ivec3(7, -2, -1) | ivec3(3, 2, 1) ]; 277e5c31af7Sopenharmony_ci } 278e5c31af7Sopenharmony_ci 279e5c31af7Sopenharmony_ci both "" 280e5c31af7Sopenharmony_ci #version 310 es 281e5c31af7Sopenharmony_ci precision highp int; 282e5c31af7Sopenharmony_ci precision highp float; 283e5c31af7Sopenharmony_ci ${DECLARATIONS} 284e5c31af7Sopenharmony_ci 285e5c31af7Sopenharmony_ci void main() 286e5c31af7Sopenharmony_ci { 287e5c31af7Sopenharmony_ci ${SETUP} 288e5c31af7Sopenharmony_ci 289e5c31af7Sopenharmony_ci ivec3[3] x; 290e5c31af7Sopenharmony_ci x = ivec3[3] ( ivec3(in0.x, in0.y, in0.z) , 291e5c31af7Sopenharmony_ci ivec3(-in0.y, -in0.z, -in0.x), 292e5c31af7Sopenharmony_ci ivec3(in0.z, in0.x, in0.y) ); 293e5c31af7Sopenharmony_ci out0 = ivec3(x[0].x, x[1].y, x[2].z); 294e5c31af7Sopenharmony_ci ${OUTPUT} 295e5c31af7Sopenharmony_ci } 296e5c31af7Sopenharmony_ci "" 297e5c31af7Sopenharmony_ci end 298e5c31af7Sopenharmony_ci 299e5c31af7Sopenharmony_ci case bool_vec3 300e5c31af7Sopenharmony_ci version 310 es 301e5c31af7Sopenharmony_ci values 302e5c31af7Sopenharmony_ci { 303e5c31af7Sopenharmony_ci input bvec3 in0 = [ bvec3(true, false, true) ]; 304e5c31af7Sopenharmony_ci output bvec3 out0 = [ bvec3(true, true, false) ]; 305e5c31af7Sopenharmony_ci } 306e5c31af7Sopenharmony_ci 307e5c31af7Sopenharmony_ci both "" 308e5c31af7Sopenharmony_ci #version 310 es 309e5c31af7Sopenharmony_ci precision highp int; 310e5c31af7Sopenharmony_ci precision highp float; 311e5c31af7Sopenharmony_ci ${DECLARATIONS} 312e5c31af7Sopenharmony_ci 313e5c31af7Sopenharmony_ci void main() 314e5c31af7Sopenharmony_ci { 315e5c31af7Sopenharmony_ci ${SETUP} 316e5c31af7Sopenharmony_ci 317e5c31af7Sopenharmony_ci bvec3[3] x; 318e5c31af7Sopenharmony_ci x = bvec3[3] ( bvec3(in0.x, in0.y, in0.z) , 319e5c31af7Sopenharmony_ci bvec3(in0.y, in0.z, in0.x), 320e5c31af7Sopenharmony_ci bvec3(in0.z, in0.x, in0.y) ); 321e5c31af7Sopenharmony_ci out0 = bvec3(x[0].x, x[1].y, x[2].z); 322e5c31af7Sopenharmony_ci ${OUTPUT} 323e5c31af7Sopenharmony_ci } 324e5c31af7Sopenharmony_ci "" 325e5c31af7Sopenharmony_ci end 326e5c31af7Sopenharmony_ci 327e5c31af7Sopenharmony_ci case float_mat3 328e5c31af7Sopenharmony_ci version 310 es 329e5c31af7Sopenharmony_ci values 330e5c31af7Sopenharmony_ci { 331e5c31af7Sopenharmony_ci input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(-1.5, 0.0, -2.3) ]; 332e5c31af7Sopenharmony_ci output vec3 out0 = [ vec3(0.5, -1.0, 1.0) | vec3(-1.5, 0.0, 0.0) ]; 333e5c31af7Sopenharmony_ci } 334e5c31af7Sopenharmony_ci 335e5c31af7Sopenharmony_ci both "" 336e5c31af7Sopenharmony_ci #version 310 es 337e5c31af7Sopenharmony_ci precision highp float; 338e5c31af7Sopenharmony_ci ${DECLARATIONS} 339e5c31af7Sopenharmony_ci 340e5c31af7Sopenharmony_ci void main() 341e5c31af7Sopenharmony_ci { 342e5c31af7Sopenharmony_ci ${SETUP} 343e5c31af7Sopenharmony_ci mat3[3] a = mat3[3] ( mat3( in0.x, in0.y, in0.z, 344e5c31af7Sopenharmony_ci in0.x, in0.y, in0.z, 345e5c31af7Sopenharmony_ci in0.x, in0.y, in0.z) , 346e5c31af7Sopenharmony_ci mat3( in0.z, in0.x, -in0.y, 347e5c31af7Sopenharmony_ci in0.z, in0.x, -in0.y, 348e5c31af7Sopenharmony_ci in0.z, in0.x, -in0.y) , 349e5c31af7Sopenharmony_ci mat3( -in0.z, -in0.z, in0.z, 350e5c31af7Sopenharmony_ci -in0.y, -in0.y, in0.y, 351e5c31af7Sopenharmony_ci -in0.x, -in0.x, in0.x) ); 352e5c31af7Sopenharmony_ci 353e5c31af7Sopenharmony_ci mat3 a0 = a[0]; 354e5c31af7Sopenharmony_ci mat3 a1 = a[1]; 355e5c31af7Sopenharmony_ci mat3 a2 = a[2]; 356e5c31af7Sopenharmony_ci 357e5c31af7Sopenharmony_ci float ret0 = a0[2][0]; 358e5c31af7Sopenharmony_ci float ret1 = a1[0][2]; 359e5c31af7Sopenharmony_ci float ret2 = a2[1][2]; 360e5c31af7Sopenharmony_ci 361e5c31af7Sopenharmony_ci out0 = vec3(ret0, ret1, ret2); 362e5c31af7Sopenharmony_ci ${OUTPUT} 363e5c31af7Sopenharmony_ci } 364e5c31af7Sopenharmony_ci "" 365e5c31af7Sopenharmony_ci end 366e5c31af7Sopenharmony_ci 367e5c31af7Sopenharmony_ci case int_mat3 368e5c31af7Sopenharmony_ci version 310 es 369e5c31af7Sopenharmony_ci values 370e5c31af7Sopenharmony_ci { 371e5c31af7Sopenharmony_ci input ivec3 in0 = [ ivec3(0, 1, 2) | ivec3(-1, 0, -2) ]; 372e5c31af7Sopenharmony_ci output ivec3 out0 = [ ivec3(0, -1, 1) | ivec3(-1, 0, 0) ]; 373e5c31af7Sopenharmony_ci } 374e5c31af7Sopenharmony_ci 375e5c31af7Sopenharmony_ci both "" 376e5c31af7Sopenharmony_ci #version 310 es 377e5c31af7Sopenharmony_ci precision highp int; 378e5c31af7Sopenharmony_ci precision highp float; 379e5c31af7Sopenharmony_ci ${DECLARATIONS} 380e5c31af7Sopenharmony_ci 381e5c31af7Sopenharmony_ci void main() 382e5c31af7Sopenharmony_ci { 383e5c31af7Sopenharmony_ci ${SETUP} 384e5c31af7Sopenharmony_ci mat3[3] a = mat3[3] ( mat3( in0.x, in0.y, in0.z, 385e5c31af7Sopenharmony_ci in0.x, in0.y, in0.z, 386e5c31af7Sopenharmony_ci in0.x, in0.y, in0.z) , 387e5c31af7Sopenharmony_ci mat3( in0.z, in0.x, -in0.y, 388e5c31af7Sopenharmony_ci in0.z, in0.x, -in0.y, 389e5c31af7Sopenharmony_ci in0.z, in0.x, -in0.y) , 390e5c31af7Sopenharmony_ci mat3( -in0.z, -in0.z, in0.z, 391e5c31af7Sopenharmony_ci -in0.y, -in0.y, in0.y, 392e5c31af7Sopenharmony_ci -in0.x, -in0.x, in0.x) ); 393e5c31af7Sopenharmony_ci 394e5c31af7Sopenharmony_ci mat3 a0 = a[0]; 395e5c31af7Sopenharmony_ci mat3 a1 = a[1]; 396e5c31af7Sopenharmony_ci mat3 a2 = a[2]; 397e5c31af7Sopenharmony_ci 398e5c31af7Sopenharmony_ci float ret0 = a0[2][0]; 399e5c31af7Sopenharmony_ci float ret1 = a1[0][2]; 400e5c31af7Sopenharmony_ci float ret2 = a2[1][2]; 401e5c31af7Sopenharmony_ci 402e5c31af7Sopenharmony_ci out0 = ivec3(ret0, ret1, ret2); 403e5c31af7Sopenharmony_ci ${OUTPUT} 404e5c31af7Sopenharmony_ci } 405e5c31af7Sopenharmony_ci "" 406e5c31af7Sopenharmony_ci end 407e5c31af7Sopenharmony_ci 408e5c31af7Sopenharmony_ci case bool_mat3 409e5c31af7Sopenharmony_ci version 310 es 410e5c31af7Sopenharmony_ci values 411e5c31af7Sopenharmony_ci { 412e5c31af7Sopenharmony_ci input bvec3 in0 = [ bvec3(true, false, true) ]; 413e5c31af7Sopenharmony_ci output bvec3 out0 = [ bvec3(true, false, false) ]; 414e5c31af7Sopenharmony_ci } 415e5c31af7Sopenharmony_ci 416e5c31af7Sopenharmony_ci both "" 417e5c31af7Sopenharmony_ci #version 310 es 418e5c31af7Sopenharmony_ci precision highp int; 419e5c31af7Sopenharmony_ci precision highp float; 420e5c31af7Sopenharmony_ci ${DECLARATIONS} 421e5c31af7Sopenharmony_ci 422e5c31af7Sopenharmony_ci void main() 423e5c31af7Sopenharmony_ci { 424e5c31af7Sopenharmony_ci ${SETUP} 425e5c31af7Sopenharmony_ci mat3[3] a = mat3[3] ( mat3( in0.x, in0.y, in0.z, 426e5c31af7Sopenharmony_ci in0.x, in0.y, in0.z, 427e5c31af7Sopenharmony_ci in0.x, in0.y, in0.z) , 428e5c31af7Sopenharmony_ci mat3( in0.z, in0.x, in0.y, 429e5c31af7Sopenharmony_ci in0.z, in0.x, in0.y, 430e5c31af7Sopenharmony_ci in0.z, in0.x, in0.y) , 431e5c31af7Sopenharmony_ci mat3( in0.z, in0.z, in0.z, 432e5c31af7Sopenharmony_ci in0.y, in0.y, in0.y, 433e5c31af7Sopenharmony_ci in0.x, in0.x, in0.x) ); 434e5c31af7Sopenharmony_ci 435e5c31af7Sopenharmony_ci mat3 a0 = a[0]; 436e5c31af7Sopenharmony_ci mat3 a1 = a[1]; 437e5c31af7Sopenharmony_ci mat3 a2 = a[2]; 438e5c31af7Sopenharmony_ci 439e5c31af7Sopenharmony_ci float ret0 = a0[2][0]; 440e5c31af7Sopenharmony_ci float ret1 = a1[0][2]; 441e5c31af7Sopenharmony_ci float ret2 = a2[1][2]; 442e5c31af7Sopenharmony_ci 443e5c31af7Sopenharmony_ci out0 = bvec3(ret0, ret1, ret2); 444e5c31af7Sopenharmony_ci ${OUTPUT} 445e5c31af7Sopenharmony_ci } 446e5c31af7Sopenharmony_ci "" 447e5c31af7Sopenharmony_ci end 448e5c31af7Sopenharmony_ci 449e5c31af7Sopenharmony_ciend # type 450e5c31af7Sopenharmony_ci 451e5c31af7Sopenharmony_cigroup return "Arrays as return value" 452e5c31af7Sopenharmony_ci 453e5c31af7Sopenharmony_ci case float 454e5c31af7Sopenharmony_ci version 310 es 455e5c31af7Sopenharmony_ci values 456e5c31af7Sopenharmony_ci { 457e5c31af7Sopenharmony_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) ]; 458e5c31af7Sopenharmony_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) ]; 459e5c31af7Sopenharmony_ci } 460e5c31af7Sopenharmony_ci 461e5c31af7Sopenharmony_ci both "" 462e5c31af7Sopenharmony_ci #version 310 es 463e5c31af7Sopenharmony_ci precision highp float; 464e5c31af7Sopenharmony_ci ${DECLARATIONS} 465e5c31af7Sopenharmony_ci 466e5c31af7Sopenharmony_ci float[3] func(vec3 a) 467e5c31af7Sopenharmony_ci { 468e5c31af7Sopenharmony_ci return float[3] (a.z, -a.x, a.y); 469e5c31af7Sopenharmony_ci } 470e5c31af7Sopenharmony_ci 471e5c31af7Sopenharmony_ci void main() 472e5c31af7Sopenharmony_ci { 473e5c31af7Sopenharmony_ci ${SETUP} 474e5c31af7Sopenharmony_ci float[3] x = func(in0); 475e5c31af7Sopenharmony_ci out0 = vec3(x[0], x[1], x[2]); 476e5c31af7Sopenharmony_ci ${OUTPUT} 477e5c31af7Sopenharmony_ci } 478e5c31af7Sopenharmony_ci "" 479e5c31af7Sopenharmony_ci end 480e5c31af7Sopenharmony_ci 481e5c31af7Sopenharmony_ci case int 482e5c31af7Sopenharmony_ci version 310 es 483e5c31af7Sopenharmony_ci values 484e5c31af7Sopenharmony_ci { 485e5c31af7Sopenharmony_ci input ivec3 in0 = [ ivec3(4, 1, 2) | ivec3(7, -1, 2) | ivec3(3, 1, -2) ]; 486e5c31af7Sopenharmony_ci output ivec3 out0 = [ ivec3(2, -4, 1) | ivec3(2, -7, -1) | ivec3(-2, -3, 1) ]; 487e5c31af7Sopenharmony_ci } 488e5c31af7Sopenharmony_ci 489e5c31af7Sopenharmony_ci both "" 490e5c31af7Sopenharmony_ci #version 310 es 491e5c31af7Sopenharmony_ci precision highp int; 492e5c31af7Sopenharmony_ci precision highp float; 493e5c31af7Sopenharmony_ci ${DECLARATIONS} 494e5c31af7Sopenharmony_ci 495e5c31af7Sopenharmony_ci int[3] func(ivec3 a) 496e5c31af7Sopenharmony_ci { 497e5c31af7Sopenharmony_ci return int[3] (a.z, -a.x, a.y); 498e5c31af7Sopenharmony_ci } 499e5c31af7Sopenharmony_ci 500e5c31af7Sopenharmony_ci void main() 501e5c31af7Sopenharmony_ci { 502e5c31af7Sopenharmony_ci ${SETUP} 503e5c31af7Sopenharmony_ci int[3] x = func(in0); 504e5c31af7Sopenharmony_ci out0 = ivec3(x[0], x[1], x[2]); 505e5c31af7Sopenharmony_ci ${OUTPUT} 506e5c31af7Sopenharmony_ci } 507e5c31af7Sopenharmony_ci "" 508e5c31af7Sopenharmony_ci end 509e5c31af7Sopenharmony_ci 510e5c31af7Sopenharmony_ci case bool 511e5c31af7Sopenharmony_ci version 310 es 512e5c31af7Sopenharmony_ci values 513e5c31af7Sopenharmony_ci { 514e5c31af7Sopenharmony_ci input bvec3 in0 = [ bvec3(false, true, true) ]; 515e5c31af7Sopenharmony_ci output bvec3 out0 = [ bvec3(true, false, true) ]; 516e5c31af7Sopenharmony_ci } 517e5c31af7Sopenharmony_ci 518e5c31af7Sopenharmony_ci both "" 519e5c31af7Sopenharmony_ci #version 310 es 520e5c31af7Sopenharmony_ci precision highp int; 521e5c31af7Sopenharmony_ci precision highp float; 522e5c31af7Sopenharmony_ci ${DECLARATIONS} 523e5c31af7Sopenharmony_ci 524e5c31af7Sopenharmony_ci bool[3] func(bvec3 a) 525e5c31af7Sopenharmony_ci { 526e5c31af7Sopenharmony_ci return bool[3] (a.z, a.x, a.y); 527e5c31af7Sopenharmony_ci } 528e5c31af7Sopenharmony_ci 529e5c31af7Sopenharmony_ci void main() 530e5c31af7Sopenharmony_ci { 531e5c31af7Sopenharmony_ci ${SETUP} 532e5c31af7Sopenharmony_ci bool[3] x = func(in0); 533e5c31af7Sopenharmony_ci out0 = bvec3(x[0], x[1], x[2]); 534e5c31af7Sopenharmony_ci ${OUTPUT} 535e5c31af7Sopenharmony_ci } 536e5c31af7Sopenharmony_ci "" 537e5c31af7Sopenharmony_ci end 538e5c31af7Sopenharmony_ci 539e5c31af7Sopenharmony_ci 540e5c31af7Sopenharmony_ci 541e5c31af7Sopenharmony_ci case float_vec3 542e5c31af7Sopenharmony_ci version 310 es 543e5c31af7Sopenharmony_ci values 544e5c31af7Sopenharmony_ci { 545e5c31af7Sopenharmony_ci input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(-0.5, 11.2, -1.0) ]; 546e5c31af7Sopenharmony_ci output vec3 out0 = [ vec3(1.0, 0.5, -2.0) | vec3(11.2, -0.5, 1.0) ]; 547e5c31af7Sopenharmony_ci } 548e5c31af7Sopenharmony_ci 549e5c31af7Sopenharmony_ci both "" 550e5c31af7Sopenharmony_ci #version 310 es 551e5c31af7Sopenharmony_ci precision highp float; 552e5c31af7Sopenharmony_ci ${DECLARATIONS} 553e5c31af7Sopenharmony_ci 554e5c31af7Sopenharmony_ci vec3[3] func(vec3[3] a) 555e5c31af7Sopenharmony_ci { 556e5c31af7Sopenharmony_ci return vec3[3] (a[1], a[2], a[0]); 557e5c31af7Sopenharmony_ci } 558e5c31af7Sopenharmony_ci 559e5c31af7Sopenharmony_ci void main() 560e5c31af7Sopenharmony_ci { 561e5c31af7Sopenharmony_ci ${SETUP} 562e5c31af7Sopenharmony_ci vec3[3] x = vec3[3](vec3(in0.x, in0.y, -in0.z) , 563e5c31af7Sopenharmony_ci vec3(in0.y, -in0.z, in0.x) , 564e5c31af7Sopenharmony_ci vec3(-in0.z, in0.x, in0.y) ); 565e5c31af7Sopenharmony_ci x = func(x); 566e5c31af7Sopenharmony_ci out0 = vec3(x[0].x, x[1].y, x[2].z); 567e5c31af7Sopenharmony_ci ${OUTPUT} 568e5c31af7Sopenharmony_ci } 569e5c31af7Sopenharmony_ci "" 570e5c31af7Sopenharmony_ci end 571e5c31af7Sopenharmony_ci 572e5c31af7Sopenharmony_ci case struct 573e5c31af7Sopenharmony_ci version 310 es 574e5c31af7Sopenharmony_ci values 575e5c31af7Sopenharmony_ci { 576e5c31af7Sopenharmony_ci input vec3 in0 = [ vec3(0.5, 1.0, 2.0) ]; 577e5c31af7Sopenharmony_ci output vec3 out0 = [ vec3(-1.0, 2.0, 0.5) ]; 578e5c31af7Sopenharmony_ci } 579e5c31af7Sopenharmony_ci 580e5c31af7Sopenharmony_ci both "" 581e5c31af7Sopenharmony_ci #version 310 es 582e5c31af7Sopenharmony_ci precision highp float; 583e5c31af7Sopenharmony_ci ${DECLARATIONS} 584e5c31af7Sopenharmony_ci 585e5c31af7Sopenharmony_ci struct test 586e5c31af7Sopenharmony_ci { 587e5c31af7Sopenharmony_ci float f; 588e5c31af7Sopenharmony_ci vec3 v; 589e5c31af7Sopenharmony_ci }; 590e5c31af7Sopenharmony_ci 591e5c31af7Sopenharmony_ci test[3] func(test[3] a) 592e5c31af7Sopenharmony_ci { 593e5c31af7Sopenharmony_ci return test[3] (a[1], a[2], a[0]); 594e5c31af7Sopenharmony_ci } 595e5c31af7Sopenharmony_ci 596e5c31af7Sopenharmony_ci void main() 597e5c31af7Sopenharmony_ci { 598e5c31af7Sopenharmony_ci ${SETUP} 599e5c31af7Sopenharmony_ci 600e5c31af7Sopenharmony_ci test a = test(in0.z, vec3(in0.x, in0.y, in0.z)); 601e5c31af7Sopenharmony_ci test b = test(in0.y, vec3(-in0.z, -in0.x, -in0.y)); 602e5c31af7Sopenharmony_ci test c = test(in0.x, vec3(-in0.y, in0.z, -in0.x)); 603e5c31af7Sopenharmony_ci 604e5c31af7Sopenharmony_ci test[3] t = test[3] (a, b, c); 605e5c31af7Sopenharmony_ci test[3] x = func(t); 606e5c31af7Sopenharmony_ci 607e5c31af7Sopenharmony_ci out0 = vec3(x[0].v.z, x[1].v.y, x[2].v.x); 608e5c31af7Sopenharmony_ci ${OUTPUT} 609e5c31af7Sopenharmony_ci } 610e5c31af7Sopenharmony_ci "" 611e5c31af7Sopenharmony_ci end 612e5c31af7Sopenharmony_ci 613e5c31af7Sopenharmony_ci case int_vec3 614e5c31af7Sopenharmony_ci version 310 es 615e5c31af7Sopenharmony_ci values 616e5c31af7Sopenharmony_ci { 617e5c31af7Sopenharmony_ci input ivec3 in0 = [ ivec3(5, 1, 2) | ivec3(-5, 11, -1) ]; 618e5c31af7Sopenharmony_ci output ivec3 out0 = [ ivec3(1, 5, -2) | ivec3(11, -5, 1) ]; 619e5c31af7Sopenharmony_ci } 620e5c31af7Sopenharmony_ci 621e5c31af7Sopenharmony_ci both "" 622e5c31af7Sopenharmony_ci #version 310 es 623e5c31af7Sopenharmony_ci precision highp int; 624e5c31af7Sopenharmony_ci precision highp float; 625e5c31af7Sopenharmony_ci ${DECLARATIONS} 626e5c31af7Sopenharmony_ci 627e5c31af7Sopenharmony_ci ivec3[3] func(ivec3[3] a) 628e5c31af7Sopenharmony_ci { 629e5c31af7Sopenharmony_ci return ivec3[3] (a[1], a[2], a[0]); 630e5c31af7Sopenharmony_ci } 631e5c31af7Sopenharmony_ci 632e5c31af7Sopenharmony_ci void main() 633e5c31af7Sopenharmony_ci { 634e5c31af7Sopenharmony_ci ${SETUP} 635e5c31af7Sopenharmony_ci ivec3[3] x = ivec3[3]( ivec3(in0.x, in0.y, -in0.z) , 636e5c31af7Sopenharmony_ci ivec3(in0.y, -in0.z, in0.x) , 637e5c31af7Sopenharmony_ci ivec3(-in0.z, in0.x, in0.y) ); 638e5c31af7Sopenharmony_ci x = func(x); 639e5c31af7Sopenharmony_ci out0 = ivec3(x[0].x, x[1].y, x[2].z); 640e5c31af7Sopenharmony_ci ${OUTPUT} 641e5c31af7Sopenharmony_ci } 642e5c31af7Sopenharmony_ci "" 643e5c31af7Sopenharmony_ci end 644e5c31af7Sopenharmony_ci 645e5c31af7Sopenharmony_ci case bool_vec3 646e5c31af7Sopenharmony_ci version 310 es 647e5c31af7Sopenharmony_ci values 648e5c31af7Sopenharmony_ci { 649e5c31af7Sopenharmony_ci input bvec3 in0 = [ bvec3(true, false, false) ]; 650e5c31af7Sopenharmony_ci output bvec3 out0 = [ bvec3(false, true, false) ]; 651e5c31af7Sopenharmony_ci } 652e5c31af7Sopenharmony_ci 653e5c31af7Sopenharmony_ci both "" 654e5c31af7Sopenharmony_ci #version 310 es 655e5c31af7Sopenharmony_ci precision highp int; 656e5c31af7Sopenharmony_ci precision highp float; 657e5c31af7Sopenharmony_ci ${DECLARATIONS} 658e5c31af7Sopenharmony_ci 659e5c31af7Sopenharmony_ci bvec3[3] func(bvec3[3] a) 660e5c31af7Sopenharmony_ci { 661e5c31af7Sopenharmony_ci return bvec3[3] (a[1], a[2], a[0]); 662e5c31af7Sopenharmony_ci } 663e5c31af7Sopenharmony_ci 664e5c31af7Sopenharmony_ci void main() 665e5c31af7Sopenharmony_ci { 666e5c31af7Sopenharmony_ci ${SETUP} 667e5c31af7Sopenharmony_ci bvec3[3] x = bvec3[3]( bvec3(in0.x, in0.y, in0.z) , 668e5c31af7Sopenharmony_ci bvec3(in0.y, in0.z, in0.x) , 669e5c31af7Sopenharmony_ci bvec3(in0.z, in0.x, in0.y) ); 670e5c31af7Sopenharmony_ci x = func(x); 671e5c31af7Sopenharmony_ci out0 = bvec3(x[0].x, x[1].y, x[2].z); 672e5c31af7Sopenharmony_ci ${OUTPUT} 673e5c31af7Sopenharmony_ci } 674e5c31af7Sopenharmony_ci "" 675e5c31af7Sopenharmony_ci end 676e5c31af7Sopenharmony_ci 677e5c31af7Sopenharmony_ci case float_mat3 678e5c31af7Sopenharmony_ci version 310 es 679e5c31af7Sopenharmony_ci values 680e5c31af7Sopenharmony_ci { 681e5c31af7Sopenharmony_ci input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(-1.5, 0.0, -2.3) ]; 682e5c31af7Sopenharmony_ci output vec3 out0 = [ vec3(2.0, -1.0, 2.0) | vec3(-2.3, 0.0, -2.3) ]; 683e5c31af7Sopenharmony_ci } 684e5c31af7Sopenharmony_ci 685e5c31af7Sopenharmony_ci both "" 686e5c31af7Sopenharmony_ci #version 310 es 687e5c31af7Sopenharmony_ci precision highp float; 688e5c31af7Sopenharmony_ci ${DECLARATIONS} 689e5c31af7Sopenharmony_ci 690e5c31af7Sopenharmony_ci mat3[3] func(mat3[3] x) 691e5c31af7Sopenharmony_ci { 692e5c31af7Sopenharmony_ci mat3[3] r; 693e5c31af7Sopenharmony_ci r[0] = x[1]; 694e5c31af7Sopenharmony_ci r[1] = x[2]; 695e5c31af7Sopenharmony_ci r[2] = x[0]; 696e5c31af7Sopenharmony_ci return r; 697e5c31af7Sopenharmony_ci } 698e5c31af7Sopenharmony_ci 699e5c31af7Sopenharmony_ci void main() 700e5c31af7Sopenharmony_ci { 701e5c31af7Sopenharmony_ci ${SETUP} 702e5c31af7Sopenharmony_ci mat3[3] a, b; 703e5c31af7Sopenharmony_ci a[0] = mat3(in0.x, in0.y, in0.z, 704e5c31af7Sopenharmony_ci in0.x, in0.y, in0.z, 705e5c31af7Sopenharmony_ci in0.x, in0.y, in0.z); 706e5c31af7Sopenharmony_ci a[1] = mat3(in0.z, in0.x, -in0.y, 707e5c31af7Sopenharmony_ci in0.z, in0.x, -in0.y, 708e5c31af7Sopenharmony_ci in0.z, in0.x, -in0.y); 709e5c31af7Sopenharmony_ci a[2] = mat3(-in0.z, -in0.z, in0.z, 710e5c31af7Sopenharmony_ci -in0.y, -in0.y, in0.y, 711e5c31af7Sopenharmony_ci -in0.x, -in0.x, in0.x); 712e5c31af7Sopenharmony_ci 713e5c31af7Sopenharmony_ci b = func(a); 714e5c31af7Sopenharmony_ci 715e5c31af7Sopenharmony_ci mat3 b0 = b[0]; 716e5c31af7Sopenharmony_ci mat3 b1 = b[1]; 717e5c31af7Sopenharmony_ci mat3 b2 = b[2]; 718e5c31af7Sopenharmony_ci 719e5c31af7Sopenharmony_ci float ret0 = b0[0][0]; 720e5c31af7Sopenharmony_ci float ret1 = b1[1][1]; 721e5c31af7Sopenharmony_ci float ret2 = b2[2][2]; 722e5c31af7Sopenharmony_ci 723e5c31af7Sopenharmony_ci out0 = vec3(ret0, ret1, ret2); 724e5c31af7Sopenharmony_ci ${OUTPUT} 725e5c31af7Sopenharmony_ci } 726e5c31af7Sopenharmony_ci "" 727e5c31af7Sopenharmony_ci end 728e5c31af7Sopenharmony_ci 729e5c31af7Sopenharmony_ci case int_mat3 730e5c31af7Sopenharmony_ci version 310 es 731e5c31af7Sopenharmony_ci values 732e5c31af7Sopenharmony_ci { 733e5c31af7Sopenharmony_ci input ivec3 in0 = [ ivec3(5, 1, 2) | ivec3(-1, 0, -2) ]; 734e5c31af7Sopenharmony_ci output ivec3 out0 = [ ivec3(2, -1, 2) | ivec3(-2, 0, -2) ]; 735e5c31af7Sopenharmony_ci } 736e5c31af7Sopenharmony_ci 737e5c31af7Sopenharmony_ci both "" 738e5c31af7Sopenharmony_ci #version 310 es 739e5c31af7Sopenharmony_ci precision highp int; 740e5c31af7Sopenharmony_ci precision highp float; 741e5c31af7Sopenharmony_ci ${DECLARATIONS} 742e5c31af7Sopenharmony_ci 743e5c31af7Sopenharmony_ci mat3[3] func(mat3[3] x) 744e5c31af7Sopenharmony_ci { 745e5c31af7Sopenharmony_ci mat3[3] r; 746e5c31af7Sopenharmony_ci r[0] = x[1]; 747e5c31af7Sopenharmony_ci r[1] = x[2]; 748e5c31af7Sopenharmony_ci r[2] = x[0]; 749e5c31af7Sopenharmony_ci return r; 750e5c31af7Sopenharmony_ci } 751e5c31af7Sopenharmony_ci 752e5c31af7Sopenharmony_ci void main() 753e5c31af7Sopenharmony_ci { 754e5c31af7Sopenharmony_ci ${SETUP} 755e5c31af7Sopenharmony_ci mat3[3] a, b; 756e5c31af7Sopenharmony_ci a[0] = mat3(in0.x, in0.y, in0.z, 757e5c31af7Sopenharmony_ci in0.x, in0.y, in0.z, 758e5c31af7Sopenharmony_ci in0.x, in0.y, in0.z); 759e5c31af7Sopenharmony_ci a[1] = mat3(in0.z, in0.x, -in0.y, 760e5c31af7Sopenharmony_ci in0.z, in0.x, -in0.y, 761e5c31af7Sopenharmony_ci in0.z, in0.x, -in0.y); 762e5c31af7Sopenharmony_ci a[2] = mat3(-in0.z, -in0.z, in0.z, 763e5c31af7Sopenharmony_ci -in0.y, -in0.y, in0.y, 764e5c31af7Sopenharmony_ci -in0.x, -in0.x, in0.x); 765e5c31af7Sopenharmony_ci 766e5c31af7Sopenharmony_ci b = func(a); 767e5c31af7Sopenharmony_ci 768e5c31af7Sopenharmony_ci mat3 b0 = b[0]; 769e5c31af7Sopenharmony_ci mat3 b1 = b[1]; 770e5c31af7Sopenharmony_ci mat3 b2 = b[2]; 771e5c31af7Sopenharmony_ci 772e5c31af7Sopenharmony_ci float ret0 = b0[0][0]; 773e5c31af7Sopenharmony_ci float ret1 = b1[1][1]; 774e5c31af7Sopenharmony_ci float ret2 = b2[2][2]; 775e5c31af7Sopenharmony_ci 776e5c31af7Sopenharmony_ci out0 = ivec3(ret0, ret1, ret2); 777e5c31af7Sopenharmony_ci ${OUTPUT} 778e5c31af7Sopenharmony_ci } 779e5c31af7Sopenharmony_ci "" 780e5c31af7Sopenharmony_ci end 781e5c31af7Sopenharmony_ci 782e5c31af7Sopenharmony_ci case bool_mat3 783e5c31af7Sopenharmony_ci version 310 es 784e5c31af7Sopenharmony_ci values 785e5c31af7Sopenharmony_ci { 786e5c31af7Sopenharmony_ci input bvec3 in0 = [ bvec3(true, false, true) | bvec3(true, true, false) ]; 787e5c31af7Sopenharmony_ci output bvec3 out0 = [ bvec3(true, false, true) | bvec3(false, true, false) ]; 788e5c31af7Sopenharmony_ci } 789e5c31af7Sopenharmony_ci 790e5c31af7Sopenharmony_ci both "" 791e5c31af7Sopenharmony_ci #version 310 es 792e5c31af7Sopenharmony_ci precision highp int; 793e5c31af7Sopenharmony_ci precision highp float; 794e5c31af7Sopenharmony_ci ${DECLARATIONS} 795e5c31af7Sopenharmony_ci 796e5c31af7Sopenharmony_ci mat3[3] func(mat3[3] x) 797e5c31af7Sopenharmony_ci { 798e5c31af7Sopenharmony_ci mat3[3] r; 799e5c31af7Sopenharmony_ci r[0] = x[1]; 800e5c31af7Sopenharmony_ci r[1] = x[2]; 801e5c31af7Sopenharmony_ci r[2] = x[0]; 802e5c31af7Sopenharmony_ci return r; 803e5c31af7Sopenharmony_ci } 804e5c31af7Sopenharmony_ci 805e5c31af7Sopenharmony_ci void main() 806e5c31af7Sopenharmony_ci { 807e5c31af7Sopenharmony_ci ${SETUP} 808e5c31af7Sopenharmony_ci mat3[3] a, b; 809e5c31af7Sopenharmony_ci a[0] = mat3(in0.x, in0.y, in0.z, 810e5c31af7Sopenharmony_ci in0.x, in0.y, in0.z, 811e5c31af7Sopenharmony_ci in0.x, in0.y, in0.z); 812e5c31af7Sopenharmony_ci a[1] = mat3(in0.z, in0.x, in0.y, 813e5c31af7Sopenharmony_ci in0.z, in0.x, in0.y, 814e5c31af7Sopenharmony_ci in0.z, in0.x, in0.y); 815e5c31af7Sopenharmony_ci a[2] = mat3(in0.z, in0.z, in0.z, 816e5c31af7Sopenharmony_ci in0.y, in0.y, in0.y, 817e5c31af7Sopenharmony_ci in0.x, in0.x, in0.x); 818e5c31af7Sopenharmony_ci 819e5c31af7Sopenharmony_ci b = func(a); 820e5c31af7Sopenharmony_ci 821e5c31af7Sopenharmony_ci mat3 b0 = b[0]; 822e5c31af7Sopenharmony_ci mat3 b1 = b[1]; 823e5c31af7Sopenharmony_ci mat3 b2 = b[2]; 824e5c31af7Sopenharmony_ci 825e5c31af7Sopenharmony_ci float ret0 = b0[0][0]; 826e5c31af7Sopenharmony_ci float ret1 = b1[1][1]; 827e5c31af7Sopenharmony_ci float ret2 = b2[2][2]; 828e5c31af7Sopenharmony_ci 829e5c31af7Sopenharmony_ci out0 = bvec3(ret0, ret1, ret2); 830e5c31af7Sopenharmony_ci ${OUTPUT} 831e5c31af7Sopenharmony_ci } 832e5c31af7Sopenharmony_ci "" 833e5c31af7Sopenharmony_ci end 834e5c31af7Sopenharmony_ci 835e5c31af7Sopenharmony_ciend # return 836e5c31af7Sopenharmony_ci 837e5c31af7Sopenharmony_cigroup unnamed_parameter "Array type as unnamed parameter of a function prototype" 838e5c31af7Sopenharmony_ci 839e5c31af7Sopenharmony_ci case float 840e5c31af7Sopenharmony_ci version 310 es 841e5c31af7Sopenharmony_ci values 842e5c31af7Sopenharmony_ci { 843e5c31af7Sopenharmony_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) ]; 844e5c31af7Sopenharmony_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) ]; 845e5c31af7Sopenharmony_ci } 846e5c31af7Sopenharmony_ci 847e5c31af7Sopenharmony_ci both "" 848e5c31af7Sopenharmony_ci #version 310 es 849e5c31af7Sopenharmony_ci precision highp float; 850e5c31af7Sopenharmony_ci ${DECLARATIONS} 851e5c31af7Sopenharmony_ci 852e5c31af7Sopenharmony_ci float[3] func(float[3]); 853e5c31af7Sopenharmony_ci 854e5c31af7Sopenharmony_ci void main() 855e5c31af7Sopenharmony_ci { 856e5c31af7Sopenharmony_ci ${SETUP} 857e5c31af7Sopenharmony_ci float[3] a = float[3] (in0.x, in0.y, in0.z); 858e5c31af7Sopenharmony_ci float[3] b = func(a); 859e5c31af7Sopenharmony_ci out0 = vec3(b[0], b[1], b[2]); 860e5c31af7Sopenharmony_ci ${OUTPUT} 861e5c31af7Sopenharmony_ci } 862e5c31af7Sopenharmony_ci 863e5c31af7Sopenharmony_ci float[3] func(float[3] a) 864e5c31af7Sopenharmony_ci { 865e5c31af7Sopenharmony_ci return float[3] (a[2], a[0], a[1]); 866e5c31af7Sopenharmony_ci } 867e5c31af7Sopenharmony_ci 868e5c31af7Sopenharmony_ci "" 869e5c31af7Sopenharmony_ci end 870e5c31af7Sopenharmony_ci 871e5c31af7Sopenharmony_ci case int 872e5c31af7Sopenharmony_ci version 310 es 873e5c31af7Sopenharmony_ci values 874e5c31af7Sopenharmony_ci { 875e5c31af7Sopenharmony_ci input ivec3 in0 = [ ivec3(0, 1, 2) | ivec3(7, -1, 2) | ivec3(3, 1, -2) ]; 876e5c31af7Sopenharmony_ci output ivec3 out0 = [ ivec3(2, 0, 1) | ivec3(2, 7, -1) | ivec3(-2, 3, 1) ]; 877e5c31af7Sopenharmony_ci } 878e5c31af7Sopenharmony_ci 879e5c31af7Sopenharmony_ci both "" 880e5c31af7Sopenharmony_ci #version 310 es 881e5c31af7Sopenharmony_ci precision highp int; 882e5c31af7Sopenharmony_ci precision highp float; 883e5c31af7Sopenharmony_ci ${DECLARATIONS} 884e5c31af7Sopenharmony_ci 885e5c31af7Sopenharmony_ci int[3] func(int[3]); 886e5c31af7Sopenharmony_ci 887e5c31af7Sopenharmony_ci void main() 888e5c31af7Sopenharmony_ci { 889e5c31af7Sopenharmony_ci ${SETUP} 890e5c31af7Sopenharmony_ci int[3] a = int[3] (in0.x, in0.y, in0.z); 891e5c31af7Sopenharmony_ci int[3] b = func(a); 892e5c31af7Sopenharmony_ci out0 = ivec3(b[0], b[1], b[2]); 893e5c31af7Sopenharmony_ci ${OUTPUT} 894e5c31af7Sopenharmony_ci } 895e5c31af7Sopenharmony_ci 896e5c31af7Sopenharmony_ci int[3] func(int[3] a) 897e5c31af7Sopenharmony_ci { 898e5c31af7Sopenharmony_ci return int[3] (a[2], a[0], a[1]); 899e5c31af7Sopenharmony_ci } 900e5c31af7Sopenharmony_ci 901e5c31af7Sopenharmony_ci "" 902e5c31af7Sopenharmony_ci end 903e5c31af7Sopenharmony_ci 904e5c31af7Sopenharmony_ci case bool 905e5c31af7Sopenharmony_ci version 310 es 906e5c31af7Sopenharmony_ci values 907e5c31af7Sopenharmony_ci { 908e5c31af7Sopenharmony_ci input bvec3 in0 = [ bvec3(false, true, true) ]; 909e5c31af7Sopenharmony_ci output bvec3 out0 = [ bvec3(true, false, true) ]; 910e5c31af7Sopenharmony_ci } 911e5c31af7Sopenharmony_ci 912e5c31af7Sopenharmony_ci both "" 913e5c31af7Sopenharmony_ci #version 310 es 914e5c31af7Sopenharmony_ci precision highp int; 915e5c31af7Sopenharmony_ci precision highp float; 916e5c31af7Sopenharmony_ci ${DECLARATIONS} 917e5c31af7Sopenharmony_ci 918e5c31af7Sopenharmony_ci bool[3] func(bool[3]); 919e5c31af7Sopenharmony_ci 920e5c31af7Sopenharmony_ci void main() 921e5c31af7Sopenharmony_ci { 922e5c31af7Sopenharmony_ci ${SETUP} 923e5c31af7Sopenharmony_ci bool[3] a = bool[3] (in0.x, in0.y, in0.z); 924e5c31af7Sopenharmony_ci bool[3] b = func(a); 925e5c31af7Sopenharmony_ci out0 = bvec3(b[0], b[1], b[2]); 926e5c31af7Sopenharmony_ci ${OUTPUT} 927e5c31af7Sopenharmony_ci } 928e5c31af7Sopenharmony_ci 929e5c31af7Sopenharmony_ci bool[3] func(bool[3] a) 930e5c31af7Sopenharmony_ci { 931e5c31af7Sopenharmony_ci return bool[3] (a[2], a[0], a[1]); 932e5c31af7Sopenharmony_ci } 933e5c31af7Sopenharmony_ci 934e5c31af7Sopenharmony_ci "" 935e5c31af7Sopenharmony_ci end 936e5c31af7Sopenharmony_ci 937e5c31af7Sopenharmony_ci case struct 938e5c31af7Sopenharmony_ci version 310 es 939e5c31af7Sopenharmony_ci values 940e5c31af7Sopenharmony_ci { 941e5c31af7Sopenharmony_ci input vec3 in0 = [ vec3(0.5, 1.0, 2.0) ]; 942e5c31af7Sopenharmony_ci output vec3 out0 = [ vec3(-1.0, 2.0, 0.5) ]; 943e5c31af7Sopenharmony_ci } 944e5c31af7Sopenharmony_ci 945e5c31af7Sopenharmony_ci both "" 946e5c31af7Sopenharmony_ci #version 310 es 947e5c31af7Sopenharmony_ci precision highp float; 948e5c31af7Sopenharmony_ci ${DECLARATIONS} 949e5c31af7Sopenharmony_ci 950e5c31af7Sopenharmony_ci struct test 951e5c31af7Sopenharmony_ci { 952e5c31af7Sopenharmony_ci float f; 953e5c31af7Sopenharmony_ci vec3 v; 954e5c31af7Sopenharmony_ci }; 955e5c31af7Sopenharmony_ci 956e5c31af7Sopenharmony_ci test[3] func(test[3]); 957e5c31af7Sopenharmony_ci 958e5c31af7Sopenharmony_ci void main() 959e5c31af7Sopenharmony_ci { 960e5c31af7Sopenharmony_ci ${SETUP} 961e5c31af7Sopenharmony_ci 962e5c31af7Sopenharmony_ci test a = test(in0.z, vec3(in0.x, in0.y, in0.z)); 963e5c31af7Sopenharmony_ci test b = test(in0.y, vec3(-in0.z, -in0.x, -in0.y)); 964e5c31af7Sopenharmony_ci test c = test(in0.x, vec3(-in0.y, in0.z, -in0.x)); 965e5c31af7Sopenharmony_ci 966e5c31af7Sopenharmony_ci test[3] t = test[3] (a, b, c); 967e5c31af7Sopenharmony_ci test[3] x = func(t); 968e5c31af7Sopenharmony_ci out0 = vec3(x[0].v.z, x[1].v.y, x[2].v.x); 969e5c31af7Sopenharmony_ci ${OUTPUT} 970e5c31af7Sopenharmony_ci } 971e5c31af7Sopenharmony_ci 972e5c31af7Sopenharmony_ci test[3] func(test[3] a) 973e5c31af7Sopenharmony_ci { 974e5c31af7Sopenharmony_ci return test[3] (a[1], a[2], a[0]); 975e5c31af7Sopenharmony_ci } 976e5c31af7Sopenharmony_ci 977e5c31af7Sopenharmony_ci "" 978e5c31af7Sopenharmony_ci end 979e5c31af7Sopenharmony_ci 980e5c31af7Sopenharmony_ci case float_vec3 981e5c31af7Sopenharmony_ci version 310 es 982e5c31af7Sopenharmony_ci values 983e5c31af7Sopenharmony_ci { 984e5c31af7Sopenharmony_ci input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(-0.5, 11.2, -1.0) ]; 985e5c31af7Sopenharmony_ci output vec3 out0 = [ vec3(1.0, 0.5, -2.0) | vec3(11.2, -0.5, 1.0) ]; 986e5c31af7Sopenharmony_ci } 987e5c31af7Sopenharmony_ci 988e5c31af7Sopenharmony_ci both "" 989e5c31af7Sopenharmony_ci #version 310 es 990e5c31af7Sopenharmony_ci precision highp float; 991e5c31af7Sopenharmony_ci ${DECLARATIONS} 992e5c31af7Sopenharmony_ci 993e5c31af7Sopenharmony_ci vec3[3] func(vec3[3]); 994e5c31af7Sopenharmony_ci 995e5c31af7Sopenharmony_ci void main() 996e5c31af7Sopenharmony_ci { 997e5c31af7Sopenharmony_ci ${SETUP} 998e5c31af7Sopenharmony_ci vec3[3] x = vec3[3](vec3(in0.x, in0.y, -in0.z) , 999e5c31af7Sopenharmony_ci vec3(in0.y, -in0.z, in0.x) , 1000e5c31af7Sopenharmony_ci vec3(-in0.z, in0.x, in0.y) ); 1001e5c31af7Sopenharmony_ci x = func(x); 1002e5c31af7Sopenharmony_ci out0 = vec3(x[0].x, x[1].y, x[2].z); 1003e5c31af7Sopenharmony_ci ${OUTPUT} 1004e5c31af7Sopenharmony_ci } 1005e5c31af7Sopenharmony_ci 1006e5c31af7Sopenharmony_ci vec3[3] func(vec3[3] a) 1007e5c31af7Sopenharmony_ci { 1008e5c31af7Sopenharmony_ci return vec3[3] (a[1], a[2], a[0]); 1009e5c31af7Sopenharmony_ci } 1010e5c31af7Sopenharmony_ci "" 1011e5c31af7Sopenharmony_ci end 1012e5c31af7Sopenharmony_ci 1013e5c31af7Sopenharmony_ci case int_vec3 1014e5c31af7Sopenharmony_ci version 310 es 1015e5c31af7Sopenharmony_ci values 1016e5c31af7Sopenharmony_ci { 1017e5c31af7Sopenharmony_ci input ivec3 in0 = [ ivec3(5, 1, 2) | ivec3(-5, 11, -1) ]; 1018e5c31af7Sopenharmony_ci output ivec3 out0 = [ ivec3(1, 5, -2) | ivec3(11, -5, 1) ]; 1019e5c31af7Sopenharmony_ci } 1020e5c31af7Sopenharmony_ci 1021e5c31af7Sopenharmony_ci both "" 1022e5c31af7Sopenharmony_ci #version 310 es 1023e5c31af7Sopenharmony_ci precision highp int; 1024e5c31af7Sopenharmony_ci precision highp float; 1025e5c31af7Sopenharmony_ci ${DECLARATIONS} 1026e5c31af7Sopenharmony_ci 1027e5c31af7Sopenharmony_ci ivec3[3] func(ivec3[3]); 1028e5c31af7Sopenharmony_ci 1029e5c31af7Sopenharmony_ci void main() 1030e5c31af7Sopenharmony_ci { 1031e5c31af7Sopenharmony_ci ${SETUP} 1032e5c31af7Sopenharmony_ci ivec3[3] x = ivec3[3]( ivec3(in0.x, in0.y, -in0.z) , 1033e5c31af7Sopenharmony_ci ivec3(in0.y, -in0.z, in0.x) , 1034e5c31af7Sopenharmony_ci ivec3(-in0.z, in0.x, in0.y) ); 1035e5c31af7Sopenharmony_ci x = func(x); 1036e5c31af7Sopenharmony_ci out0 = ivec3(x[0].x, x[1].y, x[2].z); 1037e5c31af7Sopenharmony_ci ${OUTPUT} 1038e5c31af7Sopenharmony_ci } 1039e5c31af7Sopenharmony_ci 1040e5c31af7Sopenharmony_ci ivec3[3] func(ivec3[3] a) 1041e5c31af7Sopenharmony_ci { 1042e5c31af7Sopenharmony_ci return ivec3[3] (a[1], a[2], a[0]); 1043e5c31af7Sopenharmony_ci } 1044e5c31af7Sopenharmony_ci "" 1045e5c31af7Sopenharmony_ci end 1046e5c31af7Sopenharmony_ci 1047e5c31af7Sopenharmony_ci case bool_vec3 1048e5c31af7Sopenharmony_ci version 310 es 1049e5c31af7Sopenharmony_ci values 1050e5c31af7Sopenharmony_ci { 1051e5c31af7Sopenharmony_ci input bvec3 in0 = [ bvec3(true, false, false) ]; 1052e5c31af7Sopenharmony_ci output bvec3 out0 = [ bvec3(false, true, false) ]; 1053e5c31af7Sopenharmony_ci } 1054e5c31af7Sopenharmony_ci 1055e5c31af7Sopenharmony_ci both "" 1056e5c31af7Sopenharmony_ci #version 310 es 1057e5c31af7Sopenharmony_ci precision highp int; 1058e5c31af7Sopenharmony_ci precision highp float; 1059e5c31af7Sopenharmony_ci ${DECLARATIONS} 1060e5c31af7Sopenharmony_ci 1061e5c31af7Sopenharmony_ci bvec3[3] func(bvec3[3]); 1062e5c31af7Sopenharmony_ci 1063e5c31af7Sopenharmony_ci void main() 1064e5c31af7Sopenharmony_ci { 1065e5c31af7Sopenharmony_ci ${SETUP} 1066e5c31af7Sopenharmony_ci bvec3[3] x = bvec3[3]( bvec3(in0.x, in0.y, in0.z) , 1067e5c31af7Sopenharmony_ci bvec3(in0.y, in0.z, in0.x) , 1068e5c31af7Sopenharmony_ci bvec3(in0.z, in0.x, in0.y) ); 1069e5c31af7Sopenharmony_ci x = func(x); 1070e5c31af7Sopenharmony_ci out0 = bvec3(x[0].x, x[1].y, x[2].z); 1071e5c31af7Sopenharmony_ci ${OUTPUT} 1072e5c31af7Sopenharmony_ci } 1073e5c31af7Sopenharmony_ci 1074e5c31af7Sopenharmony_ci bvec3[3] func(bvec3[3] a) 1075e5c31af7Sopenharmony_ci { 1076e5c31af7Sopenharmony_ci return bvec3[3] (a[1], a[2], a[0]); 1077e5c31af7Sopenharmony_ci } 1078e5c31af7Sopenharmony_ci 1079e5c31af7Sopenharmony_ci "" 1080e5c31af7Sopenharmony_ci end 1081e5c31af7Sopenharmony_ci 1082e5c31af7Sopenharmony_ci case float_mat3 1083e5c31af7Sopenharmony_ci version 310 es 1084e5c31af7Sopenharmony_ci values 1085e5c31af7Sopenharmony_ci { 1086e5c31af7Sopenharmony_ci input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(-1.5, 0.0, -2.3) ]; 1087e5c31af7Sopenharmony_ci output vec3 out0 = [ vec3(2.0, -1.0, 2.0) | vec3(-2.3, 0.0, -2.3) ]; 1088e5c31af7Sopenharmony_ci } 1089e5c31af7Sopenharmony_ci 1090e5c31af7Sopenharmony_ci both "" 1091e5c31af7Sopenharmony_ci #version 310 es 1092e5c31af7Sopenharmony_ci precision highp float; 1093e5c31af7Sopenharmony_ci ${DECLARATIONS} 1094e5c31af7Sopenharmony_ci 1095e5c31af7Sopenharmony_ci mat3[3] func(mat3[3]); 1096e5c31af7Sopenharmony_ci 1097e5c31af7Sopenharmony_ci void main() 1098e5c31af7Sopenharmony_ci { 1099e5c31af7Sopenharmony_ci ${SETUP} 1100e5c31af7Sopenharmony_ci mat3[3] a, b; 1101e5c31af7Sopenharmony_ci a[0] = mat3(in0.x, in0.y, in0.z, 1102e5c31af7Sopenharmony_ci in0.x, in0.y, in0.z, 1103e5c31af7Sopenharmony_ci in0.x, in0.y, in0.z); 1104e5c31af7Sopenharmony_ci a[1] = mat3(in0.z, in0.x, -in0.y, 1105e5c31af7Sopenharmony_ci in0.z, in0.x, -in0.y, 1106e5c31af7Sopenharmony_ci in0.z, in0.x, -in0.y); 1107e5c31af7Sopenharmony_ci a[2] = mat3(-in0.z, -in0.z, in0.z, 1108e5c31af7Sopenharmony_ci -in0.y, -in0.y, in0.y, 1109e5c31af7Sopenharmony_ci -in0.x, -in0.x, in0.x); 1110e5c31af7Sopenharmony_ci 1111e5c31af7Sopenharmony_ci b = func(a); 1112e5c31af7Sopenharmony_ci 1113e5c31af7Sopenharmony_ci mat3 b0 = b[0]; 1114e5c31af7Sopenharmony_ci mat3 b1 = b[1]; 1115e5c31af7Sopenharmony_ci mat3 b2 = b[2]; 1116e5c31af7Sopenharmony_ci 1117e5c31af7Sopenharmony_ci float ret0 = b0[0][0]; 1118e5c31af7Sopenharmony_ci float ret1 = b1[1][1]; 1119e5c31af7Sopenharmony_ci float ret2 = b2[2][2]; 1120e5c31af7Sopenharmony_ci 1121e5c31af7Sopenharmony_ci out0 = vec3(ret0, ret1, ret2); 1122e5c31af7Sopenharmony_ci ${OUTPUT} 1123e5c31af7Sopenharmony_ci } 1124e5c31af7Sopenharmony_ci 1125e5c31af7Sopenharmony_ci mat3[3] func(mat3[3] x) 1126e5c31af7Sopenharmony_ci { 1127e5c31af7Sopenharmony_ci mat3[3] r; 1128e5c31af7Sopenharmony_ci r[0] = x[1]; 1129e5c31af7Sopenharmony_ci r[1] = x[2]; 1130e5c31af7Sopenharmony_ci r[2] = x[0]; 1131e5c31af7Sopenharmony_ci return r; 1132e5c31af7Sopenharmony_ci } 1133e5c31af7Sopenharmony_ci "" 1134e5c31af7Sopenharmony_ci end 1135e5c31af7Sopenharmony_ci 1136e5c31af7Sopenharmony_ci case int_mat3 1137e5c31af7Sopenharmony_ci version 310 es 1138e5c31af7Sopenharmony_ci values 1139e5c31af7Sopenharmony_ci { 1140e5c31af7Sopenharmony_ci input ivec3 in0 = [ ivec3(5, 1, 2) | ivec3(-1, 0, -2) ]; 1141e5c31af7Sopenharmony_ci output ivec3 out0 = [ ivec3(2, -1, 2) | ivec3(-2, 0, -2) ]; 1142e5c31af7Sopenharmony_ci } 1143e5c31af7Sopenharmony_ci 1144e5c31af7Sopenharmony_ci both "" 1145e5c31af7Sopenharmony_ci #version 310 es 1146e5c31af7Sopenharmony_ci precision highp int; 1147e5c31af7Sopenharmony_ci precision highp float; 1148e5c31af7Sopenharmony_ci ${DECLARATIONS} 1149e5c31af7Sopenharmony_ci 1150e5c31af7Sopenharmony_ci mat3[3] func(mat3[3]); 1151e5c31af7Sopenharmony_ci 1152e5c31af7Sopenharmony_ci void main() 1153e5c31af7Sopenharmony_ci { 1154e5c31af7Sopenharmony_ci ${SETUP} 1155e5c31af7Sopenharmony_ci mat3[3] a, b; 1156e5c31af7Sopenharmony_ci a[0] = mat3(in0.x, in0.y, in0.z, 1157e5c31af7Sopenharmony_ci in0.x, in0.y, in0.z, 1158e5c31af7Sopenharmony_ci in0.x, in0.y, in0.z); 1159e5c31af7Sopenharmony_ci a[1] = mat3(in0.z, in0.x, -in0.y, 1160e5c31af7Sopenharmony_ci in0.z, in0.x, -in0.y, 1161e5c31af7Sopenharmony_ci in0.z, in0.x, -in0.y); 1162e5c31af7Sopenharmony_ci a[2] = mat3(-in0.z, -in0.z, in0.z, 1163e5c31af7Sopenharmony_ci -in0.y, -in0.y, in0.y, 1164e5c31af7Sopenharmony_ci -in0.x, -in0.x, in0.x); 1165e5c31af7Sopenharmony_ci 1166e5c31af7Sopenharmony_ci b = func(a); 1167e5c31af7Sopenharmony_ci 1168e5c31af7Sopenharmony_ci mat3 b0 = b[0]; 1169e5c31af7Sopenharmony_ci mat3 b1 = b[1]; 1170e5c31af7Sopenharmony_ci mat3 b2 = b[2]; 1171e5c31af7Sopenharmony_ci 1172e5c31af7Sopenharmony_ci float ret0 = b0[0][0]; 1173e5c31af7Sopenharmony_ci float ret1 = b1[1][1]; 1174e5c31af7Sopenharmony_ci float ret2 = b2[2][2]; 1175e5c31af7Sopenharmony_ci 1176e5c31af7Sopenharmony_ci out0 = ivec3(ret0, ret1, ret2); 1177e5c31af7Sopenharmony_ci ${OUTPUT} 1178e5c31af7Sopenharmony_ci } 1179e5c31af7Sopenharmony_ci 1180e5c31af7Sopenharmony_ci mat3[3] func(mat3[3] x) 1181e5c31af7Sopenharmony_ci { 1182e5c31af7Sopenharmony_ci mat3[3] r; 1183e5c31af7Sopenharmony_ci r[0] = x[1]; 1184e5c31af7Sopenharmony_ci r[1] = x[2]; 1185e5c31af7Sopenharmony_ci r[2] = x[0]; 1186e5c31af7Sopenharmony_ci return r; 1187e5c31af7Sopenharmony_ci } 1188e5c31af7Sopenharmony_ci "" 1189e5c31af7Sopenharmony_ci end 1190e5c31af7Sopenharmony_ci 1191e5c31af7Sopenharmony_ci case bool_mat3 1192e5c31af7Sopenharmony_ci version 310 es 1193e5c31af7Sopenharmony_ci values 1194e5c31af7Sopenharmony_ci { 1195e5c31af7Sopenharmony_ci input bvec3 in0 = [ bvec3(true, false, true) | bvec3(true, true, false) ]; 1196e5c31af7Sopenharmony_ci output bvec3 out0 = [ bvec3(true, false, true) | bvec3(false, true, false) ]; 1197e5c31af7Sopenharmony_ci } 1198e5c31af7Sopenharmony_ci 1199e5c31af7Sopenharmony_ci both "" 1200e5c31af7Sopenharmony_ci #version 310 es 1201e5c31af7Sopenharmony_ci precision highp int; 1202e5c31af7Sopenharmony_ci precision highp float; 1203e5c31af7Sopenharmony_ci ${DECLARATIONS} 1204e5c31af7Sopenharmony_ci 1205e5c31af7Sopenharmony_ci mat3[3] func(mat3[3]); 1206e5c31af7Sopenharmony_ci void main() 1207e5c31af7Sopenharmony_ci { 1208e5c31af7Sopenharmony_ci ${SETUP} 1209e5c31af7Sopenharmony_ci mat3[3] a, b; 1210e5c31af7Sopenharmony_ci a[0] = mat3(in0.x, in0.y, in0.z, 1211e5c31af7Sopenharmony_ci in0.x, in0.y, in0.z, 1212e5c31af7Sopenharmony_ci in0.x, in0.y, in0.z); 1213e5c31af7Sopenharmony_ci a[1] = mat3(in0.z, in0.x, in0.y, 1214e5c31af7Sopenharmony_ci in0.z, in0.x, in0.y, 1215e5c31af7Sopenharmony_ci in0.z, in0.x, in0.y); 1216e5c31af7Sopenharmony_ci a[2] = mat3(in0.z, in0.z, in0.z, 1217e5c31af7Sopenharmony_ci in0.y, in0.y, in0.y, 1218e5c31af7Sopenharmony_ci in0.x, in0.x, in0.x); 1219e5c31af7Sopenharmony_ci 1220e5c31af7Sopenharmony_ci b = func(a); 1221e5c31af7Sopenharmony_ci 1222e5c31af7Sopenharmony_ci mat3 b0 = b[0]; 1223e5c31af7Sopenharmony_ci mat3 b1 = b[1]; 1224e5c31af7Sopenharmony_ci mat3 b2 = b[2]; 1225e5c31af7Sopenharmony_ci 1226e5c31af7Sopenharmony_ci float ret0 = b0[0][0]; 1227e5c31af7Sopenharmony_ci float ret1 = b1[1][1]; 1228e5c31af7Sopenharmony_ci float ret2 = b2[2][2]; 1229e5c31af7Sopenharmony_ci 1230e5c31af7Sopenharmony_ci out0 = bvec3(ret0, ret1, ret2); 1231e5c31af7Sopenharmony_ci ${OUTPUT} 1232e5c31af7Sopenharmony_ci } 1233e5c31af7Sopenharmony_ci 1234e5c31af7Sopenharmony_ci mat3[3] func(mat3[3] x) 1235e5c31af7Sopenharmony_ci { 1236e5c31af7Sopenharmony_ci mat3[3] r; 1237e5c31af7Sopenharmony_ci r[0] = x[1]; 1238e5c31af7Sopenharmony_ci r[1] = x[2]; 1239e5c31af7Sopenharmony_ci r[2] = x[0]; 1240e5c31af7Sopenharmony_ci return r; 1241e5c31af7Sopenharmony_ci } 1242e5c31af7Sopenharmony_ci "" 1243e5c31af7Sopenharmony_ci end 1244e5c31af7Sopenharmony_ci 1245e5c31af7Sopenharmony_ciend # unnamed_parameter 1246e5c31af7Sopenharmony_ci 1247e5c31af7Sopenharmony_cigroup declaration "Declaring arrays" 1248e5c31af7Sopenharmony_ci 1249e5c31af7Sopenharmony_ci case implicit_size_float 1250e5c31af7Sopenharmony_ci version 310 es 1251e5c31af7Sopenharmony_ci values 1252e5c31af7Sopenharmony_ci { 1253e5c31af7Sopenharmony_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) ]; 1254e5c31af7Sopenharmony_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) ]; 1255e5c31af7Sopenharmony_ci } 1256e5c31af7Sopenharmony_ci 1257e5c31af7Sopenharmony_ci both "" 1258e5c31af7Sopenharmony_ci #version 310 es 1259e5c31af7Sopenharmony_ci precision highp float; 1260e5c31af7Sopenharmony_ci ${DECLARATIONS} 1261e5c31af7Sopenharmony_ci 1262e5c31af7Sopenharmony_ci void main() 1263e5c31af7Sopenharmony_ci { 1264e5c31af7Sopenharmony_ci ${SETUP} 1265e5c31af7Sopenharmony_ci float[] x = float[] (in0.z, in0.x, in0.y); 1266e5c31af7Sopenharmony_ci float[] y = x; 1267e5c31af7Sopenharmony_ci 1268e5c31af7Sopenharmony_ci out0 = vec3(y[0], y[1], y[2]); 1269e5c31af7Sopenharmony_ci ${OUTPUT} 1270e5c31af7Sopenharmony_ci } 1271e5c31af7Sopenharmony_ci "" 1272e5c31af7Sopenharmony_ci end 1273e5c31af7Sopenharmony_ci 1274e5c31af7Sopenharmony_ci case implicit_size_int 1275e5c31af7Sopenharmony_ci version 310 es 1276e5c31af7Sopenharmony_ci values 1277e5c31af7Sopenharmony_ci { 1278e5c31af7Sopenharmony_ci input ivec3 in0 = [ ivec3(0, 1, 2) | ivec3(7, -1, 2) | ivec3(3, 1, -2) ]; 1279e5c31af7Sopenharmony_ci output ivec3 out0 = [ ivec3(2, 0, 1) | ivec3(2, 7, -1) | ivec3(-2, 3, 1) ]; 1280e5c31af7Sopenharmony_ci } 1281e5c31af7Sopenharmony_ci 1282e5c31af7Sopenharmony_ci both "" 1283e5c31af7Sopenharmony_ci #version 310 es 1284e5c31af7Sopenharmony_ci precision highp int; 1285e5c31af7Sopenharmony_ci precision highp float; 1286e5c31af7Sopenharmony_ci ${DECLARATIONS} 1287e5c31af7Sopenharmony_ci 1288e5c31af7Sopenharmony_ci void main() 1289e5c31af7Sopenharmony_ci { 1290e5c31af7Sopenharmony_ci ${SETUP} 1291e5c31af7Sopenharmony_ci int[] x = int[] (in0.z, in0.x, in0.y); 1292e5c31af7Sopenharmony_ci int[] y = x; 1293e5c31af7Sopenharmony_ci 1294e5c31af7Sopenharmony_ci out0 = ivec3(y[0], y[1], y[2]); 1295e5c31af7Sopenharmony_ci ${OUTPUT} 1296e5c31af7Sopenharmony_ci } 1297e5c31af7Sopenharmony_ci "" 1298e5c31af7Sopenharmony_ci end 1299e5c31af7Sopenharmony_ci 1300e5c31af7Sopenharmony_ci case implicit_size_bool 1301e5c31af7Sopenharmony_ci version 310 es 1302e5c31af7Sopenharmony_ci values 1303e5c31af7Sopenharmony_ci { 1304e5c31af7Sopenharmony_ci input bvec3 in0 = [ bvec3(false, true, true) ]; 1305e5c31af7Sopenharmony_ci output bvec3 out0 = [ bvec3(true, false, true) ]; 1306e5c31af7Sopenharmony_ci } 1307e5c31af7Sopenharmony_ci 1308e5c31af7Sopenharmony_ci both "" 1309e5c31af7Sopenharmony_ci #version 310 es 1310e5c31af7Sopenharmony_ci precision highp int; 1311e5c31af7Sopenharmony_ci precision highp float; 1312e5c31af7Sopenharmony_ci ${DECLARATIONS} 1313e5c31af7Sopenharmony_ci 1314e5c31af7Sopenharmony_ci void main() 1315e5c31af7Sopenharmony_ci { 1316e5c31af7Sopenharmony_ci ${SETUP} 1317e5c31af7Sopenharmony_ci bool[] x = bool[] (in0.z, in0.x, in0.y); 1318e5c31af7Sopenharmony_ci bool[] y = x; 1319e5c31af7Sopenharmony_ci 1320e5c31af7Sopenharmony_ci out0 = bvec3(y[0], y[1], y[2]); 1321e5c31af7Sopenharmony_ci ${OUTPUT} 1322e5c31af7Sopenharmony_ci } 1323e5c31af7Sopenharmony_ci "" 1324e5c31af7Sopenharmony_ci end 1325e5c31af7Sopenharmony_ci 1326e5c31af7Sopenharmony_ci case implicit_size_struct 1327e5c31af7Sopenharmony_ci version 310 es 1328e5c31af7Sopenharmony_ci values 1329e5c31af7Sopenharmony_ci { 1330e5c31af7Sopenharmony_ci input vec3 in0 = [ vec3(0.5, 1.0, 2.0) ]; 1331e5c31af7Sopenharmony_ci output vec3 out0 = [ vec3(-1.0, -0.5, 2.0) ]; 1332e5c31af7Sopenharmony_ci } 1333e5c31af7Sopenharmony_ci 1334e5c31af7Sopenharmony_ci both "" 1335e5c31af7Sopenharmony_ci #version 310 es 1336e5c31af7Sopenharmony_ci precision highp float; 1337e5c31af7Sopenharmony_ci ${DECLARATIONS} 1338e5c31af7Sopenharmony_ci 1339e5c31af7Sopenharmony_ci struct test 1340e5c31af7Sopenharmony_ci { 1341e5c31af7Sopenharmony_ci float f; 1342e5c31af7Sopenharmony_ci vec3 v; 1343e5c31af7Sopenharmony_ci }; 1344e5c31af7Sopenharmony_ci 1345e5c31af7Sopenharmony_ci void main() 1346e5c31af7Sopenharmony_ci { 1347e5c31af7Sopenharmony_ci ${SETUP} 1348e5c31af7Sopenharmony_ci 1349e5c31af7Sopenharmony_ci test a = test(in0.z, vec3(in0.x, in0.y, in0.z)); 1350e5c31af7Sopenharmony_ci test b = test(in0.y, vec3(-in0.z, -in0.x, -in0.y)); 1351e5c31af7Sopenharmony_ci test c = test(in0.x, vec3(-in0.y, in0.z, -in0.x)); 1352e5c31af7Sopenharmony_ci 1353e5c31af7Sopenharmony_ci test[] x = test[] (c, b, a); 1354e5c31af7Sopenharmony_ci test[] y = x; 1355e5c31af7Sopenharmony_ci 1356e5c31af7Sopenharmony_ci out0 = vec3(y[0].v.x, y[1].v.y, y[2].v.z); 1357e5c31af7Sopenharmony_ci ${OUTPUT} 1358e5c31af7Sopenharmony_ci } 1359e5c31af7Sopenharmony_ci "" 1360e5c31af7Sopenharmony_ci end 1361e5c31af7Sopenharmony_ci 1362e5c31af7Sopenharmony_ci case implicit_size_float_vec3 1363e5c31af7Sopenharmony_ci version 310 es 1364e5c31af7Sopenharmony_ci values 1365e5c31af7Sopenharmony_ci { 1366e5c31af7Sopenharmony_ci input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(-0.5, 11.2, -1.0) ]; 1367e5c31af7Sopenharmony_ci output vec3 out0 = [ vec3(0.5, -2.0, 1.0) | vec3(-0.5, 1.0, 11.2) ]; 1368e5c31af7Sopenharmony_ci } 1369e5c31af7Sopenharmony_ci 1370e5c31af7Sopenharmony_ci both "" 1371e5c31af7Sopenharmony_ci #version 310 es 1372e5c31af7Sopenharmony_ci precision highp float; 1373e5c31af7Sopenharmony_ci ${DECLARATIONS} 1374e5c31af7Sopenharmony_ci 1375e5c31af7Sopenharmony_ci void main() 1376e5c31af7Sopenharmony_ci { 1377e5c31af7Sopenharmony_ci ${SETUP} 1378e5c31af7Sopenharmony_ci vec3[] x = vec3[] ( vec3(in0.x, in0.y, -in0.z) , 1379e5c31af7Sopenharmony_ci vec3(in0.y, -in0.z, in0.x) , 1380e5c31af7Sopenharmony_ci vec3(-in0.z, in0.x, in0.y) ); 1381e5c31af7Sopenharmony_ci vec3[] y = x; 1382e5c31af7Sopenharmony_ci out0 = vec3(y[0].x, y[1].y, y[2].z); 1383e5c31af7Sopenharmony_ci ${OUTPUT} 1384e5c31af7Sopenharmony_ci } 1385e5c31af7Sopenharmony_ci "" 1386e5c31af7Sopenharmony_ci end 1387e5c31af7Sopenharmony_ci 1388e5c31af7Sopenharmony_ci case implicit_size_int_ivec3 1389e5c31af7Sopenharmony_ci version 310 es 1390e5c31af7Sopenharmony_ci values 1391e5c31af7Sopenharmony_ci { 1392e5c31af7Sopenharmony_ci input ivec3 in0 = [ ivec3(0, 1, 2) | ivec3(5, 11, -1) ]; 1393e5c31af7Sopenharmony_ci output ivec3 out0 = [ ivec3(0, -2, 1) | ivec3(5, 1, 11) ]; 1394e5c31af7Sopenharmony_ci } 1395e5c31af7Sopenharmony_ci 1396e5c31af7Sopenharmony_ci both "" 1397e5c31af7Sopenharmony_ci #version 310 es 1398e5c31af7Sopenharmony_ci precision highp int; 1399e5c31af7Sopenharmony_ci precision highp float; 1400e5c31af7Sopenharmony_ci ${DECLARATIONS} 1401e5c31af7Sopenharmony_ci 1402e5c31af7Sopenharmony_ci void main() 1403e5c31af7Sopenharmony_ci { 1404e5c31af7Sopenharmony_ci ${SETUP} 1405e5c31af7Sopenharmony_ci ivec3[] x = ivec3[] ( ivec3(in0.x, in0.y, -in0.z) , 1406e5c31af7Sopenharmony_ci ivec3(in0.y, -in0.z, in0.x) , 1407e5c31af7Sopenharmony_ci ivec3(-in0.z, in0.x, in0.y) ); 1408e5c31af7Sopenharmony_ci ivec3[] y = x; 1409e5c31af7Sopenharmony_ci out0 = ivec3(y[0].x, y[1].y, y[2].z); 1410e5c31af7Sopenharmony_ci ${OUTPUT} 1411e5c31af7Sopenharmony_ci } 1412e5c31af7Sopenharmony_ci "" 1413e5c31af7Sopenharmony_ci end 1414e5c31af7Sopenharmony_ci 1415e5c31af7Sopenharmony_ci case implicit_size_bool_bvec3 1416e5c31af7Sopenharmony_ci version 310 es 1417e5c31af7Sopenharmony_ci values 1418e5c31af7Sopenharmony_ci { 1419e5c31af7Sopenharmony_ci input bvec3 in0 = [ bvec3(true, false, true) ]; 1420e5c31af7Sopenharmony_ci output bvec3 out0 = [ bvec3(true, true, false) ]; 1421e5c31af7Sopenharmony_ci } 1422e5c31af7Sopenharmony_ci 1423e5c31af7Sopenharmony_ci both "" 1424e5c31af7Sopenharmony_ci #version 310 es 1425e5c31af7Sopenharmony_ci precision highp int; 1426e5c31af7Sopenharmony_ci precision highp float; 1427e5c31af7Sopenharmony_ci ${DECLARATIONS} 1428e5c31af7Sopenharmony_ci 1429e5c31af7Sopenharmony_ci void main() 1430e5c31af7Sopenharmony_ci { 1431e5c31af7Sopenharmony_ci ${SETUP} 1432e5c31af7Sopenharmony_ci bvec3[] x = bvec3[] ( bvec3(in0.x, in0.y, in0.z) , 1433e5c31af7Sopenharmony_ci bvec3(in0.y, in0.z, in0.x) , 1434e5c31af7Sopenharmony_ci bvec3(in0.z, in0.x, in0.y) ); 1435e5c31af7Sopenharmony_ci bvec3[] y = x; 1436e5c31af7Sopenharmony_ci out0 = bvec3(y[0].x, y[1].y, y[2].z); 1437e5c31af7Sopenharmony_ci ${OUTPUT} 1438e5c31af7Sopenharmony_ci } 1439e5c31af7Sopenharmony_ci "" 1440e5c31af7Sopenharmony_ci end 1441e5c31af7Sopenharmony_ci 1442e5c31af7Sopenharmony_ci case implicit_size_float_mat3 1443e5c31af7Sopenharmony_ci version 310 es 1444e5c31af7Sopenharmony_ci values 1445e5c31af7Sopenharmony_ci { 1446e5c31af7Sopenharmony_ci input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(-1.5, 0.0, -2.3) ]; 1447e5c31af7Sopenharmony_ci output vec3 out0 = [ vec3(0.5, -1.0, 1.0) | vec3(-1.5, 0.0, 0.0) ]; 1448e5c31af7Sopenharmony_ci } 1449e5c31af7Sopenharmony_ci 1450e5c31af7Sopenharmony_ci both "" 1451e5c31af7Sopenharmony_ci #version 310 es 1452e5c31af7Sopenharmony_ci precision highp float; 1453e5c31af7Sopenharmony_ci ${DECLARATIONS} 1454e5c31af7Sopenharmony_ci 1455e5c31af7Sopenharmony_ci void main() 1456e5c31af7Sopenharmony_ci { 1457e5c31af7Sopenharmony_ci ${SETUP} 1458e5c31af7Sopenharmony_ci mat3[] a = mat3[] ( mat3( in0.x, in0.y, in0.z, 1459e5c31af7Sopenharmony_ci in0.x, in0.y, in0.z, 1460e5c31af7Sopenharmony_ci in0.x, in0.y, in0.z) , 1461e5c31af7Sopenharmony_ci mat3( in0.z, in0.x, -in0.y, 1462e5c31af7Sopenharmony_ci in0.z, in0.x, -in0.y, 1463e5c31af7Sopenharmony_ci in0.z, in0.x, -in0.y) , 1464e5c31af7Sopenharmony_ci mat3( -in0.z, -in0.z, in0.z, 1465e5c31af7Sopenharmony_ci -in0.y, -in0.y, in0.y, 1466e5c31af7Sopenharmony_ci -in0.x, -in0.x, in0.x) ); 1467e5c31af7Sopenharmony_ci 1468e5c31af7Sopenharmony_ci mat3 a0 = a[0]; 1469e5c31af7Sopenharmony_ci mat3 a1 = a[1]; 1470e5c31af7Sopenharmony_ci mat3 a2 = a[2]; 1471e5c31af7Sopenharmony_ci 1472e5c31af7Sopenharmony_ci float ret0 = a0[2][0]; 1473e5c31af7Sopenharmony_ci float ret1 = a1[0][2]; 1474e5c31af7Sopenharmony_ci float ret2 = a2[1][2]; 1475e5c31af7Sopenharmony_ci 1476e5c31af7Sopenharmony_ci out0 = vec3(ret0, ret1, ret2); 1477e5c31af7Sopenharmony_ci ${OUTPUT} 1478e5c31af7Sopenharmony_ci } 1479e5c31af7Sopenharmony_ci "" 1480e5c31af7Sopenharmony_ci end 1481e5c31af7Sopenharmony_ci 1482e5c31af7Sopenharmony_ci case implicit_size_int_mat3 1483e5c31af7Sopenharmony_ci version 310 es 1484e5c31af7Sopenharmony_ci values 1485e5c31af7Sopenharmony_ci { 1486e5c31af7Sopenharmony_ci input ivec3 in0 = [ ivec3(0, 1, 2) | ivec3(-1, 0, -2) ]; 1487e5c31af7Sopenharmony_ci output ivec3 out0 = [ ivec3(0, -1, 1) | ivec3(-1, 0, 0) ]; 1488e5c31af7Sopenharmony_ci } 1489e5c31af7Sopenharmony_ci 1490e5c31af7Sopenharmony_ci both "" 1491e5c31af7Sopenharmony_ci #version 310 es 1492e5c31af7Sopenharmony_ci precision highp int; 1493e5c31af7Sopenharmony_ci precision highp float; 1494e5c31af7Sopenharmony_ci ${DECLARATIONS} 1495e5c31af7Sopenharmony_ci 1496e5c31af7Sopenharmony_ci void main() 1497e5c31af7Sopenharmony_ci { 1498e5c31af7Sopenharmony_ci ${SETUP} 1499e5c31af7Sopenharmony_ci mat3[] a = mat3[] ( mat3( in0.x, in0.y, in0.z, 1500e5c31af7Sopenharmony_ci in0.x, in0.y, in0.z, 1501e5c31af7Sopenharmony_ci in0.x, in0.y, in0.z) , 1502e5c31af7Sopenharmony_ci mat3( in0.z, in0.x, -in0.y, 1503e5c31af7Sopenharmony_ci in0.z, in0.x, -in0.y, 1504e5c31af7Sopenharmony_ci in0.z, in0.x, -in0.y) , 1505e5c31af7Sopenharmony_ci mat3( -in0.z, -in0.z, in0.z, 1506e5c31af7Sopenharmony_ci -in0.y, -in0.y, in0.y, 1507e5c31af7Sopenharmony_ci -in0.x, -in0.x, in0.x) ); 1508e5c31af7Sopenharmony_ci 1509e5c31af7Sopenharmony_ci mat3 a0 = a[0]; 1510e5c31af7Sopenharmony_ci mat3 a1 = a[1]; 1511e5c31af7Sopenharmony_ci mat3 a2 = a[2]; 1512e5c31af7Sopenharmony_ci 1513e5c31af7Sopenharmony_ci float ret0 = a0[2][0]; 1514e5c31af7Sopenharmony_ci float ret1 = a1[0][2]; 1515e5c31af7Sopenharmony_ci float ret2 = a2[1][2]; 1516e5c31af7Sopenharmony_ci 1517e5c31af7Sopenharmony_ci out0 = ivec3(ret0, ret1, ret2); 1518e5c31af7Sopenharmony_ci ${OUTPUT} 1519e5c31af7Sopenharmony_ci } 1520e5c31af7Sopenharmony_ci "" 1521e5c31af7Sopenharmony_ci end 1522e5c31af7Sopenharmony_ci 1523e5c31af7Sopenharmony_ci case implicit_size_bool_mat3 1524e5c31af7Sopenharmony_ci version 310 es 1525e5c31af7Sopenharmony_ci values 1526e5c31af7Sopenharmony_ci { 1527e5c31af7Sopenharmony_ci input bvec3 in0 = [ bvec3(true, false, true) ]; 1528e5c31af7Sopenharmony_ci output bvec3 out0 = [ bvec3(true, false, false) ]; 1529e5c31af7Sopenharmony_ci } 1530e5c31af7Sopenharmony_ci 1531e5c31af7Sopenharmony_ci both "" 1532e5c31af7Sopenharmony_ci #version 310 es 1533e5c31af7Sopenharmony_ci precision highp int; 1534e5c31af7Sopenharmony_ci precision highp float; 1535e5c31af7Sopenharmony_ci ${DECLARATIONS} 1536e5c31af7Sopenharmony_ci 1537e5c31af7Sopenharmony_ci void main() 1538e5c31af7Sopenharmony_ci { 1539e5c31af7Sopenharmony_ci ${SETUP} 1540e5c31af7Sopenharmony_ci mat3[] a = mat3[] ( mat3( in0.x, in0.y, in0.z, 1541e5c31af7Sopenharmony_ci in0.x, in0.y, in0.z, 1542e5c31af7Sopenharmony_ci in0.x, in0.y, in0.z) , 1543e5c31af7Sopenharmony_ci mat3( in0.z, in0.x, in0.y, 1544e5c31af7Sopenharmony_ci in0.z, in0.x, in0.y, 1545e5c31af7Sopenharmony_ci in0.z, in0.x, in0.y) , 1546e5c31af7Sopenharmony_ci mat3( in0.z, in0.z, in0.z, 1547e5c31af7Sopenharmony_ci in0.y, in0.y, in0.y, 1548e5c31af7Sopenharmony_ci in0.x, in0.x, in0.x) ); 1549e5c31af7Sopenharmony_ci 1550e5c31af7Sopenharmony_ci mat3 a0 = a[0]; 1551e5c31af7Sopenharmony_ci mat3 a1 = a[1]; 1552e5c31af7Sopenharmony_ci mat3 a2 = a[2]; 1553e5c31af7Sopenharmony_ci 1554e5c31af7Sopenharmony_ci float ret0 = a0[2][0]; 1555e5c31af7Sopenharmony_ci float ret1 = a1[0][2]; 1556e5c31af7Sopenharmony_ci float ret2 = a2[1][2]; 1557e5c31af7Sopenharmony_ci 1558e5c31af7Sopenharmony_ci out0 = bvec3(ret0, ret1, ret2); 1559e5c31af7Sopenharmony_ci ${OUTPUT} 1560e5c31af7Sopenharmony_ci } 1561e5c31af7Sopenharmony_ci "" 1562e5c31af7Sopenharmony_ci end 1563e5c31af7Sopenharmony_ci 1564e5c31af7Sopenharmony_ci 1565e5c31af7Sopenharmony_ci case constant_expression_array_size 1566e5c31af7Sopenharmony_ci version 310 es 1567e5c31af7Sopenharmony_ci 1568e5c31af7Sopenharmony_ci both "" 1569e5c31af7Sopenharmony_ci #version 310 es 1570e5c31af7Sopenharmony_ci precision highp float; 1571e5c31af7Sopenharmony_ci ${DECLARATIONS} 1572e5c31af7Sopenharmony_ci 1573e5c31af7Sopenharmony_ci const int a = 4; 1574e5c31af7Sopenharmony_ci 1575e5c31af7Sopenharmony_ci void main () 1576e5c31af7Sopenharmony_ci { 1577e5c31af7Sopenharmony_ci const int b = 5; 1578e5c31af7Sopenharmony_ci float[a] array1; 1579e5c31af7Sopenharmony_ci float[b] array2; 1580e5c31af7Sopenharmony_ci float[array1.length()] array3; 1581e5c31af7Sopenharmony_ci float[a+b] array4; 1582e5c31af7Sopenharmony_ci ${OUTPUT} 1583e5c31af7Sopenharmony_ci } 1584e5c31af7Sopenharmony_ci "" 1585e5c31af7Sopenharmony_ci end 1586e5c31af7Sopenharmony_ci 1587e5c31af7Sopenharmony_ci case constant_expression_array_access 1588e5c31af7Sopenharmony_ci version 310 es 1589e5c31af7Sopenharmony_ci values 1590e5c31af7Sopenharmony_ci { 1591e5c31af7Sopenharmony_ci input vec3 in0 = [ vec3(0.5, 1.0, 2.0) ]; 1592e5c31af7Sopenharmony_ci output vec3 out0 = [ vec3(-2.0, -1.0, -0.5) ]; 1593e5c31af7Sopenharmony_ci } 1594e5c31af7Sopenharmony_ci 1595e5c31af7Sopenharmony_ci both "" 1596e5c31af7Sopenharmony_ci #version 310 es 1597e5c31af7Sopenharmony_ci precision highp float; 1598e5c31af7Sopenharmony_ci ${DECLARATIONS} 1599e5c31af7Sopenharmony_ci 1600e5c31af7Sopenharmony_ci const int a = 3; 1601e5c31af7Sopenharmony_ci 1602e5c31af7Sopenharmony_ci void main () 1603e5c31af7Sopenharmony_ci { 1604e5c31af7Sopenharmony_ci ${SETUP} 1605e5c31af7Sopenharmony_ci const int b = 2; 1606e5c31af7Sopenharmony_ci float x = float[] (in0.x, in0.y, in0.z, -in0.z, -in0.y, -in0.x) [a]; 1607e5c31af7Sopenharmony_ci float y = float[] (in0.x, in0.y, in0.z, -in0.z, -in0.y, -in0.x) [b+2]; 1608e5c31af7Sopenharmony_ci float z = float[] (in0.x, in0.y, in0.z, -in0.z, -in0.y, -in0.x) [5]; 1609e5c31af7Sopenharmony_ci out0 = vec3(x, y, z); 1610e5c31af7Sopenharmony_ci ${OUTPUT} 1611e5c31af7Sopenharmony_ci } 1612e5c31af7Sopenharmony_ci "" 1613e5c31af7Sopenharmony_ci end 1614e5c31af7Sopenharmony_ci 1615e5c31af7Sopenharmony_ci case dynamic_expression_array_access 1616e5c31af7Sopenharmony_ci version 310 es 1617e5c31af7Sopenharmony_ci values 1618e5c31af7Sopenharmony_ci { 1619e5c31af7Sopenharmony_ci input vec3 in0 = [ vec3(0.5, 1.0, 2.0) ]; 1620e5c31af7Sopenharmony_ci input ivec2 in1 = ivec2(3, 2); 1621e5c31af7Sopenharmony_ci output vec3 out0 = [ vec3(-2.0, -1.0, -0.5) ]; 1622e5c31af7Sopenharmony_ci } 1623e5c31af7Sopenharmony_ci 1624e5c31af7Sopenharmony_ci both "" 1625e5c31af7Sopenharmony_ci #version 310 es 1626e5c31af7Sopenharmony_ci precision highp int; 1627e5c31af7Sopenharmony_ci precision highp float; 1628e5c31af7Sopenharmony_ci ${DECLARATIONS} 1629e5c31af7Sopenharmony_ci 1630e5c31af7Sopenharmony_ci void main () 1631e5c31af7Sopenharmony_ci { 1632e5c31af7Sopenharmony_ci ${SETUP} 1633e5c31af7Sopenharmony_ci float x = float[] (in0.x, in0.y, in0.z, -in0.z, -in0.y, -in0.x) [in1.x]; 1634e5c31af7Sopenharmony_ci float y = float[] (in0.x, in0.y, in0.z, -in0.z, -in0.y, -in0.x) [in1.y+2]; 1635e5c31af7Sopenharmony_ci float z = float[] (in0.x, in0.y, in0.z, -in0.z, -in0.y, -in0.x) [in1.x+in1.y]; 1636e5c31af7Sopenharmony_ci out0 = vec3(x, y, z); 1637e5c31af7Sopenharmony_ci ${OUTPUT} 1638e5c31af7Sopenharmony_ci } 1639e5c31af7Sopenharmony_ci "" 1640e5c31af7Sopenharmony_ci end 1641e5c31af7Sopenharmony_ci 1642e5c31af7Sopenharmony_ci case multiple_declarations_single_statement_explicit 1643e5c31af7Sopenharmony_ci version 310 es 1644e5c31af7Sopenharmony_ci values 1645e5c31af7Sopenharmony_ci { 1646e5c31af7Sopenharmony_ci input vec3 in0 = [ vec3(0.5, 1.0, 2.0) ]; 1647e5c31af7Sopenharmony_ci output vec3 out0 = [ vec3(2.0, -1.0, 0.5) ]; 1648e5c31af7Sopenharmony_ci } 1649e5c31af7Sopenharmony_ci 1650e5c31af7Sopenharmony_ci both "" 1651e5c31af7Sopenharmony_ci #version 310 es 1652e5c31af7Sopenharmony_ci precision highp float; 1653e5c31af7Sopenharmony_ci ${DECLARATIONS} 1654e5c31af7Sopenharmony_ci 1655e5c31af7Sopenharmony_ci void main () 1656e5c31af7Sopenharmony_ci { 1657e5c31af7Sopenharmony_ci ${SETUP} 1658e5c31af7Sopenharmony_ci float[] x = float[6] (in0.x, in0.y, in0.z, -in0.z, -in0.y, -in0.x), 1659e5c31af7Sopenharmony_ci y = float[2] (in0.x, -in0.y); 1660e5c31af7Sopenharmony_ci out0 = vec3(x[2], y[1], x[0]); 1661e5c31af7Sopenharmony_ci ${OUTPUT} 1662e5c31af7Sopenharmony_ci } 1663e5c31af7Sopenharmony_ci "" 1664e5c31af7Sopenharmony_ci end 1665e5c31af7Sopenharmony_ci 1666e5c31af7Sopenharmony_ci case multiple_declarations_single_statement_implicit 1667e5c31af7Sopenharmony_ci version 310 es 1668e5c31af7Sopenharmony_ci values 1669e5c31af7Sopenharmony_ci { 1670e5c31af7Sopenharmony_ci input ivec3 in0 = [ ivec3(5, 1, 2) ]; 1671e5c31af7Sopenharmony_ci output ivec3 out0 = [ ivec3(2, -1, 5) ]; 1672e5c31af7Sopenharmony_ci } 1673e5c31af7Sopenharmony_ci 1674e5c31af7Sopenharmony_ci both "" 1675e5c31af7Sopenharmony_ci #version 310 es 1676e5c31af7Sopenharmony_ci precision highp int; 1677e5c31af7Sopenharmony_ci precision highp float; 1678e5c31af7Sopenharmony_ci ${DECLARATIONS} 1679e5c31af7Sopenharmony_ci 1680e5c31af7Sopenharmony_ci void main () 1681e5c31af7Sopenharmony_ci { 1682e5c31af7Sopenharmony_ci ${SETUP} 1683e5c31af7Sopenharmony_ci int[] x = int[] (in0.x, in0.y, in0.z, -in0.z, -in0.y, -in0.x), 1684e5c31af7Sopenharmony_ci y = int[] (in0.x, -in0.y); 1685e5c31af7Sopenharmony_ci out0 = ivec3(x[2], y[1], x[0]); 1686e5c31af7Sopenharmony_ci ${OUTPUT} 1687e5c31af7Sopenharmony_ci } 1688e5c31af7Sopenharmony_ci "" 1689e5c31af7Sopenharmony_ci end 1690e5c31af7Sopenharmony_ci 1691e5c31af7Sopenharmony_ciend # declaration 1692e5c31af7Sopenharmony_ci 1693e5c31af7Sopenharmony_cigroup length "Array length method" 1694e5c31af7Sopenharmony_ci 1695e5c31af7Sopenharmony_ci case float 1696e5c31af7Sopenharmony_ci version 310 es 1697e5c31af7Sopenharmony_ci values 1698e5c31af7Sopenharmony_ci { 1699e5c31af7Sopenharmony_ci input vec3 in0 = [ vec3(0.5, 1.0, 2.0) ]; 1700e5c31af7Sopenharmony_ci output ivec3 out0 = [ ivec3(3, 5, 13) ]; 1701e5c31af7Sopenharmony_ci } 1702e5c31af7Sopenharmony_ci 1703e5c31af7Sopenharmony_ci both "" 1704e5c31af7Sopenharmony_ci #version 310 es 1705e5c31af7Sopenharmony_ci precision highp float; 1706e5c31af7Sopenharmony_ci ${DECLARATIONS} 1707e5c31af7Sopenharmony_ci 1708e5c31af7Sopenharmony_ci void main() 1709e5c31af7Sopenharmony_ci { 1710e5c31af7Sopenharmony_ci ${SETUP} 1711e5c31af7Sopenharmony_ci float[] x = float[3] (in0.z, in0.x, in0.y); 1712e5c31af7Sopenharmony_ci float[] y = float[] (in0.z, in0.x, in0.y, in0.x, in0.y); 1713e5c31af7Sopenharmony_ci float[13] z; 1714e5c31af7Sopenharmony_ci 1715e5c31af7Sopenharmony_ci out0 = ivec3(x.length(), y.length(), z.length()); 1716e5c31af7Sopenharmony_ci ${OUTPUT} 1717e5c31af7Sopenharmony_ci } 1718e5c31af7Sopenharmony_ci "" 1719e5c31af7Sopenharmony_ci end 1720e5c31af7Sopenharmony_ci 1721e5c31af7Sopenharmony_ci case int 1722e5c31af7Sopenharmony_ci version 310 es 1723e5c31af7Sopenharmony_ci values 1724e5c31af7Sopenharmony_ci { 1725e5c31af7Sopenharmony_ci input ivec3 in0 = [ ivec3(0, 1, 2) ]; 1726e5c31af7Sopenharmony_ci output ivec3 out0 = [ ivec3(3, 5, 13) ]; 1727e5c31af7Sopenharmony_ci } 1728e5c31af7Sopenharmony_ci 1729e5c31af7Sopenharmony_ci both "" 1730e5c31af7Sopenharmony_ci #version 310 es 1731e5c31af7Sopenharmony_ci precision highp int; 1732e5c31af7Sopenharmony_ci precision highp float; 1733e5c31af7Sopenharmony_ci ${DECLARATIONS} 1734e5c31af7Sopenharmony_ci 1735e5c31af7Sopenharmony_ci void main() 1736e5c31af7Sopenharmony_ci { 1737e5c31af7Sopenharmony_ci ${SETUP} 1738e5c31af7Sopenharmony_ci int[] x = int[3] (in0.z, in0.x, in0.y); 1739e5c31af7Sopenharmony_ci int[] y = int[] (in0.z, in0.x, in0.y, in0.x, in0.y); 1740e5c31af7Sopenharmony_ci int[13] z; 1741e5c31af7Sopenharmony_ci 1742e5c31af7Sopenharmony_ci out0 = ivec3(x.length(), y.length(), z.length()); 1743e5c31af7Sopenharmony_ci ${OUTPUT} 1744e5c31af7Sopenharmony_ci } 1745e5c31af7Sopenharmony_ci "" 1746e5c31af7Sopenharmony_ci end 1747e5c31af7Sopenharmony_ci 1748e5c31af7Sopenharmony_ci case bool 1749e5c31af7Sopenharmony_ci version 310 es 1750e5c31af7Sopenharmony_ci values 1751e5c31af7Sopenharmony_ci { 1752e5c31af7Sopenharmony_ci input bvec3 in0 = [ bvec3(true, false, true) ]; 1753e5c31af7Sopenharmony_ci output ivec3 out0 = [ ivec3(3, 5, 13) ]; 1754e5c31af7Sopenharmony_ci } 1755e5c31af7Sopenharmony_ci 1756e5c31af7Sopenharmony_ci both "" 1757e5c31af7Sopenharmony_ci #version 310 es 1758e5c31af7Sopenharmony_ci precision highp int; 1759e5c31af7Sopenharmony_ci precision highp float; 1760e5c31af7Sopenharmony_ci ${DECLARATIONS} 1761e5c31af7Sopenharmony_ci 1762e5c31af7Sopenharmony_ci void main() 1763e5c31af7Sopenharmony_ci { 1764e5c31af7Sopenharmony_ci ${SETUP} 1765e5c31af7Sopenharmony_ci bool[] x = bool[3] (in0.z, in0.x, in0.y); 1766e5c31af7Sopenharmony_ci bool[] y = bool[] (in0.z, in0.x, in0.y, in0.x, in0.y); 1767e5c31af7Sopenharmony_ci bool[13] z; 1768e5c31af7Sopenharmony_ci 1769e5c31af7Sopenharmony_ci out0 = ivec3(x.length(), y.length(), z.length()); 1770e5c31af7Sopenharmony_ci ${OUTPUT} 1771e5c31af7Sopenharmony_ci } 1772e5c31af7Sopenharmony_ci "" 1773e5c31af7Sopenharmony_ci end 1774e5c31af7Sopenharmony_ci 1775e5c31af7Sopenharmony_ci case struct 1776e5c31af7Sopenharmony_ci version 310 es 1777e5c31af7Sopenharmony_ci values 1778e5c31af7Sopenharmony_ci { 1779e5c31af7Sopenharmony_ci input vec3 in0 = [ vec3(0.5, 1.0, 2.0) ]; 1780e5c31af7Sopenharmony_ci output ivec3 out0 = [ ivec3(3, 5, 13) ]; 1781e5c31af7Sopenharmony_ci } 1782e5c31af7Sopenharmony_ci 1783e5c31af7Sopenharmony_ci both "" 1784e5c31af7Sopenharmony_ci #version 310 es 1785e5c31af7Sopenharmony_ci precision highp float; 1786e5c31af7Sopenharmony_ci ${DECLARATIONS} 1787e5c31af7Sopenharmony_ci 1788e5c31af7Sopenharmony_ci struct test 1789e5c31af7Sopenharmony_ci { 1790e5c31af7Sopenharmony_ci float f; 1791e5c31af7Sopenharmony_ci vec3 v; 1792e5c31af7Sopenharmony_ci }; 1793e5c31af7Sopenharmony_ci 1794e5c31af7Sopenharmony_ci void main() 1795e5c31af7Sopenharmony_ci { 1796e5c31af7Sopenharmony_ci ${SETUP} 1797e5c31af7Sopenharmony_ci 1798e5c31af7Sopenharmony_ci test a = test(in0.z, vec3(in0.x, in0.y, in0.z)); 1799e5c31af7Sopenharmony_ci test b = test(in0.y, vec3(-in0.z, -in0.x, -in0.y)); 1800e5c31af7Sopenharmony_ci test c = test(in0.x, vec3(-in0.y, in0.z, -in0.x)); 1801e5c31af7Sopenharmony_ci 1802e5c31af7Sopenharmony_ci test[] x = test[3] (a, b, c); 1803e5c31af7Sopenharmony_ci test[] y = test[] (c, a, b, b, a); 1804e5c31af7Sopenharmony_ci test[13] z; 1805e5c31af7Sopenharmony_ci 1806e5c31af7Sopenharmony_ci out0 = ivec3(x.length(), y.length(), z.length()); 1807e5c31af7Sopenharmony_ci ${OUTPUT} 1808e5c31af7Sopenharmony_ci } 1809e5c31af7Sopenharmony_ci "" 1810e5c31af7Sopenharmony_ci end 1811e5c31af7Sopenharmony_ci 1812e5c31af7Sopenharmony_ciend # length 1813