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