1e5c31af7Sopenharmony_ci# Tests todo: 2e5c31af7Sopenharmony_ci# - inout with varyings, attributes, uniforms (and arrays of 'em) 3e5c31af7Sopenharmony_ci# - inout with arrays, array elements 4e5c31af7Sopenharmony_ci# - inout with array elements 5e5c31af7Sopenharmony_ci# - inout by-value semantics (arrays & elements & structs) 6e5c31af7Sopenharmony_ci 7e5c31af7Sopenharmony_ci# Done: 8e5c31af7Sopenharmony_ci# - control flow: return, return in loop, etc. 9e5c31af7Sopenharmony_ci 10e5c31af7Sopenharmony_cigroup datatypes "Function Parameter Data Types" 11e5c31af7Sopenharmony_ci 12e5c31af7Sopenharmony_ci case float_float 13e5c31af7Sopenharmony_ci version 300 es 14e5c31af7Sopenharmony_ci values 15e5c31af7Sopenharmony_ci { 16e5c31af7Sopenharmony_ci input float in0 = [ 0.0 | 1.0 | -2.0 | 2.5 ]; 17e5c31af7Sopenharmony_ci output float out0 = [ 0.0 | -1.0 | 2.0 | -2.5 ]; 18e5c31af7Sopenharmony_ci } 19e5c31af7Sopenharmony_ci 20e5c31af7Sopenharmony_ci both "" 21e5c31af7Sopenharmony_ci #version 300 es 22e5c31af7Sopenharmony_ci precision mediump float; 23e5c31af7Sopenharmony_ci ${DECLARATIONS} 24e5c31af7Sopenharmony_ci 25e5c31af7Sopenharmony_ci float func (float a) 26e5c31af7Sopenharmony_ci { 27e5c31af7Sopenharmony_ci return -a; 28e5c31af7Sopenharmony_ci } 29e5c31af7Sopenharmony_ci 30e5c31af7Sopenharmony_ci void main() 31e5c31af7Sopenharmony_ci { 32e5c31af7Sopenharmony_ci out0 = func(in0); 33e5c31af7Sopenharmony_ci ${OUTPUT} 34e5c31af7Sopenharmony_ci } 35e5c31af7Sopenharmony_ci "" 36e5c31af7Sopenharmony_ci end 37e5c31af7Sopenharmony_ci 38e5c31af7Sopenharmony_ci case float_vec2 39e5c31af7Sopenharmony_ci version 300 es 40e5c31af7Sopenharmony_ci values 41e5c31af7Sopenharmony_ci { 42e5c31af7Sopenharmony_ci input vec2 in0 = [ vec2(0.0, 1.0) | vec2(2.0, 2.5) ]; 43e5c31af7Sopenharmony_ci output float out0 = [ -1.0 | -4.5 ]; 44e5c31af7Sopenharmony_ci } 45e5c31af7Sopenharmony_ci 46e5c31af7Sopenharmony_ci both "" 47e5c31af7Sopenharmony_ci #version 300 es 48e5c31af7Sopenharmony_ci precision mediump float; 49e5c31af7Sopenharmony_ci ${DECLARATIONS} 50e5c31af7Sopenharmony_ci 51e5c31af7Sopenharmony_ci float func (vec2 a) 52e5c31af7Sopenharmony_ci { 53e5c31af7Sopenharmony_ci return -(a.x + a.y); 54e5c31af7Sopenharmony_ci } 55e5c31af7Sopenharmony_ci 56e5c31af7Sopenharmony_ci void main() 57e5c31af7Sopenharmony_ci { 58e5c31af7Sopenharmony_ci out0 = func(in0); 59e5c31af7Sopenharmony_ci ${OUTPUT} 60e5c31af7Sopenharmony_ci } 61e5c31af7Sopenharmony_ci "" 62e5c31af7Sopenharmony_ci end 63e5c31af7Sopenharmony_ci 64e5c31af7Sopenharmony_ci case float_vec3 65e5c31af7Sopenharmony_ci version 300 es 66e5c31af7Sopenharmony_ci values 67e5c31af7Sopenharmony_ci { 68e5c31af7Sopenharmony_ci input vec3 in0 = [ vec3(0.0, 1.0, -2.0) | vec3(2.0, 2.5, -4.0) ]; 69e5c31af7Sopenharmony_ci output float out0 = [ 1.0 | -0.5 ]; 70e5c31af7Sopenharmony_ci } 71e5c31af7Sopenharmony_ci 72e5c31af7Sopenharmony_ci both "" 73e5c31af7Sopenharmony_ci #version 300 es 74e5c31af7Sopenharmony_ci precision mediump float; 75e5c31af7Sopenharmony_ci ${DECLARATIONS} 76e5c31af7Sopenharmony_ci 77e5c31af7Sopenharmony_ci float func (vec3 a) 78e5c31af7Sopenharmony_ci { 79e5c31af7Sopenharmony_ci return -(a.x + a.y + a.z); 80e5c31af7Sopenharmony_ci } 81e5c31af7Sopenharmony_ci 82e5c31af7Sopenharmony_ci void main() 83e5c31af7Sopenharmony_ci { 84e5c31af7Sopenharmony_ci out0 = func(in0); 85e5c31af7Sopenharmony_ci ${OUTPUT} 86e5c31af7Sopenharmony_ci } 87e5c31af7Sopenharmony_ci "" 88e5c31af7Sopenharmony_ci end 89e5c31af7Sopenharmony_ci 90e5c31af7Sopenharmony_ci case float_vec4 91e5c31af7Sopenharmony_ci version 300 es 92e5c31af7Sopenharmony_ci values 93e5c31af7Sopenharmony_ci { 94e5c31af7Sopenharmony_ci input vec4 in0 = [ vec4(0.0, 1.0, -2.0, 0.5) | vec4(2.0, 2.5, 4.0, -7.0) ]; 95e5c31af7Sopenharmony_ci output float out0 = [ 0.5 | -1.5 ]; 96e5c31af7Sopenharmony_ci } 97e5c31af7Sopenharmony_ci 98e5c31af7Sopenharmony_ci both "" 99e5c31af7Sopenharmony_ci #version 300 es 100e5c31af7Sopenharmony_ci precision mediump float; 101e5c31af7Sopenharmony_ci ${DECLARATIONS} 102e5c31af7Sopenharmony_ci 103e5c31af7Sopenharmony_ci float func (vec4 a) 104e5c31af7Sopenharmony_ci { 105e5c31af7Sopenharmony_ci return -(a.x + a.y + a.z + a.w); 106e5c31af7Sopenharmony_ci } 107e5c31af7Sopenharmony_ci 108e5c31af7Sopenharmony_ci void main() 109e5c31af7Sopenharmony_ci { 110e5c31af7Sopenharmony_ci out0 = func(in0); 111e5c31af7Sopenharmony_ci ${OUTPUT} 112e5c31af7Sopenharmony_ci } 113e5c31af7Sopenharmony_ci "" 114e5c31af7Sopenharmony_ci end 115e5c31af7Sopenharmony_ci 116e5c31af7Sopenharmony_ci case float_mat2 117e5c31af7Sopenharmony_ci version 300 es 118e5c31af7Sopenharmony_ci values 119e5c31af7Sopenharmony_ci { 120e5c31af7Sopenharmony_ci input mat2 in0 = [ mat2(0.0, 1.0, -2.0, 0.5) | mat2(2.0, 2.5, 4.0, -7.0) ]; 121e5c31af7Sopenharmony_ci output float out0 = [ 0.5 | -1.5 ]; 122e5c31af7Sopenharmony_ci } 123e5c31af7Sopenharmony_ci 124e5c31af7Sopenharmony_ci both "" 125e5c31af7Sopenharmony_ci #version 300 es 126e5c31af7Sopenharmony_ci precision mediump float; 127e5c31af7Sopenharmony_ci ${DECLARATIONS} 128e5c31af7Sopenharmony_ci 129e5c31af7Sopenharmony_ci float func (mat2 a) 130e5c31af7Sopenharmony_ci { 131e5c31af7Sopenharmony_ci return -(a[0][0] + a[0][1] + a[1][0] + a[1][1]); 132e5c31af7Sopenharmony_ci } 133e5c31af7Sopenharmony_ci 134e5c31af7Sopenharmony_ci void main() 135e5c31af7Sopenharmony_ci { 136e5c31af7Sopenharmony_ci out0 = func(in0); 137e5c31af7Sopenharmony_ci ${OUTPUT} 138e5c31af7Sopenharmony_ci } 139e5c31af7Sopenharmony_ci "" 140e5c31af7Sopenharmony_ci end 141e5c31af7Sopenharmony_ci 142e5c31af7Sopenharmony_ci case float_mat3 143e5c31af7Sopenharmony_ci version 300 es 144e5c31af7Sopenharmony_ci values 145e5c31af7Sopenharmony_ci { 146e5c31af7Sopenharmony_ci input mat3 in0 = [ mat3(0.0, 1.0, -2.0, 0.5, 1.0, -1.0, 2.0, 4.0, -1.0) | mat3(2.0, 2.5, 4.0, -7.0, 2.5, 3.0, 0.5, -3.5, 1.0) ]; 147e5c31af7Sopenharmony_ci output float out0 = [ -4.5 | -5.0 ]; 148e5c31af7Sopenharmony_ci } 149e5c31af7Sopenharmony_ci 150e5c31af7Sopenharmony_ci both "" 151e5c31af7Sopenharmony_ci #version 300 es 152e5c31af7Sopenharmony_ci precision mediump float; 153e5c31af7Sopenharmony_ci ${DECLARATIONS} 154e5c31af7Sopenharmony_ci 155e5c31af7Sopenharmony_ci float func (mat3 a) 156e5c31af7Sopenharmony_ci { 157e5c31af7Sopenharmony_ci return -(a[0][0] + a[0][1] + a[0][2] + a[1][0] + a[1][1] + a[1][2] + a[2][0] + a[2][1] + a[2][2]); 158e5c31af7Sopenharmony_ci } 159e5c31af7Sopenharmony_ci 160e5c31af7Sopenharmony_ci void main() 161e5c31af7Sopenharmony_ci { 162e5c31af7Sopenharmony_ci out0 = func(in0); 163e5c31af7Sopenharmony_ci ${OUTPUT} 164e5c31af7Sopenharmony_ci } 165e5c31af7Sopenharmony_ci "" 166e5c31af7Sopenharmony_ci end 167e5c31af7Sopenharmony_ci 168e5c31af7Sopenharmony_ci case float_mat4 169e5c31af7Sopenharmony_ci version 300 es 170e5c31af7Sopenharmony_ci values 171e5c31af7Sopenharmony_ci { 172e5c31af7Sopenharmony_ci input mat4 in0 = [ mat4(0.0, 1.0, -2.0, 0.5, 1.0, -1.0, 2.0, 4.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -2.0, -2.0) | mat4(2.0, 2.5, 4.0, -7.0, 2.5, 3.0, 0.5, -3.5, 1.0, 0.0, 2.0, -1.0, 1.0, 0.0, -1.0, 3.0) ]; 173e5c31af7Sopenharmony_ci output float out0 = [ -5.5 | -9.0 ]; 174e5c31af7Sopenharmony_ci } 175e5c31af7Sopenharmony_ci 176e5c31af7Sopenharmony_ci both "" 177e5c31af7Sopenharmony_ci #version 300 es 178e5c31af7Sopenharmony_ci precision mediump float; 179e5c31af7Sopenharmony_ci ${DECLARATIONS} 180e5c31af7Sopenharmony_ci 181e5c31af7Sopenharmony_ci float func (mat4 a) 182e5c31af7Sopenharmony_ci { 183e5c31af7Sopenharmony_ci return -(a[0][0] + a[0][1] + a[0][2] + a[0][3] + a[1][0] + a[1][1] + a[1][2] + a[1][3] + a[2][0] + a[2][1] + a[2][2] + a[2][3] + a[3][0] + a[3][1] + a[3][2] + a[3][3]); 184e5c31af7Sopenharmony_ci } 185e5c31af7Sopenharmony_ci 186e5c31af7Sopenharmony_ci void main() 187e5c31af7Sopenharmony_ci { 188e5c31af7Sopenharmony_ci out0 = func(in0); 189e5c31af7Sopenharmony_ci ${OUTPUT} 190e5c31af7Sopenharmony_ci } 191e5c31af7Sopenharmony_ci "" 192e5c31af7Sopenharmony_ci end 193e5c31af7Sopenharmony_ci 194e5c31af7Sopenharmony_ci case int_int 195e5c31af7Sopenharmony_ci version 300 es 196e5c31af7Sopenharmony_ci values 197e5c31af7Sopenharmony_ci { 198e5c31af7Sopenharmony_ci input int in0 = [ -1 | 0 | 1 | 4 ]; 199e5c31af7Sopenharmony_ci output int out0 = [ 1 | 0 | -1 | -4 ]; 200e5c31af7Sopenharmony_ci } 201e5c31af7Sopenharmony_ci 202e5c31af7Sopenharmony_ci both "" 203e5c31af7Sopenharmony_ci #version 300 es 204e5c31af7Sopenharmony_ci precision mediump float; 205e5c31af7Sopenharmony_ci precision mediump int; 206e5c31af7Sopenharmony_ci ${DECLARATIONS} 207e5c31af7Sopenharmony_ci 208e5c31af7Sopenharmony_ci int func (int a) 209e5c31af7Sopenharmony_ci { 210e5c31af7Sopenharmony_ci return -a; 211e5c31af7Sopenharmony_ci } 212e5c31af7Sopenharmony_ci 213e5c31af7Sopenharmony_ci void main() 214e5c31af7Sopenharmony_ci { 215e5c31af7Sopenharmony_ci ${SETUP} 216e5c31af7Sopenharmony_ci out0 = func(in0); 217e5c31af7Sopenharmony_ci ${OUTPUT} 218e5c31af7Sopenharmony_ci } 219e5c31af7Sopenharmony_ci "" 220e5c31af7Sopenharmony_ci end 221e5c31af7Sopenharmony_ci 222e5c31af7Sopenharmony_ci case int_ivec2 223e5c31af7Sopenharmony_ci version 300 es 224e5c31af7Sopenharmony_ci values 225e5c31af7Sopenharmony_ci { 226e5c31af7Sopenharmony_ci input ivec2 in0 = [ ivec2(-1, 0) | ivec2(1, 4) ]; 227e5c31af7Sopenharmony_ci output int out0 = [ 1 | -5 ]; 228e5c31af7Sopenharmony_ci } 229e5c31af7Sopenharmony_ci 230e5c31af7Sopenharmony_ci both "" 231e5c31af7Sopenharmony_ci #version 300 es 232e5c31af7Sopenharmony_ci precision mediump float; 233e5c31af7Sopenharmony_ci precision mediump int; 234e5c31af7Sopenharmony_ci ${DECLARATIONS} 235e5c31af7Sopenharmony_ci 236e5c31af7Sopenharmony_ci int func (ivec2 a) 237e5c31af7Sopenharmony_ci { 238e5c31af7Sopenharmony_ci return -(a.x + a.y); 239e5c31af7Sopenharmony_ci } 240e5c31af7Sopenharmony_ci 241e5c31af7Sopenharmony_ci void main() 242e5c31af7Sopenharmony_ci { 243e5c31af7Sopenharmony_ci ${SETUP} 244e5c31af7Sopenharmony_ci out0 = func(in0); 245e5c31af7Sopenharmony_ci ${OUTPUT} 246e5c31af7Sopenharmony_ci } 247e5c31af7Sopenharmony_ci "" 248e5c31af7Sopenharmony_ci end 249e5c31af7Sopenharmony_ci 250e5c31af7Sopenharmony_ci case int_ivec3 251e5c31af7Sopenharmony_ci version 300 es 252e5c31af7Sopenharmony_ci values 253e5c31af7Sopenharmony_ci { 254e5c31af7Sopenharmony_ci input ivec3 in0 = [ ivec3(-1, 0, 2) | ivec3(1, 4, -8) ]; 255e5c31af7Sopenharmony_ci output int out0 = [ -1 | 3 ]; 256e5c31af7Sopenharmony_ci } 257e5c31af7Sopenharmony_ci 258e5c31af7Sopenharmony_ci both "" 259e5c31af7Sopenharmony_ci #version 300 es 260e5c31af7Sopenharmony_ci precision mediump float; 261e5c31af7Sopenharmony_ci precision mediump int; 262e5c31af7Sopenharmony_ci ${DECLARATIONS} 263e5c31af7Sopenharmony_ci 264e5c31af7Sopenharmony_ci int func (ivec3 a) 265e5c31af7Sopenharmony_ci { 266e5c31af7Sopenharmony_ci return -(a.x + a.y + a.z); 267e5c31af7Sopenharmony_ci } 268e5c31af7Sopenharmony_ci 269e5c31af7Sopenharmony_ci void main() 270e5c31af7Sopenharmony_ci { 271e5c31af7Sopenharmony_ci ${SETUP} 272e5c31af7Sopenharmony_ci out0 = func(in0); 273e5c31af7Sopenharmony_ci ${OUTPUT} 274e5c31af7Sopenharmony_ci } 275e5c31af7Sopenharmony_ci "" 276e5c31af7Sopenharmony_ci end 277e5c31af7Sopenharmony_ci 278e5c31af7Sopenharmony_ci case int_ivec4 279e5c31af7Sopenharmony_ci version 300 es 280e5c31af7Sopenharmony_ci values 281e5c31af7Sopenharmony_ci { 282e5c31af7Sopenharmony_ci input ivec4 in0 = [ ivec4(-1, 0, 2, 2) | ivec4(1, 4, -8, 2) ]; 283e5c31af7Sopenharmony_ci output int out0 = [ -3 | 1 ]; 284e5c31af7Sopenharmony_ci } 285e5c31af7Sopenharmony_ci 286e5c31af7Sopenharmony_ci both "" 287e5c31af7Sopenharmony_ci #version 300 es 288e5c31af7Sopenharmony_ci precision mediump float; 289e5c31af7Sopenharmony_ci precision mediump int; 290e5c31af7Sopenharmony_ci ${DECLARATIONS} 291e5c31af7Sopenharmony_ci 292e5c31af7Sopenharmony_ci int func (ivec4 a) 293e5c31af7Sopenharmony_ci { 294e5c31af7Sopenharmony_ci return -(a.x + a.y + a.z + a.w); 295e5c31af7Sopenharmony_ci } 296e5c31af7Sopenharmony_ci 297e5c31af7Sopenharmony_ci void main() 298e5c31af7Sopenharmony_ci { 299e5c31af7Sopenharmony_ci ${SETUP} 300e5c31af7Sopenharmony_ci out0 = func(in0); 301e5c31af7Sopenharmony_ci ${OUTPUT} 302e5c31af7Sopenharmony_ci } 303e5c31af7Sopenharmony_ci "" 304e5c31af7Sopenharmony_ci end 305e5c31af7Sopenharmony_ci 306e5c31af7Sopenharmony_ci case uint_uint 307e5c31af7Sopenharmony_ci version 300 es 308e5c31af7Sopenharmony_ci values 309e5c31af7Sopenharmony_ci { 310e5c31af7Sopenharmony_ci input uint in0 = [ 1 | 0 | 2 | 4 ]; 311e5c31af7Sopenharmony_ci output uint out0 = [ 1 | 0 | 4 | 16 ]; 312e5c31af7Sopenharmony_ci } 313e5c31af7Sopenharmony_ci 314e5c31af7Sopenharmony_ci both "" 315e5c31af7Sopenharmony_ci #version 300 es 316e5c31af7Sopenharmony_ci precision mediump float; 317e5c31af7Sopenharmony_ci precision mediump int; 318e5c31af7Sopenharmony_ci ${DECLARATIONS} 319e5c31af7Sopenharmony_ci 320e5c31af7Sopenharmony_ci uint func (uint a) 321e5c31af7Sopenharmony_ci { 322e5c31af7Sopenharmony_ci return a*a; 323e5c31af7Sopenharmony_ci } 324e5c31af7Sopenharmony_ci 325e5c31af7Sopenharmony_ci void main() 326e5c31af7Sopenharmony_ci { 327e5c31af7Sopenharmony_ci ${SETUP} 328e5c31af7Sopenharmony_ci out0 = func(in0); 329e5c31af7Sopenharmony_ci ${OUTPUT} 330e5c31af7Sopenharmony_ci } 331e5c31af7Sopenharmony_ci "" 332e5c31af7Sopenharmony_ci end 333e5c31af7Sopenharmony_ci 334e5c31af7Sopenharmony_ci case uint_uvec2 335e5c31af7Sopenharmony_ci version 300 es 336e5c31af7Sopenharmony_ci values 337e5c31af7Sopenharmony_ci { 338e5c31af7Sopenharmony_ci input uvec2 in0 = [ uvec2(1, 0) | uvec2(2, 4) ]; 339e5c31af7Sopenharmony_ci output uint out0 = [ 1 | 6 ]; 340e5c31af7Sopenharmony_ci } 341e5c31af7Sopenharmony_ci 342e5c31af7Sopenharmony_ci both "" 343e5c31af7Sopenharmony_ci #version 300 es 344e5c31af7Sopenharmony_ci precision mediump float; 345e5c31af7Sopenharmony_ci precision mediump int; 346e5c31af7Sopenharmony_ci ${DECLARATIONS} 347e5c31af7Sopenharmony_ci 348e5c31af7Sopenharmony_ci uint func (uvec2 a) 349e5c31af7Sopenharmony_ci { 350e5c31af7Sopenharmony_ci return (a.x + a.y); 351e5c31af7Sopenharmony_ci } 352e5c31af7Sopenharmony_ci 353e5c31af7Sopenharmony_ci void main() 354e5c31af7Sopenharmony_ci { 355e5c31af7Sopenharmony_ci ${SETUP} 356e5c31af7Sopenharmony_ci out0 = func(in0); 357e5c31af7Sopenharmony_ci ${OUTPUT} 358e5c31af7Sopenharmony_ci } 359e5c31af7Sopenharmony_ci "" 360e5c31af7Sopenharmony_ci end 361e5c31af7Sopenharmony_ci 362e5c31af7Sopenharmony_ci case uint_uvec3 363e5c31af7Sopenharmony_ci version 300 es 364e5c31af7Sopenharmony_ci values 365e5c31af7Sopenharmony_ci { 366e5c31af7Sopenharmony_ci input uvec3 in0 = [ uvec3(1, 0, 2) | uvec3(1, 4, 8) ]; 367e5c31af7Sopenharmony_ci output uint out0 = [ 3 | 13 ]; 368e5c31af7Sopenharmony_ci } 369e5c31af7Sopenharmony_ci 370e5c31af7Sopenharmony_ci both "" 371e5c31af7Sopenharmony_ci #version 300 es 372e5c31af7Sopenharmony_ci precision mediump float; 373e5c31af7Sopenharmony_ci precision mediump int; 374e5c31af7Sopenharmony_ci ${DECLARATIONS} 375e5c31af7Sopenharmony_ci 376e5c31af7Sopenharmony_ci uint func (uvec3 a) 377e5c31af7Sopenharmony_ci { 378e5c31af7Sopenharmony_ci return (a.x + a.y + a.z); 379e5c31af7Sopenharmony_ci } 380e5c31af7Sopenharmony_ci 381e5c31af7Sopenharmony_ci void main() 382e5c31af7Sopenharmony_ci { 383e5c31af7Sopenharmony_ci ${SETUP} 384e5c31af7Sopenharmony_ci out0 = func(in0); 385e5c31af7Sopenharmony_ci ${OUTPUT} 386e5c31af7Sopenharmony_ci } 387e5c31af7Sopenharmony_ci "" 388e5c31af7Sopenharmony_ci end 389e5c31af7Sopenharmony_ci 390e5c31af7Sopenharmony_ci case uint_uvec4 391e5c31af7Sopenharmony_ci version 300 es 392e5c31af7Sopenharmony_ci values 393e5c31af7Sopenharmony_ci { 394e5c31af7Sopenharmony_ci input uvec4 in0 = [ uvec4(1, 0, 2, 2) | uvec4(1, 4, 8, 2) ]; 395e5c31af7Sopenharmony_ci output uint out0 = [ 5 | 15 ]; 396e5c31af7Sopenharmony_ci } 397e5c31af7Sopenharmony_ci 398e5c31af7Sopenharmony_ci both "" 399e5c31af7Sopenharmony_ci #version 300 es 400e5c31af7Sopenharmony_ci precision mediump float; 401e5c31af7Sopenharmony_ci precision mediump int; 402e5c31af7Sopenharmony_ci ${DECLARATIONS} 403e5c31af7Sopenharmony_ci 404e5c31af7Sopenharmony_ci uint func (uvec4 a) 405e5c31af7Sopenharmony_ci { 406e5c31af7Sopenharmony_ci return (a.x + a.y + a.z + a.w); 407e5c31af7Sopenharmony_ci } 408e5c31af7Sopenharmony_ci 409e5c31af7Sopenharmony_ci void main() 410e5c31af7Sopenharmony_ci { 411e5c31af7Sopenharmony_ci ${SETUP} 412e5c31af7Sopenharmony_ci out0 = func(in0); 413e5c31af7Sopenharmony_ci ${OUTPUT} 414e5c31af7Sopenharmony_ci } 415e5c31af7Sopenharmony_ci "" 416e5c31af7Sopenharmony_ci end 417e5c31af7Sopenharmony_ci 418e5c31af7Sopenharmony_ci case bool_bool 419e5c31af7Sopenharmony_ci version 300 es 420e5c31af7Sopenharmony_ci values 421e5c31af7Sopenharmony_ci { 422e5c31af7Sopenharmony_ci input bool in0 = [ true | false ]; 423e5c31af7Sopenharmony_ci output bool out0 = [ false | true ]; 424e5c31af7Sopenharmony_ci } 425e5c31af7Sopenharmony_ci 426e5c31af7Sopenharmony_ci both "" 427e5c31af7Sopenharmony_ci #version 300 es 428e5c31af7Sopenharmony_ci precision mediump float; 429e5c31af7Sopenharmony_ci ${DECLARATIONS} 430e5c31af7Sopenharmony_ci 431e5c31af7Sopenharmony_ci bool func (bool a) 432e5c31af7Sopenharmony_ci { 433e5c31af7Sopenharmony_ci return !a; 434e5c31af7Sopenharmony_ci } 435e5c31af7Sopenharmony_ci 436e5c31af7Sopenharmony_ci void main() 437e5c31af7Sopenharmony_ci { 438e5c31af7Sopenharmony_ci ${SETUP} 439e5c31af7Sopenharmony_ci out0 = func(in0); 440e5c31af7Sopenharmony_ci ${OUTPUT} 441e5c31af7Sopenharmony_ci } 442e5c31af7Sopenharmony_ci "" 443e5c31af7Sopenharmony_ci end 444e5c31af7Sopenharmony_ci 445e5c31af7Sopenharmony_ci case bool_bvec2 446e5c31af7Sopenharmony_ci version 300 es 447e5c31af7Sopenharmony_ci values 448e5c31af7Sopenharmony_ci { 449e5c31af7Sopenharmony_ci input bvec2 in0 = [ bvec2(true, true) | bvec2(false, true) ]; 450e5c31af7Sopenharmony_ci output bool out0 = [ false | true ]; 451e5c31af7Sopenharmony_ci } 452e5c31af7Sopenharmony_ci 453e5c31af7Sopenharmony_ci both "" 454e5c31af7Sopenharmony_ci #version 300 es 455e5c31af7Sopenharmony_ci precision mediump float; 456e5c31af7Sopenharmony_ci ${DECLARATIONS} 457e5c31af7Sopenharmony_ci 458e5c31af7Sopenharmony_ci bool func (bvec2 a) 459e5c31af7Sopenharmony_ci { 460e5c31af7Sopenharmony_ci return !(a.x == a.y); 461e5c31af7Sopenharmony_ci } 462e5c31af7Sopenharmony_ci 463e5c31af7Sopenharmony_ci void main() 464e5c31af7Sopenharmony_ci { 465e5c31af7Sopenharmony_ci ${SETUP} 466e5c31af7Sopenharmony_ci out0 = func(in0); 467e5c31af7Sopenharmony_ci ${OUTPUT} 468e5c31af7Sopenharmony_ci } 469e5c31af7Sopenharmony_ci "" 470e5c31af7Sopenharmony_ci end 471e5c31af7Sopenharmony_ci 472e5c31af7Sopenharmony_ci case bool_bvec3 473e5c31af7Sopenharmony_ci version 300 es 474e5c31af7Sopenharmony_ci values 475e5c31af7Sopenharmony_ci { 476e5c31af7Sopenharmony_ci input bvec3 in0 = [ bvec3(true, true, false) | bvec3(true, false, false) ]; 477e5c31af7Sopenharmony_ci output bool out0 = [ false | true ]; 478e5c31af7Sopenharmony_ci } 479e5c31af7Sopenharmony_ci 480e5c31af7Sopenharmony_ci both "" 481e5c31af7Sopenharmony_ci #version 300 es 482e5c31af7Sopenharmony_ci precision mediump float; 483e5c31af7Sopenharmony_ci ${DECLARATIONS} 484e5c31af7Sopenharmony_ci 485e5c31af7Sopenharmony_ci bool func (bvec3 a) 486e5c31af7Sopenharmony_ci { 487e5c31af7Sopenharmony_ci return (a.x == a.y) == a.z; 488e5c31af7Sopenharmony_ci } 489e5c31af7Sopenharmony_ci 490e5c31af7Sopenharmony_ci void main() 491e5c31af7Sopenharmony_ci { 492e5c31af7Sopenharmony_ci ${SETUP} 493e5c31af7Sopenharmony_ci out0 = func(in0); 494e5c31af7Sopenharmony_ci ${OUTPUT} 495e5c31af7Sopenharmony_ci } 496e5c31af7Sopenharmony_ci "" 497e5c31af7Sopenharmony_ci end 498e5c31af7Sopenharmony_ci 499e5c31af7Sopenharmony_ci case bool_bvec4 500e5c31af7Sopenharmony_ci version 300 es 501e5c31af7Sopenharmony_ci values 502e5c31af7Sopenharmony_ci { 503e5c31af7Sopenharmony_ci input bvec4 in0 = [ bvec4(true, true, true, false) | bvec4(false, false, true, true) | bvec4(true, false, false, true) ]; 504e5c31af7Sopenharmony_ci output bool out0 = [ false | true | true ]; 505e5c31af7Sopenharmony_ci } 506e5c31af7Sopenharmony_ci 507e5c31af7Sopenharmony_ci both "" 508e5c31af7Sopenharmony_ci #version 300 es 509e5c31af7Sopenharmony_ci precision mediump float; 510e5c31af7Sopenharmony_ci ${DECLARATIONS} 511e5c31af7Sopenharmony_ci 512e5c31af7Sopenharmony_ci bool func (bvec4 a) 513e5c31af7Sopenharmony_ci { 514e5c31af7Sopenharmony_ci return ((a.x == a.y) == (a.z == a.w)); 515e5c31af7Sopenharmony_ci } 516e5c31af7Sopenharmony_ci 517e5c31af7Sopenharmony_ci void main() 518e5c31af7Sopenharmony_ci { 519e5c31af7Sopenharmony_ci ${SETUP} 520e5c31af7Sopenharmony_ci out0 = func(in0); 521e5c31af7Sopenharmony_ci ${OUTPUT} 522e5c31af7Sopenharmony_ci } 523e5c31af7Sopenharmony_ci "" 524e5c31af7Sopenharmony_ci end 525e5c31af7Sopenharmony_ci 526e5c31af7Sopenharmony_ci case mat2 527e5c31af7Sopenharmony_ci version 300 es 528e5c31af7Sopenharmony_ci values 529e5c31af7Sopenharmony_ci { 530e5c31af7Sopenharmony_ci input mat2 in0 = [ mat2(-2.0, 0.5, -1.0, 1.0) | mat2(1.0, -3.5, -3.5, 2.5) | mat2(-2.0, -2.0, 3.5, 0.0) ]; 531e5c31af7Sopenharmony_ci output mat2 out0 = [ mat2(4.0, -1.0, 2.0, -2.0) | mat2(-2.0, 7.0, 7.0, -5.0) | mat2(4.0, 4.0, -7.0, -0.0) ]; 532e5c31af7Sopenharmony_ci } 533e5c31af7Sopenharmony_ci 534e5c31af7Sopenharmony_ci both "" 535e5c31af7Sopenharmony_ci #version 300 es 536e5c31af7Sopenharmony_ci precision mediump float; 537e5c31af7Sopenharmony_ci ${DECLARATIONS} 538e5c31af7Sopenharmony_ci 539e5c31af7Sopenharmony_ci mat2 func (mat2 a) 540e5c31af7Sopenharmony_ci { 541e5c31af7Sopenharmony_ci return -2.0*a; 542e5c31af7Sopenharmony_ci } 543e5c31af7Sopenharmony_ci 544e5c31af7Sopenharmony_ci void main() 545e5c31af7Sopenharmony_ci { 546e5c31af7Sopenharmony_ci ${SETUP} 547e5c31af7Sopenharmony_ci out0 = func(in0); 548e5c31af7Sopenharmony_ci ${OUTPUT} 549e5c31af7Sopenharmony_ci } 550e5c31af7Sopenharmony_ci "" 551e5c31af7Sopenharmony_ci end 552e5c31af7Sopenharmony_ci 553e5c31af7Sopenharmony_ci 554e5c31af7Sopenharmony_ci case mat2x3 555e5c31af7Sopenharmony_ci version 300 es 556e5c31af7Sopenharmony_ci values 557e5c31af7Sopenharmony_ci { 558e5c31af7Sopenharmony_ci input mat2x3 in0 = [ mat2x3(2.5, 0.0, 1.0, -2.5, 1.0, 3.0) | mat2x3(0.0, 2.0, 1.5, -3.5, 2.0, 0.5) | mat2x3(-1.5, -3.5, 2.5, 0.0, 1.5, 3.0) ]; 559e5c31af7Sopenharmony_ci output mat2x3 out0 = [ mat2x3(-5.0, -0.0, -2.0, 5.0, -2.0, -6.0) | mat2x3(-0.0, -4.0, -3.0, 7.0, -4.0, -1.0) | mat2x3(3.0, 7.0, -5.0, -0.0, -3.0, -6.0) ]; 560e5c31af7Sopenharmony_ci } 561e5c31af7Sopenharmony_ci 562e5c31af7Sopenharmony_ci both "" 563e5c31af7Sopenharmony_ci #version 300 es 564e5c31af7Sopenharmony_ci precision mediump float; 565e5c31af7Sopenharmony_ci ${DECLARATIONS} 566e5c31af7Sopenharmony_ci 567e5c31af7Sopenharmony_ci mat2x3 func (mat2x3 a) 568e5c31af7Sopenharmony_ci { 569e5c31af7Sopenharmony_ci return -2.0*a; 570e5c31af7Sopenharmony_ci } 571e5c31af7Sopenharmony_ci 572e5c31af7Sopenharmony_ci void main() 573e5c31af7Sopenharmony_ci { 574e5c31af7Sopenharmony_ci ${SETUP} 575e5c31af7Sopenharmony_ci out0 = func(in0); 576e5c31af7Sopenharmony_ci ${OUTPUT} 577e5c31af7Sopenharmony_ci } 578e5c31af7Sopenharmony_ci "" 579e5c31af7Sopenharmony_ci end 580e5c31af7Sopenharmony_ci 581e5c31af7Sopenharmony_ci 582e5c31af7Sopenharmony_ci case mat2x4 583e5c31af7Sopenharmony_ci version 300 es 584e5c31af7Sopenharmony_ci values 585e5c31af7Sopenharmony_ci { 586e5c31af7Sopenharmony_ci input mat2x4 in0 = [ mat2x4(1.5, 3.0, -1.0, 2.5, -0.5, 3.5, 3.0, -3.0) | mat2x4(-2.5, -2.0, 3.5, -0.5, 1.0, -1.5, 0.0, -1.0) | mat2x4(-1.0, 0.5, 0.5, 3.0, 1.5, 3.0, 2.5, 3.5) ]; 587e5c31af7Sopenharmony_ci output mat2x4 out0 = [ mat2x4(-3.0, -6.0, 2.0, -5.0, 1.0, -7.0, -6.0, 6.0) | mat2x4(5.0, 4.0, -7.0, 1.0, -2.0, 3.0, -0.0, 2.0) | mat2x4(2.0, -1.0, -1.0, -6.0, -3.0, -6.0, -5.0, -7.0) ]; 588e5c31af7Sopenharmony_ci } 589e5c31af7Sopenharmony_ci 590e5c31af7Sopenharmony_ci both "" 591e5c31af7Sopenharmony_ci #version 300 es 592e5c31af7Sopenharmony_ci precision mediump float; 593e5c31af7Sopenharmony_ci ${DECLARATIONS} 594e5c31af7Sopenharmony_ci 595e5c31af7Sopenharmony_ci mat2x4 func (mat2x4 a) 596e5c31af7Sopenharmony_ci { 597e5c31af7Sopenharmony_ci return -2.0*a; 598e5c31af7Sopenharmony_ci } 599e5c31af7Sopenharmony_ci 600e5c31af7Sopenharmony_ci void main() 601e5c31af7Sopenharmony_ci { 602e5c31af7Sopenharmony_ci ${SETUP} 603e5c31af7Sopenharmony_ci out0 = func(in0); 604e5c31af7Sopenharmony_ci ${OUTPUT} 605e5c31af7Sopenharmony_ci } 606e5c31af7Sopenharmony_ci "" 607e5c31af7Sopenharmony_ci end 608e5c31af7Sopenharmony_ci 609e5c31af7Sopenharmony_ci 610e5c31af7Sopenharmony_ci case mat3x2 611e5c31af7Sopenharmony_ci version 300 es 612e5c31af7Sopenharmony_ci values 613e5c31af7Sopenharmony_ci { 614e5c31af7Sopenharmony_ci input mat3x2 in0 = [ mat3x2(1.5, -2.5, 2.5, 3.5, 3.0, 0.5) | mat3x2(1.5, -2.0, 2.5, 0.5, -1.5, -3.5) | mat3x2(2.5, 3.5, -3.0, 2.5, -0.5, -2.5) ]; 615e5c31af7Sopenharmony_ci output mat3x2 out0 = [ mat3x2(-3.0, 5.0, -5.0, -7.0, -6.0, -1.0) | mat3x2(-3.0, 4.0, -5.0, -1.0, 3.0, 7.0) | mat3x2(-5.0, -7.0, 6.0, -5.0, 1.0, 5.0) ]; 616e5c31af7Sopenharmony_ci } 617e5c31af7Sopenharmony_ci 618e5c31af7Sopenharmony_ci both "" 619e5c31af7Sopenharmony_ci #version 300 es 620e5c31af7Sopenharmony_ci precision mediump float; 621e5c31af7Sopenharmony_ci ${DECLARATIONS} 622e5c31af7Sopenharmony_ci 623e5c31af7Sopenharmony_ci mat3x2 func (mat3x2 a) 624e5c31af7Sopenharmony_ci { 625e5c31af7Sopenharmony_ci return -2.0*a; 626e5c31af7Sopenharmony_ci } 627e5c31af7Sopenharmony_ci 628e5c31af7Sopenharmony_ci void main() 629e5c31af7Sopenharmony_ci { 630e5c31af7Sopenharmony_ci ${SETUP} 631e5c31af7Sopenharmony_ci out0 = func(in0); 632e5c31af7Sopenharmony_ci ${OUTPUT} 633e5c31af7Sopenharmony_ci } 634e5c31af7Sopenharmony_ci "" 635e5c31af7Sopenharmony_ci end 636e5c31af7Sopenharmony_ci 637e5c31af7Sopenharmony_ci 638e5c31af7Sopenharmony_ci case mat3 639e5c31af7Sopenharmony_ci version 300 es 640e5c31af7Sopenharmony_ci values 641e5c31af7Sopenharmony_ci { 642e5c31af7Sopenharmony_ci input mat3 in0 = [ mat3(-1.5, 2.0, 3.0, -3.5, 1.0, -3.5, 1.5, -1.5, 3.0) | mat3(3.5, 0.0, 3.5, -1.5, -3.0, 0.5, -3.5, -2.5, -0.5) | mat3(1.0, -2.5, -3.5, 3.0, -1.5, 3.5, 3.0, -1.0, -0.5) ]; 643e5c31af7Sopenharmony_ci output mat3 out0 = [ mat3(3.0, -4.0, -6.0, 7.0, -2.0, 7.0, -3.0, 3.0, -6.0) | mat3(-7.0, -0.0, -7.0, 3.0, 6.0, -1.0, 7.0, 5.0, 1.0) | mat3(-2.0, 5.0, 7.0, -6.0, 3.0, -7.0, -6.0, 2.0, 1.0) ]; 644e5c31af7Sopenharmony_ci } 645e5c31af7Sopenharmony_ci 646e5c31af7Sopenharmony_ci both "" 647e5c31af7Sopenharmony_ci #version 300 es 648e5c31af7Sopenharmony_ci precision mediump float; 649e5c31af7Sopenharmony_ci ${DECLARATIONS} 650e5c31af7Sopenharmony_ci 651e5c31af7Sopenharmony_ci mat3 func (mat3 a) 652e5c31af7Sopenharmony_ci { 653e5c31af7Sopenharmony_ci return -2.0*a; 654e5c31af7Sopenharmony_ci } 655e5c31af7Sopenharmony_ci 656e5c31af7Sopenharmony_ci void main() 657e5c31af7Sopenharmony_ci { 658e5c31af7Sopenharmony_ci ${SETUP} 659e5c31af7Sopenharmony_ci out0 = func(in0); 660e5c31af7Sopenharmony_ci ${OUTPUT} 661e5c31af7Sopenharmony_ci } 662e5c31af7Sopenharmony_ci "" 663e5c31af7Sopenharmony_ci end 664e5c31af7Sopenharmony_ci 665e5c31af7Sopenharmony_ci 666e5c31af7Sopenharmony_ci case mat3x4 667e5c31af7Sopenharmony_ci version 300 es 668e5c31af7Sopenharmony_ci values 669e5c31af7Sopenharmony_ci { 670e5c31af7Sopenharmony_ci input mat3x4 in0 = [ mat3x4(0.0, 1.0, 0.5, 0.5, 1.0, 3.5, 0.0, -0.5, 1.5, -2.0, -1.5, 3.5) | mat3x4(0.0, 0.5, -3.5, -0.5, 0.5, -3.5, 1.0, 1.0, -3.5, 1.0, -0.5, 1.5) | mat3x4(-1.0, 1.5, 2.0, -3.5, -3.5, 1.5, 3.5, -2.0, -0.5, 0.5, -1.5, -1.0) ]; 671e5c31af7Sopenharmony_ci output mat3x4 out0 = [ mat3x4(-0.0, -2.0, -1.0, -1.0, -2.0, -7.0, -0.0, 1.0, -3.0, 4.0, 3.0, -7.0) | mat3x4(-0.0, -1.0, 7.0, 1.0, -1.0, 7.0, -2.0, -2.0, 7.0, -2.0, 1.0, -3.0) | mat3x4(2.0, -3.0, -4.0, 7.0, 7.0, -3.0, -7.0, 4.0, 1.0, -1.0, 3.0, 2.0) ]; 672e5c31af7Sopenharmony_ci } 673e5c31af7Sopenharmony_ci 674e5c31af7Sopenharmony_ci both "" 675e5c31af7Sopenharmony_ci #version 300 es 676e5c31af7Sopenharmony_ci precision mediump float; 677e5c31af7Sopenharmony_ci ${DECLARATIONS} 678e5c31af7Sopenharmony_ci 679e5c31af7Sopenharmony_ci mat3x4 func (mat3x4 a) 680e5c31af7Sopenharmony_ci { 681e5c31af7Sopenharmony_ci return -2.0*a; 682e5c31af7Sopenharmony_ci } 683e5c31af7Sopenharmony_ci 684e5c31af7Sopenharmony_ci void main() 685e5c31af7Sopenharmony_ci { 686e5c31af7Sopenharmony_ci ${SETUP} 687e5c31af7Sopenharmony_ci out0 = func(in0); 688e5c31af7Sopenharmony_ci ${OUTPUT} 689e5c31af7Sopenharmony_ci } 690e5c31af7Sopenharmony_ci "" 691e5c31af7Sopenharmony_ci end 692e5c31af7Sopenharmony_ci 693e5c31af7Sopenharmony_ci 694e5c31af7Sopenharmony_ci case mat4x2 695e5c31af7Sopenharmony_ci version 300 es 696e5c31af7Sopenharmony_ci values 697e5c31af7Sopenharmony_ci { 698e5c31af7Sopenharmony_ci input mat4x2 in0 = [ mat4x2(-1.5, -1.0, 0.5, -1.5, -1.0, 2.0, -3.5, 0.5) | mat4x2(2.0, -1.5, -2.0, 2.5, -2.0, -2.5, -0.5, 1.5) | mat4x2(-3.0, -1.5, -1.0, 2.5, -0.5, 2.5, -2.5, -1.0) ]; 699e5c31af7Sopenharmony_ci output mat4x2 out0 = [ mat4x2(3.0, 2.0, -1.0, 3.0, 2.0, -4.0, 7.0, -1.0) | mat4x2(-4.0, 3.0, 4.0, -5.0, 4.0, 5.0, 1.0, -3.0) | mat4x2(6.0, 3.0, 2.0, -5.0, 1.0, -5.0, 5.0, 2.0) ]; 700e5c31af7Sopenharmony_ci } 701e5c31af7Sopenharmony_ci 702e5c31af7Sopenharmony_ci both "" 703e5c31af7Sopenharmony_ci #version 300 es 704e5c31af7Sopenharmony_ci precision mediump float; 705e5c31af7Sopenharmony_ci ${DECLARATIONS} 706e5c31af7Sopenharmony_ci 707e5c31af7Sopenharmony_ci mat4x2 func (mat4x2 a) 708e5c31af7Sopenharmony_ci { 709e5c31af7Sopenharmony_ci return -2.0*a; 710e5c31af7Sopenharmony_ci } 711e5c31af7Sopenharmony_ci 712e5c31af7Sopenharmony_ci void main() 713e5c31af7Sopenharmony_ci { 714e5c31af7Sopenharmony_ci ${SETUP} 715e5c31af7Sopenharmony_ci out0 = func(in0); 716e5c31af7Sopenharmony_ci ${OUTPUT} 717e5c31af7Sopenharmony_ci } 718e5c31af7Sopenharmony_ci "" 719e5c31af7Sopenharmony_ci end 720e5c31af7Sopenharmony_ci 721e5c31af7Sopenharmony_ci 722e5c31af7Sopenharmony_ci case mat4x3 723e5c31af7Sopenharmony_ci version 300 es 724e5c31af7Sopenharmony_ci values 725e5c31af7Sopenharmony_ci { 726e5c31af7Sopenharmony_ci input mat4x3 in0 = [ mat4x3(1.0, 3.0, -0.5, -2.0, -3.0, 0.0, -2.5, 2.5, 2.5, -2.5, -1.5, 2.5) | mat4x3(1.0, 2.5, -1.0, -3.0, -1.5, 2.0, -1.5, -1.0, -0.5, -0.5, -0.5, 3.0) | mat4x3(-2.5, -3.5, 3.5, 3.0, 3.5, -0.5, 3.5, 3.0, -2.0, 2.0, 2.5, 1.0) ]; 727e5c31af7Sopenharmony_ci output mat4x3 out0 = [ mat4x3(-2.0, -6.0, 1.0, 4.0, 6.0, -0.0, 5.0, -5.0, -5.0, 5.0, 3.0, -5.0) | mat4x3(-2.0, -5.0, 2.0, 6.0, 3.0, -4.0, 3.0, 2.0, 1.0, 1.0, 1.0, -6.0) | mat4x3(5.0, 7.0, -7.0, -6.0, -7.0, 1.0, -7.0, -6.0, 4.0, -4.0, -5.0, -2.0) ]; 728e5c31af7Sopenharmony_ci } 729e5c31af7Sopenharmony_ci 730e5c31af7Sopenharmony_ci both "" 731e5c31af7Sopenharmony_ci #version 300 es 732e5c31af7Sopenharmony_ci precision mediump float; 733e5c31af7Sopenharmony_ci ${DECLARATIONS} 734e5c31af7Sopenharmony_ci 735e5c31af7Sopenharmony_ci mat4x3 func (mat4x3 a) 736e5c31af7Sopenharmony_ci { 737e5c31af7Sopenharmony_ci return -2.0*a; 738e5c31af7Sopenharmony_ci } 739e5c31af7Sopenharmony_ci 740e5c31af7Sopenharmony_ci void main() 741e5c31af7Sopenharmony_ci { 742e5c31af7Sopenharmony_ci ${SETUP} 743e5c31af7Sopenharmony_ci out0 = func(in0); 744e5c31af7Sopenharmony_ci ${OUTPUT} 745e5c31af7Sopenharmony_ci } 746e5c31af7Sopenharmony_ci "" 747e5c31af7Sopenharmony_ci end 748e5c31af7Sopenharmony_ci 749e5c31af7Sopenharmony_ci 750e5c31af7Sopenharmony_ci case mat4 751e5c31af7Sopenharmony_ci version 300 es 752e5c31af7Sopenharmony_ci values 753e5c31af7Sopenharmony_ci { 754e5c31af7Sopenharmony_ci input mat4 in0 = [ mat4(0.0, -1.5, -1.0, -2.0, -3.0, 0.5, -1.5, 2.5, -3.5, 3.0, 1.5, 3.0, 3.0, 3.0, 0.5, -3.5) | mat4(2.0, -2.5, -1.5, 1.0, 0.0, -0.5, 3.5, 1.0, -1.0, -2.0, 2.5, 0.0, 2.0, -1.0, -2.5, 0.5) | mat4(2.5, -2.5, 2.0, 3.0, 2.5, 2.5, -3.5, 1.0, 2.5, -3.5, -1.5, -1.5, 0.0, -0.5, 0.0, 2.0) ]; 755e5c31af7Sopenharmony_ci output mat4 out0 = [ mat4(-0.0, 3.0, 2.0, 4.0, 6.0, -1.0, 3.0, -5.0, 7.0, -6.0, -3.0, -6.0, -6.0, -6.0, -1.0, 7.0) | mat4(-4.0, 5.0, 3.0, -2.0, -0.0, 1.0, -7.0, -2.0, 2.0, 4.0, -5.0, -0.0, -4.0, 2.0, 5.0, -1.0) | mat4(-5.0, 5.0, -4.0, -6.0, -5.0, -5.0, 7.0, -2.0, -5.0, 7.0, 3.0, 3.0, -0.0, 1.0, -0.0, -4.0) ]; 756e5c31af7Sopenharmony_ci } 757e5c31af7Sopenharmony_ci 758e5c31af7Sopenharmony_ci both "" 759e5c31af7Sopenharmony_ci #version 300 es 760e5c31af7Sopenharmony_ci precision mediump float; 761e5c31af7Sopenharmony_ci ${DECLARATIONS} 762e5c31af7Sopenharmony_ci 763e5c31af7Sopenharmony_ci mat4 func (mat4 a) 764e5c31af7Sopenharmony_ci { 765e5c31af7Sopenharmony_ci return -2.0*a; 766e5c31af7Sopenharmony_ci } 767e5c31af7Sopenharmony_ci 768e5c31af7Sopenharmony_ci void main() 769e5c31af7Sopenharmony_ci { 770e5c31af7Sopenharmony_ci ${SETUP} 771e5c31af7Sopenharmony_ci out0 = func(in0); 772e5c31af7Sopenharmony_ci ${OUTPUT} 773e5c31af7Sopenharmony_ci } 774e5c31af7Sopenharmony_ci "" 775e5c31af7Sopenharmony_ci end 776e5c31af7Sopenharmony_ci 777e5c31af7Sopenharmony_ci case float_struct 778e5c31af7Sopenharmony_ci version 300 es 779e5c31af7Sopenharmony_ci values 780e5c31af7Sopenharmony_ci { 781e5c31af7Sopenharmony_ci input vec3 in0 = [ vec3(0.0, 1.0, -2.0) | vec3(2.0, 2.5, -4.0) ]; 782e5c31af7Sopenharmony_ci output float out0 = [ 1.0 | -0.5 ]; 783e5c31af7Sopenharmony_ci } 784e5c31af7Sopenharmony_ci 785e5c31af7Sopenharmony_ci both "" 786e5c31af7Sopenharmony_ci #version 300 es 787e5c31af7Sopenharmony_ci precision mediump float; 788e5c31af7Sopenharmony_ci ${DECLARATIONS} 789e5c31af7Sopenharmony_ci 790e5c31af7Sopenharmony_ci struct Pos { float a, b, c; }; 791e5c31af7Sopenharmony_ci 792e5c31af7Sopenharmony_ci float func (Pos p) 793e5c31af7Sopenharmony_ci { 794e5c31af7Sopenharmony_ci return -(p.a + p.b + p.c); 795e5c31af7Sopenharmony_ci } 796e5c31af7Sopenharmony_ci 797e5c31af7Sopenharmony_ci void main() 798e5c31af7Sopenharmony_ci { 799e5c31af7Sopenharmony_ci Pos p = Pos(in0.x, in0.y, in0.z); 800e5c31af7Sopenharmony_ci out0 = func(p); 801e5c31af7Sopenharmony_ci ${OUTPUT} 802e5c31af7Sopenharmony_ci } 803e5c31af7Sopenharmony_ci "" 804e5c31af7Sopenharmony_ci end 805e5c31af7Sopenharmony_ci 806e5c31af7Sopenharmony_ci case struct_struct 807e5c31af7Sopenharmony_ci version 300 es 808e5c31af7Sopenharmony_ci values 809e5c31af7Sopenharmony_ci { 810e5c31af7Sopenharmony_ci input vec3 in0 = [ vec3(0.0, 1.0, -2.0) | vec3(2.0, 2.5, -4.0) ]; 811e5c31af7Sopenharmony_ci output float out0 = [ 1.0 | -0.5 ]; 812e5c31af7Sopenharmony_ci } 813e5c31af7Sopenharmony_ci 814e5c31af7Sopenharmony_ci both "" 815e5c31af7Sopenharmony_ci #version 300 es 816e5c31af7Sopenharmony_ci precision mediump float; 817e5c31af7Sopenharmony_ci ${DECLARATIONS} 818e5c31af7Sopenharmony_ci 819e5c31af7Sopenharmony_ci struct Pos { float a, b, c; }; 820e5c31af7Sopenharmony_ci 821e5c31af7Sopenharmony_ci Pos func (Pos p) 822e5c31af7Sopenharmony_ci { 823e5c31af7Sopenharmony_ci return Pos(-p.a, -p.b, -p.c); 824e5c31af7Sopenharmony_ci } 825e5c31af7Sopenharmony_ci 826e5c31af7Sopenharmony_ci void main() 827e5c31af7Sopenharmony_ci { 828e5c31af7Sopenharmony_ci Pos p = Pos(in0.x, in0.y, in0.z); 829e5c31af7Sopenharmony_ci p = func(p); 830e5c31af7Sopenharmony_ci out0 = p.a + p.b + p.c; 831e5c31af7Sopenharmony_ci ${OUTPUT} 832e5c31af7Sopenharmony_ci } 833e5c31af7Sopenharmony_ci "" 834e5c31af7Sopenharmony_ci end 835e5c31af7Sopenharmony_ci 836e5c31af7Sopenharmony_ci case struct_nested_struct 837e5c31af7Sopenharmony_ci version 300 es 838e5c31af7Sopenharmony_ci values 839e5c31af7Sopenharmony_ci { 840e5c31af7Sopenharmony_ci input vec3 in0 = [ vec3(0.0, 1.0, -2.0) | vec3(2.0, 2.5, -4.0) ]; 841e5c31af7Sopenharmony_ci output float out0 = [ 1.0 | -0.5 ]; 842e5c31af7Sopenharmony_ci } 843e5c31af7Sopenharmony_ci 844e5c31af7Sopenharmony_ci both "" 845e5c31af7Sopenharmony_ci #version 300 es 846e5c31af7Sopenharmony_ci precision mediump float; 847e5c31af7Sopenharmony_ci ${DECLARATIONS} 848e5c31af7Sopenharmony_ci 849e5c31af7Sopenharmony_ci struct Pos { float a, b, c; }; 850e5c31af7Sopenharmony_ci struct Line { Pos start, end; }; 851e5c31af7Sopenharmony_ci 852e5c31af7Sopenharmony_ci Line func (Pos p) 853e5c31af7Sopenharmony_ci { 854e5c31af7Sopenharmony_ci return Line(p, Pos(-p.a, -p.b, -p.c)); 855e5c31af7Sopenharmony_ci } 856e5c31af7Sopenharmony_ci 857e5c31af7Sopenharmony_ci float sum (Pos p) 858e5c31af7Sopenharmony_ci { 859e5c31af7Sopenharmony_ci return (p.a + p.b + p.c); 860e5c31af7Sopenharmony_ci } 861e5c31af7Sopenharmony_ci 862e5c31af7Sopenharmony_ci void main() 863e5c31af7Sopenharmony_ci { 864e5c31af7Sopenharmony_ci Pos p = Pos(in0.x, in0.y, in0.z); 865e5c31af7Sopenharmony_ci Line line = func(p); 866e5c31af7Sopenharmony_ci out0 = sum(line.start) + (2.0 * sum(line.end)); 867e5c31af7Sopenharmony_ci ${OUTPUT} 868e5c31af7Sopenharmony_ci } 869e5c31af7Sopenharmony_ci "" 870e5c31af7Sopenharmony_ci end 871e5c31af7Sopenharmony_ci 872e5c31af7Sopenharmony_ci case struct_constructor_highp_in_fragment 873e5c31af7Sopenharmony_ci version 300 es 874e5c31af7Sopenharmony_ci desc "passing highp vector to struct constructor in fragment shader yields all zeros" 875e5c31af7Sopenharmony_ci vertex "" 876e5c31af7Sopenharmony_ci #version 300 es 877e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 878e5c31af7Sopenharmony_ci void main() 879e5c31af7Sopenharmony_ci { 880e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 881e5c31af7Sopenharmony_ci } 882e5c31af7Sopenharmony_ci "" 883e5c31af7Sopenharmony_ci fragment "" 884e5c31af7Sopenharmony_ci #version 300 es 885e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 886e5c31af7Sopenharmony_ci #ifdef GL_FRAGMENT_PRECISION_HIGH 887e5c31af7Sopenharmony_ci #define PRECISION highp 888e5c31af7Sopenharmony_ci #else 889e5c31af7Sopenharmony_ci #define PRECISION mediump 890e5c31af7Sopenharmony_ci #endif 891e5c31af7Sopenharmony_ci struct Test { 892e5c31af7Sopenharmony_ci PRECISION vec3 color; 893e5c31af7Sopenharmony_ci } ; 894e5c31af7Sopenharmony_ci void main() { 895e5c31af7Sopenharmony_ci PRECISION vec3 color = vec3(0.2, 2.0, 0.1); 896e5c31af7Sopenharmony_ci Test test = Test(color); 897e5c31af7Sopenharmony_ci // Bias the color so all components are guaranteed > 1.0. 898e5c31af7Sopenharmony_ci ${FRAG_COLOR} = vec4(vec3(0.25, 0.55, 0.65) + vec3(4.0, 0.25, 4.0) * test.color, 1.0); 899e5c31af7Sopenharmony_ci } 900e5c31af7Sopenharmony_ci "" 901e5c31af7Sopenharmony_ci end 902e5c31af7Sopenharmony_ci 903e5c31af7Sopenharmony_ci 904e5c31af7Sopenharmony_ciend # datatypes 905e5c31af7Sopenharmony_ci 906e5c31af7Sopenharmony_cigroup qualifiers "Function Parameter Qualifiers" 907e5c31af7Sopenharmony_ci 908e5c31af7Sopenharmony_ci case in_float 909e5c31af7Sopenharmony_ci version 300 es 910e5c31af7Sopenharmony_ci values 911e5c31af7Sopenharmony_ci { 912e5c31af7Sopenharmony_ci input float in0 = [ 0.0 | 1.0 | -2.0 | 2.5 ]; 913e5c31af7Sopenharmony_ci output float out0 = [ 0.0 | -1.0 | 2.0 | -2.5 ]; 914e5c31af7Sopenharmony_ci } 915e5c31af7Sopenharmony_ci 916e5c31af7Sopenharmony_ci both "" 917e5c31af7Sopenharmony_ci #version 300 es 918e5c31af7Sopenharmony_ci precision mediump float; 919e5c31af7Sopenharmony_ci precision mediump int; 920e5c31af7Sopenharmony_ci ${DECLARATIONS} 921e5c31af7Sopenharmony_ci 922e5c31af7Sopenharmony_ci float func (in float a) 923e5c31af7Sopenharmony_ci { 924e5c31af7Sopenharmony_ci a = -a; 925e5c31af7Sopenharmony_ci return 2.0 * a; 926e5c31af7Sopenharmony_ci } 927e5c31af7Sopenharmony_ci 928e5c31af7Sopenharmony_ci void main() 929e5c31af7Sopenharmony_ci { 930e5c31af7Sopenharmony_ci ${SETUP} 931e5c31af7Sopenharmony_ci float f = in0; 932e5c31af7Sopenharmony_ci float g = func(f); 933e5c31af7Sopenharmony_ci out0 = f + g; 934e5c31af7Sopenharmony_ci ${OUTPUT} 935e5c31af7Sopenharmony_ci } 936e5c31af7Sopenharmony_ci "" 937e5c31af7Sopenharmony_ci end 938e5c31af7Sopenharmony_ci 939e5c31af7Sopenharmony_ci case out_float 940e5c31af7Sopenharmony_ci version 300 es 941e5c31af7Sopenharmony_ci values 942e5c31af7Sopenharmony_ci { 943e5c31af7Sopenharmony_ci input float in0 = [ 0.0 | 1.0 | -2.0 | 2.5 ]; 944e5c31af7Sopenharmony_ci output float out0 = [ 0.0 | -1.0 | 2.0 | -2.5 ]; 945e5c31af7Sopenharmony_ci } 946e5c31af7Sopenharmony_ci 947e5c31af7Sopenharmony_ci both "" 948e5c31af7Sopenharmony_ci #version 300 es 949e5c31af7Sopenharmony_ci precision mediump float; 950e5c31af7Sopenharmony_ci precision mediump int; 951e5c31af7Sopenharmony_ci ${DECLARATIONS} 952e5c31af7Sopenharmony_ci 953e5c31af7Sopenharmony_ci void func (out float a) 954e5c31af7Sopenharmony_ci { 955e5c31af7Sopenharmony_ci a = -1.0; 956e5c31af7Sopenharmony_ci } 957e5c31af7Sopenharmony_ci 958e5c31af7Sopenharmony_ci void main() 959e5c31af7Sopenharmony_ci { 960e5c31af7Sopenharmony_ci ${SETUP} 961e5c31af7Sopenharmony_ci float f = 1.0; 962e5c31af7Sopenharmony_ci func(f); 963e5c31af7Sopenharmony_ci out0 = f * in0; 964e5c31af7Sopenharmony_ci ${OUTPUT} 965e5c31af7Sopenharmony_ci } 966e5c31af7Sopenharmony_ci "" 967e5c31af7Sopenharmony_ci end 968e5c31af7Sopenharmony_ci 969e5c31af7Sopenharmony_ci case inout_float 970e5c31af7Sopenharmony_ci version 300 es 971e5c31af7Sopenharmony_ci values 972e5c31af7Sopenharmony_ci { 973e5c31af7Sopenharmony_ci input float in0 = [ 0.0 | 1.0 | -2.0 | 2.5 ]; 974e5c31af7Sopenharmony_ci output float out0 = [ 0.0 | -1.0 | 2.0 | -2.5 ]; 975e5c31af7Sopenharmony_ci } 976e5c31af7Sopenharmony_ci 977e5c31af7Sopenharmony_ci both "" 978e5c31af7Sopenharmony_ci #version 300 es 979e5c31af7Sopenharmony_ci precision mediump float; 980e5c31af7Sopenharmony_ci precision mediump int; 981e5c31af7Sopenharmony_ci ${DECLARATIONS} 982e5c31af7Sopenharmony_ci 983e5c31af7Sopenharmony_ci void func (inout float a) 984e5c31af7Sopenharmony_ci { 985e5c31af7Sopenharmony_ci a = -a; 986e5c31af7Sopenharmony_ci } 987e5c31af7Sopenharmony_ci 988e5c31af7Sopenharmony_ci void main() 989e5c31af7Sopenharmony_ci { 990e5c31af7Sopenharmony_ci ${SETUP} 991e5c31af7Sopenharmony_ci float f = 1.0; 992e5c31af7Sopenharmony_ci func(f); 993e5c31af7Sopenharmony_ci out0 = f * in0; 994e5c31af7Sopenharmony_ci ${OUTPUT} 995e5c31af7Sopenharmony_ci } 996e5c31af7Sopenharmony_ci "" 997e5c31af7Sopenharmony_ci end 998e5c31af7Sopenharmony_ci 999e5c31af7Sopenharmony_ci case in_lowp_float 1000e5c31af7Sopenharmony_ci version 300 es 1001e5c31af7Sopenharmony_ci values 1002e5c31af7Sopenharmony_ci { 1003e5c31af7Sopenharmony_ci input float in0 = [ 0.0 | 1.0 | -2.0 | 2.5 ]; 1004e5c31af7Sopenharmony_ci output float out0 = [ 0.0 | -1.0 | 2.0 | -2.5 ]; 1005e5c31af7Sopenharmony_ci } 1006e5c31af7Sopenharmony_ci 1007e5c31af7Sopenharmony_ci both "" 1008e5c31af7Sopenharmony_ci #version 300 es 1009e5c31af7Sopenharmony_ci precision mediump float; 1010e5c31af7Sopenharmony_ci precision mediump int; 1011e5c31af7Sopenharmony_ci ${DECLARATIONS} 1012e5c31af7Sopenharmony_ci 1013e5c31af7Sopenharmony_ci float func (in lowp float a) 1014e5c31af7Sopenharmony_ci { 1015e5c31af7Sopenharmony_ci a = -a; 1016e5c31af7Sopenharmony_ci return 2.0 * a; 1017e5c31af7Sopenharmony_ci } 1018e5c31af7Sopenharmony_ci 1019e5c31af7Sopenharmony_ci void main() 1020e5c31af7Sopenharmony_ci { 1021e5c31af7Sopenharmony_ci ${SETUP} 1022e5c31af7Sopenharmony_ci float f = in0; 1023e5c31af7Sopenharmony_ci float g = func(f); 1024e5c31af7Sopenharmony_ci out0 = f + g; 1025e5c31af7Sopenharmony_ci ${OUTPUT} 1026e5c31af7Sopenharmony_ci } 1027e5c31af7Sopenharmony_ci "" 1028e5c31af7Sopenharmony_ci end 1029e5c31af7Sopenharmony_ci 1030e5c31af7Sopenharmony_ci case out_lowp_float 1031e5c31af7Sopenharmony_ci version 300 es 1032e5c31af7Sopenharmony_ci values 1033e5c31af7Sopenharmony_ci { 1034e5c31af7Sopenharmony_ci input float in0 = [ 0.0 | 1.0 | -2.0 | 2.5 ]; 1035e5c31af7Sopenharmony_ci output float out0 = [ 0.0 | -1.0 | 2.0 | -2.5 ]; 1036e5c31af7Sopenharmony_ci } 1037e5c31af7Sopenharmony_ci 1038e5c31af7Sopenharmony_ci both "" 1039e5c31af7Sopenharmony_ci #version 300 es 1040e5c31af7Sopenharmony_ci precision mediump float; 1041e5c31af7Sopenharmony_ci precision mediump int; 1042e5c31af7Sopenharmony_ci ${DECLARATIONS} 1043e5c31af7Sopenharmony_ci 1044e5c31af7Sopenharmony_ci void func (out lowp float a) 1045e5c31af7Sopenharmony_ci { 1046e5c31af7Sopenharmony_ci a = -1.0; 1047e5c31af7Sopenharmony_ci } 1048e5c31af7Sopenharmony_ci 1049e5c31af7Sopenharmony_ci void main() 1050e5c31af7Sopenharmony_ci { 1051e5c31af7Sopenharmony_ci ${SETUP} 1052e5c31af7Sopenharmony_ci float f = 1.0; 1053e5c31af7Sopenharmony_ci func(f); 1054e5c31af7Sopenharmony_ci out0 = f * in0; 1055e5c31af7Sopenharmony_ci ${OUTPUT} 1056e5c31af7Sopenharmony_ci } 1057e5c31af7Sopenharmony_ci "" 1058e5c31af7Sopenharmony_ci end 1059e5c31af7Sopenharmony_ci 1060e5c31af7Sopenharmony_ci case inout_lowp_float 1061e5c31af7Sopenharmony_ci version 300 es 1062e5c31af7Sopenharmony_ci values 1063e5c31af7Sopenharmony_ci { 1064e5c31af7Sopenharmony_ci input float in0 = [ 0.0 | 1.0 | -2.0 | 2.5 ]; 1065e5c31af7Sopenharmony_ci output float out0 = [ 0.0 | -1.0 | 2.0 | -2.5 ]; 1066e5c31af7Sopenharmony_ci } 1067e5c31af7Sopenharmony_ci 1068e5c31af7Sopenharmony_ci both "" 1069e5c31af7Sopenharmony_ci #version 300 es 1070e5c31af7Sopenharmony_ci precision mediump float; 1071e5c31af7Sopenharmony_ci precision mediump int; 1072e5c31af7Sopenharmony_ci ${DECLARATIONS} 1073e5c31af7Sopenharmony_ci 1074e5c31af7Sopenharmony_ci void func (inout lowp float a) 1075e5c31af7Sopenharmony_ci { 1076e5c31af7Sopenharmony_ci a = -a; 1077e5c31af7Sopenharmony_ci } 1078e5c31af7Sopenharmony_ci 1079e5c31af7Sopenharmony_ci void main() 1080e5c31af7Sopenharmony_ci { 1081e5c31af7Sopenharmony_ci ${SETUP} 1082e5c31af7Sopenharmony_ci float f = 1.0; 1083e5c31af7Sopenharmony_ci func(f); 1084e5c31af7Sopenharmony_ci out0 = f * in0; 1085e5c31af7Sopenharmony_ci ${OUTPUT} 1086e5c31af7Sopenharmony_ci } 1087e5c31af7Sopenharmony_ci "" 1088e5c31af7Sopenharmony_ci end 1089e5c31af7Sopenharmony_ci 1090e5c31af7Sopenharmony_ci case in_highp_float 1091e5c31af7Sopenharmony_ci version 300 es 1092e5c31af7Sopenharmony_ci values 1093e5c31af7Sopenharmony_ci { 1094e5c31af7Sopenharmony_ci input float in0 = [ 0.0 | 1.0 | -2.0 | 2.5 ]; 1095e5c31af7Sopenharmony_ci output float out0 = [ 0.0 | -1.0 | 2.0 | -2.5 ]; 1096e5c31af7Sopenharmony_ci } 1097e5c31af7Sopenharmony_ci 1098e5c31af7Sopenharmony_ci both "" 1099e5c31af7Sopenharmony_ci #version 300 es 1100e5c31af7Sopenharmony_ci precision mediump float; 1101e5c31af7Sopenharmony_ci precision mediump int; 1102e5c31af7Sopenharmony_ci ${DECLARATIONS} 1103e5c31af7Sopenharmony_ci 1104e5c31af7Sopenharmony_ci float func (in highp float a) 1105e5c31af7Sopenharmony_ci { 1106e5c31af7Sopenharmony_ci a = -a; 1107e5c31af7Sopenharmony_ci return 2.0 * a; 1108e5c31af7Sopenharmony_ci } 1109e5c31af7Sopenharmony_ci 1110e5c31af7Sopenharmony_ci void main() 1111e5c31af7Sopenharmony_ci { 1112e5c31af7Sopenharmony_ci ${SETUP} 1113e5c31af7Sopenharmony_ci float f = in0; 1114e5c31af7Sopenharmony_ci float g = func(f); 1115e5c31af7Sopenharmony_ci out0 = f + g; 1116e5c31af7Sopenharmony_ci ${OUTPUT} 1117e5c31af7Sopenharmony_ci } 1118e5c31af7Sopenharmony_ci "" 1119e5c31af7Sopenharmony_ci end 1120e5c31af7Sopenharmony_ci 1121e5c31af7Sopenharmony_ci case out_highp_float 1122e5c31af7Sopenharmony_ci version 300 es 1123e5c31af7Sopenharmony_ci values 1124e5c31af7Sopenharmony_ci { 1125e5c31af7Sopenharmony_ci input float in0 = [ 0.0 | 1.0 | -2.0 | 2.5 ]; 1126e5c31af7Sopenharmony_ci output float out0 = [ 0.0 | -1.0 | 2.0 | -2.5 ]; 1127e5c31af7Sopenharmony_ci } 1128e5c31af7Sopenharmony_ci 1129e5c31af7Sopenharmony_ci both "" 1130e5c31af7Sopenharmony_ci #version 300 es 1131e5c31af7Sopenharmony_ci precision mediump float; 1132e5c31af7Sopenharmony_ci precision mediump int; 1133e5c31af7Sopenharmony_ci ${DECLARATIONS} 1134e5c31af7Sopenharmony_ci 1135e5c31af7Sopenharmony_ci void func (out highp float a) 1136e5c31af7Sopenharmony_ci { 1137e5c31af7Sopenharmony_ci a = -1.0; 1138e5c31af7Sopenharmony_ci } 1139e5c31af7Sopenharmony_ci 1140e5c31af7Sopenharmony_ci void main() 1141e5c31af7Sopenharmony_ci { 1142e5c31af7Sopenharmony_ci ${SETUP} 1143e5c31af7Sopenharmony_ci float f = 1.0; 1144e5c31af7Sopenharmony_ci func(f); 1145e5c31af7Sopenharmony_ci out0 = f * in0; 1146e5c31af7Sopenharmony_ci ${OUTPUT} 1147e5c31af7Sopenharmony_ci } 1148e5c31af7Sopenharmony_ci "" 1149e5c31af7Sopenharmony_ci end 1150e5c31af7Sopenharmony_ci 1151e5c31af7Sopenharmony_ci case inout_highp_float 1152e5c31af7Sopenharmony_ci version 300 es 1153e5c31af7Sopenharmony_ci values 1154e5c31af7Sopenharmony_ci { 1155e5c31af7Sopenharmony_ci input float in0 = [ 0.0 | 1.0 | -2.0 | 2.5 ]; 1156e5c31af7Sopenharmony_ci output float out0 = [ 0.0 | -1.0 | 2.0 | -2.5 ]; 1157e5c31af7Sopenharmony_ci } 1158e5c31af7Sopenharmony_ci 1159e5c31af7Sopenharmony_ci both "" 1160e5c31af7Sopenharmony_ci #version 300 es 1161e5c31af7Sopenharmony_ci precision mediump float; 1162e5c31af7Sopenharmony_ci precision mediump int; 1163e5c31af7Sopenharmony_ci ${DECLARATIONS} 1164e5c31af7Sopenharmony_ci 1165e5c31af7Sopenharmony_ci void func (inout highp float a) 1166e5c31af7Sopenharmony_ci { 1167e5c31af7Sopenharmony_ci a = -a; 1168e5c31af7Sopenharmony_ci } 1169e5c31af7Sopenharmony_ci 1170e5c31af7Sopenharmony_ci void main() 1171e5c31af7Sopenharmony_ci { 1172e5c31af7Sopenharmony_ci ${SETUP} 1173e5c31af7Sopenharmony_ci float f = 1.0; 1174e5c31af7Sopenharmony_ci func(f); 1175e5c31af7Sopenharmony_ci out0 = f * in0; 1176e5c31af7Sopenharmony_ci ${OUTPUT} 1177e5c31af7Sopenharmony_ci } 1178e5c31af7Sopenharmony_ci "" 1179e5c31af7Sopenharmony_ci end 1180e5c31af7Sopenharmony_ci 1181e5c31af7Sopenharmony_ci case const_float 1182e5c31af7Sopenharmony_ci version 300 es 1183e5c31af7Sopenharmony_ci values 1184e5c31af7Sopenharmony_ci { 1185e5c31af7Sopenharmony_ci input float in0 = [ 0.0 | 1.0 | -2.0 | 2.5 ]; 1186e5c31af7Sopenharmony_ci output float out0 = [ 0.0 | -1.0 | 2.0 | -2.5 ]; 1187e5c31af7Sopenharmony_ci } 1188e5c31af7Sopenharmony_ci 1189e5c31af7Sopenharmony_ci both "" 1190e5c31af7Sopenharmony_ci #version 300 es 1191e5c31af7Sopenharmony_ci precision mediump float; 1192e5c31af7Sopenharmony_ci precision mediump int; 1193e5c31af7Sopenharmony_ci ${DECLARATIONS} 1194e5c31af7Sopenharmony_ci 1195e5c31af7Sopenharmony_ci float func (const float a) 1196e5c31af7Sopenharmony_ci { 1197e5c31af7Sopenharmony_ci float b = -a; 1198e5c31af7Sopenharmony_ci return 2.0 * b; 1199e5c31af7Sopenharmony_ci } 1200e5c31af7Sopenharmony_ci 1201e5c31af7Sopenharmony_ci void main() 1202e5c31af7Sopenharmony_ci { 1203e5c31af7Sopenharmony_ci ${SETUP} 1204e5c31af7Sopenharmony_ci float f = in0; 1205e5c31af7Sopenharmony_ci float g = func(f); 1206e5c31af7Sopenharmony_ci out0 = f + g; 1207e5c31af7Sopenharmony_ci ${OUTPUT} 1208e5c31af7Sopenharmony_ci } 1209e5c31af7Sopenharmony_ci "" 1210e5c31af7Sopenharmony_ci end 1211e5c31af7Sopenharmony_ci 1212e5c31af7Sopenharmony_ci case const_in_float 1213e5c31af7Sopenharmony_ci version 300 es 1214e5c31af7Sopenharmony_ci values 1215e5c31af7Sopenharmony_ci { 1216e5c31af7Sopenharmony_ci input float in0 = [ 0.0 | 1.0 | -2.0 | 2.5 ]; 1217e5c31af7Sopenharmony_ci output float out0 = [ 0.0 | -1.0 | 2.0 | -2.5 ]; 1218e5c31af7Sopenharmony_ci } 1219e5c31af7Sopenharmony_ci 1220e5c31af7Sopenharmony_ci both "" 1221e5c31af7Sopenharmony_ci #version 300 es 1222e5c31af7Sopenharmony_ci precision mediump float; 1223e5c31af7Sopenharmony_ci precision mediump int; 1224e5c31af7Sopenharmony_ci ${DECLARATIONS} 1225e5c31af7Sopenharmony_ci 1226e5c31af7Sopenharmony_ci float func (const in float a) 1227e5c31af7Sopenharmony_ci { 1228e5c31af7Sopenharmony_ci float b = -a; 1229e5c31af7Sopenharmony_ci return 2.0 * b; 1230e5c31af7Sopenharmony_ci } 1231e5c31af7Sopenharmony_ci 1232e5c31af7Sopenharmony_ci void main() 1233e5c31af7Sopenharmony_ci { 1234e5c31af7Sopenharmony_ci ${SETUP} 1235e5c31af7Sopenharmony_ci float f = in0; 1236e5c31af7Sopenharmony_ci float g = func(f); 1237e5c31af7Sopenharmony_ci out0 = f + g; 1238e5c31af7Sopenharmony_ci ${OUTPUT} 1239e5c31af7Sopenharmony_ci } 1240e5c31af7Sopenharmony_ci "" 1241e5c31af7Sopenharmony_ci end 1242e5c31af7Sopenharmony_ci 1243e5c31af7Sopenharmony_ci case in_int 1244e5c31af7Sopenharmony_ci version 300 es 1245e5c31af7Sopenharmony_ci values 1246e5c31af7Sopenharmony_ci { 1247e5c31af7Sopenharmony_ci input int in0 = [ 0 | 1 | -2 | 4 ]; 1248e5c31af7Sopenharmony_ci output int out0 = [ 0 | -1 | 2 | -4 ]; 1249e5c31af7Sopenharmony_ci } 1250e5c31af7Sopenharmony_ci 1251e5c31af7Sopenharmony_ci both "" 1252e5c31af7Sopenharmony_ci #version 300 es 1253e5c31af7Sopenharmony_ci precision mediump float; 1254e5c31af7Sopenharmony_ci precision mediump int; 1255e5c31af7Sopenharmony_ci ${DECLARATIONS} 1256e5c31af7Sopenharmony_ci 1257e5c31af7Sopenharmony_ci int func (in int a) 1258e5c31af7Sopenharmony_ci { 1259e5c31af7Sopenharmony_ci a = -a; 1260e5c31af7Sopenharmony_ci return 2 * a; 1261e5c31af7Sopenharmony_ci } 1262e5c31af7Sopenharmony_ci 1263e5c31af7Sopenharmony_ci void main() 1264e5c31af7Sopenharmony_ci { 1265e5c31af7Sopenharmony_ci ${SETUP} 1266e5c31af7Sopenharmony_ci int f = in0; 1267e5c31af7Sopenharmony_ci int g = func(f); 1268e5c31af7Sopenharmony_ci out0 = f + g; 1269e5c31af7Sopenharmony_ci ${OUTPUT} 1270e5c31af7Sopenharmony_ci } 1271e5c31af7Sopenharmony_ci "" 1272e5c31af7Sopenharmony_ci end 1273e5c31af7Sopenharmony_ci 1274e5c31af7Sopenharmony_ci case out_int 1275e5c31af7Sopenharmony_ci version 300 es 1276e5c31af7Sopenharmony_ci values 1277e5c31af7Sopenharmony_ci { 1278e5c31af7Sopenharmony_ci input int in0 = [ 0 | 1 | -2 | 6 ]; 1279e5c31af7Sopenharmony_ci output int out0 = [ 0 | -1 | 2 | -6 ]; 1280e5c31af7Sopenharmony_ci } 1281e5c31af7Sopenharmony_ci 1282e5c31af7Sopenharmony_ci both "" 1283e5c31af7Sopenharmony_ci #version 300 es 1284e5c31af7Sopenharmony_ci precision mediump float; 1285e5c31af7Sopenharmony_ci precision mediump int; 1286e5c31af7Sopenharmony_ci ${DECLARATIONS} 1287e5c31af7Sopenharmony_ci 1288e5c31af7Sopenharmony_ci void func (out int a) 1289e5c31af7Sopenharmony_ci { 1290e5c31af7Sopenharmony_ci a = -1; 1291e5c31af7Sopenharmony_ci } 1292e5c31af7Sopenharmony_ci 1293e5c31af7Sopenharmony_ci void main() 1294e5c31af7Sopenharmony_ci { 1295e5c31af7Sopenharmony_ci ${SETUP} 1296e5c31af7Sopenharmony_ci int f = 1; 1297e5c31af7Sopenharmony_ci func(f); 1298e5c31af7Sopenharmony_ci out0 = f * in0; 1299e5c31af7Sopenharmony_ci ${OUTPUT} 1300e5c31af7Sopenharmony_ci } 1301e5c31af7Sopenharmony_ci "" 1302e5c31af7Sopenharmony_ci end 1303e5c31af7Sopenharmony_ci 1304e5c31af7Sopenharmony_ci case inout_int 1305e5c31af7Sopenharmony_ci version 300 es 1306e5c31af7Sopenharmony_ci values 1307e5c31af7Sopenharmony_ci { 1308e5c31af7Sopenharmony_ci input int in0 = [ 0 | 1 | -2 | 6 ]; 1309e5c31af7Sopenharmony_ci output int out0 = [ 0 | -1 | 2 | -6 ]; 1310e5c31af7Sopenharmony_ci } 1311e5c31af7Sopenharmony_ci 1312e5c31af7Sopenharmony_ci both "" 1313e5c31af7Sopenharmony_ci #version 300 es 1314e5c31af7Sopenharmony_ci precision mediump float; 1315e5c31af7Sopenharmony_ci precision mediump int; 1316e5c31af7Sopenharmony_ci ${DECLARATIONS} 1317e5c31af7Sopenharmony_ci 1318e5c31af7Sopenharmony_ci void func (inout int a) 1319e5c31af7Sopenharmony_ci { 1320e5c31af7Sopenharmony_ci a = -a; 1321e5c31af7Sopenharmony_ci } 1322e5c31af7Sopenharmony_ci 1323e5c31af7Sopenharmony_ci void main() 1324e5c31af7Sopenharmony_ci { 1325e5c31af7Sopenharmony_ci ${SETUP} 1326e5c31af7Sopenharmony_ci int f = 1; 1327e5c31af7Sopenharmony_ci func(f); 1328e5c31af7Sopenharmony_ci out0 = f * in0; 1329e5c31af7Sopenharmony_ci ${OUTPUT} 1330e5c31af7Sopenharmony_ci } 1331e5c31af7Sopenharmony_ci "" 1332e5c31af7Sopenharmony_ci end 1333e5c31af7Sopenharmony_ci 1334e5c31af7Sopenharmony_ci case in_lowp_int 1335e5c31af7Sopenharmony_ci version 300 es 1336e5c31af7Sopenharmony_ci values 1337e5c31af7Sopenharmony_ci { 1338e5c31af7Sopenharmony_ci input int in0 = [ 0 | 1 | -2 | 4 ]; 1339e5c31af7Sopenharmony_ci output int out0 = [ 0 | -1 | 2 | -4 ]; 1340e5c31af7Sopenharmony_ci } 1341e5c31af7Sopenharmony_ci 1342e5c31af7Sopenharmony_ci both "" 1343e5c31af7Sopenharmony_ci #version 300 es 1344e5c31af7Sopenharmony_ci precision mediump float; 1345e5c31af7Sopenharmony_ci precision mediump int; 1346e5c31af7Sopenharmony_ci ${DECLARATIONS} 1347e5c31af7Sopenharmony_ci 1348e5c31af7Sopenharmony_ci int func (in lowp int a) 1349e5c31af7Sopenharmony_ci { 1350e5c31af7Sopenharmony_ci a = -a; 1351e5c31af7Sopenharmony_ci return 2 * a; 1352e5c31af7Sopenharmony_ci } 1353e5c31af7Sopenharmony_ci 1354e5c31af7Sopenharmony_ci void main() 1355e5c31af7Sopenharmony_ci { 1356e5c31af7Sopenharmony_ci ${SETUP} 1357e5c31af7Sopenharmony_ci int f = in0; 1358e5c31af7Sopenharmony_ci int g = func(f); 1359e5c31af7Sopenharmony_ci out0 = f + g; 1360e5c31af7Sopenharmony_ci ${OUTPUT} 1361e5c31af7Sopenharmony_ci } 1362e5c31af7Sopenharmony_ci "" 1363e5c31af7Sopenharmony_ci end 1364e5c31af7Sopenharmony_ci 1365e5c31af7Sopenharmony_ci case out_lowp_int 1366e5c31af7Sopenharmony_ci version 300 es 1367e5c31af7Sopenharmony_ci values 1368e5c31af7Sopenharmony_ci { 1369e5c31af7Sopenharmony_ci input int in0 = [ 0 | 1 | -2 | 6 ]; 1370e5c31af7Sopenharmony_ci output int out0 = [ 0 | -1 | 2 | -6 ]; 1371e5c31af7Sopenharmony_ci } 1372e5c31af7Sopenharmony_ci 1373e5c31af7Sopenharmony_ci both "" 1374e5c31af7Sopenharmony_ci #version 300 es 1375e5c31af7Sopenharmony_ci precision mediump float; 1376e5c31af7Sopenharmony_ci precision mediump int; 1377e5c31af7Sopenharmony_ci ${DECLARATIONS} 1378e5c31af7Sopenharmony_ci 1379e5c31af7Sopenharmony_ci void func (out lowp int a) 1380e5c31af7Sopenharmony_ci { 1381e5c31af7Sopenharmony_ci a = -1; 1382e5c31af7Sopenharmony_ci } 1383e5c31af7Sopenharmony_ci 1384e5c31af7Sopenharmony_ci void main() 1385e5c31af7Sopenharmony_ci { 1386e5c31af7Sopenharmony_ci ${SETUP} 1387e5c31af7Sopenharmony_ci int f = 1; 1388e5c31af7Sopenharmony_ci func(f); 1389e5c31af7Sopenharmony_ci out0 = f * in0; 1390e5c31af7Sopenharmony_ci ${OUTPUT} 1391e5c31af7Sopenharmony_ci } 1392e5c31af7Sopenharmony_ci "" 1393e5c31af7Sopenharmony_ci end 1394e5c31af7Sopenharmony_ci 1395e5c31af7Sopenharmony_ci case inout_lowp_int 1396e5c31af7Sopenharmony_ci version 300 es 1397e5c31af7Sopenharmony_ci values 1398e5c31af7Sopenharmony_ci { 1399e5c31af7Sopenharmony_ci input int in0 = [ 0 | 1 | -2 | 6 ]; 1400e5c31af7Sopenharmony_ci output int out0 = [ 0 | -1 | 2 | -6 ]; 1401e5c31af7Sopenharmony_ci } 1402e5c31af7Sopenharmony_ci 1403e5c31af7Sopenharmony_ci both "" 1404e5c31af7Sopenharmony_ci #version 300 es 1405e5c31af7Sopenharmony_ci precision mediump float; 1406e5c31af7Sopenharmony_ci precision mediump int; 1407e5c31af7Sopenharmony_ci ${DECLARATIONS} 1408e5c31af7Sopenharmony_ci 1409e5c31af7Sopenharmony_ci void func (inout lowp int a) 1410e5c31af7Sopenharmony_ci { 1411e5c31af7Sopenharmony_ci a = -a; 1412e5c31af7Sopenharmony_ci } 1413e5c31af7Sopenharmony_ci 1414e5c31af7Sopenharmony_ci void main() 1415e5c31af7Sopenharmony_ci { 1416e5c31af7Sopenharmony_ci ${SETUP} 1417e5c31af7Sopenharmony_ci int f = 1; 1418e5c31af7Sopenharmony_ci func(f); 1419e5c31af7Sopenharmony_ci out0 = f * in0; 1420e5c31af7Sopenharmony_ci ${OUTPUT} 1421e5c31af7Sopenharmony_ci } 1422e5c31af7Sopenharmony_ci "" 1423e5c31af7Sopenharmony_ci end 1424e5c31af7Sopenharmony_ci 1425e5c31af7Sopenharmony_ci case in_highp_int 1426e5c31af7Sopenharmony_ci version 300 es 1427e5c31af7Sopenharmony_ci values 1428e5c31af7Sopenharmony_ci { 1429e5c31af7Sopenharmony_ci input int in0 = [ 0 | 1 | -2 | 4 ]; 1430e5c31af7Sopenharmony_ci output int out0 = [ 0 | -1 | 2 | -4 ]; 1431e5c31af7Sopenharmony_ci } 1432e5c31af7Sopenharmony_ci 1433e5c31af7Sopenharmony_ci both "" 1434e5c31af7Sopenharmony_ci #version 300 es 1435e5c31af7Sopenharmony_ci precision mediump float; 1436e5c31af7Sopenharmony_ci precision mediump int; 1437e5c31af7Sopenharmony_ci ${DECLARATIONS} 1438e5c31af7Sopenharmony_ci 1439e5c31af7Sopenharmony_ci int func (in highp int a) 1440e5c31af7Sopenharmony_ci { 1441e5c31af7Sopenharmony_ci a = -a; 1442e5c31af7Sopenharmony_ci return 2 * a; 1443e5c31af7Sopenharmony_ci } 1444e5c31af7Sopenharmony_ci 1445e5c31af7Sopenharmony_ci void main() 1446e5c31af7Sopenharmony_ci { 1447e5c31af7Sopenharmony_ci ${SETUP} 1448e5c31af7Sopenharmony_ci int f = in0; 1449e5c31af7Sopenharmony_ci int g = func(f); 1450e5c31af7Sopenharmony_ci out0 = f + g; 1451e5c31af7Sopenharmony_ci ${OUTPUT} 1452e5c31af7Sopenharmony_ci } 1453e5c31af7Sopenharmony_ci "" 1454e5c31af7Sopenharmony_ci end 1455e5c31af7Sopenharmony_ci 1456e5c31af7Sopenharmony_ci case out_highp_int 1457e5c31af7Sopenharmony_ci version 300 es 1458e5c31af7Sopenharmony_ci values 1459e5c31af7Sopenharmony_ci { 1460e5c31af7Sopenharmony_ci input int in0 = [ 0 | 1 | -2 | 6 ]; 1461e5c31af7Sopenharmony_ci output int out0 = [ 0 | -1 | 2 | -6 ]; 1462e5c31af7Sopenharmony_ci } 1463e5c31af7Sopenharmony_ci 1464e5c31af7Sopenharmony_ci both "" 1465e5c31af7Sopenharmony_ci #version 300 es 1466e5c31af7Sopenharmony_ci precision mediump float; 1467e5c31af7Sopenharmony_ci precision mediump int; 1468e5c31af7Sopenharmony_ci ${DECLARATIONS} 1469e5c31af7Sopenharmony_ci 1470e5c31af7Sopenharmony_ci void func (out highp int a) 1471e5c31af7Sopenharmony_ci { 1472e5c31af7Sopenharmony_ci a = -1; 1473e5c31af7Sopenharmony_ci } 1474e5c31af7Sopenharmony_ci 1475e5c31af7Sopenharmony_ci void main() 1476e5c31af7Sopenharmony_ci { 1477e5c31af7Sopenharmony_ci ${SETUP} 1478e5c31af7Sopenharmony_ci int f = 1; 1479e5c31af7Sopenharmony_ci func(f); 1480e5c31af7Sopenharmony_ci out0 = f * in0; 1481e5c31af7Sopenharmony_ci ${OUTPUT} 1482e5c31af7Sopenharmony_ci } 1483e5c31af7Sopenharmony_ci "" 1484e5c31af7Sopenharmony_ci end 1485e5c31af7Sopenharmony_ci 1486e5c31af7Sopenharmony_ci case inout_highp_int 1487e5c31af7Sopenharmony_ci version 300 es 1488e5c31af7Sopenharmony_ci values 1489e5c31af7Sopenharmony_ci { 1490e5c31af7Sopenharmony_ci input int in0 = [ 0 | 1 | -2 | 6 ]; 1491e5c31af7Sopenharmony_ci output int out0 = [ 0 | -1 | 2 | -6 ]; 1492e5c31af7Sopenharmony_ci } 1493e5c31af7Sopenharmony_ci 1494e5c31af7Sopenharmony_ci both "" 1495e5c31af7Sopenharmony_ci #version 300 es 1496e5c31af7Sopenharmony_ci precision mediump float; 1497e5c31af7Sopenharmony_ci precision mediump int; 1498e5c31af7Sopenharmony_ci ${DECLARATIONS} 1499e5c31af7Sopenharmony_ci 1500e5c31af7Sopenharmony_ci void func (inout highp int a) 1501e5c31af7Sopenharmony_ci { 1502e5c31af7Sopenharmony_ci a = -a; 1503e5c31af7Sopenharmony_ci } 1504e5c31af7Sopenharmony_ci 1505e5c31af7Sopenharmony_ci void main() 1506e5c31af7Sopenharmony_ci { 1507e5c31af7Sopenharmony_ci ${SETUP} 1508e5c31af7Sopenharmony_ci int f = 1; 1509e5c31af7Sopenharmony_ci func(f); 1510e5c31af7Sopenharmony_ci out0 = f * in0; 1511e5c31af7Sopenharmony_ci ${OUTPUT} 1512e5c31af7Sopenharmony_ci } 1513e5c31af7Sopenharmony_ci "" 1514e5c31af7Sopenharmony_ci end 1515e5c31af7Sopenharmony_ci 1516e5c31af7Sopenharmony_ci case const_int 1517e5c31af7Sopenharmony_ci version 300 es 1518e5c31af7Sopenharmony_ci values 1519e5c31af7Sopenharmony_ci { 1520e5c31af7Sopenharmony_ci input int in0 = [ 0 | 1 | -2 | 4 ]; 1521e5c31af7Sopenharmony_ci output int out0 = [ 0 | -1 | 2 | -4 ]; 1522e5c31af7Sopenharmony_ci } 1523e5c31af7Sopenharmony_ci 1524e5c31af7Sopenharmony_ci both "" 1525e5c31af7Sopenharmony_ci #version 300 es 1526e5c31af7Sopenharmony_ci precision mediump float; 1527e5c31af7Sopenharmony_ci precision mediump int; 1528e5c31af7Sopenharmony_ci ${DECLARATIONS} 1529e5c31af7Sopenharmony_ci 1530e5c31af7Sopenharmony_ci int func (const int a) 1531e5c31af7Sopenharmony_ci { 1532e5c31af7Sopenharmony_ci int b = -a; 1533e5c31af7Sopenharmony_ci return 2 * b; 1534e5c31af7Sopenharmony_ci } 1535e5c31af7Sopenharmony_ci 1536e5c31af7Sopenharmony_ci void main() 1537e5c31af7Sopenharmony_ci { 1538e5c31af7Sopenharmony_ci ${SETUP} 1539e5c31af7Sopenharmony_ci int f = in0; 1540e5c31af7Sopenharmony_ci int g = func(f); 1541e5c31af7Sopenharmony_ci out0 = f + g; 1542e5c31af7Sopenharmony_ci ${OUTPUT} 1543e5c31af7Sopenharmony_ci } 1544e5c31af7Sopenharmony_ci "" 1545e5c31af7Sopenharmony_ci end 1546e5c31af7Sopenharmony_ci 1547e5c31af7Sopenharmony_ci case const_in_int 1548e5c31af7Sopenharmony_ci version 300 es 1549e5c31af7Sopenharmony_ci values 1550e5c31af7Sopenharmony_ci { 1551e5c31af7Sopenharmony_ci input int in0 = [ 0 | 1 | -2 | 4 ]; 1552e5c31af7Sopenharmony_ci output int out0 = [ 0 | -1 | 2 | -4 ]; 1553e5c31af7Sopenharmony_ci } 1554e5c31af7Sopenharmony_ci 1555e5c31af7Sopenharmony_ci both "" 1556e5c31af7Sopenharmony_ci #version 300 es 1557e5c31af7Sopenharmony_ci precision mediump float; 1558e5c31af7Sopenharmony_ci precision mediump int; 1559e5c31af7Sopenharmony_ci ${DECLARATIONS} 1560e5c31af7Sopenharmony_ci 1561e5c31af7Sopenharmony_ci int func (const in int a) 1562e5c31af7Sopenharmony_ci { 1563e5c31af7Sopenharmony_ci int b = -a; 1564e5c31af7Sopenharmony_ci return 2 * b; 1565e5c31af7Sopenharmony_ci } 1566e5c31af7Sopenharmony_ci 1567e5c31af7Sopenharmony_ci void main() 1568e5c31af7Sopenharmony_ci { 1569e5c31af7Sopenharmony_ci ${SETUP} 1570e5c31af7Sopenharmony_ci int f = in0; 1571e5c31af7Sopenharmony_ci int g = func(f); 1572e5c31af7Sopenharmony_ci out0 = f + g; 1573e5c31af7Sopenharmony_ci ${OUTPUT} 1574e5c31af7Sopenharmony_ci } 1575e5c31af7Sopenharmony_ci "" 1576e5c31af7Sopenharmony_ci end 1577e5c31af7Sopenharmony_ci 1578e5c31af7Sopenharmony_ci case in_bool 1579e5c31af7Sopenharmony_ci version 300 es 1580e5c31af7Sopenharmony_ci values 1581e5c31af7Sopenharmony_ci { 1582e5c31af7Sopenharmony_ci input bool in0 = [ true | false ]; 1583e5c31af7Sopenharmony_ci output bool out0 = [ true | true ]; 1584e5c31af7Sopenharmony_ci } 1585e5c31af7Sopenharmony_ci 1586e5c31af7Sopenharmony_ci both "" 1587e5c31af7Sopenharmony_ci #version 300 es 1588e5c31af7Sopenharmony_ci precision mediump float; 1589e5c31af7Sopenharmony_ci ${DECLARATIONS} 1590e5c31af7Sopenharmony_ci 1591e5c31af7Sopenharmony_ci bool func (in bool a) 1592e5c31af7Sopenharmony_ci { 1593e5c31af7Sopenharmony_ci a = !a; 1594e5c31af7Sopenharmony_ci return a; 1595e5c31af7Sopenharmony_ci } 1596e5c31af7Sopenharmony_ci 1597e5c31af7Sopenharmony_ci void main() 1598e5c31af7Sopenharmony_ci { 1599e5c31af7Sopenharmony_ci ${SETUP} 1600e5c31af7Sopenharmony_ci bool f = in0; 1601e5c31af7Sopenharmony_ci bool g = func(f); 1602e5c31af7Sopenharmony_ci out0 = (f != g); 1603e5c31af7Sopenharmony_ci ${OUTPUT} 1604e5c31af7Sopenharmony_ci } 1605e5c31af7Sopenharmony_ci "" 1606e5c31af7Sopenharmony_ci end 1607e5c31af7Sopenharmony_ci 1608e5c31af7Sopenharmony_ci case out_bool 1609e5c31af7Sopenharmony_ci version 300 es 1610e5c31af7Sopenharmony_ci values 1611e5c31af7Sopenharmony_ci { 1612e5c31af7Sopenharmony_ci input bool in0 = [ true | false ]; 1613e5c31af7Sopenharmony_ci output bool out0 = [ false | true ]; 1614e5c31af7Sopenharmony_ci } 1615e5c31af7Sopenharmony_ci 1616e5c31af7Sopenharmony_ci both "" 1617e5c31af7Sopenharmony_ci #version 300 es 1618e5c31af7Sopenharmony_ci precision mediump float; 1619e5c31af7Sopenharmony_ci ${DECLARATIONS} 1620e5c31af7Sopenharmony_ci 1621e5c31af7Sopenharmony_ci void func (out bool a) 1622e5c31af7Sopenharmony_ci { 1623e5c31af7Sopenharmony_ci a = false; 1624e5c31af7Sopenharmony_ci } 1625e5c31af7Sopenharmony_ci 1626e5c31af7Sopenharmony_ci void main() 1627e5c31af7Sopenharmony_ci { 1628e5c31af7Sopenharmony_ci ${SETUP} 1629e5c31af7Sopenharmony_ci bool f = true; 1630e5c31af7Sopenharmony_ci func(f); 1631e5c31af7Sopenharmony_ci out0 = (in0 == f); 1632e5c31af7Sopenharmony_ci ${OUTPUT} 1633e5c31af7Sopenharmony_ci } 1634e5c31af7Sopenharmony_ci "" 1635e5c31af7Sopenharmony_ci end 1636e5c31af7Sopenharmony_ci 1637e5c31af7Sopenharmony_ci case inout_bool 1638e5c31af7Sopenharmony_ci version 300 es 1639e5c31af7Sopenharmony_ci values 1640e5c31af7Sopenharmony_ci { 1641e5c31af7Sopenharmony_ci input bool in0 = [ true | false ]; 1642e5c31af7Sopenharmony_ci output bool out0 = [ false | true ]; 1643e5c31af7Sopenharmony_ci } 1644e5c31af7Sopenharmony_ci 1645e5c31af7Sopenharmony_ci both "" 1646e5c31af7Sopenharmony_ci #version 300 es 1647e5c31af7Sopenharmony_ci precision mediump float; 1648e5c31af7Sopenharmony_ci ${DECLARATIONS} 1649e5c31af7Sopenharmony_ci 1650e5c31af7Sopenharmony_ci void func (inout bool a) 1651e5c31af7Sopenharmony_ci { 1652e5c31af7Sopenharmony_ci a = !a; 1653e5c31af7Sopenharmony_ci } 1654e5c31af7Sopenharmony_ci 1655e5c31af7Sopenharmony_ci void main() 1656e5c31af7Sopenharmony_ci { 1657e5c31af7Sopenharmony_ci ${SETUP} 1658e5c31af7Sopenharmony_ci bool f = true; 1659e5c31af7Sopenharmony_ci func(f); 1660e5c31af7Sopenharmony_ci out0 = (in0 == f); 1661e5c31af7Sopenharmony_ci ${OUTPUT} 1662e5c31af7Sopenharmony_ci } 1663e5c31af7Sopenharmony_ci "" 1664e5c31af7Sopenharmony_ci end 1665e5c31af7Sopenharmony_ci 1666e5c31af7Sopenharmony_ci case const_bool 1667e5c31af7Sopenharmony_ci version 300 es 1668e5c31af7Sopenharmony_ci values 1669e5c31af7Sopenharmony_ci { 1670e5c31af7Sopenharmony_ci input bool in0 = [ true | false ]; 1671e5c31af7Sopenharmony_ci output bool out0 = [ true | true ]; 1672e5c31af7Sopenharmony_ci } 1673e5c31af7Sopenharmony_ci 1674e5c31af7Sopenharmony_ci both "" 1675e5c31af7Sopenharmony_ci #version 300 es 1676e5c31af7Sopenharmony_ci precision mediump float; 1677e5c31af7Sopenharmony_ci ${DECLARATIONS} 1678e5c31af7Sopenharmony_ci 1679e5c31af7Sopenharmony_ci bool func (const bool a) 1680e5c31af7Sopenharmony_ci { 1681e5c31af7Sopenharmony_ci bool b = !a; 1682e5c31af7Sopenharmony_ci return b; 1683e5c31af7Sopenharmony_ci } 1684e5c31af7Sopenharmony_ci 1685e5c31af7Sopenharmony_ci void main() 1686e5c31af7Sopenharmony_ci { 1687e5c31af7Sopenharmony_ci ${SETUP} 1688e5c31af7Sopenharmony_ci bool f = in0; 1689e5c31af7Sopenharmony_ci bool g = func(f); 1690e5c31af7Sopenharmony_ci out0 = (f != g); 1691e5c31af7Sopenharmony_ci ${OUTPUT} 1692e5c31af7Sopenharmony_ci } 1693e5c31af7Sopenharmony_ci "" 1694e5c31af7Sopenharmony_ci end 1695e5c31af7Sopenharmony_ci 1696e5c31af7Sopenharmony_ciend # qualifiers 1697e5c31af7Sopenharmony_ci 1698e5c31af7Sopenharmony_cigroup declarations "Function Declarations" 1699e5c31af7Sopenharmony_ci 1700e5c31af7Sopenharmony_ci case basic 1701e5c31af7Sopenharmony_ci version 300 es 1702e5c31af7Sopenharmony_ci values 1703e5c31af7Sopenharmony_ci { 1704e5c31af7Sopenharmony_ci input float in0 = [ 0.0 | 1.0 | -2.0 | 2.5 ]; 1705e5c31af7Sopenharmony_ci output float out0 = [ 0.0 | -1.0 | 2.0 | -2.5 ]; 1706e5c31af7Sopenharmony_ci } 1707e5c31af7Sopenharmony_ci 1708e5c31af7Sopenharmony_ci both "" 1709e5c31af7Sopenharmony_ci #version 300 es 1710e5c31af7Sopenharmony_ci precision mediump float; 1711e5c31af7Sopenharmony_ci ${DECLARATIONS} 1712e5c31af7Sopenharmony_ci 1713e5c31af7Sopenharmony_ci float func (void); 1714e5c31af7Sopenharmony_ci 1715e5c31af7Sopenharmony_ci float func (void) 1716e5c31af7Sopenharmony_ci { 1717e5c31af7Sopenharmony_ci return -1.0; 1718e5c31af7Sopenharmony_ci } 1719e5c31af7Sopenharmony_ci 1720e5c31af7Sopenharmony_ci void main() 1721e5c31af7Sopenharmony_ci { 1722e5c31af7Sopenharmony_ci out0 = func() * in0; 1723e5c31af7Sopenharmony_ci ${OUTPUT} 1724e5c31af7Sopenharmony_ci } 1725e5c31af7Sopenharmony_ci "" 1726e5c31af7Sopenharmony_ci end 1727e5c31af7Sopenharmony_ci 1728e5c31af7Sopenharmony_ci case basic_arg 1729e5c31af7Sopenharmony_ci version 300 es 1730e5c31af7Sopenharmony_ci values 1731e5c31af7Sopenharmony_ci { 1732e5c31af7Sopenharmony_ci input float in0 = [ 0.0 | 1.0 | -2.0 | 2.5 ]; 1733e5c31af7Sopenharmony_ci output float out0 = [ 0.0 | -1.0 | 2.0 | -2.5 ]; 1734e5c31af7Sopenharmony_ci } 1735e5c31af7Sopenharmony_ci 1736e5c31af7Sopenharmony_ci both "" 1737e5c31af7Sopenharmony_ci #version 300 es 1738e5c31af7Sopenharmony_ci precision mediump float; 1739e5c31af7Sopenharmony_ci ${DECLARATIONS} 1740e5c31af7Sopenharmony_ci 1741e5c31af7Sopenharmony_ci float func (float f); 1742e5c31af7Sopenharmony_ci 1743e5c31af7Sopenharmony_ci float func (float f) 1744e5c31af7Sopenharmony_ci { 1745e5c31af7Sopenharmony_ci return -f; 1746e5c31af7Sopenharmony_ci } 1747e5c31af7Sopenharmony_ci 1748e5c31af7Sopenharmony_ci void main() 1749e5c31af7Sopenharmony_ci { 1750e5c31af7Sopenharmony_ci out0 = func(in0); 1751e5c31af7Sopenharmony_ci ${OUTPUT} 1752e5c31af7Sopenharmony_ci } 1753e5c31af7Sopenharmony_ci "" 1754e5c31af7Sopenharmony_ci end 1755e5c31af7Sopenharmony_ci 1756e5c31af7Sopenharmony_ci case define_after_use 1757e5c31af7Sopenharmony_ci version 300 es 1758e5c31af7Sopenharmony_ci values 1759e5c31af7Sopenharmony_ci { 1760e5c31af7Sopenharmony_ci input float in0 = [ 0.0 | 1.0 | -2.0 | 2.5 ]; 1761e5c31af7Sopenharmony_ci output float out0 = [ 0.0 | -1.0 | 2.0 | -2.5 ]; 1762e5c31af7Sopenharmony_ci } 1763e5c31af7Sopenharmony_ci 1764e5c31af7Sopenharmony_ci both "" 1765e5c31af7Sopenharmony_ci #version 300 es 1766e5c31af7Sopenharmony_ci precision mediump float; 1767e5c31af7Sopenharmony_ci ${DECLARATIONS} 1768e5c31af7Sopenharmony_ci 1769e5c31af7Sopenharmony_ci float func (void); 1770e5c31af7Sopenharmony_ci 1771e5c31af7Sopenharmony_ci void main() 1772e5c31af7Sopenharmony_ci { 1773e5c31af7Sopenharmony_ci out0 = func() * in0; 1774e5c31af7Sopenharmony_ci ${OUTPUT} 1775e5c31af7Sopenharmony_ci } 1776e5c31af7Sopenharmony_ci 1777e5c31af7Sopenharmony_ci float func (void) 1778e5c31af7Sopenharmony_ci { 1779e5c31af7Sopenharmony_ci return -1.0; 1780e5c31af7Sopenharmony_ci } 1781e5c31af7Sopenharmony_ci "" 1782e5c31af7Sopenharmony_ci end 1783e5c31af7Sopenharmony_ci 1784e5c31af7Sopenharmony_ci case double_declare 1785e5c31af7Sopenharmony_ci version 300 es 1786e5c31af7Sopenharmony_ci values 1787e5c31af7Sopenharmony_ci { 1788e5c31af7Sopenharmony_ci input float in0 = [ 0.0 | 1.0 | -2.0 | 2.5 ]; 1789e5c31af7Sopenharmony_ci output float out0 = [ 0.0 | -1.0 | 2.0 | -2.5 ]; 1790e5c31af7Sopenharmony_ci } 1791e5c31af7Sopenharmony_ci 1792e5c31af7Sopenharmony_ci both "" 1793e5c31af7Sopenharmony_ci #version 300 es 1794e5c31af7Sopenharmony_ci precision mediump float; 1795e5c31af7Sopenharmony_ci ${DECLARATIONS} 1796e5c31af7Sopenharmony_ci 1797e5c31af7Sopenharmony_ci float func (void); 1798e5c31af7Sopenharmony_ci 1799e5c31af7Sopenharmony_ci float func (void); 1800e5c31af7Sopenharmony_ci 1801e5c31af7Sopenharmony_ci float func (void) 1802e5c31af7Sopenharmony_ci { 1803e5c31af7Sopenharmony_ci return -1.0; 1804e5c31af7Sopenharmony_ci } 1805e5c31af7Sopenharmony_ci 1806e5c31af7Sopenharmony_ci void main() 1807e5c31af7Sopenharmony_ci { 1808e5c31af7Sopenharmony_ci out0 = func() * in0; 1809e5c31af7Sopenharmony_ci ${OUTPUT} 1810e5c31af7Sopenharmony_ci } 1811e5c31af7Sopenharmony_ci "" 1812e5c31af7Sopenharmony_ci end 1813e5c31af7Sopenharmony_ci 1814e5c31af7Sopenharmony_ci case declare_after_define 1815e5c31af7Sopenharmony_ci version 300 es 1816e5c31af7Sopenharmony_ci values 1817e5c31af7Sopenharmony_ci { 1818e5c31af7Sopenharmony_ci input float in0 = [ 0.0 | 1.0 | -2.0 | 2.5 ]; 1819e5c31af7Sopenharmony_ci output float out0 = [ 0.0 | -1.0 | 2.0 | -2.5 ]; 1820e5c31af7Sopenharmony_ci } 1821e5c31af7Sopenharmony_ci 1822e5c31af7Sopenharmony_ci both "" 1823e5c31af7Sopenharmony_ci #version 300 es 1824e5c31af7Sopenharmony_ci precision mediump float; 1825e5c31af7Sopenharmony_ci ${DECLARATIONS} 1826e5c31af7Sopenharmony_ci 1827e5c31af7Sopenharmony_ci float func (void) 1828e5c31af7Sopenharmony_ci { 1829e5c31af7Sopenharmony_ci return -1.0; 1830e5c31af7Sopenharmony_ci } 1831e5c31af7Sopenharmony_ci 1832e5c31af7Sopenharmony_ci float func (void); 1833e5c31af7Sopenharmony_ci 1834e5c31af7Sopenharmony_ci void main() 1835e5c31af7Sopenharmony_ci { 1836e5c31af7Sopenharmony_ci out0 = func() * in0; 1837e5c31af7Sopenharmony_ci ${OUTPUT} 1838e5c31af7Sopenharmony_ci } 1839e5c31af7Sopenharmony_ci "" 1840e5c31af7Sopenharmony_ci end 1841e5c31af7Sopenharmony_ci 1842e5c31af7Sopenharmony_ci case void_vs_no_void 1843e5c31af7Sopenharmony_ci version 300 es 1844e5c31af7Sopenharmony_ci values 1845e5c31af7Sopenharmony_ci { 1846e5c31af7Sopenharmony_ci input float in0 = [ 0.0 | 1.0 | -2.0 | 2.5 ]; 1847e5c31af7Sopenharmony_ci output float out0 = [ 0.0 | -1.0 | 2.0 | -2.5 ]; 1848e5c31af7Sopenharmony_ci } 1849e5c31af7Sopenharmony_ci 1850e5c31af7Sopenharmony_ci both "" 1851e5c31af7Sopenharmony_ci #version 300 es 1852e5c31af7Sopenharmony_ci precision mediump float; 1853e5c31af7Sopenharmony_ci ${DECLARATIONS} 1854e5c31af7Sopenharmony_ci 1855e5c31af7Sopenharmony_ci float func (); 1856e5c31af7Sopenharmony_ci 1857e5c31af7Sopenharmony_ci void main() 1858e5c31af7Sopenharmony_ci { 1859e5c31af7Sopenharmony_ci out0 = func() * in0; 1860e5c31af7Sopenharmony_ci ${OUTPUT} 1861e5c31af7Sopenharmony_ci } 1862e5c31af7Sopenharmony_ci 1863e5c31af7Sopenharmony_ci float func (void) 1864e5c31af7Sopenharmony_ci { 1865e5c31af7Sopenharmony_ci return -1.0; 1866e5c31af7Sopenharmony_ci } 1867e5c31af7Sopenharmony_ci "" 1868e5c31af7Sopenharmony_ci end 1869e5c31af7Sopenharmony_ci 1870e5c31af7Sopenharmony_ci case in_vs_no_in 1871e5c31af7Sopenharmony_ci version 300 es 1872e5c31af7Sopenharmony_ci values 1873e5c31af7Sopenharmony_ci { 1874e5c31af7Sopenharmony_ci input float in0 = [ 0.0 | 1.0 | -2.0 | 2.5 ]; 1875e5c31af7Sopenharmony_ci output float out0 = [ 0.0 | -1.0 | 2.0 | -2.5 ]; 1876e5c31af7Sopenharmony_ci } 1877e5c31af7Sopenharmony_ci 1878e5c31af7Sopenharmony_ci both "" 1879e5c31af7Sopenharmony_ci #version 300 es 1880e5c31af7Sopenharmony_ci precision mediump float; 1881e5c31af7Sopenharmony_ci ${DECLARATIONS} 1882e5c31af7Sopenharmony_ci 1883e5c31af7Sopenharmony_ci float func (float f); 1884e5c31af7Sopenharmony_ci 1885e5c31af7Sopenharmony_ci void main() 1886e5c31af7Sopenharmony_ci { 1887e5c31af7Sopenharmony_ci out0 = func(in0); 1888e5c31af7Sopenharmony_ci ${OUTPUT} 1889e5c31af7Sopenharmony_ci } 1890e5c31af7Sopenharmony_ci 1891e5c31af7Sopenharmony_ci float func (in float f) 1892e5c31af7Sopenharmony_ci { 1893e5c31af7Sopenharmony_ci return -f; 1894e5c31af7Sopenharmony_ci } 1895e5c31af7Sopenharmony_ci "" 1896e5c31af7Sopenharmony_ci end 1897e5c31af7Sopenharmony_ci 1898e5c31af7Sopenharmony_ci case default_vs_explicit_precision 1899e5c31af7Sopenharmony_ci version 300 es 1900e5c31af7Sopenharmony_ci values 1901e5c31af7Sopenharmony_ci { 1902e5c31af7Sopenharmony_ci input float in0 = [ 0.0 | 1.0 | -2.0 | 2.5 ]; 1903e5c31af7Sopenharmony_ci output float out0 = [ 0.0 | -1.0 | 2.0 | -2.5 ]; 1904e5c31af7Sopenharmony_ci } 1905e5c31af7Sopenharmony_ci 1906e5c31af7Sopenharmony_ci both "" 1907e5c31af7Sopenharmony_ci #version 300 es 1908e5c31af7Sopenharmony_ci precision mediump float; 1909e5c31af7Sopenharmony_ci ${DECLARATIONS} 1910e5c31af7Sopenharmony_ci 1911e5c31af7Sopenharmony_ci float func (float f); 1912e5c31af7Sopenharmony_ci 1913e5c31af7Sopenharmony_ci void main() 1914e5c31af7Sopenharmony_ci { 1915e5c31af7Sopenharmony_ci out0 = func(in0); 1916e5c31af7Sopenharmony_ci ${OUTPUT} 1917e5c31af7Sopenharmony_ci } 1918e5c31af7Sopenharmony_ci 1919e5c31af7Sopenharmony_ci float func (mediump float f) 1920e5c31af7Sopenharmony_ci { 1921e5c31af7Sopenharmony_ci return -f; 1922e5c31af7Sopenharmony_ci } 1923e5c31af7Sopenharmony_ci "" 1924e5c31af7Sopenharmony_ci end 1925e5c31af7Sopenharmony_ci 1926e5c31af7Sopenharmony_ci 1927e5c31af7Sopenharmony_ciend # declarations 1928e5c31af7Sopenharmony_ci 1929e5c31af7Sopenharmony_cigroup overloading "Function Overloading" 1930e5c31af7Sopenharmony_ci 1931e5c31af7Sopenharmony_ci case user_func_arg_type_simple 1932e5c31af7Sopenharmony_ci version 300 es 1933e5c31af7Sopenharmony_ci values 1934e5c31af7Sopenharmony_ci { 1935e5c31af7Sopenharmony_ci input float in0 = [ 0.0 | 1.0 | -2.0 | 2.5 ]; 1936e5c31af7Sopenharmony_ci output float out0 = [ 0.0 | -1.0 | 2.0 | -2.5 ]; 1937e5c31af7Sopenharmony_ci } 1938e5c31af7Sopenharmony_ci 1939e5c31af7Sopenharmony_ci both "" 1940e5c31af7Sopenharmony_ci #version 300 es 1941e5c31af7Sopenharmony_ci precision mediump float; 1942e5c31af7Sopenharmony_ci precision mediump int; 1943e5c31af7Sopenharmony_ci ${DECLARATIONS} 1944e5c31af7Sopenharmony_ci 1945e5c31af7Sopenharmony_ci float func (float a) 1946e5c31af7Sopenharmony_ci { 1947e5c31af7Sopenharmony_ci return -a; 1948e5c31af7Sopenharmony_ci } 1949e5c31af7Sopenharmony_ci 1950e5c31af7Sopenharmony_ci int func (int a) 1951e5c31af7Sopenharmony_ci { 1952e5c31af7Sopenharmony_ci return -a; 1953e5c31af7Sopenharmony_ci } 1954e5c31af7Sopenharmony_ci 1955e5c31af7Sopenharmony_ci void main() 1956e5c31af7Sopenharmony_ci { 1957e5c31af7Sopenharmony_ci out0 = func(in0) * float(func(-1)); 1958e5c31af7Sopenharmony_ci ${OUTPUT} 1959e5c31af7Sopenharmony_ci } 1960e5c31af7Sopenharmony_ci "" 1961e5c31af7Sopenharmony_ci end 1962e5c31af7Sopenharmony_ci 1963e5c31af7Sopenharmony_ci case user_func_arg_float_types 1964e5c31af7Sopenharmony_ci version 300 es 1965e5c31af7Sopenharmony_ci values 1966e5c31af7Sopenharmony_ci { 1967e5c31af7Sopenharmony_ci input float in0 = [ 0.0 | 1.0 | -2.0 | 2.5 ]; 1968e5c31af7Sopenharmony_ci output float out0 = [ 0.0 | -1.0 | 2.0 | -2.5 ]; 1969e5c31af7Sopenharmony_ci } 1970e5c31af7Sopenharmony_ci 1971e5c31af7Sopenharmony_ci both "" 1972e5c31af7Sopenharmony_ci #version 300 es 1973e5c31af7Sopenharmony_ci precision mediump float; 1974e5c31af7Sopenharmony_ci precision mediump int; 1975e5c31af7Sopenharmony_ci ${DECLARATIONS} 1976e5c31af7Sopenharmony_ci 1977e5c31af7Sopenharmony_ci float func (float a) { return -a; } 1978e5c31af7Sopenharmony_ci vec2 func (vec2 a) { return a.yx; } 1979e5c31af7Sopenharmony_ci vec3 func (vec3 a) { return a.xxx; } 1980e5c31af7Sopenharmony_ci vec4 func (vec4 a) { return a.wwww; } 1981e5c31af7Sopenharmony_ci 1982e5c31af7Sopenharmony_ci void main() 1983e5c31af7Sopenharmony_ci { 1984e5c31af7Sopenharmony_ci out0 = func(func(func(func(vec4(in0)).xyz).xy).x); 1985e5c31af7Sopenharmony_ci ${OUTPUT} 1986e5c31af7Sopenharmony_ci } 1987e5c31af7Sopenharmony_ci "" 1988e5c31af7Sopenharmony_ci end 1989e5c31af7Sopenharmony_ci 1990e5c31af7Sopenharmony_ci case user_func_arg_int_types 1991e5c31af7Sopenharmony_ci version 300 es 1992e5c31af7Sopenharmony_ci values 1993e5c31af7Sopenharmony_ci { 1994e5c31af7Sopenharmony_ci input int in0 = [ 0 | 1 | -2 | 6 ]; 1995e5c31af7Sopenharmony_ci output int out0 = [ 0 | -1 | 2 | -6 ]; 1996e5c31af7Sopenharmony_ci } 1997e5c31af7Sopenharmony_ci 1998e5c31af7Sopenharmony_ci both "" 1999e5c31af7Sopenharmony_ci #version 300 es 2000e5c31af7Sopenharmony_ci precision mediump float; 2001e5c31af7Sopenharmony_ci precision mediump int; 2002e5c31af7Sopenharmony_ci ${DECLARATIONS} 2003e5c31af7Sopenharmony_ci 2004e5c31af7Sopenharmony_ci int func (int a) { return -a; } 2005e5c31af7Sopenharmony_ci ivec2 func (ivec2 a) { return a.yx; } 2006e5c31af7Sopenharmony_ci ivec3 func (ivec3 a) { return a.xxx; } 2007e5c31af7Sopenharmony_ci ivec4 func (ivec4 a) { return a.wwww; } 2008e5c31af7Sopenharmony_ci 2009e5c31af7Sopenharmony_ci void main() 2010e5c31af7Sopenharmony_ci { 2011e5c31af7Sopenharmony_ci ${SETUP} 2012e5c31af7Sopenharmony_ci out0 = func(func(func(func(ivec4(in0)).xyz).xy).x); 2013e5c31af7Sopenharmony_ci ${OUTPUT} 2014e5c31af7Sopenharmony_ci } 2015e5c31af7Sopenharmony_ci "" 2016e5c31af7Sopenharmony_ci end 2017e5c31af7Sopenharmony_ci 2018e5c31af7Sopenharmony_ci case user_func_arg_bool_types 2019e5c31af7Sopenharmony_ci version 300 es 2020e5c31af7Sopenharmony_ci values 2021e5c31af7Sopenharmony_ci { 2022e5c31af7Sopenharmony_ci input bool in0 = [ true | false ]; 2023e5c31af7Sopenharmony_ci output bool out0 = [ false | true ]; 2024e5c31af7Sopenharmony_ci } 2025e5c31af7Sopenharmony_ci 2026e5c31af7Sopenharmony_ci both "" 2027e5c31af7Sopenharmony_ci #version 300 es 2028e5c31af7Sopenharmony_ci precision mediump float; 2029e5c31af7Sopenharmony_ci ${DECLARATIONS} 2030e5c31af7Sopenharmony_ci 2031e5c31af7Sopenharmony_ci bool func (bool a) { return !a; } 2032e5c31af7Sopenharmony_ci bvec2 func (bvec2 a) { return a.yx; } 2033e5c31af7Sopenharmony_ci bvec3 func (bvec3 a) { return a.xxx; } 2034e5c31af7Sopenharmony_ci bvec4 func (bvec4 a) { return a.wwww; } 2035e5c31af7Sopenharmony_ci 2036e5c31af7Sopenharmony_ci void main() 2037e5c31af7Sopenharmony_ci { 2038e5c31af7Sopenharmony_ci ${SETUP} 2039e5c31af7Sopenharmony_ci out0 = func(func(func(func(bvec4(in0)).xyz).xy).x); 2040e5c31af7Sopenharmony_ci ${OUTPUT} 2041e5c31af7Sopenharmony_ci } 2042e5c31af7Sopenharmony_ci "" 2043e5c31af7Sopenharmony_ci end 2044e5c31af7Sopenharmony_ci 2045e5c31af7Sopenharmony_ci case user_func_arg_basic_types 2046e5c31af7Sopenharmony_ci version 300 es 2047e5c31af7Sopenharmony_ci values 2048e5c31af7Sopenharmony_ci { 2049e5c31af7Sopenharmony_ci input float in0 = [ 0.0 | 1.0 | -2.0 | 2.5 ]; 2050e5c31af7Sopenharmony_ci output float out0 = [ 0.0 | -1.0 | 2.0 | -2.5 ]; 2051e5c31af7Sopenharmony_ci } 2052e5c31af7Sopenharmony_ci 2053e5c31af7Sopenharmony_ci both "" 2054e5c31af7Sopenharmony_ci #version 300 es 2055e5c31af7Sopenharmony_ci precision mediump float; 2056e5c31af7Sopenharmony_ci precision mediump int; 2057e5c31af7Sopenharmony_ci ${DECLARATIONS} 2058e5c31af7Sopenharmony_ci 2059e5c31af7Sopenharmony_ci float func (float a) { return -a; } 2060e5c31af7Sopenharmony_ci vec2 func (vec2 a) { return a.yx; } 2061e5c31af7Sopenharmony_ci vec3 func (vec3 a) { return a.xxx; } 2062e5c31af7Sopenharmony_ci vec4 func (vec4 a) { return a.wwww; } 2063e5c31af7Sopenharmony_ci int func (int a) { return -a; } 2064e5c31af7Sopenharmony_ci ivec2 func (ivec2 a) { return a.yx; } 2065e5c31af7Sopenharmony_ci ivec3 func (ivec3 a) { return a.xxx; } 2066e5c31af7Sopenharmony_ci ivec4 func (ivec4 a) { return a.wwww; } 2067e5c31af7Sopenharmony_ci bool func (bool a) { return !a; } 2068e5c31af7Sopenharmony_ci bvec2 func (bvec2 a) { return a.yx; } 2069e5c31af7Sopenharmony_ci bvec3 func (bvec3 a) { return a.xxx; } 2070e5c31af7Sopenharmony_ci bvec4 func (bvec4 a) { return a.wwww; } 2071e5c31af7Sopenharmony_ci 2072e5c31af7Sopenharmony_ci void main() 2073e5c31af7Sopenharmony_ci { 2074e5c31af7Sopenharmony_ci ${SETUP} 2075e5c31af7Sopenharmony_ci if (func(func(bvec4(false)).x)) 2076e5c31af7Sopenharmony_ci out0 = func(in0) * float(func(-1)); 2077e5c31af7Sopenharmony_ci else 2078e5c31af7Sopenharmony_ci out0 = float(func(func(ivec4(func(func(func(vec4(0.5)).xyz).xy).xxxx)).xy).x); 2079e5c31af7Sopenharmony_ci ${OUTPUT} 2080e5c31af7Sopenharmony_ci } 2081e5c31af7Sopenharmony_ci "" 2082e5c31af7Sopenharmony_ci end 2083e5c31af7Sopenharmony_ci 2084e5c31af7Sopenharmony_ci case user_func_arg_complex_types 2085e5c31af7Sopenharmony_ci version 300 es 2086e5c31af7Sopenharmony_ci values 2087e5c31af7Sopenharmony_ci { 2088e5c31af7Sopenharmony_ci input float in0 = [ 0.0 | 1.0 | -2.0 | 2.5 ]; 2089e5c31af7Sopenharmony_ci output float out0 = [ 0.0 | -1.0 | 2.0 | -2.5 ]; 2090e5c31af7Sopenharmony_ci } 2091e5c31af7Sopenharmony_ci 2092e5c31af7Sopenharmony_ci both "" 2093e5c31af7Sopenharmony_ci #version 300 es 2094e5c31af7Sopenharmony_ci precision mediump float; 2095e5c31af7Sopenharmony_ci precision mediump int; 2096e5c31af7Sopenharmony_ci ${DECLARATIONS} 2097e5c31af7Sopenharmony_ci 2098e5c31af7Sopenharmony_ci struct Pos { float a, b, c; }; 2099e5c31af7Sopenharmony_ci struct Line { Pos start, end; }; 2100e5c31af7Sopenharmony_ci 2101e5c31af7Sopenharmony_ci float func (float a) { return -a; } 2102e5c31af7Sopenharmony_ci float func (float a[4]) { return a[0] + a[3]; } 2103e5c31af7Sopenharmony_ci vec2 func (vec2 a) { return a.yx; } 2104e5c31af7Sopenharmony_ci vec3 func (vec3 a) { return a.xxx; } 2105e5c31af7Sopenharmony_ci vec4 func (vec4 a) { return a.wwww; } 2106e5c31af7Sopenharmony_ci vec4 func (vec4 a[4]) { return a[1] + a[2]; } 2107e5c31af7Sopenharmony_ci int func (int a) { return -a; } 2108e5c31af7Sopenharmony_ci ivec2 func (ivec2 a) { return a.yx; } 2109e5c31af7Sopenharmony_ci ivec3 func (ivec3 a) { return a.xxx; } 2110e5c31af7Sopenharmony_ci ivec4 func (ivec4 a) { return a.wwww; } 2111e5c31af7Sopenharmony_ci bool func (bool a) { return !a; } 2112e5c31af7Sopenharmony_ci bvec2 func (bvec2 a) { return a.yx; } 2113e5c31af7Sopenharmony_ci bvec3 func (bvec3 a) { return a.xxx; } 2114e5c31af7Sopenharmony_ci bvec4 func (bvec4 a) { return a.wwww; } 2115e5c31af7Sopenharmony_ci Pos func (Pos a) { return a; } 2116e5c31af7Sopenharmony_ci Line func (Line a) { return Line(a.end, a.start); } 2117e5c31af7Sopenharmony_ci 2118e5c31af7Sopenharmony_ci void main() 2119e5c31af7Sopenharmony_ci { 2120e5c31af7Sopenharmony_ci ${SETUP} 2121e5c31af7Sopenharmony_ci float arr[4]; 2122e5c31af7Sopenharmony_ci vec4 arr2[4]; 2123e5c31af7Sopenharmony_ci out0 = func(arr) + func(arr2).x; 2124e5c31af7Sopenharmony_ci if (func(func(bvec4(false)).x)) 2125e5c31af7Sopenharmony_ci out0 = func(in0) * float(func(-1)); 2126e5c31af7Sopenharmony_ci else 2127e5c31af7Sopenharmony_ci out0 = float(func(func(ivec4(func(func(func(vec4(0.5)).xyz).xy).xxxx)).xy).x); 2128e5c31af7Sopenharmony_ci ${OUTPUT} 2129e5c31af7Sopenharmony_ci } 2130e5c31af7Sopenharmony_ci "" 2131e5c31af7Sopenharmony_ci end 2132e5c31af7Sopenharmony_ci 2133e5c31af7Sopenharmony_ci case user_func_arguments 2134e5c31af7Sopenharmony_ci version 300 es 2135e5c31af7Sopenharmony_ci values 2136e5c31af7Sopenharmony_ci { 2137e5c31af7Sopenharmony_ci input float in0 = [ 0.0 | 1.0 | -2.0 | 2.5 ]; 2138e5c31af7Sopenharmony_ci output float out0 = [ 0.0 | -1.0 | 2.0 | -2.5 ]; 2139e5c31af7Sopenharmony_ci } 2140e5c31af7Sopenharmony_ci 2141e5c31af7Sopenharmony_ci both "" 2142e5c31af7Sopenharmony_ci #version 300 es 2143e5c31af7Sopenharmony_ci precision mediump float; 2144e5c31af7Sopenharmony_ci ${DECLARATIONS} 2145e5c31af7Sopenharmony_ci 2146e5c31af7Sopenharmony_ci float func (float a) 2147e5c31af7Sopenharmony_ci { 2148e5c31af7Sopenharmony_ci return -a; 2149e5c31af7Sopenharmony_ci } 2150e5c31af7Sopenharmony_ci 2151e5c31af7Sopenharmony_ci float func (float a, float b) 2152e5c31af7Sopenharmony_ci { 2153e5c31af7Sopenharmony_ci return a * b; 2154e5c31af7Sopenharmony_ci } 2155e5c31af7Sopenharmony_ci 2156e5c31af7Sopenharmony_ci void main() 2157e5c31af7Sopenharmony_ci { 2158e5c31af7Sopenharmony_ci out0 = func(in0) * func(-0.5, -2.0); 2159e5c31af7Sopenharmony_ci ${OUTPUT} 2160e5c31af7Sopenharmony_ci } 2161e5c31af7Sopenharmony_ci "" 2162e5c31af7Sopenharmony_ci end 2163e5c31af7Sopenharmony_ci 2164e5c31af7Sopenharmony_ci case array_size 2165e5c31af7Sopenharmony_ci version 300 es 2166e5c31af7Sopenharmony_ci values 2167e5c31af7Sopenharmony_ci { 2168e5c31af7Sopenharmony_ci output float out0 = [ 1.0 ]; 2169e5c31af7Sopenharmony_ci } 2170e5c31af7Sopenharmony_ci 2171e5c31af7Sopenharmony_ci both "" 2172e5c31af7Sopenharmony_ci #version 300 es 2173e5c31af7Sopenharmony_ci precision mediump float; 2174e5c31af7Sopenharmony_ci ${DECLARATIONS} 2175e5c31af7Sopenharmony_ci 2176e5c31af7Sopenharmony_ci float func (float f[3]) 2177e5c31af7Sopenharmony_ci { 2178e5c31af7Sopenharmony_ci return f[0]; 2179e5c31af7Sopenharmony_ci } 2180e5c31af7Sopenharmony_ci 2181e5c31af7Sopenharmony_ci float func (float f[4]) 2182e5c31af7Sopenharmony_ci { 2183e5c31af7Sopenharmony_ci return f[1]; 2184e5c31af7Sopenharmony_ci } 2185e5c31af7Sopenharmony_ci 2186e5c31af7Sopenharmony_ci void main () 2187e5c31af7Sopenharmony_ci { 2188e5c31af7Sopenharmony_ci ${SETUP} 2189e5c31af7Sopenharmony_ci float[4] x = float[4] (-1.0, 1.0, 0.0, 0.0); 2190e5c31af7Sopenharmony_ci out0 = func(x); 2191e5c31af7Sopenharmony_ci ${OUTPUT} 2192e5c31af7Sopenharmony_ci } 2193e5c31af7Sopenharmony_ci "" 2194e5c31af7Sopenharmony_ci end 2195e5c31af7Sopenharmony_ci 2196e5c31af7Sopenharmony_ciend # overloading 2197e5c31af7Sopenharmony_ci 2198e5c31af7Sopenharmony_cigroup array_arguments "Arrays as Arguments" 2199e5c31af7Sopenharmony_ci 2200e5c31af7Sopenharmony_ci case local_in_float 2201e5c31af7Sopenharmony_ci version 300 es 2202e5c31af7Sopenharmony_ci values 2203e5c31af7Sopenharmony_ci { 2204e5c31af7Sopenharmony_ci input vec4 in0 = [ vec4(0.0, 1.0, 2.0, -4.0) | vec4(-7.5, 12.125, -0.25, 16.0) ]; 2205e5c31af7Sopenharmony_ci output vec4 out0 = [ vec4(0.0, -1.0, -2.0, 4.0) | vec4(7.5, -12.125, 0.25, -16.0) ]; 2206e5c31af7Sopenharmony_ci } 2207e5c31af7Sopenharmony_ci 2208e5c31af7Sopenharmony_ci both "" 2209e5c31af7Sopenharmony_ci #version 300 es 2210e5c31af7Sopenharmony_ci precision mediump float; 2211e5c31af7Sopenharmony_ci ${DECLARATIONS} 2212e5c31af7Sopenharmony_ci 2213e5c31af7Sopenharmony_ci float func (in float a[4]) 2214e5c31af7Sopenharmony_ci { 2215e5c31af7Sopenharmony_ci a[0] = -1.0; 2216e5c31af7Sopenharmony_ci a[2] = -4.0; 2217e5c31af7Sopenharmony_ci a[3] = -3.0 * a[1]; 2218e5c31af7Sopenharmony_ci return a[0]; 2219e5c31af7Sopenharmony_ci } 2220e5c31af7Sopenharmony_ci 2221e5c31af7Sopenharmony_ci void main() 2222e5c31af7Sopenharmony_ci { 2223e5c31af7Sopenharmony_ci float arr[4]; 2224e5c31af7Sopenharmony_ci arr[0] = in0.x; 2225e5c31af7Sopenharmony_ci arr[1] = in0.y; 2226e5c31af7Sopenharmony_ci arr[2] = in0.z; 2227e5c31af7Sopenharmony_ci arr[3] = in0.w; 2228e5c31af7Sopenharmony_ci float f = func(arr); 2229e5c31af7Sopenharmony_ci out0 = f * vec4(arr[0], arr[1], arr[2], arr[3]); 2230e5c31af7Sopenharmony_ci ${OUTPUT} 2231e5c31af7Sopenharmony_ci } 2232e5c31af7Sopenharmony_ci "" 2233e5c31af7Sopenharmony_ci end 2234e5c31af7Sopenharmony_ci 2235e5c31af7Sopenharmony_ci case global_in_float 2236e5c31af7Sopenharmony_ci version 300 es 2237e5c31af7Sopenharmony_ci values 2238e5c31af7Sopenharmony_ci { 2239e5c31af7Sopenharmony_ci input vec4 in0 = [ vec4(0.0, 1.0, 2.0, -4.0) | vec4(-7.5, 12.125, -0.25, 16.0) ]; 2240e5c31af7Sopenharmony_ci output vec4 out0 = [ vec4(0.0, -1.0, -2.0, 4.0) | vec4(7.5, -12.125, 0.25, -16.0) ]; 2241e5c31af7Sopenharmony_ci } 2242e5c31af7Sopenharmony_ci 2243e5c31af7Sopenharmony_ci both "" 2244e5c31af7Sopenharmony_ci #version 300 es 2245e5c31af7Sopenharmony_ci precision mediump float; 2246e5c31af7Sopenharmony_ci ${DECLARATIONS} 2247e5c31af7Sopenharmony_ci 2248e5c31af7Sopenharmony_ci float func (in float a[4]) 2249e5c31af7Sopenharmony_ci { 2250e5c31af7Sopenharmony_ci a[0] = -1.0; 2251e5c31af7Sopenharmony_ci a[2] = -4.0; 2252e5c31af7Sopenharmony_ci a[3] = -3.0 * a[1]; 2253e5c31af7Sopenharmony_ci return a[0]; 2254e5c31af7Sopenharmony_ci } 2255e5c31af7Sopenharmony_ci 2256e5c31af7Sopenharmony_ci float arr[4]; 2257e5c31af7Sopenharmony_ci 2258e5c31af7Sopenharmony_ci void main() 2259e5c31af7Sopenharmony_ci { 2260e5c31af7Sopenharmony_ci arr[0] = in0.x; 2261e5c31af7Sopenharmony_ci arr[1] = in0.y; 2262e5c31af7Sopenharmony_ci arr[2] = in0.z; 2263e5c31af7Sopenharmony_ci arr[3] = in0.w; 2264e5c31af7Sopenharmony_ci float f = func(arr); 2265e5c31af7Sopenharmony_ci out0 = f * vec4(arr[0], arr[1], arr[2], arr[3]); 2266e5c31af7Sopenharmony_ci ${OUTPUT} 2267e5c31af7Sopenharmony_ci } 2268e5c31af7Sopenharmony_ci "" 2269e5c31af7Sopenharmony_ci end 2270e5c31af7Sopenharmony_ci 2271e5c31af7Sopenharmony_ci case local_in_int 2272e5c31af7Sopenharmony_ci version 300 es 2273e5c31af7Sopenharmony_ci values 2274e5c31af7Sopenharmony_ci { 2275e5c31af7Sopenharmony_ci input ivec4 in0 = [ ivec4(0, 1, 2, -4) | ivec4(-7, -11, 13, 19) ]; 2276e5c31af7Sopenharmony_ci output ivec4 out0 = [ ivec4(0, -1, -2, 4) | ivec4(7, 11, -13, -19) ]; 2277e5c31af7Sopenharmony_ci } 2278e5c31af7Sopenharmony_ci 2279e5c31af7Sopenharmony_ci both "" 2280e5c31af7Sopenharmony_ci #version 300 es 2281e5c31af7Sopenharmony_ci precision mediump float; 2282e5c31af7Sopenharmony_ci precision mediump int; 2283e5c31af7Sopenharmony_ci ${DECLARATIONS} 2284e5c31af7Sopenharmony_ci 2285e5c31af7Sopenharmony_ci int func (in int a[4]) 2286e5c31af7Sopenharmony_ci { 2287e5c31af7Sopenharmony_ci a[0] = -1; 2288e5c31af7Sopenharmony_ci a[2] = -4; 2289e5c31af7Sopenharmony_ci a[3] = -3 * a[1]; 2290e5c31af7Sopenharmony_ci return a[0]; 2291e5c31af7Sopenharmony_ci } 2292e5c31af7Sopenharmony_ci 2293e5c31af7Sopenharmony_ci void main() 2294e5c31af7Sopenharmony_ci { 2295e5c31af7Sopenharmony_ci ${SETUP} 2296e5c31af7Sopenharmony_ci int arr[4]; 2297e5c31af7Sopenharmony_ci arr[0] = in0.x; 2298e5c31af7Sopenharmony_ci arr[1] = in0.y; 2299e5c31af7Sopenharmony_ci arr[2] = in0.z; 2300e5c31af7Sopenharmony_ci arr[3] = in0.w; 2301e5c31af7Sopenharmony_ci int f = func(arr); 2302e5c31af7Sopenharmony_ci out0 = f * ivec4(arr[0], arr[1], arr[2], arr[3]); 2303e5c31af7Sopenharmony_ci ${OUTPUT} 2304e5c31af7Sopenharmony_ci } 2305e5c31af7Sopenharmony_ci "" 2306e5c31af7Sopenharmony_ci end 2307e5c31af7Sopenharmony_ci 2308e5c31af7Sopenharmony_ci case global_in_int 2309e5c31af7Sopenharmony_ci version 300 es 2310e5c31af7Sopenharmony_ci values 2311e5c31af7Sopenharmony_ci { 2312e5c31af7Sopenharmony_ci input ivec4 in0 = [ ivec4(0, 1, 2, 4) | ivec4(-7, -11, 13, 19) ]; 2313e5c31af7Sopenharmony_ci output ivec4 out0 = [ ivec4(0, -1, -2, -4) | ivec4(7, 11, -13, -19) ]; 2314e5c31af7Sopenharmony_ci } 2315e5c31af7Sopenharmony_ci 2316e5c31af7Sopenharmony_ci both "" 2317e5c31af7Sopenharmony_ci #version 300 es 2318e5c31af7Sopenharmony_ci precision mediump float; 2319e5c31af7Sopenharmony_ci precision mediump int; 2320e5c31af7Sopenharmony_ci ${DECLARATIONS} 2321e5c31af7Sopenharmony_ci 2322e5c31af7Sopenharmony_ci int func (in int a[4]) 2323e5c31af7Sopenharmony_ci { 2324e5c31af7Sopenharmony_ci a[0] = -1; 2325e5c31af7Sopenharmony_ci a[2] = -4; 2326e5c31af7Sopenharmony_ci a[3] = -3 * a[1]; 2327e5c31af7Sopenharmony_ci return a[0]; 2328e5c31af7Sopenharmony_ci } 2329e5c31af7Sopenharmony_ci 2330e5c31af7Sopenharmony_ci int arr[4]; 2331e5c31af7Sopenharmony_ci 2332e5c31af7Sopenharmony_ci void main() 2333e5c31af7Sopenharmony_ci { 2334e5c31af7Sopenharmony_ci ${SETUP} 2335e5c31af7Sopenharmony_ci arr[0] = in0.x; 2336e5c31af7Sopenharmony_ci arr[1] = in0.y; 2337e5c31af7Sopenharmony_ci arr[2] = in0.z; 2338e5c31af7Sopenharmony_ci arr[3] = in0.w; 2339e5c31af7Sopenharmony_ci int f = func(arr); 2340e5c31af7Sopenharmony_ci out0 = f * ivec4(arr[0], arr[1], arr[2], arr[3]); 2341e5c31af7Sopenharmony_ci ${OUTPUT} 2342e5c31af7Sopenharmony_ci } 2343e5c31af7Sopenharmony_ci 2344e5c31af7Sopenharmony_ci "" 2345e5c31af7Sopenharmony_ci end 2346e5c31af7Sopenharmony_ci 2347e5c31af7Sopenharmony_ci case local_in_bool 2348e5c31af7Sopenharmony_ci version 300 es 2349e5c31af7Sopenharmony_ci values 2350e5c31af7Sopenharmony_ci { 2351e5c31af7Sopenharmony_ci input bvec4 in0 = [ bvec4(true, true, false, true) | bvec4(false, false, false, false) ]; 2352e5c31af7Sopenharmony_ci output bvec4 out0 = [ bvec4(false, false, true, false) | bvec4(true, true, true, true) ]; 2353e5c31af7Sopenharmony_ci } 2354e5c31af7Sopenharmony_ci 2355e5c31af7Sopenharmony_ci both "" 2356e5c31af7Sopenharmony_ci #version 300 es 2357e5c31af7Sopenharmony_ci precision mediump float; 2358e5c31af7Sopenharmony_ci ${DECLARATIONS} 2359e5c31af7Sopenharmony_ci 2360e5c31af7Sopenharmony_ci bool func (in bool a[4]) 2361e5c31af7Sopenharmony_ci { 2362e5c31af7Sopenharmony_ci a[0] = false; 2363e5c31af7Sopenharmony_ci a[2] = true; 2364e5c31af7Sopenharmony_ci a[3] = !a[1]; 2365e5c31af7Sopenharmony_ci return a[0]; 2366e5c31af7Sopenharmony_ci } 2367e5c31af7Sopenharmony_ci 2368e5c31af7Sopenharmony_ci void main() 2369e5c31af7Sopenharmony_ci { 2370e5c31af7Sopenharmony_ci ${SETUP} 2371e5c31af7Sopenharmony_ci bool arr[4]; 2372e5c31af7Sopenharmony_ci arr[0] = !in0.x; 2373e5c31af7Sopenharmony_ci arr[1] = !in0.y; 2374e5c31af7Sopenharmony_ci arr[2] = !in0.z; 2375e5c31af7Sopenharmony_ci arr[3] = !in0.w; 2376e5c31af7Sopenharmony_ci func(arr); 2377e5c31af7Sopenharmony_ci out0 = bvec4(arr[0], arr[1], arr[2], arr[3]); 2378e5c31af7Sopenharmony_ci ${OUTPUT} 2379e5c31af7Sopenharmony_ci } 2380e5c31af7Sopenharmony_ci "" 2381e5c31af7Sopenharmony_ci end 2382e5c31af7Sopenharmony_ci 2383e5c31af7Sopenharmony_ci case global_in_bool 2384e5c31af7Sopenharmony_ci version 300 es 2385e5c31af7Sopenharmony_ci values 2386e5c31af7Sopenharmony_ci { 2387e5c31af7Sopenharmony_ci input bvec4 in0 = [ bvec4(true, true, false, true) | bvec4(false, false, false, false) ]; 2388e5c31af7Sopenharmony_ci output bvec4 out0 = [ bvec4(false, false, true, false) | bvec4(true, true, true, true) ]; 2389e5c31af7Sopenharmony_ci } 2390e5c31af7Sopenharmony_ci 2391e5c31af7Sopenharmony_ci both "" 2392e5c31af7Sopenharmony_ci #version 300 es 2393e5c31af7Sopenharmony_ci precision mediump float; 2394e5c31af7Sopenharmony_ci ${DECLARATIONS} 2395e5c31af7Sopenharmony_ci 2396e5c31af7Sopenharmony_ci bool func (in bool a[4]) 2397e5c31af7Sopenharmony_ci { 2398e5c31af7Sopenharmony_ci a[0] = false; 2399e5c31af7Sopenharmony_ci a[2] = true; 2400e5c31af7Sopenharmony_ci a[3] = !a[1]; 2401e5c31af7Sopenharmony_ci return a[0]; 2402e5c31af7Sopenharmony_ci } 2403e5c31af7Sopenharmony_ci 2404e5c31af7Sopenharmony_ci bool arr[4]; 2405e5c31af7Sopenharmony_ci 2406e5c31af7Sopenharmony_ci void main() 2407e5c31af7Sopenharmony_ci { 2408e5c31af7Sopenharmony_ci ${SETUP} 2409e5c31af7Sopenharmony_ci arr[0] = !in0.x; 2410e5c31af7Sopenharmony_ci arr[1] = !in0.y; 2411e5c31af7Sopenharmony_ci arr[2] = !in0.z; 2412e5c31af7Sopenharmony_ci arr[3] = !in0.w; 2413e5c31af7Sopenharmony_ci func(arr); 2414e5c31af7Sopenharmony_ci out0 = bvec4(arr[0], arr[1], arr[2], arr[3]); 2415e5c31af7Sopenharmony_ci ${OUTPUT} 2416e5c31af7Sopenharmony_ci } 2417e5c31af7Sopenharmony_ci "" 2418e5c31af7Sopenharmony_ci end 2419e5c31af7Sopenharmony_ci 2420e5c31af7Sopenharmony_ci case test_helpers 2421e5c31af7Sopenharmony_ci version 300 es 2422e5c31af7Sopenharmony_ci desc "Check that helper functions are supported properly." 2423e5c31af7Sopenharmony_ci values 2424e5c31af7Sopenharmony_ci { 2425e5c31af7Sopenharmony_ci input vec4 in0 = [ vec4(0.0, 1.0, 2.0, -4.0) | vec4(-7.5, 12.125, -0.25, 16.0) ]; 2426e5c31af7Sopenharmony_ci output float out0 = [ 1.0 | 1.0 ]; 2427e5c31af7Sopenharmony_ci } 2428e5c31af7Sopenharmony_ci 2429e5c31af7Sopenharmony_ci both "" 2430e5c31af7Sopenharmony_ci #version 300 es 2431e5c31af7Sopenharmony_ci precision mediump float; 2432e5c31af7Sopenharmony_ci ${DECLARATIONS} 2433e5c31af7Sopenharmony_ci 2434e5c31af7Sopenharmony_ci vec4 get (in float arr[4]); 2435e5c31af7Sopenharmony_ci void set (out float arr[4], vec4 val); 2436e5c31af7Sopenharmony_ci void negate (inout float arr[4]); 2437e5c31af7Sopenharmony_ci bool test (in float arr[4], vec4 ref); 2438e5c31af7Sopenharmony_ci bool isEqual (in float a[4], in float b[4]); 2439e5c31af7Sopenharmony_ci 2440e5c31af7Sopenharmony_ci void main() 2441e5c31af7Sopenharmony_ci { 2442e5c31af7Sopenharmony_ci float arr[4]; 2443e5c31af7Sopenharmony_ci set(arr, in0); 2444e5c31af7Sopenharmony_ci negate(arr); 2445e5c31af7Sopenharmony_ci out0 = float(test(arr, -in0)); 2446e5c31af7Sopenharmony_ci ${OUTPUT} 2447e5c31af7Sopenharmony_ci } 2448e5c31af7Sopenharmony_ci 2449e5c31af7Sopenharmony_ci float absDiff (vec4 a, vec4 b) { vec4 d = abs(a - b); return max(max(d.x, d.y), max(d.z, d.w)); } 2450e5c31af7Sopenharmony_ci vec4 get (in float arr[4]) { return vec4(arr[0], arr[1], arr[2], arr[3]); } 2451e5c31af7Sopenharmony_ci void set (out float arr[4], vec4 val) { arr[0] = val.x; arr[1] = val.y; arr[2] = val.z; arr[3] = val.w; } 2452e5c31af7Sopenharmony_ci void negate (inout float arr[4]) { set(arr, -get(arr)); } 2453e5c31af7Sopenharmony_ci bool test (in float arr[4], vec4 ref) { return (absDiff(get(arr), ref) < 0.1); } 2454e5c31af7Sopenharmony_ci bool isEqual (in float a[4], in float b[4]) { return (absDiff(get(a), get(b)) < 0.1); } 2455e5c31af7Sopenharmony_ci "" 2456e5c31af7Sopenharmony_ci end 2457e5c31af7Sopenharmony_ci 2458e5c31af7Sopenharmony_ci case copy_local_in_on_call 2459e5c31af7Sopenharmony_ci version 300 es 2460e5c31af7Sopenharmony_ci desc "Check that local 'in' arguments are copied on call and don't alias." 2461e5c31af7Sopenharmony_ci values 2462e5c31af7Sopenharmony_ci { 2463e5c31af7Sopenharmony_ci input vec4 in0 = [ vec4(0.0, 1.0, 2.0, -4.0) | vec4(-7.5, 12.125, -0.25, 16.0) ]; 2464e5c31af7Sopenharmony_ci output vec4 out0 = [ vec4(0.0, -1.0, -2.0, 4.0) | vec4(7.5, -12.125, 0.25, -16.0) ]; 2465e5c31af7Sopenharmony_ci } 2466e5c31af7Sopenharmony_ci 2467e5c31af7Sopenharmony_ci both "" 2468e5c31af7Sopenharmony_ci #version 300 es 2469e5c31af7Sopenharmony_ci precision mediump float; 2470e5c31af7Sopenharmony_ci ${DECLARATIONS} 2471e5c31af7Sopenharmony_ci 2472e5c31af7Sopenharmony_ci vec4 get (in float arr[4]); 2473e5c31af7Sopenharmony_ci void set (out float arr[4], vec4 val); 2474e5c31af7Sopenharmony_ci void negate (inout float arr[4]); 2475e5c31af7Sopenharmony_ci bool test (in float arr[4], vec4 ref); 2476e5c31af7Sopenharmony_ci bool isEqual (in float a[4], in float b[4]); 2477e5c31af7Sopenharmony_ci 2478e5c31af7Sopenharmony_ci float func (in float a[4], in float b[4]) 2479e5c31af7Sopenharmony_ci { 2480e5c31af7Sopenharmony_ci a[0] = 2.123; 2481e5c31af7Sopenharmony_ci a[2] = -4.123; 2482e5c31af7Sopenharmony_ci return isEqual(a, b) ? 1.0 : -1.0; 2483e5c31af7Sopenharmony_ci } 2484e5c31af7Sopenharmony_ci 2485e5c31af7Sopenharmony_ci void main() 2486e5c31af7Sopenharmony_ci { 2487e5c31af7Sopenharmony_ci float arr[4]; 2488e5c31af7Sopenharmony_ci set(arr, in0); 2489e5c31af7Sopenharmony_ci out0 = in0 * func(arr, arr); 2490e5c31af7Sopenharmony_ci ${OUTPUT} 2491e5c31af7Sopenharmony_ci } 2492e5c31af7Sopenharmony_ci 2493e5c31af7Sopenharmony_ci float absDiff (vec4 a, vec4 b) { vec4 d = abs(a - b); return max(max(d.x, d.y), max(d.z, d.w)); } 2494e5c31af7Sopenharmony_ci vec4 get (in float arr[4]) { return vec4(arr[0], arr[1], arr[2], arr[3]); } 2495e5c31af7Sopenharmony_ci void set (out float arr[4], vec4 val) { arr[0] = val.x; arr[1] = val.y; arr[2] = val.z; arr[3] = val.w; } 2496e5c31af7Sopenharmony_ci void negate (inout float arr[4]) { set(arr, -get(arr)); } 2497e5c31af7Sopenharmony_ci bool test (in float arr[4], vec4 ref) { return (absDiff(get(arr), ref) < 0.1); } 2498e5c31af7Sopenharmony_ci bool isEqual (in float a[4], in float b[4]) { return (absDiff(get(a), get(b)) < 0.1); } 2499e5c31af7Sopenharmony_ci "" 2500e5c31af7Sopenharmony_ci end 2501e5c31af7Sopenharmony_ci 2502e5c31af7Sopenharmony_ci case copy_global_in_on_call 2503e5c31af7Sopenharmony_ci version 300 es 2504e5c31af7Sopenharmony_ci desc "Check that global 'in' arguments are copied on call and don't alias." 2505e5c31af7Sopenharmony_ci values 2506e5c31af7Sopenharmony_ci { 2507e5c31af7Sopenharmony_ci input vec4 in0 = [ vec4(0.0, 1.0, 2.0, -4.0) | vec4(-7.5, 12.125, -0.25, 16.0) ]; 2508e5c31af7Sopenharmony_ci output vec4 out0 = [ vec4(0.0, -1.0, -2.0, 4.0) | vec4(7.5, -12.125, 0.25, -16.0) ]; 2509e5c31af7Sopenharmony_ci } 2510e5c31af7Sopenharmony_ci 2511e5c31af7Sopenharmony_ci both "" 2512e5c31af7Sopenharmony_ci #version 300 es 2513e5c31af7Sopenharmony_ci precision mediump float; 2514e5c31af7Sopenharmony_ci ${DECLARATIONS} 2515e5c31af7Sopenharmony_ci 2516e5c31af7Sopenharmony_ci vec4 get (in float arr[4]); 2517e5c31af7Sopenharmony_ci void set (out float arr[4], vec4 val); 2518e5c31af7Sopenharmony_ci void negate (inout float arr[4]); 2519e5c31af7Sopenharmony_ci bool test (in float arr[4], vec4 ref); 2520e5c31af7Sopenharmony_ci bool isEqual (in float a[4], in float b[4]); 2521e5c31af7Sopenharmony_ci 2522e5c31af7Sopenharmony_ci float func (in float a[4], in float b[4]) 2523e5c31af7Sopenharmony_ci { 2524e5c31af7Sopenharmony_ci a[0] = 2.123; 2525e5c31af7Sopenharmony_ci a[2] = -4.123; 2526e5c31af7Sopenharmony_ci return isEqual(a, b) ? 1.0 : -1.0; 2527e5c31af7Sopenharmony_ci } 2528e5c31af7Sopenharmony_ci 2529e5c31af7Sopenharmony_ci float arr[4]; 2530e5c31af7Sopenharmony_ci 2531e5c31af7Sopenharmony_ci void main() 2532e5c31af7Sopenharmony_ci { 2533e5c31af7Sopenharmony_ci set(arr, in0); 2534e5c31af7Sopenharmony_ci out0 = in0 * func(arr, arr); 2535e5c31af7Sopenharmony_ci ${OUTPUT} 2536e5c31af7Sopenharmony_ci } 2537e5c31af7Sopenharmony_ci 2538e5c31af7Sopenharmony_ci float absDiff (vec4 a, vec4 b) { vec4 d = abs(a - b); return max(max(d.x, d.y), max(d.z, d.w)); } 2539e5c31af7Sopenharmony_ci vec4 get (in float arr[4]) { return vec4(arr[0], arr[1], arr[2], arr[3]); } 2540e5c31af7Sopenharmony_ci void set (out float arr[4], vec4 val) { arr[0] = val.x; arr[1] = val.y; arr[2] = val.z; arr[3] = val.w; } 2541e5c31af7Sopenharmony_ci void negate (inout float arr[4]) { set(arr, -get(arr)); } 2542e5c31af7Sopenharmony_ci bool test (in float arr[4], vec4 ref) { return (absDiff(get(arr), ref) < 0.1); } 2543e5c31af7Sopenharmony_ci bool isEqual (in float a[4], in float b[4]) { return (absDiff(get(a), get(b)) < 0.1); } 2544e5c31af7Sopenharmony_ci "" 2545e5c31af7Sopenharmony_ci end 2546e5c31af7Sopenharmony_ci 2547e5c31af7Sopenharmony_ci case copy_local_inout_on_call 2548e5c31af7Sopenharmony_ci version 300 es 2549e5c31af7Sopenharmony_ci desc "Check that local 'in' arguments are copied on call and don't alias." 2550e5c31af7Sopenharmony_ci values 2551e5c31af7Sopenharmony_ci { 2552e5c31af7Sopenharmony_ci input vec4 in0 = [ vec4(0.0, 1.0, 2.0, -4.0) | vec4(-7.5, 12.125, -0.25, 16.0) ]; 2553e5c31af7Sopenharmony_ci output vec4 out0 = [ vec4(0.0, -1.0, -2.0, 4.0) | vec4(7.5, -12.125, 0.25, -16.0) ]; 2554e5c31af7Sopenharmony_ci } 2555e5c31af7Sopenharmony_ci 2556e5c31af7Sopenharmony_ci both "" 2557e5c31af7Sopenharmony_ci #version 300 es 2558e5c31af7Sopenharmony_ci precision mediump float; 2559e5c31af7Sopenharmony_ci ${DECLARATIONS} 2560e5c31af7Sopenharmony_ci 2561e5c31af7Sopenharmony_ci vec4 get (in float arr[4]); 2562e5c31af7Sopenharmony_ci void set (out float arr[4], vec4 val); 2563e5c31af7Sopenharmony_ci void negate (inout float arr[4]); 2564e5c31af7Sopenharmony_ci bool test (in float arr[4], vec4 ref); 2565e5c31af7Sopenharmony_ci bool isEqual (in float a[4], in float b[4]); 2566e5c31af7Sopenharmony_ci 2567e5c31af7Sopenharmony_ci float func (inout float a[4], inout float b[4]) 2568e5c31af7Sopenharmony_ci { 2569e5c31af7Sopenharmony_ci negate(a); 2570e5c31af7Sopenharmony_ci return isEqual(a, b) ? 1.0 : -1.0; 2571e5c31af7Sopenharmony_ci } 2572e5c31af7Sopenharmony_ci 2573e5c31af7Sopenharmony_ci void main() 2574e5c31af7Sopenharmony_ci { 2575e5c31af7Sopenharmony_ci float arr[4]; 2576e5c31af7Sopenharmony_ci set(arr, in0); 2577e5c31af7Sopenharmony_ci float m = func(arr, arr); // returns -1.0 2578e5c31af7Sopenharmony_ci float n = float(test(arr, in0) || test(arr, -in0)); 2579e5c31af7Sopenharmony_ci out0 = in0 * m * n; 2580e5c31af7Sopenharmony_ci ${OUTPUT} 2581e5c31af7Sopenharmony_ci } 2582e5c31af7Sopenharmony_ci 2583e5c31af7Sopenharmony_ci float absDiff (vec4 a, vec4 b) { vec4 d = abs(a - b); return max(max(d.x, d.y), max(d.z, d.w)); } 2584e5c31af7Sopenharmony_ci vec4 get (in float arr[4]) { return vec4(arr[0], arr[1], arr[2], arr[3]); } 2585e5c31af7Sopenharmony_ci void set (out float arr[4], vec4 val) { arr[0] = val.x; arr[1] = val.y; arr[2] = val.z; arr[3] = val.w; } 2586e5c31af7Sopenharmony_ci void negate (inout float arr[4]) { set(arr, -get(arr)); } 2587e5c31af7Sopenharmony_ci bool test (in float arr[4], vec4 ref) { return (absDiff(get(arr), ref) < 0.1); } 2588e5c31af7Sopenharmony_ci bool isEqual (in float a[4], in float b[4]) { return (absDiff(get(a), get(b)) < 0.1); } 2589e5c31af7Sopenharmony_ci "" 2590e5c31af7Sopenharmony_ci end 2591e5c31af7Sopenharmony_ci 2592e5c31af7Sopenharmony_ci case copy_global_inout_on_call 2593e5c31af7Sopenharmony_ci version 300 es 2594e5c31af7Sopenharmony_ci desc "Check that global 'in' arguments are copied on call and don't alias." 2595e5c31af7Sopenharmony_ci values 2596e5c31af7Sopenharmony_ci { 2597e5c31af7Sopenharmony_ci input vec4 in0 = [ vec4(0.0, 1.0, 2.0, -4.0) | vec4(-7.5, 12.125, -0.25, 16.0) ]; 2598e5c31af7Sopenharmony_ci output vec4 out0 = [ vec4(0.0, -1.0, -2.0, 4.0) | vec4(7.5, -12.125, 0.25, -16.0) ]; 2599e5c31af7Sopenharmony_ci } 2600e5c31af7Sopenharmony_ci 2601e5c31af7Sopenharmony_ci both "" 2602e5c31af7Sopenharmony_ci #version 300 es 2603e5c31af7Sopenharmony_ci precision mediump float; 2604e5c31af7Sopenharmony_ci ${DECLARATIONS} 2605e5c31af7Sopenharmony_ci 2606e5c31af7Sopenharmony_ci vec4 get (in float arr[4]); 2607e5c31af7Sopenharmony_ci void set (out float arr[4], vec4 val); 2608e5c31af7Sopenharmony_ci void negate (inout float arr[4]); 2609e5c31af7Sopenharmony_ci bool test (in float arr[4], vec4 ref); 2610e5c31af7Sopenharmony_ci bool isEqual (in float a[4], in float b[4]); 2611e5c31af7Sopenharmony_ci 2612e5c31af7Sopenharmony_ci float func (in float a[4], in float b[4]) 2613e5c31af7Sopenharmony_ci { 2614e5c31af7Sopenharmony_ci negate(a); 2615e5c31af7Sopenharmony_ci return isEqual(a, b) ? 1.0 : -1.0; 2616e5c31af7Sopenharmony_ci } 2617e5c31af7Sopenharmony_ci 2618e5c31af7Sopenharmony_ci float arr[4]; 2619e5c31af7Sopenharmony_ci 2620e5c31af7Sopenharmony_ci void main() 2621e5c31af7Sopenharmony_ci { 2622e5c31af7Sopenharmony_ci set(arr, in0); 2623e5c31af7Sopenharmony_ci float m = func(arr, arr); // returns -1.0 2624e5c31af7Sopenharmony_ci float n = float(test(arr, in0) || test(arr, -in0)); 2625e5c31af7Sopenharmony_ci out0 = in0 * m * n; 2626e5c31af7Sopenharmony_ci ${OUTPUT} 2627e5c31af7Sopenharmony_ci } 2628e5c31af7Sopenharmony_ci 2629e5c31af7Sopenharmony_ci float absDiff (vec4 a, vec4 b) { vec4 d = abs(a - b); return max(max(d.x, d.y), max(d.z, d.w)); } 2630e5c31af7Sopenharmony_ci vec4 get (in float arr[4]) { return vec4(arr[0], arr[1], arr[2], arr[3]); } 2631e5c31af7Sopenharmony_ci void set (out float arr[4], vec4 val) { arr[0] = val.x; arr[1] = val.y; arr[2] = val.z; arr[3] = val.w; } 2632e5c31af7Sopenharmony_ci void negate (inout float arr[4]) { set(arr, -get(arr)); } 2633e5c31af7Sopenharmony_ci bool test (in float arr[4], vec4 ref) { return (absDiff(get(arr), ref) < 0.1); } 2634e5c31af7Sopenharmony_ci bool isEqual (in float a[4], in float b[4]) { return (absDiff(get(a), get(b)) < 0.1); } 2635e5c31af7Sopenharmony_ci "" 2636e5c31af7Sopenharmony_ci end 2637e5c31af7Sopenharmony_ci 2638e5c31af7Sopenharmony_ci# vec4 get (in float arr[4]); 2639e5c31af7Sopenharmony_ci# void set (out float arr[4], vec4 val); 2640e5c31af7Sopenharmony_ci# void negate (inout float arr[4]); 2641e5c31af7Sopenharmony_ci# bool test (in float arr[4], vec4 ref); 2642e5c31af7Sopenharmony_ci# bool isEqual (in float a[4], in float b[4]); 2643e5c31af7Sopenharmony_ci 2644e5c31af7Sopenharmony_ci# float absDiff (vec4 a, vec4 b) { vec4 d = abs(a - b); return max(max(d.x, d.y), max(d.z, d.w)); } 2645e5c31af7Sopenharmony_ci# vec4 get (in float arr[4]) { return vec4(arr[0], arr[1], arr[2], arr[3]); } 2646e5c31af7Sopenharmony_ci# void set (out float arr[4], vec4 val) { arr[0] = val.x; arr[1] = val.y; arr[2] = val.z; arr[3] = val.w; } 2647e5c31af7Sopenharmony_ci# void negate (inout float arr[4]) { set(arr, -get(arr)); } 2648e5c31af7Sopenharmony_ci# bool test (in float arr[4], vec4 ref) { return (absDiff(get(arr), ref) < 0.1); } 2649e5c31af7Sopenharmony_ci# bool isEqual (in float a[4], in float b[4]) { return (absDiff(get(a), get(b)) < 0.1); } 2650e5c31af7Sopenharmony_ci 2651e5c31af7Sopenharmony_ciend # array_arguments 2652e5c31af7Sopenharmony_ci 2653e5c31af7Sopenharmony_ci#group qualifiers "Function Parameter Qualifiers" 2654e5c31af7Sopenharmony_ci# 2655e5c31af7Sopenharmony_ci#end # qualifiers 2656e5c31af7Sopenharmony_ci 2657e5c31af7Sopenharmony_cigroup control_flow "Control Flow In Functions" 2658e5c31af7Sopenharmony_ci 2659e5c31af7Sopenharmony_ci case simple_return 2660e5c31af7Sopenharmony_ci version 300 es 2661e5c31af7Sopenharmony_ci values 2662e5c31af7Sopenharmony_ci { 2663e5c31af7Sopenharmony_ci input float in0 = [ -0.5 | 1.5 ]; 2664e5c31af7Sopenharmony_ci output float out0 = [ 0.5 | -1.5 ]; 2665e5c31af7Sopenharmony_ci } 2666e5c31af7Sopenharmony_ci 2667e5c31af7Sopenharmony_ci both "" 2668e5c31af7Sopenharmony_ci #version 300 es 2669e5c31af7Sopenharmony_ci precision mediump float; 2670e5c31af7Sopenharmony_ci ${DECLARATIONS} 2671e5c31af7Sopenharmony_ci 2672e5c31af7Sopenharmony_ci float func (float a) 2673e5c31af7Sopenharmony_ci { 2674e5c31af7Sopenharmony_ci return -a; 2675e5c31af7Sopenharmony_ci a = a * -1.0; 2676e5c31af7Sopenharmony_ci return 1.0; 2677e5c31af7Sopenharmony_ci } 2678e5c31af7Sopenharmony_ci 2679e5c31af7Sopenharmony_ci void main() 2680e5c31af7Sopenharmony_ci { 2681e5c31af7Sopenharmony_ci ${SETUP} 2682e5c31af7Sopenharmony_ci out0 = func(in0); 2683e5c31af7Sopenharmony_ci ${OUTPUT} 2684e5c31af7Sopenharmony_ci } 2685e5c31af7Sopenharmony_ci "" 2686e5c31af7Sopenharmony_ci end 2687e5c31af7Sopenharmony_ci 2688e5c31af7Sopenharmony_ci case return_in_if 2689e5c31af7Sopenharmony_ci version 300 es 2690e5c31af7Sopenharmony_ci values 2691e5c31af7Sopenharmony_ci { 2692e5c31af7Sopenharmony_ci input float in0 = [ -0.5 | 1.5 ]; 2693e5c31af7Sopenharmony_ci output float out0 = [ 0.5 | -1.5 ]; 2694e5c31af7Sopenharmony_ci } 2695e5c31af7Sopenharmony_ci 2696e5c31af7Sopenharmony_ci both "" 2697e5c31af7Sopenharmony_ci #version 300 es 2698e5c31af7Sopenharmony_ci precision mediump float; 2699e5c31af7Sopenharmony_ci ${DECLARATIONS} 2700e5c31af7Sopenharmony_ci 2701e5c31af7Sopenharmony_ci float func (float a) 2702e5c31af7Sopenharmony_ci { 2703e5c31af7Sopenharmony_ci if (a != 0.0) 2704e5c31af7Sopenharmony_ci return -a; 2705e5c31af7Sopenharmony_ci return 1.0; 2706e5c31af7Sopenharmony_ci } 2707e5c31af7Sopenharmony_ci 2708e5c31af7Sopenharmony_ci void main() 2709e5c31af7Sopenharmony_ci { 2710e5c31af7Sopenharmony_ci ${SETUP} 2711e5c31af7Sopenharmony_ci out0 = func(in0); 2712e5c31af7Sopenharmony_ci ${OUTPUT} 2713e5c31af7Sopenharmony_ci } 2714e5c31af7Sopenharmony_ci "" 2715e5c31af7Sopenharmony_ci end 2716e5c31af7Sopenharmony_ci 2717e5c31af7Sopenharmony_ci case return_in_else 2718e5c31af7Sopenharmony_ci version 300 es 2719e5c31af7Sopenharmony_ci values 2720e5c31af7Sopenharmony_ci { 2721e5c31af7Sopenharmony_ci input float in0 = [ -0.5 | 1.5 ]; 2722e5c31af7Sopenharmony_ci output float out0 = [ 0.5 | -1.5 ]; 2723e5c31af7Sopenharmony_ci } 2724e5c31af7Sopenharmony_ci 2725e5c31af7Sopenharmony_ci both "" 2726e5c31af7Sopenharmony_ci #version 300 es 2727e5c31af7Sopenharmony_ci precision mediump float; 2728e5c31af7Sopenharmony_ci ${DECLARATIONS} 2729e5c31af7Sopenharmony_ci 2730e5c31af7Sopenharmony_ci float func (float a) 2731e5c31af7Sopenharmony_ci { 2732e5c31af7Sopenharmony_ci if (a == 0.0) 2733e5c31af7Sopenharmony_ci return 1.0; 2734e5c31af7Sopenharmony_ci else 2735e5c31af7Sopenharmony_ci return -a; 2736e5c31af7Sopenharmony_ci return 1.0; 2737e5c31af7Sopenharmony_ci } 2738e5c31af7Sopenharmony_ci 2739e5c31af7Sopenharmony_ci void main() 2740e5c31af7Sopenharmony_ci { 2741e5c31af7Sopenharmony_ci ${SETUP} 2742e5c31af7Sopenharmony_ci out0 = func(in0); 2743e5c31af7Sopenharmony_ci ${OUTPUT} 2744e5c31af7Sopenharmony_ci } 2745e5c31af7Sopenharmony_ci "" 2746e5c31af7Sopenharmony_ci end 2747e5c31af7Sopenharmony_ci 2748e5c31af7Sopenharmony_ci case return_in_loop 2749e5c31af7Sopenharmony_ci version 300 es 2750e5c31af7Sopenharmony_ci values 2751e5c31af7Sopenharmony_ci { 2752e5c31af7Sopenharmony_ci input float in0 = [ -0.5 | 1.5 ]; 2753e5c31af7Sopenharmony_ci output float out0 = [ 0.5 | -1.5 ]; 2754e5c31af7Sopenharmony_ci } 2755e5c31af7Sopenharmony_ci 2756e5c31af7Sopenharmony_ci both "" 2757e5c31af7Sopenharmony_ci #version 300 es 2758e5c31af7Sopenharmony_ci precision mediump float; 2759e5c31af7Sopenharmony_ci ${DECLARATIONS} 2760e5c31af7Sopenharmony_ci 2761e5c31af7Sopenharmony_ci float func (float a) 2762e5c31af7Sopenharmony_ci { 2763e5c31af7Sopenharmony_ci while (a < 100.0) 2764e5c31af7Sopenharmony_ci return -a; 2765e5c31af7Sopenharmony_ci return 1.0; 2766e5c31af7Sopenharmony_ci } 2767e5c31af7Sopenharmony_ci 2768e5c31af7Sopenharmony_ci void main() 2769e5c31af7Sopenharmony_ci { 2770e5c31af7Sopenharmony_ci ${SETUP} 2771e5c31af7Sopenharmony_ci out0 = func(in0); 2772e5c31af7Sopenharmony_ci ${OUTPUT} 2773e5c31af7Sopenharmony_ci } 2774e5c31af7Sopenharmony_ci "" 2775e5c31af7Sopenharmony_ci end 2776e5c31af7Sopenharmony_ci 2777e5c31af7Sopenharmony_ci case return_in_loop_if 2778e5c31af7Sopenharmony_ci version 300 es 2779e5c31af7Sopenharmony_ci values 2780e5c31af7Sopenharmony_ci { 2781e5c31af7Sopenharmony_ci input float in0 = [ -0.5 | 1.5 ]; 2782e5c31af7Sopenharmony_ci output float out0 = [ 0.5 | -1.5 ]; 2783e5c31af7Sopenharmony_ci } 2784e5c31af7Sopenharmony_ci 2785e5c31af7Sopenharmony_ci both "" 2786e5c31af7Sopenharmony_ci #version 300 es 2787e5c31af7Sopenharmony_ci precision mediump float; 2788e5c31af7Sopenharmony_ci ${DECLARATIONS} 2789e5c31af7Sopenharmony_ci 2790e5c31af7Sopenharmony_ci float func (float a) 2791e5c31af7Sopenharmony_ci { 2792e5c31af7Sopenharmony_ci while (a < 100.0) 2793e5c31af7Sopenharmony_ci { 2794e5c31af7Sopenharmony_ci a = -a; 2795e5c31af7Sopenharmony_ci if (a != 0.0) 2796e5c31af7Sopenharmony_ci return a; 2797e5c31af7Sopenharmony_ci else 2798e5c31af7Sopenharmony_ci return -1.0; 2799e5c31af7Sopenharmony_ci } 2800e5c31af7Sopenharmony_ci return 1.0; 2801e5c31af7Sopenharmony_ci } 2802e5c31af7Sopenharmony_ci 2803e5c31af7Sopenharmony_ci void main() 2804e5c31af7Sopenharmony_ci { 2805e5c31af7Sopenharmony_ci ${SETUP} 2806e5c31af7Sopenharmony_ci out0 = func(in0); 2807e5c31af7Sopenharmony_ci ${OUTPUT} 2808e5c31af7Sopenharmony_ci } 2809e5c31af7Sopenharmony_ci "" 2810e5c31af7Sopenharmony_ci end 2811e5c31af7Sopenharmony_ci 2812e5c31af7Sopenharmony_ci case return_after_loop 2813e5c31af7Sopenharmony_ci version 300 es 2814e5c31af7Sopenharmony_ci values 2815e5c31af7Sopenharmony_ci { 2816e5c31af7Sopenharmony_ci input float in0 = [ -0.5 | 1.5 ]; 2817e5c31af7Sopenharmony_ci output float out0 = [ 0.5 | -1.5 ]; 2818e5c31af7Sopenharmony_ci } 2819e5c31af7Sopenharmony_ci 2820e5c31af7Sopenharmony_ci both "" 2821e5c31af7Sopenharmony_ci #version 300 es 2822e5c31af7Sopenharmony_ci precision mediump float; 2823e5c31af7Sopenharmony_ci ${DECLARATIONS} 2824e5c31af7Sopenharmony_ci 2825e5c31af7Sopenharmony_ci float func (float a) 2826e5c31af7Sopenharmony_ci { 2827e5c31af7Sopenharmony_ci for (int i = 0; i < 5; i++) 2828e5c31af7Sopenharmony_ci a = -a; 2829e5c31af7Sopenharmony_ci return a; 2830e5c31af7Sopenharmony_ci } 2831e5c31af7Sopenharmony_ci 2832e5c31af7Sopenharmony_ci void main() 2833e5c31af7Sopenharmony_ci { 2834e5c31af7Sopenharmony_ci ${SETUP} 2835e5c31af7Sopenharmony_ci out0 = func(in0); 2836e5c31af7Sopenharmony_ci ${OUTPUT} 2837e5c31af7Sopenharmony_ci } 2838e5c31af7Sopenharmony_ci "" 2839e5c31af7Sopenharmony_ci end 2840e5c31af7Sopenharmony_ci 2841e5c31af7Sopenharmony_ci case return_after_break 2842e5c31af7Sopenharmony_ci version 300 es 2843e5c31af7Sopenharmony_ci values 2844e5c31af7Sopenharmony_ci { 2845e5c31af7Sopenharmony_ci input float in0 = [ -0.5 | 1.5 ]; 2846e5c31af7Sopenharmony_ci output float out0 = [ 0.5 | -1.5 ]; 2847e5c31af7Sopenharmony_ci } 2848e5c31af7Sopenharmony_ci 2849e5c31af7Sopenharmony_ci both "" 2850e5c31af7Sopenharmony_ci #version 300 es 2851e5c31af7Sopenharmony_ci precision mediump float; 2852e5c31af7Sopenharmony_ci ${DECLARATIONS} 2853e5c31af7Sopenharmony_ci 2854e5c31af7Sopenharmony_ci float func (float a) 2855e5c31af7Sopenharmony_ci { 2856e5c31af7Sopenharmony_ci for (int i = 0; i < 6; i++) 2857e5c31af7Sopenharmony_ci { 2858e5c31af7Sopenharmony_ci a = -a; 2859e5c31af7Sopenharmony_ci if (i == 4) 2860e5c31af7Sopenharmony_ci break; 2861e5c31af7Sopenharmony_ci } 2862e5c31af7Sopenharmony_ci return a; 2863e5c31af7Sopenharmony_ci } 2864e5c31af7Sopenharmony_ci 2865e5c31af7Sopenharmony_ci void main() 2866e5c31af7Sopenharmony_ci { 2867e5c31af7Sopenharmony_ci ${SETUP} 2868e5c31af7Sopenharmony_ci out0 = func(in0); 2869e5c31af7Sopenharmony_ci ${OUTPUT} 2870e5c31af7Sopenharmony_ci } 2871e5c31af7Sopenharmony_ci "" 2872e5c31af7Sopenharmony_ci end 2873e5c31af7Sopenharmony_ci 2874e5c31af7Sopenharmony_ci case return_after_continue 2875e5c31af7Sopenharmony_ci version 300 es 2876e5c31af7Sopenharmony_ci values 2877e5c31af7Sopenharmony_ci { 2878e5c31af7Sopenharmony_ci input float in0 = [ -0.5 | 1.5 ]; 2879e5c31af7Sopenharmony_ci output float out0 = [ 0.5 | -1.5 ]; 2880e5c31af7Sopenharmony_ci } 2881e5c31af7Sopenharmony_ci 2882e5c31af7Sopenharmony_ci both "" 2883e5c31af7Sopenharmony_ci #version 300 es 2884e5c31af7Sopenharmony_ci precision mediump float; 2885e5c31af7Sopenharmony_ci ${DECLARATIONS} 2886e5c31af7Sopenharmony_ci 2887e5c31af7Sopenharmony_ci float func (float a) 2888e5c31af7Sopenharmony_ci { 2889e5c31af7Sopenharmony_ci for (int i = 0; i < 6; i++) 2890e5c31af7Sopenharmony_ci { 2891e5c31af7Sopenharmony_ci if (i == 4) 2892e5c31af7Sopenharmony_ci continue; 2893e5c31af7Sopenharmony_ci a = -a; 2894e5c31af7Sopenharmony_ci } 2895e5c31af7Sopenharmony_ci return a; 2896e5c31af7Sopenharmony_ci } 2897e5c31af7Sopenharmony_ci 2898e5c31af7Sopenharmony_ci void main() 2899e5c31af7Sopenharmony_ci { 2900e5c31af7Sopenharmony_ci ${SETUP} 2901e5c31af7Sopenharmony_ci out0 = func(in0); 2902e5c31af7Sopenharmony_ci ${OUTPUT} 2903e5c31af7Sopenharmony_ci } 2904e5c31af7Sopenharmony_ci "" 2905e5c31af7Sopenharmony_ci end 2906e5c31af7Sopenharmony_ci 2907e5c31af7Sopenharmony_ci case return_in_nested_loop 2908e5c31af7Sopenharmony_ci version 300 es 2909e5c31af7Sopenharmony_ci values 2910e5c31af7Sopenharmony_ci { 2911e5c31af7Sopenharmony_ci input float in0 = [ -0.5 | 1.5 ]; 2912e5c31af7Sopenharmony_ci output float out0 = [ 0.5 | -1.5 ]; 2913e5c31af7Sopenharmony_ci } 2914e5c31af7Sopenharmony_ci 2915e5c31af7Sopenharmony_ci both "" 2916e5c31af7Sopenharmony_ci #version 300 es 2917e5c31af7Sopenharmony_ci precision mediump float; 2918e5c31af7Sopenharmony_ci ${DECLARATIONS} 2919e5c31af7Sopenharmony_ci 2920e5c31af7Sopenharmony_ci float func (float a) 2921e5c31af7Sopenharmony_ci { 2922e5c31af7Sopenharmony_ci for (int i = 0; i < 6; i++) 2923e5c31af7Sopenharmony_ci { 2924e5c31af7Sopenharmony_ci a = -a; 2925e5c31af7Sopenharmony_ci for (int j = 0; j < 4; j++) 2926e5c31af7Sopenharmony_ci { 2927e5c31af7Sopenharmony_ci a = -a; 2928e5c31af7Sopenharmony_ci if (i == 1) 2929e5c31af7Sopenharmony_ci return a; 2930e5c31af7Sopenharmony_ci } 2931e5c31af7Sopenharmony_ci if (i == 4) 2932e5c31af7Sopenharmony_ci return 1.0; 2933e5c31af7Sopenharmony_ci } 2934e5c31af7Sopenharmony_ci return 1.0; 2935e5c31af7Sopenharmony_ci } 2936e5c31af7Sopenharmony_ci 2937e5c31af7Sopenharmony_ci void main() 2938e5c31af7Sopenharmony_ci { 2939e5c31af7Sopenharmony_ci ${SETUP} 2940e5c31af7Sopenharmony_ci out0 = func(in0); 2941e5c31af7Sopenharmony_ci ${OUTPUT} 2942e5c31af7Sopenharmony_ci } 2943e5c31af7Sopenharmony_ci "" 2944e5c31af7Sopenharmony_ci end 2945e5c31af7Sopenharmony_ci 2946e5c31af7Sopenharmony_ci case return_after_loop_sequence 2947e5c31af7Sopenharmony_ci version 300 es 2948e5c31af7Sopenharmony_ci values 2949e5c31af7Sopenharmony_ci { 2950e5c31af7Sopenharmony_ci input float in0 = [ -0.5 | 1.5 ]; 2951e5c31af7Sopenharmony_ci output float out0 = [ 0.5 | -1.5 ]; 2952e5c31af7Sopenharmony_ci } 2953e5c31af7Sopenharmony_ci 2954e5c31af7Sopenharmony_ci both "" 2955e5c31af7Sopenharmony_ci #version 300 es 2956e5c31af7Sopenharmony_ci precision mediump float; 2957e5c31af7Sopenharmony_ci ${DECLARATIONS} 2958e5c31af7Sopenharmony_ci 2959e5c31af7Sopenharmony_ci float func (float a) 2960e5c31af7Sopenharmony_ci { 2961e5c31af7Sopenharmony_ci int i; 2962e5c31af7Sopenharmony_ci for (i = 0; i < 6; i++) // negate a 2963e5c31af7Sopenharmony_ci { 2964e5c31af7Sopenharmony_ci a = -a; 2965e5c31af7Sopenharmony_ci if (i == 4) 2966e5c31af7Sopenharmony_ci a = -a; 2967e5c31af7Sopenharmony_ci } 2968e5c31af7Sopenharmony_ci 2969e5c31af7Sopenharmony_ci for (; i < 10; i++) // keep a 2970e5c31af7Sopenharmony_ci { 2971e5c31af7Sopenharmony_ci if (i == 8) 2972e5c31af7Sopenharmony_ci continue; 2973e5c31af7Sopenharmony_ci else if (i == 9) 2974e5c31af7Sopenharmony_ci break; 2975e5c31af7Sopenharmony_ci a = -a; 2976e5c31af7Sopenharmony_ci } 2977e5c31af7Sopenharmony_ci 2978e5c31af7Sopenharmony_ci return a; 2979e5c31af7Sopenharmony_ci } 2980e5c31af7Sopenharmony_ci 2981e5c31af7Sopenharmony_ci void main() 2982e5c31af7Sopenharmony_ci { 2983e5c31af7Sopenharmony_ci ${SETUP} 2984e5c31af7Sopenharmony_ci out0 = func(in0); 2985e5c31af7Sopenharmony_ci ${OUTPUT} 2986e5c31af7Sopenharmony_ci } 2987e5c31af7Sopenharmony_ci "" 2988e5c31af7Sopenharmony_ci end 2989e5c31af7Sopenharmony_ci 2990e5c31af7Sopenharmony_ci case mixed_return_break_continue 2991e5c31af7Sopenharmony_ci version 300 es 2992e5c31af7Sopenharmony_ci values 2993e5c31af7Sopenharmony_ci { 2994e5c31af7Sopenharmony_ci input float in0 = [ -0.5 | 1.5 ]; 2995e5c31af7Sopenharmony_ci output float out0 = [ 0.5 | -1.5 ]; 2996e5c31af7Sopenharmony_ci } 2997e5c31af7Sopenharmony_ci 2998e5c31af7Sopenharmony_ci both "" 2999e5c31af7Sopenharmony_ci #version 300 es 3000e5c31af7Sopenharmony_ci precision mediump float; 3001e5c31af7Sopenharmony_ci ${DECLARATIONS} 3002e5c31af7Sopenharmony_ci 3003e5c31af7Sopenharmony_ci float func (float a) 3004e5c31af7Sopenharmony_ci { 3005e5c31af7Sopenharmony_ci int i; 3006e5c31af7Sopenharmony_ci for (i = 0; i < 6; i++) 3007e5c31af7Sopenharmony_ci { 3008e5c31af7Sopenharmony_ci if (i == 0) 3009e5c31af7Sopenharmony_ci continue; 3010e5c31af7Sopenharmony_ci else if (i == 1) 3011e5c31af7Sopenharmony_ci { 3012e5c31af7Sopenharmony_ci } 3013e5c31af7Sopenharmony_ci else if (i == 3) 3014e5c31af7Sopenharmony_ci break; 3015e5c31af7Sopenharmony_ci else 3016e5c31af7Sopenharmony_ci return a; 3017e5c31af7Sopenharmony_ci a = -a; 3018e5c31af7Sopenharmony_ci } 3019e5c31af7Sopenharmony_ci 3020e5c31af7Sopenharmony_ci return 1.0; 3021e5c31af7Sopenharmony_ci } 3022e5c31af7Sopenharmony_ci 3023e5c31af7Sopenharmony_ci void main() 3024e5c31af7Sopenharmony_ci { 3025e5c31af7Sopenharmony_ci ${SETUP} 3026e5c31af7Sopenharmony_ci out0 = func(in0); 3027e5c31af7Sopenharmony_ci ${OUTPUT} 3028e5c31af7Sopenharmony_ci } 3029e5c31af7Sopenharmony_ci "" 3030e5c31af7Sopenharmony_ci end 3031e5c31af7Sopenharmony_ci 3032e5c31af7Sopenharmony_ciend # control_flow 3033e5c31af7Sopenharmony_ci 3034e5c31af7Sopenharmony_cigroup misc "Miscellaneous" 3035e5c31af7Sopenharmony_ci 3036e5c31af7Sopenharmony_ci case multi_arg_float 3037e5c31af7Sopenharmony_ci version 300 es 3038e5c31af7Sopenharmony_ci values 3039e5c31af7Sopenharmony_ci { 3040e5c31af7Sopenharmony_ci input vec4 in0 = [ vec4(0.0, 1.0, -2.0, 0.5) | vec4(2.0, 2.5, 4.0, -7.0) ]; 3041e5c31af7Sopenharmony_ci output float out0 = [ 0.5 | -1.5 ]; # -sum(in0) 3042e5c31af7Sopenharmony_ci } 3043e5c31af7Sopenharmony_ci 3044e5c31af7Sopenharmony_ci both "" 3045e5c31af7Sopenharmony_ci #version 300 es 3046e5c31af7Sopenharmony_ci precision mediump float; 3047e5c31af7Sopenharmony_ci ${DECLARATIONS} 3048e5c31af7Sopenharmony_ci 3049e5c31af7Sopenharmony_ci float sum(vec4 v) { return (v.x + v.y + v.z + v.w); } 3050e5c31af7Sopenharmony_ci 3051e5c31af7Sopenharmony_ci float func (float a, vec3 b, vec2 c, vec2 d, vec4 e) 3052e5c31af7Sopenharmony_ci { 3053e5c31af7Sopenharmony_ci return -sum(vec4(a, b) + vec4(c, d)) + sum(e); 3054e5c31af7Sopenharmony_ci } 3055e5c31af7Sopenharmony_ci 3056e5c31af7Sopenharmony_ci void main() 3057e5c31af7Sopenharmony_ci { 3058e5c31af7Sopenharmony_ci ${SETUP} 3059e5c31af7Sopenharmony_ci out0 = func(in0.y, in0.xzw, in0.wz, in0.yx, in0); 3060e5c31af7Sopenharmony_ci ${OUTPUT} 3061e5c31af7Sopenharmony_ci } 3062e5c31af7Sopenharmony_ci "" 3063e5c31af7Sopenharmony_ci end 3064e5c31af7Sopenharmony_ci 3065e5c31af7Sopenharmony_ci case multi_arg_int 3066e5c31af7Sopenharmony_ci version 300 es 3067e5c31af7Sopenharmony_ci values 3068e5c31af7Sopenharmony_ci { 3069e5c31af7Sopenharmony_ci input ivec4 in0 = [ ivec4(-1, 0, 2, 2) | ivec4(1, 4, -8, 2) ]; 3070e5c31af7Sopenharmony_ci output int out0 = [ -3 | 1 ]; 3071e5c31af7Sopenharmony_ci } 3072e5c31af7Sopenharmony_ci 3073e5c31af7Sopenharmony_ci both "" 3074e5c31af7Sopenharmony_ci #version 300 es 3075e5c31af7Sopenharmony_ci precision mediump float; 3076e5c31af7Sopenharmony_ci precision mediump int; 3077e5c31af7Sopenharmony_ci ${DECLARATIONS} 3078e5c31af7Sopenharmony_ci 3079e5c31af7Sopenharmony_ci int sum(ivec4 v) { return (v.x + v.y + v.z + v.w); } 3080e5c31af7Sopenharmony_ci 3081e5c31af7Sopenharmony_ci int func (int a, ivec3 b, ivec2 c, ivec2 d, ivec4 e) 3082e5c31af7Sopenharmony_ci { 3083e5c31af7Sopenharmony_ci return -sum(ivec4(a, b) + ivec4(c, d)) + sum(e); 3084e5c31af7Sopenharmony_ci } 3085e5c31af7Sopenharmony_ci 3086e5c31af7Sopenharmony_ci void main() 3087e5c31af7Sopenharmony_ci { 3088e5c31af7Sopenharmony_ci ${SETUP} 3089e5c31af7Sopenharmony_ci out0 = func(in0.y, in0.xzw, in0.wz, in0.yx, in0); 3090e5c31af7Sopenharmony_ci ${OUTPUT} 3091e5c31af7Sopenharmony_ci } 3092e5c31af7Sopenharmony_ci "" 3093e5c31af7Sopenharmony_ci end 3094e5c31af7Sopenharmony_ci 3095e5c31af7Sopenharmony_ci case argument_eval_order_1 3096e5c31af7Sopenharmony_ci version 300 es 3097e5c31af7Sopenharmony_ci values 3098e5c31af7Sopenharmony_ci { 3099e5c31af7Sopenharmony_ci input int in0 = [ 0 | 1 | 3 | 5 ]; 3100e5c31af7Sopenharmony_ci output int out0 = [ -1 | 5 | 11 | 17 ]; 3101e5c31af7Sopenharmony_ci } 3102e5c31af7Sopenharmony_ci 3103e5c31af7Sopenharmony_ci both "" 3104e5c31af7Sopenharmony_ci #version 300 es 3105e5c31af7Sopenharmony_ci precision highp float; 3106e5c31af7Sopenharmony_ci ${DECLARATIONS} 3107e5c31af7Sopenharmony_ci 3108e5c31af7Sopenharmony_ci int func (float a, int b, bool c, int d) 3109e5c31af7Sopenharmony_ci { 3110e5c31af7Sopenharmony_ci if (c) 3111e5c31af7Sopenharmony_ci return b + int(a) + d; 3112e5c31af7Sopenharmony_ci else 3113e5c31af7Sopenharmony_ci return -1; 3114e5c31af7Sopenharmony_ci } 3115e5c31af7Sopenharmony_ci 3116e5c31af7Sopenharmony_ci void main () 3117e5c31af7Sopenharmony_ci { 3118e5c31af7Sopenharmony_ci ${SETUP} 3119e5c31af7Sopenharmony_ci float v0 = float(in0); 3120e5c31af7Sopenharmony_ci int v1 = in0; 3121e5c31af7Sopenharmony_ci out0 = func((v0 += 1.0), v1++, (v0 > 1.5), v1); 3122e5c31af7Sopenharmony_ci ${OUTPUT} 3123e5c31af7Sopenharmony_ci } 3124e5c31af7Sopenharmony_ci "" 3125e5c31af7Sopenharmony_ci end 3126e5c31af7Sopenharmony_ci 3127e5c31af7Sopenharmony_ci case argument_eval_order_2 3128e5c31af7Sopenharmony_ci version 300 es 3129e5c31af7Sopenharmony_ci values 3130e5c31af7Sopenharmony_ci { 3131e5c31af7Sopenharmony_ci input int in0 = [ 0 | -1 | 3 | 5 ]; 3132e5c31af7Sopenharmony_ci output int out0 = [ 3 | -1 | 9 | 13 ]; 3133e5c31af7Sopenharmony_ci } 3134e5c31af7Sopenharmony_ci 3135e5c31af7Sopenharmony_ci both "" 3136e5c31af7Sopenharmony_ci #version 300 es 3137e5c31af7Sopenharmony_ci precision highp float; 3138e5c31af7Sopenharmony_ci ${DECLARATIONS} 3139e5c31af7Sopenharmony_ci 3140e5c31af7Sopenharmony_ci int g; 3141e5c31af7Sopenharmony_ci 3142e5c31af7Sopenharmony_ci int modG (int v) 3143e5c31af7Sopenharmony_ci { 3144e5c31af7Sopenharmony_ci g += v; 3145e5c31af7Sopenharmony_ci return v; 3146e5c31af7Sopenharmony_ci } 3147e5c31af7Sopenharmony_ci 3148e5c31af7Sopenharmony_ci int func (float a, int b, bool c, int d) 3149e5c31af7Sopenharmony_ci { 3150e5c31af7Sopenharmony_ci if (c) 3151e5c31af7Sopenharmony_ci return b + int(a) + d; 3152e5c31af7Sopenharmony_ci else 3153e5c31af7Sopenharmony_ci return -1; 3154e5c31af7Sopenharmony_ci } 3155e5c31af7Sopenharmony_ci 3156e5c31af7Sopenharmony_ci void main () 3157e5c31af7Sopenharmony_ci { 3158e5c31af7Sopenharmony_ci ${SETUP} 3159e5c31af7Sopenharmony_ci out0 = func(float(g = in0), modG(2), --g > 0, g); 3160e5c31af7Sopenharmony_ci ${OUTPUT} 3161e5c31af7Sopenharmony_ci } 3162e5c31af7Sopenharmony_ci "" 3163e5c31af7Sopenharmony_ci end 3164e5c31af7Sopenharmony_ci 3165e5c31af7Sopenharmony_ciend # misc 3166e5c31af7Sopenharmony_ci 3167e5c31af7Sopenharmony_cigroup invalid "Invalid Functions" 3168e5c31af7Sopenharmony_ci case break_in_body 3169e5c31af7Sopenharmony_ci version 300 es 3170e5c31af7Sopenharmony_ci expect compile_fail 3171e5c31af7Sopenharmony_ci both "" 3172e5c31af7Sopenharmony_ci #version 300 es 3173e5c31af7Sopenharmony_ci precision mediump float; 3174e5c31af7Sopenharmony_ci ${DECLARATIONS} 3175e5c31af7Sopenharmony_ci 3176e5c31af7Sopenharmony_ci void func () 3177e5c31af7Sopenharmony_ci { 3178e5c31af7Sopenharmony_ci break; 3179e5c31af7Sopenharmony_ci } 3180e5c31af7Sopenharmony_ci 3181e5c31af7Sopenharmony_ci void main () 3182e5c31af7Sopenharmony_ci { 3183e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(1.0); 3184e5c31af7Sopenharmony_ci } 3185e5c31af7Sopenharmony_ci "" 3186e5c31af7Sopenharmony_ci end 3187e5c31af7Sopenharmony_ci 3188e5c31af7Sopenharmony_ci case continue_in_body 3189e5c31af7Sopenharmony_ci version 300 es 3190e5c31af7Sopenharmony_ci expect compile_fail 3191e5c31af7Sopenharmony_ci both "" 3192e5c31af7Sopenharmony_ci #version 300 es 3193e5c31af7Sopenharmony_ci precision mediump float; 3194e5c31af7Sopenharmony_ci ${DECLARATIONS} 3195e5c31af7Sopenharmony_ci 3196e5c31af7Sopenharmony_ci void func () 3197e5c31af7Sopenharmony_ci { 3198e5c31af7Sopenharmony_ci continue; 3199e5c31af7Sopenharmony_ci } 3200e5c31af7Sopenharmony_ci 3201e5c31af7Sopenharmony_ci void main () 3202e5c31af7Sopenharmony_ci { 3203e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(1.0); 3204e5c31af7Sopenharmony_ci } 3205e5c31af7Sopenharmony_ci "" 3206e5c31af7Sopenharmony_ci end 3207e5c31af7Sopenharmony_ci 3208e5c31af7Sopenharmony_ci case return_value_from_void_function 3209e5c31af7Sopenharmony_ci version 300 es 3210e5c31af7Sopenharmony_ci expect compile_fail 3211e5c31af7Sopenharmony_ci both "" 3212e5c31af7Sopenharmony_ci #version 300 es 3213e5c31af7Sopenharmony_ci precision mediump float; 3214e5c31af7Sopenharmony_ci ${DECLARATIONS} 3215e5c31af7Sopenharmony_ci 3216e5c31af7Sopenharmony_ci void func () 3217e5c31af7Sopenharmony_ci { 3218e5c31af7Sopenharmony_ci return 1.0; 3219e5c31af7Sopenharmony_ci } 3220e5c31af7Sopenharmony_ci 3221e5c31af7Sopenharmony_ci void main () 3222e5c31af7Sopenharmony_ci { 3223e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(1.0); 3224e5c31af7Sopenharmony_ci } 3225e5c31af7Sopenharmony_ci "" 3226e5c31af7Sopenharmony_ci end 3227e5c31af7Sopenharmony_ci 3228e5c31af7Sopenharmony_ci case extra_arguments 3229e5c31af7Sopenharmony_ci version 300 es 3230e5c31af7Sopenharmony_ci expect compile_fail 3231e5c31af7Sopenharmony_ci both "" 3232e5c31af7Sopenharmony_ci #version 300 es 3233e5c31af7Sopenharmony_ci precision mediump float; 3234e5c31af7Sopenharmony_ci ${DECLARATIONS} 3235e5c31af7Sopenharmony_ci 3236e5c31af7Sopenharmony_ci void func (float f) 3237e5c31af7Sopenharmony_ci { 3238e5c31af7Sopenharmony_ci } 3239e5c31af7Sopenharmony_ci 3240e5c31af7Sopenharmony_ci void main () 3241e5c31af7Sopenharmony_ci { 3242e5c31af7Sopenharmony_ci func(1.0, 2.0); 3243e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(1.0); 3244e5c31af7Sopenharmony_ci } 3245e5c31af7Sopenharmony_ci "" 3246e5c31af7Sopenharmony_ci end 3247e5c31af7Sopenharmony_ci 3248e5c31af7Sopenharmony_ci case missing_arguments 3249e5c31af7Sopenharmony_ci version 300 es 3250e5c31af7Sopenharmony_ci expect compile_fail 3251e5c31af7Sopenharmony_ci both "" 3252e5c31af7Sopenharmony_ci #version 300 es 3253e5c31af7Sopenharmony_ci precision mediump float; 3254e5c31af7Sopenharmony_ci ${DECLARATIONS} 3255e5c31af7Sopenharmony_ci 3256e5c31af7Sopenharmony_ci void func (float f) 3257e5c31af7Sopenharmony_ci { 3258e5c31af7Sopenharmony_ci } 3259e5c31af7Sopenharmony_ci 3260e5c31af7Sopenharmony_ci void main () 3261e5c31af7Sopenharmony_ci { 3262e5c31af7Sopenharmony_ci func(); 3263e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(1.0); 3264e5c31af7Sopenharmony_ci } 3265e5c31af7Sopenharmony_ci "" 3266e5c31af7Sopenharmony_ci end 3267e5c31af7Sopenharmony_ci 3268e5c31af7Sopenharmony_ci case missing_argument_type 3269e5c31af7Sopenharmony_ci version 300 es 3270e5c31af7Sopenharmony_ci expect compile_fail 3271e5c31af7Sopenharmony_ci both "" 3272e5c31af7Sopenharmony_ci #version 300 es 3273e5c31af7Sopenharmony_ci precision mediump float; 3274e5c31af7Sopenharmony_ci ${DECLARATIONS} 3275e5c31af7Sopenharmony_ci 3276e5c31af7Sopenharmony_ci void func (in f) 3277e5c31af7Sopenharmony_ci { 3278e5c31af7Sopenharmony_ci } 3279e5c31af7Sopenharmony_ci 3280e5c31af7Sopenharmony_ci void main () 3281e5c31af7Sopenharmony_ci { 3282e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(1.0); 3283e5c31af7Sopenharmony_ci } 3284e5c31af7Sopenharmony_ci "" 3285e5c31af7Sopenharmony_ci end 3286e5c31af7Sopenharmony_ci 3287e5c31af7Sopenharmony_ci case argument_basetype_mismatch 3288e5c31af7Sopenharmony_ci version 300 es 3289e5c31af7Sopenharmony_ci expect compile_fail 3290e5c31af7Sopenharmony_ci both "" 3291e5c31af7Sopenharmony_ci #version 300 es 3292e5c31af7Sopenharmony_ci precision mediump float; 3293e5c31af7Sopenharmony_ci precision mediump int; 3294e5c31af7Sopenharmony_ci ${DECLARATIONS} 3295e5c31af7Sopenharmony_ci 3296e5c31af7Sopenharmony_ci void func (float f) 3297e5c31af7Sopenharmony_ci { 3298e5c31af7Sopenharmony_ci } 3299e5c31af7Sopenharmony_ci 3300e5c31af7Sopenharmony_ci void main () 3301e5c31af7Sopenharmony_ci { 3302e5c31af7Sopenharmony_ci func(2); 3303e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(1.0); 3304e5c31af7Sopenharmony_ci } 3305e5c31af7Sopenharmony_ci "" 3306e5c31af7Sopenharmony_ci end 3307e5c31af7Sopenharmony_ci 3308e5c31af7Sopenharmony_ci case argument_scalar_vector_mismatch 3309e5c31af7Sopenharmony_ci version 300 es 3310e5c31af7Sopenharmony_ci expect compile_fail 3311e5c31af7Sopenharmony_ci both "" 3312e5c31af7Sopenharmony_ci #version 300 es 3313e5c31af7Sopenharmony_ci precision mediump float; 3314e5c31af7Sopenharmony_ci ${DECLARATIONS} 3315e5c31af7Sopenharmony_ci 3316e5c31af7Sopenharmony_ci void func (vec2 f) 3317e5c31af7Sopenharmony_ci { 3318e5c31af7Sopenharmony_ci } 3319e5c31af7Sopenharmony_ci 3320e5c31af7Sopenharmony_ci void main () 3321e5c31af7Sopenharmony_ci { 3322e5c31af7Sopenharmony_ci func(2.0); 3323e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(1.0); 3324e5c31af7Sopenharmony_ci } 3325e5c31af7Sopenharmony_ci "" 3326e5c31af7Sopenharmony_ci end 3327e5c31af7Sopenharmony_ci 3328e5c31af7Sopenharmony_ci case argument_vector_size_mismatch 3329e5c31af7Sopenharmony_ci version 300 es 3330e5c31af7Sopenharmony_ci expect compile_fail 3331e5c31af7Sopenharmony_ci both "" 3332e5c31af7Sopenharmony_ci #version 300 es 3333e5c31af7Sopenharmony_ci precision mediump float; 3334e5c31af7Sopenharmony_ci ${DECLARATIONS} 3335e5c31af7Sopenharmony_ci 3336e5c31af7Sopenharmony_ci void func (vec3 f) 3337e5c31af7Sopenharmony_ci { 3338e5c31af7Sopenharmony_ci } 3339e5c31af7Sopenharmony_ci 3340e5c31af7Sopenharmony_ci void main () 3341e5c31af7Sopenharmony_ci { 3342e5c31af7Sopenharmony_ci func(vec2(2.0)); 3343e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(1.0); 3344e5c31af7Sopenharmony_ci } 3345e5c31af7Sopenharmony_ci "" 3346e5c31af7Sopenharmony_ci end 3347e5c31af7Sopenharmony_ci 3348e5c31af7Sopenharmony_ci case duplicate_function 3349e5c31af7Sopenharmony_ci version 300 es 3350e5c31af7Sopenharmony_ci expect compile_fail 3351e5c31af7Sopenharmony_ci both "" 3352e5c31af7Sopenharmony_ci #version 300 es 3353e5c31af7Sopenharmony_ci precision mediump float; 3354e5c31af7Sopenharmony_ci ${DECLARATIONS} 3355e5c31af7Sopenharmony_ci 3356e5c31af7Sopenharmony_ci void func (vec3 f); 3357e5c31af7Sopenharmony_ci 3358e5c31af7Sopenharmony_ci void func (vec3 f) 3359e5c31af7Sopenharmony_ci { 3360e5c31af7Sopenharmony_ci } 3361e5c31af7Sopenharmony_ci 3362e5c31af7Sopenharmony_ci void func (vec3 f) 3363e5c31af7Sopenharmony_ci { 3364e5c31af7Sopenharmony_ci } 3365e5c31af7Sopenharmony_ci 3366e5c31af7Sopenharmony_ci void main () 3367e5c31af7Sopenharmony_ci { 3368e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(1.0); 3369e5c31af7Sopenharmony_ci } 3370e5c31af7Sopenharmony_ci "" 3371e5c31af7Sopenharmony_ci end 3372e5c31af7Sopenharmony_ci 3373e5c31af7Sopenharmony_ci case prototype_mismatch_return_type 3374e5c31af7Sopenharmony_ci version 300 es 3375e5c31af7Sopenharmony_ci expect compile_fail 3376e5c31af7Sopenharmony_ci both "" 3377e5c31af7Sopenharmony_ci #version 300 es 3378e5c31af7Sopenharmony_ci precision mediump float; 3379e5c31af7Sopenharmony_ci ${DECLARATIONS} 3380e5c31af7Sopenharmony_ci 3381e5c31af7Sopenharmony_ci void func (vec3 f); 3382e5c31af7Sopenharmony_ci 3383e5c31af7Sopenharmony_ci void main () 3384e5c31af7Sopenharmony_ci { 3385e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(1.0); 3386e5c31af7Sopenharmony_ci } 3387e5c31af7Sopenharmony_ci 3388e5c31af7Sopenharmony_ci float func (vec3 f) 3389e5c31af7Sopenharmony_ci { 3390e5c31af7Sopenharmony_ci return f.x; 3391e5c31af7Sopenharmony_ci } 3392e5c31af7Sopenharmony_ci "" 3393e5c31af7Sopenharmony_ci end 3394e5c31af7Sopenharmony_ci 3395e5c31af7Sopenharmony_ci case prototype_unspecified_array_size 3396e5c31af7Sopenharmony_ci version 300 es 3397e5c31af7Sopenharmony_ci expect compile_fail 3398e5c31af7Sopenharmony_ci both "" 3399e5c31af7Sopenharmony_ci #version 300 es 3400e5c31af7Sopenharmony_ci precision mediump float; 3401e5c31af7Sopenharmony_ci ${DECLARATIONS} 3402e5c31af7Sopenharmony_ci 3403e5c31af7Sopenharmony_ci void func (vec3 f[]); 3404e5c31af7Sopenharmony_ci 3405e5c31af7Sopenharmony_ci void main () 3406e5c31af7Sopenharmony_ci { 3407e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(1.0); 3408e5c31af7Sopenharmony_ci } 3409e5c31af7Sopenharmony_ci "" 3410e5c31af7Sopenharmony_ci end 3411e5c31af7Sopenharmony_ci 3412e5c31af7Sopenharmony_ci case call_mismatch_argument_array_size 3413e5c31af7Sopenharmony_ci version 300 es 3414e5c31af7Sopenharmony_ci expect compile_fail 3415e5c31af7Sopenharmony_ci both "" 3416e5c31af7Sopenharmony_ci #version 300 es 3417e5c31af7Sopenharmony_ci precision mediump float; 3418e5c31af7Sopenharmony_ci ${DECLARATIONS} 3419e5c31af7Sopenharmony_ci 3420e5c31af7Sopenharmony_ci void func (vec3 f[3]); 3421e5c31af7Sopenharmony_ci void func (vec3 f[3]) 3422e5c31af7Sopenharmony_ci { 3423e5c31af7Sopenharmony_ci } 3424e5c31af7Sopenharmony_ci 3425e5c31af7Sopenharmony_ci void main () 3426e5c31af7Sopenharmony_ci { 3427e5c31af7Sopenharmony_ci vec3 array[4]; 3428e5c31af7Sopenharmony_ci func(array); 3429e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(1.0); 3430e5c31af7Sopenharmony_ci } 3431e5c31af7Sopenharmony_ci "" 3432e5c31af7Sopenharmony_ci end 3433e5c31af7Sopenharmony_ci 3434e5c31af7Sopenharmony_ci case prototype_mismatch_argument_const 3435e5c31af7Sopenharmony_ci version 300 es 3436e5c31af7Sopenharmony_ci expect compile_fail 3437e5c31af7Sopenharmony_ci both "" 3438e5c31af7Sopenharmony_ci #version 300 es 3439e5c31af7Sopenharmony_ci precision mediump float; 3440e5c31af7Sopenharmony_ci ${DECLARATIONS} 3441e5c31af7Sopenharmony_ci 3442e5c31af7Sopenharmony_ci void func (vec3 f); 3443e5c31af7Sopenharmony_ci void func (const vec3 f) 3444e5c31af7Sopenharmony_ci { 3445e5c31af7Sopenharmony_ci } 3446e5c31af7Sopenharmony_ci 3447e5c31af7Sopenharmony_ci void main () 3448e5c31af7Sopenharmony_ci { 3449e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(1.0); 3450e5c31af7Sopenharmony_ci } 3451e5c31af7Sopenharmony_ci "" 3452e5c31af7Sopenharmony_ci end 3453e5c31af7Sopenharmony_ci 3454e5c31af7Sopenharmony_ci case prototype_mismatch_argument_array_const 3455e5c31af7Sopenharmony_ci version 300 es 3456e5c31af7Sopenharmony_ci expect compile_fail 3457e5c31af7Sopenharmony_ci both "" 3458e5c31af7Sopenharmony_ci #version 300 es 3459e5c31af7Sopenharmony_ci precision mediump float; 3460e5c31af7Sopenharmony_ci ${DECLARATIONS} 3461e5c31af7Sopenharmony_ci 3462e5c31af7Sopenharmony_ci void func (vec3 f[3]); 3463e5c31af7Sopenharmony_ci void func (const vec3 f[3]) 3464e5c31af7Sopenharmony_ci { 3465e5c31af7Sopenharmony_ci } 3466e5c31af7Sopenharmony_ci 3467e5c31af7Sopenharmony_ci void main () 3468e5c31af7Sopenharmony_ci { 3469e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(1.0); 3470e5c31af7Sopenharmony_ci } 3471e5c31af7Sopenharmony_ci "" 3472e5c31af7Sopenharmony_ci end 3473e5c31af7Sopenharmony_ci 3474e5c31af7Sopenharmony_ci case prototype_mismatch_array_inout 3475e5c31af7Sopenharmony_ci version 300 es 3476e5c31af7Sopenharmony_ci expect compile_fail 3477e5c31af7Sopenharmony_ci both "" 3478e5c31af7Sopenharmony_ci #version 300 es 3479e5c31af7Sopenharmony_ci precision mediump float; 3480e5c31af7Sopenharmony_ci ${DECLARATIONS} 3481e5c31af7Sopenharmony_ci 3482e5c31af7Sopenharmony_ci void func (out vec3 f); 3483e5c31af7Sopenharmony_ci void func (inout vec3 f) 3484e5c31af7Sopenharmony_ci { 3485e5c31af7Sopenharmony_ci } 3486e5c31af7Sopenharmony_ci 3487e5c31af7Sopenharmony_ci void main () 3488e5c31af7Sopenharmony_ci { 3489e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(1.0); 3490e5c31af7Sopenharmony_ci } 3491e5c31af7Sopenharmony_ci "" 3492e5c31af7Sopenharmony_ci end 3493e5c31af7Sopenharmony_ci 3494e5c31af7Sopenharmony_ci case missing_return_type 3495e5c31af7Sopenharmony_ci version 300 es 3496e5c31af7Sopenharmony_ci expect compile_fail 3497e5c31af7Sopenharmony_ci both "" 3498e5c31af7Sopenharmony_ci #version 300 es 3499e5c31af7Sopenharmony_ci precision mediump float; 3500e5c31af7Sopenharmony_ci ${DECLARATIONS} 3501e5c31af7Sopenharmony_ci 3502e5c31af7Sopenharmony_ci func (float f); 3503e5c31af7Sopenharmony_ci func (inout vec3 f[3]) 3504e5c31af7Sopenharmony_ci { 3505e5c31af7Sopenharmony_ci } 3506e5c31af7Sopenharmony_ci 3507e5c31af7Sopenharmony_ci void main () 3508e5c31af7Sopenharmony_ci { 3509e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(1.0); 3510e5c31af7Sopenharmony_ci } 3511e5c31af7Sopenharmony_ci "" 3512e5c31af7Sopenharmony_ci end 3513e5c31af7Sopenharmony_ci 3514e5c31af7Sopenharmony_ci case call_before_definition 3515e5c31af7Sopenharmony_ci version 300 es 3516e5c31af7Sopenharmony_ci expect compile_fail 3517e5c31af7Sopenharmony_ci both "" 3518e5c31af7Sopenharmony_ci #version 300 es 3519e5c31af7Sopenharmony_ci precision mediump float; 3520e5c31af7Sopenharmony_ci ${DECLARATIONS} 3521e5c31af7Sopenharmony_ci 3522e5c31af7Sopenharmony_ci void main () 3523e5c31af7Sopenharmony_ci { 3524e5c31af7Sopenharmony_ci func(1.0); 3525e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(1.0); 3526e5c31af7Sopenharmony_ci } 3527e5c31af7Sopenharmony_ci 3528e5c31af7Sopenharmony_ci void func (float f) 3529e5c31af7Sopenharmony_ci { 3530e5c31af7Sopenharmony_ci } 3531e5c31af7Sopenharmony_ci 3532e5c31af7Sopenharmony_ci "" 3533e5c31af7Sopenharmony_ci end 3534e5c31af7Sopenharmony_ci 3535e5c31af7Sopenharmony_ci case argument_precision_overload 3536e5c31af7Sopenharmony_ci version 300 es 3537e5c31af7Sopenharmony_ci expect compile_fail 3538e5c31af7Sopenharmony_ci both "" 3539e5c31af7Sopenharmony_ci #version 300 es 3540e5c31af7Sopenharmony_ci precision mediump float; 3541e5c31af7Sopenharmony_ci ${DECLARATIONS} 3542e5c31af7Sopenharmony_ci 3543e5c31af7Sopenharmony_ci float func (lowp float f) 3544e5c31af7Sopenharmony_ci { 3545e5c31af7Sopenharmony_ci return f; 3546e5c31af7Sopenharmony_ci } 3547e5c31af7Sopenharmony_ci 3548e5c31af7Sopenharmony_ci float func (mediump float f) 3549e5c31af7Sopenharmony_ci { 3550e5c31af7Sopenharmony_ci return f; 3551e5c31af7Sopenharmony_ci } 3552e5c31af7Sopenharmony_ci 3553e5c31af7Sopenharmony_ci void main () 3554e5c31af7Sopenharmony_ci { 3555e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(1.0); 3556e5c31af7Sopenharmony_ci } 3557e5c31af7Sopenharmony_ci "" 3558e5c31af7Sopenharmony_ci end 3559e5c31af7Sopenharmony_ci 3560e5c31af7Sopenharmony_ci case argument_in_out_overload 3561e5c31af7Sopenharmony_ci version 300 es 3562e5c31af7Sopenharmony_ci expect compile_fail 3563e5c31af7Sopenharmony_ci both "" 3564e5c31af7Sopenharmony_ci #version 300 es 3565e5c31af7Sopenharmony_ci precision mediump float; 3566e5c31af7Sopenharmony_ci ${DECLARATIONS} 3567e5c31af7Sopenharmony_ci 3568e5c31af7Sopenharmony_ci void func (in float f) 3569e5c31af7Sopenharmony_ci { 3570e5c31af7Sopenharmony_ci } 3571e5c31af7Sopenharmony_ci 3572e5c31af7Sopenharmony_ci void func (out float f) 3573e5c31af7Sopenharmony_ci { 3574e5c31af7Sopenharmony_ci f = 1.0; 3575e5c31af7Sopenharmony_ci } 3576e5c31af7Sopenharmony_ci 3577e5c31af7Sopenharmony_ci void main () 3578e5c31af7Sopenharmony_ci { 3579e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(1.0); 3580e5c31af7Sopenharmony_ci } 3581e5c31af7Sopenharmony_ci "" 3582e5c31af7Sopenharmony_ci end 3583e5c31af7Sopenharmony_ci 3584e5c31af7Sopenharmony_ci case argument_in_inout_overload 3585e5c31af7Sopenharmony_ci version 300 es 3586e5c31af7Sopenharmony_ci expect compile_fail 3587e5c31af7Sopenharmony_ci both "" 3588e5c31af7Sopenharmony_ci #version 300 es 3589e5c31af7Sopenharmony_ci precision mediump float; 3590e5c31af7Sopenharmony_ci ${DECLARATIONS} 3591e5c31af7Sopenharmony_ci 3592e5c31af7Sopenharmony_ci void func (in float f) 3593e5c31af7Sopenharmony_ci { 3594e5c31af7Sopenharmony_ci } 3595e5c31af7Sopenharmony_ci 3596e5c31af7Sopenharmony_ci void func (inout float f) 3597e5c31af7Sopenharmony_ci { 3598e5c31af7Sopenharmony_ci f = -f; 3599e5c31af7Sopenharmony_ci } 3600e5c31af7Sopenharmony_ci 3601e5c31af7Sopenharmony_ci void main () 3602e5c31af7Sopenharmony_ci { 3603e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(1.0); 3604e5c31af7Sopenharmony_ci } 3605e5c31af7Sopenharmony_ci "" 3606e5c31af7Sopenharmony_ci end 3607e5c31af7Sopenharmony_ci 3608e5c31af7Sopenharmony_ci case argument_out_inout_overload 3609e5c31af7Sopenharmony_ci version 300 es 3610e5c31af7Sopenharmony_ci expect compile_fail 3611e5c31af7Sopenharmony_ci both "" 3612e5c31af7Sopenharmony_ci #version 300 es 3613e5c31af7Sopenharmony_ci precision mediump float; 3614e5c31af7Sopenharmony_ci ${DECLARATIONS} 3615e5c31af7Sopenharmony_ci 3616e5c31af7Sopenharmony_ci void func (out float f) 3617e5c31af7Sopenharmony_ci { 3618e5c31af7Sopenharmony_ci f = -1.0; 3619e5c31af7Sopenharmony_ci } 3620e5c31af7Sopenharmony_ci 3621e5c31af7Sopenharmony_ci void func (inout float f) 3622e5c31af7Sopenharmony_ci { 3623e5c31af7Sopenharmony_ci f = -f; 3624e5c31af7Sopenharmony_ci } 3625e5c31af7Sopenharmony_ci 3626e5c31af7Sopenharmony_ci void main () 3627e5c31af7Sopenharmony_ci { 3628e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(1.0); 3629e5c31af7Sopenharmony_ci } 3630e5c31af7Sopenharmony_ci "" 3631e5c31af7Sopenharmony_ci end 3632e5c31af7Sopenharmony_ci 3633e5c31af7Sopenharmony_ci case return_type_overload 3634e5c31af7Sopenharmony_ci version 300 es 3635e5c31af7Sopenharmony_ci expect compile_fail 3636e5c31af7Sopenharmony_ci both "" 3637e5c31af7Sopenharmony_ci #version 300 es 3638e5c31af7Sopenharmony_ci precision mediump float; 3639e5c31af7Sopenharmony_ci ${DECLARATIONS} 3640e5c31af7Sopenharmony_ci 3641e5c31af7Sopenharmony_ci float func (float f) 3642e5c31af7Sopenharmony_ci { 3643e5c31af7Sopenharmony_ci return f; 3644e5c31af7Sopenharmony_ci } 3645e5c31af7Sopenharmony_ci 3646e5c31af7Sopenharmony_ci int func (float f) 3647e5c31af7Sopenharmony_ci { 3648e5c31af7Sopenharmony_ci return int(f); 3649e5c31af7Sopenharmony_ci } 3650e5c31af7Sopenharmony_ci 3651e5c31af7Sopenharmony_ci void main () 3652e5c31af7Sopenharmony_ci { 3653e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(1.0); 3654e5c31af7Sopenharmony_ci } 3655e5c31af7Sopenharmony_ci "" 3656e5c31af7Sopenharmony_ci end 3657e5c31af7Sopenharmony_ci 3658e5c31af7Sopenharmony_ci case return_type_precision_overload 3659e5c31af7Sopenharmony_ci version 300 es 3660e5c31af7Sopenharmony_ci expect compile_fail 3661e5c31af7Sopenharmony_ci both "" 3662e5c31af7Sopenharmony_ci #version 300 es 3663e5c31af7Sopenharmony_ci precision mediump float; 3664e5c31af7Sopenharmony_ci ${DECLARATIONS} 3665e5c31af7Sopenharmony_ci 3666e5c31af7Sopenharmony_ci lowp float func (float f) 3667e5c31af7Sopenharmony_ci { 3668e5c31af7Sopenharmony_ci return f; 3669e5c31af7Sopenharmony_ci } 3670e5c31af7Sopenharmony_ci 3671e5c31af7Sopenharmony_ci mediump float func (float f) 3672e5c31af7Sopenharmony_ci { 3673e5c31af7Sopenharmony_ci return f; 3674e5c31af7Sopenharmony_ci } 3675e5c31af7Sopenharmony_ci 3676e5c31af7Sopenharmony_ci void main () 3677e5c31af7Sopenharmony_ci { 3678e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(1.0); 3679e5c31af7Sopenharmony_ci } 3680e5c31af7Sopenharmony_ci "" 3681e5c31af7Sopenharmony_ci end 3682e5c31af7Sopenharmony_ci 3683e5c31af7Sopenharmony_ci case return_type_const_overload 3684e5c31af7Sopenharmony_ci version 300 es 3685e5c31af7Sopenharmony_ci expect compile_fail 3686e5c31af7Sopenharmony_ci both "" 3687e5c31af7Sopenharmony_ci #version 300 es 3688e5c31af7Sopenharmony_ci precision mediump float; 3689e5c31af7Sopenharmony_ci ${DECLARATIONS} 3690e5c31af7Sopenharmony_ci 3691e5c31af7Sopenharmony_ci float func (float f) 3692e5c31af7Sopenharmony_ci { 3693e5c31af7Sopenharmony_ci return f; 3694e5c31af7Sopenharmony_ci } 3695e5c31af7Sopenharmony_ci 3696e5c31af7Sopenharmony_ci const float func (float f) 3697e5c31af7Sopenharmony_ci { 3698e5c31af7Sopenharmony_ci return f; 3699e5c31af7Sopenharmony_ci } 3700e5c31af7Sopenharmony_ci 3701e5c31af7Sopenharmony_ci void main () 3702e5c31af7Sopenharmony_ci { 3703e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(1.0); 3704e5c31af7Sopenharmony_ci } 3705e5c31af7Sopenharmony_ci "" 3706e5c31af7Sopenharmony_ci end 3707e5c31af7Sopenharmony_ci 3708e5c31af7Sopenharmony_ci case return_without_value 3709e5c31af7Sopenharmony_ci version 300 es 3710e5c31af7Sopenharmony_ci expect compile_fail 3711e5c31af7Sopenharmony_ci both "" 3712e5c31af7Sopenharmony_ci #version 300 es 3713e5c31af7Sopenharmony_ci precision mediump float; 3714e5c31af7Sopenharmony_ci ${DECLARATIONS} 3715e5c31af7Sopenharmony_ci 3716e5c31af7Sopenharmony_ci float func (float f) 3717e5c31af7Sopenharmony_ci { 3718e5c31af7Sopenharmony_ci return; 3719e5c31af7Sopenharmony_ci return 1.0; 3720e5c31af7Sopenharmony_ci } 3721e5c31af7Sopenharmony_ci 3722e5c31af7Sopenharmony_ci void main () 3723e5c31af7Sopenharmony_ci { 3724e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(1.0); 3725e5c31af7Sopenharmony_ci } 3726e5c31af7Sopenharmony_ci "" 3727e5c31af7Sopenharmony_ci end 3728e5c31af7Sopenharmony_ci 3729e5c31af7Sopenharmony_ci case local_function_prototype 3730e5c31af7Sopenharmony_ci version 300 es 3731e5c31af7Sopenharmony_ci expect compile_fail 3732e5c31af7Sopenharmony_ci both "" 3733e5c31af7Sopenharmony_ci #version 300 es 3734e5c31af7Sopenharmony_ci precision mediump float; 3735e5c31af7Sopenharmony_ci ${DECLARATIONS} 3736e5c31af7Sopenharmony_ci 3737e5c31af7Sopenharmony_ci void main () 3738e5c31af7Sopenharmony_ci { 3739e5c31af7Sopenharmony_ci float func (float f); 3740e5c31af7Sopenharmony_ci 3741e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(1.0); 3742e5c31af7Sopenharmony_ci } 3743e5c31af7Sopenharmony_ci "" 3744e5c31af7Sopenharmony_ci end 3745e5c31af7Sopenharmony_ci 3746e5c31af7Sopenharmony_ci case local_function_definition 3747e5c31af7Sopenharmony_ci version 300 es 3748e5c31af7Sopenharmony_ci expect compile_fail 3749e5c31af7Sopenharmony_ci both "" 3750e5c31af7Sopenharmony_ci #version 300 es 3751e5c31af7Sopenharmony_ci precision mediump float; 3752e5c31af7Sopenharmony_ci ${DECLARATIONS} 3753e5c31af7Sopenharmony_ci 3754e5c31af7Sopenharmony_ci void main () 3755e5c31af7Sopenharmony_ci { 3756e5c31af7Sopenharmony_ci float func (float f) 3757e5c31af7Sopenharmony_ci { 3758e5c31af7Sopenharmony_ci return 1.0; 3759e5c31af7Sopenharmony_ci } 3760e5c31af7Sopenharmony_ci 3761e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(1.0); 3762e5c31af7Sopenharmony_ci } 3763e5c31af7Sopenharmony_ci "" 3764e5c31af7Sopenharmony_ci end 3765e5c31af7Sopenharmony_ci 3766e5c31af7Sopenharmony_ci case name_type_conflict 3767e5c31af7Sopenharmony_ci version 300 es 3768e5c31af7Sopenharmony_ci expect compile_fail 3769e5c31af7Sopenharmony_ci both "" 3770e5c31af7Sopenharmony_ci #version 300 es 3771e5c31af7Sopenharmony_ci precision mediump float; 3772e5c31af7Sopenharmony_ci ${DECLARATIONS} 3773e5c31af7Sopenharmony_ci 3774e5c31af7Sopenharmony_ci struct foo { float a; } 3775e5c31af7Sopenharmony_ci 3776e5c31af7Sopenharmony_ci float foo (float f) 3777e5c31af7Sopenharmony_ci { 3778e5c31af7Sopenharmony_ci return 1.0; 3779e5c31af7Sopenharmony_ci } 3780e5c31af7Sopenharmony_ci 3781e5c31af7Sopenharmony_ci void main () 3782e5c31af7Sopenharmony_ci { 3783e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(1.0); 3784e5c31af7Sopenharmony_ci } 3785e5c31af7Sopenharmony_ci "" 3786e5c31af7Sopenharmony_ci end 3787e5c31af7Sopenharmony_ci 3788e5c31af7Sopenharmony_ci case const_overload 3789e5c31af7Sopenharmony_ci version 300 es 3790e5c31af7Sopenharmony_ci expect compile_fail 3791e5c31af7Sopenharmony_ci both "" 3792e5c31af7Sopenharmony_ci #version 300 es 3793e5c31af7Sopenharmony_ci precision mediump float; 3794e5c31af7Sopenharmony_ci ${DECLARATIONS} 3795e5c31af7Sopenharmony_ci 3796e5c31af7Sopenharmony_ci void func (vec3 f) 3797e5c31af7Sopenharmony_ci { 3798e5c31af7Sopenharmony_ci } 3799e5c31af7Sopenharmony_ci 3800e5c31af7Sopenharmony_ci void func (const vec3 f) 3801e5c31af7Sopenharmony_ci { 3802e5c31af7Sopenharmony_ci } 3803e5c31af7Sopenharmony_ci 3804e5c31af7Sopenharmony_ci void main () 3805e5c31af7Sopenharmony_ci { 3806e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(1.0); 3807e5c31af7Sopenharmony_ci } 3808e5c31af7Sopenharmony_ci "" 3809e5c31af7Sopenharmony_ci end 3810e5c31af7Sopenharmony_ci 3811e5c31af7Sopenharmony_ci case uniform_local 3812e5c31af7Sopenharmony_ci version 300 es 3813e5c31af7Sopenharmony_ci expect compile_fail 3814e5c31af7Sopenharmony_ci both "" 3815e5c31af7Sopenharmony_ci #version 300 es 3816e5c31af7Sopenharmony_ci precision mediump float; 3817e5c31af7Sopenharmony_ci ${DECLARATIONS} 3818e5c31af7Sopenharmony_ci 3819e5c31af7Sopenharmony_ci void func (vec3 f) 3820e5c31af7Sopenharmony_ci { 3821e5c31af7Sopenharmony_ci uniform float u; 3822e5c31af7Sopenharmony_ci } 3823e5c31af7Sopenharmony_ci 3824e5c31af7Sopenharmony_ci void main () 3825e5c31af7Sopenharmony_ci { 3826e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(1.0); 3827e5c31af7Sopenharmony_ci } 3828e5c31af7Sopenharmony_ci "" 3829e5c31af7Sopenharmony_ci end 3830e5c31af7Sopenharmony_ci 3831e5c31af7Sopenharmony_ci case in_local 3832e5c31af7Sopenharmony_ci version 300 es 3833e5c31af7Sopenharmony_ci expect compile_fail 3834e5c31af7Sopenharmony_ci both "" 3835e5c31af7Sopenharmony_ci #version 300 es 3836e5c31af7Sopenharmony_ci precision mediump float; 3837e5c31af7Sopenharmony_ci ${DECLARATIONS} 3838e5c31af7Sopenharmony_ci 3839e5c31af7Sopenharmony_ci void func (vec3 f) 3840e5c31af7Sopenharmony_ci { 3841e5c31af7Sopenharmony_ci in float v; 3842e5c31af7Sopenharmony_ci } 3843e5c31af7Sopenharmony_ci 3844e5c31af7Sopenharmony_ci void main () 3845e5c31af7Sopenharmony_ci { 3846e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(1.0); 3847e5c31af7Sopenharmony_ci } 3848e5c31af7Sopenharmony_ci "" 3849e5c31af7Sopenharmony_ci end 3850e5c31af7Sopenharmony_ci 3851e5c31af7Sopenharmony_ci case out_local 3852e5c31af7Sopenharmony_ci version 300 es 3853e5c31af7Sopenharmony_ci expect compile_fail 3854e5c31af7Sopenharmony_ci both "" 3855e5c31af7Sopenharmony_ci #version 300 es 3856e5c31af7Sopenharmony_ci precision mediump float; 3857e5c31af7Sopenharmony_ci ${DECLARATIONS} 3858e5c31af7Sopenharmony_ci 3859e5c31af7Sopenharmony_ci void func (vec3 f) 3860e5c31af7Sopenharmony_ci { 3861e5c31af7Sopenharmony_ci in float a; 3862e5c31af7Sopenharmony_ci } 3863e5c31af7Sopenharmony_ci 3864e5c31af7Sopenharmony_ci void main () 3865e5c31af7Sopenharmony_ci { 3866e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(1.0); 3867e5c31af7Sopenharmony_ci } 3868e5c31af7Sopenharmony_ci "" 3869e5c31af7Sopenharmony_ci end 3870e5c31af7Sopenharmony_ci 3871e5c31af7Sopenharmony_ci case inout_local 3872e5c31af7Sopenharmony_ci version 300 es 3873e5c31af7Sopenharmony_ci expect compile_fail 3874e5c31af7Sopenharmony_ci both "" 3875e5c31af7Sopenharmony_ci #version 300 es 3876e5c31af7Sopenharmony_ci precision mediump float; 3877e5c31af7Sopenharmony_ci ${DECLARATIONS} 3878e5c31af7Sopenharmony_ci 3879e5c31af7Sopenharmony_ci void func (vec3 f) 3880e5c31af7Sopenharmony_ci { 3881e5c31af7Sopenharmony_ci inout float a; 3882e5c31af7Sopenharmony_ci } 3883e5c31af7Sopenharmony_ci 3884e5c31af7Sopenharmony_ci void main () 3885e5c31af7Sopenharmony_ci { 3886e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(1.0); 3887e5c31af7Sopenharmony_ci } 3888e5c31af7Sopenharmony_ci "" 3889e5c31af7Sopenharmony_ci end 3890e5c31af7Sopenharmony_ci 3891e5c31af7Sopenharmony_ci case uniform_argument 3892e5c31af7Sopenharmony_ci version 300 es 3893e5c31af7Sopenharmony_ci expect compile_fail 3894e5c31af7Sopenharmony_ci both "" 3895e5c31af7Sopenharmony_ci #version 300 es 3896e5c31af7Sopenharmony_ci precision mediump float; 3897e5c31af7Sopenharmony_ci ${DECLARATIONS} 3898e5c31af7Sopenharmony_ci 3899e5c31af7Sopenharmony_ci void func (uniform vec3 f) 3900e5c31af7Sopenharmony_ci { 3901e5c31af7Sopenharmony_ci } 3902e5c31af7Sopenharmony_ci 3903e5c31af7Sopenharmony_ci void main () 3904e5c31af7Sopenharmony_ci { 3905e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(1.0); 3906e5c31af7Sopenharmony_ci } 3907e5c31af7Sopenharmony_ci "" 3908e5c31af7Sopenharmony_ci end 3909e5c31af7Sopenharmony_ci 3910e5c31af7Sopenharmony_ci case uniform_return_type 3911e5c31af7Sopenharmony_ci version 300 es 3912e5c31af7Sopenharmony_ci expect compile_fail 3913e5c31af7Sopenharmony_ci both "" 3914e5c31af7Sopenharmony_ci #version 300 es 3915e5c31af7Sopenharmony_ci precision mediump float; 3916e5c31af7Sopenharmony_ci ${DECLARATIONS} 3917e5c31af7Sopenharmony_ci 3918e5c31af7Sopenharmony_ci uniform float func (vec3 f) 3919e5c31af7Sopenharmony_ci { 3920e5c31af7Sopenharmony_ci return f.x; 3921e5c31af7Sopenharmony_ci } 3922e5c31af7Sopenharmony_ci 3923e5c31af7Sopenharmony_ci void main () 3924e5c31af7Sopenharmony_ci { 3925e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(1.0); 3926e5c31af7Sopenharmony_ci } 3927e5c31af7Sopenharmony_ci "" 3928e5c31af7Sopenharmony_ci end 3929e5c31af7Sopenharmony_ci 3930e5c31af7Sopenharmony_ci case in_return_type 3931e5c31af7Sopenharmony_ci version 300 es 3932e5c31af7Sopenharmony_ci expect compile_fail 3933e5c31af7Sopenharmony_ci both "" 3934e5c31af7Sopenharmony_ci #version 300 es 3935e5c31af7Sopenharmony_ci precision mediump float; 3936e5c31af7Sopenharmony_ci ${DECLARATIONS} 3937e5c31af7Sopenharmony_ci 3938e5c31af7Sopenharmony_ci in float func (vec3 f) 3939e5c31af7Sopenharmony_ci { 3940e5c31af7Sopenharmony_ci return f.x; 3941e5c31af7Sopenharmony_ci } 3942e5c31af7Sopenharmony_ci 3943e5c31af7Sopenharmony_ci void main () 3944e5c31af7Sopenharmony_ci { 3945e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(func(vec3(1.0))); 3946e5c31af7Sopenharmony_ci } 3947e5c31af7Sopenharmony_ci "" 3948e5c31af7Sopenharmony_ci end 3949e5c31af7Sopenharmony_ci 3950e5c31af7Sopenharmony_ci case out_return_type 3951e5c31af7Sopenharmony_ci version 300 es 3952e5c31af7Sopenharmony_ci expect compile_fail 3953e5c31af7Sopenharmony_ci both "" 3954e5c31af7Sopenharmony_ci #version 300 es 3955e5c31af7Sopenharmony_ci precision mediump float; 3956e5c31af7Sopenharmony_ci ${DECLARATIONS} 3957e5c31af7Sopenharmony_ci 3958e5c31af7Sopenharmony_ci out float func (vec3 f) 3959e5c31af7Sopenharmony_ci { 3960e5c31af7Sopenharmony_ci return f.x; 3961e5c31af7Sopenharmony_ci } 3962e5c31af7Sopenharmony_ci 3963e5c31af7Sopenharmony_ci void main () 3964e5c31af7Sopenharmony_ci { 3965e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(func(vec3(1.0))); 3966e5c31af7Sopenharmony_ci } 3967e5c31af7Sopenharmony_ci "" 3968e5c31af7Sopenharmony_ci end 3969e5c31af7Sopenharmony_ci 3970e5c31af7Sopenharmony_ci case inout_return_type 3971e5c31af7Sopenharmony_ci version 300 es 3972e5c31af7Sopenharmony_ci expect compile_fail 3973e5c31af7Sopenharmony_ci both "" 3974e5c31af7Sopenharmony_ci #version 300 es 3975e5c31af7Sopenharmony_ci precision mediump float; 3976e5c31af7Sopenharmony_ci ${DECLARATIONS} 3977e5c31af7Sopenharmony_ci 3978e5c31af7Sopenharmony_ci inout float func (vec3 f) 3979e5c31af7Sopenharmony_ci { 3980e5c31af7Sopenharmony_ci return f.x; 3981e5c31af7Sopenharmony_ci } 3982e5c31af7Sopenharmony_ci 3983e5c31af7Sopenharmony_ci void main () 3984e5c31af7Sopenharmony_ci { 3985e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(func(vec3(1.0))); 3986e5c31af7Sopenharmony_ci } 3987e5c31af7Sopenharmony_ci "" 3988e5c31af7Sopenharmony_ci end 3989e5c31af7Sopenharmony_ci 3990e5c31af7Sopenharmony_ci case main_invalid_return_type 3991e5c31af7Sopenharmony_ci version 300 es 3992e5c31af7Sopenharmony_ci expect compile_fail 3993e5c31af7Sopenharmony_ci both "" 3994e5c31af7Sopenharmony_ci #version 300 es 3995e5c31af7Sopenharmony_ci precision mediump float; 3996e5c31af7Sopenharmony_ci ${DECLARATIONS} 3997e5c31af7Sopenharmony_ci 3998e5c31af7Sopenharmony_ci float main () 3999e5c31af7Sopenharmony_ci { 4000e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(1.0); 4001e5c31af7Sopenharmony_ci } 4002e5c31af7Sopenharmony_ci "" 4003e5c31af7Sopenharmony_ci end 4004e5c31af7Sopenharmony_ci 4005e5c31af7Sopenharmony_ci case main_has_arguments 4006e5c31af7Sopenharmony_ci version 300 es 4007e5c31af7Sopenharmony_ci expect compile_fail 4008e5c31af7Sopenharmony_ci both "" 4009e5c31af7Sopenharmony_ci #version 300 es 4010e5c31af7Sopenharmony_ci precision mediump float; 4011e5c31af7Sopenharmony_ci ${DECLARATIONS} 4012e5c31af7Sopenharmony_ci 4013e5c31af7Sopenharmony_ci void main (float f) 4014e5c31af7Sopenharmony_ci { 4015e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(1.0); 4016e5c31af7Sopenharmony_ci } 4017e5c31af7Sopenharmony_ci "" 4018e5c31af7Sopenharmony_ci end 4019e5c31af7Sopenharmony_ci 4020e5c31af7Sopenharmony_ci case main_missing_return_type 4021e5c31af7Sopenharmony_ci version 300 es 4022e5c31af7Sopenharmony_ci expect compile_fail 4023e5c31af7Sopenharmony_ci both "" 4024e5c31af7Sopenharmony_ci #version 300 es 4025e5c31af7Sopenharmony_ci precision mediump float; 4026e5c31af7Sopenharmony_ci ${DECLARATIONS} 4027e5c31af7Sopenharmony_ci 4028e5c31af7Sopenharmony_ci main () 4029e5c31af7Sopenharmony_ci { 4030e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(1.0); 4031e5c31af7Sopenharmony_ci } 4032e5c31af7Sopenharmony_ci "" 4033e5c31af7Sopenharmony_ci end 4034e5c31af7Sopenharmony_ci 4035e5c31af7Sopenharmony_ci case write_const_arg 4036e5c31af7Sopenharmony_ci version 300 es 4037e5c31af7Sopenharmony_ci expect compile_fail 4038e5c31af7Sopenharmony_ci both "" 4039e5c31af7Sopenharmony_ci #version 300 es 4040e5c31af7Sopenharmony_ci precision mediump float; 4041e5c31af7Sopenharmony_ci ${DECLARATIONS} 4042e5c31af7Sopenharmony_ci 4043e5c31af7Sopenharmony_ci float func (const float f) 4044e5c31af7Sopenharmony_ci { 4045e5c31af7Sopenharmony_ci f = 1.0; 4046e5c31af7Sopenharmony_ci } 4047e5c31af7Sopenharmony_ci 4048e5c31af7Sopenharmony_ci void main () 4049e5c31af7Sopenharmony_ci { 4050e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(1.0); 4051e5c31af7Sopenharmony_ci } 4052e5c31af7Sopenharmony_ci "" 4053e5c31af7Sopenharmony_ci end 4054e5c31af7Sopenharmony_ci 4055e5c31af7Sopenharmony_ci case write_const_array_arg 4056e5c31af7Sopenharmony_ci version 300 es 4057e5c31af7Sopenharmony_ci expect compile_fail 4058e5c31af7Sopenharmony_ci both "" 4059e5c31af7Sopenharmony_ci #version 300 es 4060e5c31af7Sopenharmony_ci precision mediump float; 4061e5c31af7Sopenharmony_ci ${DECLARATIONS} 4062e5c31af7Sopenharmony_ci 4063e5c31af7Sopenharmony_ci float func (const float f[3]) 4064e5c31af7Sopenharmony_ci { 4065e5c31af7Sopenharmony_ci f[0] = 1.0; 4066e5c31af7Sopenharmony_ci } 4067e5c31af7Sopenharmony_ci 4068e5c31af7Sopenharmony_ci void main () 4069e5c31af7Sopenharmony_ci { 4070e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(1.0); 4071e5c31af7Sopenharmony_ci } 4072e5c31af7Sopenharmony_ci "" 4073e5c31af7Sopenharmony_ci end 4074e5c31af7Sopenharmony_ci 4075e5c31af7Sopenharmony_ci case use_const_arg_in_const_expr 4076e5c31af7Sopenharmony_ci version 300 es 4077e5c31af7Sopenharmony_ci expect compile_fail 4078e5c31af7Sopenharmony_ci both "" 4079e5c31af7Sopenharmony_ci #version 300 es 4080e5c31af7Sopenharmony_ci precision mediump float; 4081e5c31af7Sopenharmony_ci ${DECLARATIONS} 4082e5c31af7Sopenharmony_ci 4083e5c31af7Sopenharmony_ci float func (const int i) 4084e5c31af7Sopenharmony_ci { 4085e5c31af7Sopenharmony_ci const int z = i+1; 4086e5c31af7Sopenharmony_ci return float(z); 4087e5c31af7Sopenharmony_ci } 4088e5c31af7Sopenharmony_ci 4089e5c31af7Sopenharmony_ci void main () 4090e5c31af7Sopenharmony_ci { 4091e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(func(1)); 4092e5c31af7Sopenharmony_ci } 4093e5c31af7Sopenharmony_ci "" 4094e5c31af7Sopenharmony_ci end 4095e5c31af7Sopenharmony_ci 4096e5c31af7Sopenharmony_ci case use_const_arg_as_array_size 4097e5c31af7Sopenharmony_ci version 300 es 4098e5c31af7Sopenharmony_ci expect compile_fail 4099e5c31af7Sopenharmony_ci both "" 4100e5c31af7Sopenharmony_ci #version 300 es 4101e5c31af7Sopenharmony_ci precision mediump float; 4102e5c31af7Sopenharmony_ci ${DECLARATIONS} 4103e5c31af7Sopenharmony_ci 4104e5c31af7Sopenharmony_ci float func (const int i) 4105e5c31af7Sopenharmony_ci { 4106e5c31af7Sopenharmony_ci float f[i]; 4107e5c31af7Sopenharmony_ci f[0] = 1.0; 4108e5c31af7Sopenharmony_ci return f[0]; 4109e5c31af7Sopenharmony_ci } 4110e5c31af7Sopenharmony_ci 4111e5c31af7Sopenharmony_ci void main () 4112e5c31af7Sopenharmony_ci { 4113e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(func(1)); 4114e5c31af7Sopenharmony_ci } 4115e5c31af7Sopenharmony_ci "" 4116e5c31af7Sopenharmony_ci end 4117e5c31af7Sopenharmony_ci 4118e5c31af7Sopenharmony_ci case overload_builtin_function 4119e5c31af7Sopenharmony_ci version 300 es 4120e5c31af7Sopenharmony_ci expect compile_fail 4121e5c31af7Sopenharmony_ci both "" 4122e5c31af7Sopenharmony_ci #version 300 es 4123e5c31af7Sopenharmony_ci precision mediump float; 4124e5c31af7Sopenharmony_ci ${DECLARATIONS} 4125e5c31af7Sopenharmony_ci 4126e5c31af7Sopenharmony_ci int sin (int x) 4127e5c31af7Sopenharmony_ci { 4128e5c31af7Sopenharmony_ci return int(sin(float(x))); 4129e5c31af7Sopenharmony_ci } 4130e5c31af7Sopenharmony_ci 4131e5c31af7Sopenharmony_ci void main () 4132e5c31af7Sopenharmony_ci { 4133e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(sin(1)); 4134e5c31af7Sopenharmony_ci } 4135e5c31af7Sopenharmony_ci "" 4136e5c31af7Sopenharmony_ci end 4137e5c31af7Sopenharmony_ci 4138e5c31af7Sopenharmony_ci case redefine_builtin_function 4139e5c31af7Sopenharmony_ci version 300 es 4140e5c31af7Sopenharmony_ci expect compile_fail 4141e5c31af7Sopenharmony_ci both "" 4142e5c31af7Sopenharmony_ci #version 300 es 4143e5c31af7Sopenharmony_ci precision mediump float; 4144e5c31af7Sopenharmony_ci ${DECLARATIONS} 4145e5c31af7Sopenharmony_ci 4146e5c31af7Sopenharmony_ci float sin (float x) 4147e5c31af7Sopenharmony_ci { 4148e5c31af7Sopenharmony_ci return 0.0; 4149e5c31af7Sopenharmony_ci } 4150e5c31af7Sopenharmony_ci 4151e5c31af7Sopenharmony_ci void main () 4152e5c31af7Sopenharmony_ci { 4153e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(sin(1.0)); 4154e5c31af7Sopenharmony_ci } 4155e5c31af7Sopenharmony_ci "" 4156e5c31af7Sopenharmony_ci end 4157e5c31af7Sopenharmony_ci 4158e5c31af7Sopenharmony_ci case basic_recursion 4159e5c31af7Sopenharmony_ci version 300 es 4160e5c31af7Sopenharmony_ci expect compile_fail 4161e5c31af7Sopenharmony_ci both "" 4162e5c31af7Sopenharmony_ci #version 300 es 4163e5c31af7Sopenharmony_ci precision mediump float; 4164e5c31af7Sopenharmony_ci ${DECLARATIONS} 4165e5c31af7Sopenharmony_ci 4166e5c31af7Sopenharmony_ci float fib (float x) 4167e5c31af7Sopenharmony_ci { 4168e5c31af7Sopenharmony_ci if (x <= 1.0) 4169e5c31af7Sopenharmony_ci return x; 4170e5c31af7Sopenharmony_ci else 4171e5c31af7Sopenharmony_ci return fib(x-2.0) + fib(x-1.0); 4172e5c31af7Sopenharmony_ci } 4173e5c31af7Sopenharmony_ci 4174e5c31af7Sopenharmony_ci void main () 4175e5c31af7Sopenharmony_ci { 4176e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(fib(5.0)); 4177e5c31af7Sopenharmony_ci } 4178e5c31af7Sopenharmony_ci "" 4179e5c31af7Sopenharmony_ci end 4180e5c31af7Sopenharmony_ci 4181e5c31af7Sopenharmony_ci case simple_tail_recursion 4182e5c31af7Sopenharmony_ci version 300 es 4183e5c31af7Sopenharmony_ci expect compile_fail 4184e5c31af7Sopenharmony_ci both "" 4185e5c31af7Sopenharmony_ci #version 300 es 4186e5c31af7Sopenharmony_ci precision mediump float; 4187e5c31af7Sopenharmony_ci ${DECLARATIONS} 4188e5c31af7Sopenharmony_ci 4189e5c31af7Sopenharmony_ci float rec (float x) 4190e5c31af7Sopenharmony_ci { 4191e5c31af7Sopenharmony_ci if (x <= 0.0) 4192e5c31af7Sopenharmony_ci return 0.0; 4193e5c31af7Sopenharmony_ci else 4194e5c31af7Sopenharmony_ci return rec(x-1.0); 4195e5c31af7Sopenharmony_ci } 4196e5c31af7Sopenharmony_ci 4197e5c31af7Sopenharmony_ci void main () 4198e5c31af7Sopenharmony_ci { 4199e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(rec(5.0)); 4200e5c31af7Sopenharmony_ci } 4201e5c31af7Sopenharmony_ci "" 4202e5c31af7Sopenharmony_ci end 4203e5c31af7Sopenharmony_ci 4204e5c31af7Sopenharmony_ci case dynamic_conditional_recursion 4205e5c31af7Sopenharmony_ci version 300 es 4206e5c31af7Sopenharmony_ci expect compile_fail 4207e5c31af7Sopenharmony_ci both "" 4208e5c31af7Sopenharmony_ci #version 300 es 4209e5c31af7Sopenharmony_ci precision mediump float; 4210e5c31af7Sopenharmony_ci ${DECLARATIONS} 4211e5c31af7Sopenharmony_ci uniform float ua; 4212e5c31af7Sopenharmony_ci uniform float ub; 4213e5c31af7Sopenharmony_ci 4214e5c31af7Sopenharmony_ci float funcA (float x); 4215e5c31af7Sopenharmony_ci float funcB (float x); 4216e5c31af7Sopenharmony_ci 4217e5c31af7Sopenharmony_ci float funcA (float x) 4218e5c31af7Sopenharmony_ci { 4219e5c31af7Sopenharmony_ci if (ub+x > 0.0) 4220e5c31af7Sopenharmony_ci funcB(x*2.0); 4221e5c31af7Sopenharmony_ci else 4222e5c31af7Sopenharmony_ci return ub; 4223e5c31af7Sopenharmony_ci } 4224e5c31af7Sopenharmony_ci 4225e5c31af7Sopenharmony_ci float funcB (float x) 4226e5c31af7Sopenharmony_ci { 4227e5c31af7Sopenharmony_ci return sqrt(funcA(x)); 4228e5c31af7Sopenharmony_ci } 4229e5c31af7Sopenharmony_ci 4230e5c31af7Sopenharmony_ci void main () 4231e5c31af7Sopenharmony_ci { 4232e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(funcB(ua)); 4233e5c31af7Sopenharmony_ci } 4234e5c31af7Sopenharmony_ci "" 4235e5c31af7Sopenharmony_ci end 4236e5c31af7Sopenharmony_ci 4237e5c31af7Sopenharmony_ci case dynamic_loop_recursion 4238e5c31af7Sopenharmony_ci version 300 es 4239e5c31af7Sopenharmony_ci expect compile_fail 4240e5c31af7Sopenharmony_ci both "" 4241e5c31af7Sopenharmony_ci #version 300 es 4242e5c31af7Sopenharmony_ci precision mediump float; 4243e5c31af7Sopenharmony_ci ${DECLARATIONS} 4244e5c31af7Sopenharmony_ci uniform float ua; 4245e5c31af7Sopenharmony_ci uniform float ub; 4246e5c31af7Sopenharmony_ci 4247e5c31af7Sopenharmony_ci float funcA (float x); 4248e5c31af7Sopenharmony_ci float funcB (float x); 4249e5c31af7Sopenharmony_ci 4250e5c31af7Sopenharmony_ci float funcA (float x) 4251e5c31af7Sopenharmony_ci { 4252e5c31af7Sopenharmony_ci for (float z = 0.0; z < ub+x; z++) 4253e5c31af7Sopenharmony_ci { 4254e5c31af7Sopenharmony_ci if (z > 2.0) 4255e5c31af7Sopenharmony_ci funcB(z*2.0); 4256e5c31af7Sopenharmony_ci else 4257e5c31af7Sopenharmony_ci return z; 4258e5c31af7Sopenharmony_ci } 4259e5c31af7Sopenharmony_ci } 4260e5c31af7Sopenharmony_ci 4261e5c31af7Sopenharmony_ci float funcB (float x) 4262e5c31af7Sopenharmony_ci { 4263e5c31af7Sopenharmony_ci return sqrt(funcA(x)); 4264e5c31af7Sopenharmony_ci } 4265e5c31af7Sopenharmony_ci 4266e5c31af7Sopenharmony_ci void main () 4267e5c31af7Sopenharmony_ci { 4268e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(funcB(ua)); 4269e5c31af7Sopenharmony_ci } 4270e5c31af7Sopenharmony_ci "" 4271e5c31af7Sopenharmony_ci end 4272e5c31af7Sopenharmony_ci 4273e5c31af7Sopenharmony_ci case dynamic_switch_recursion 4274e5c31af7Sopenharmony_ci version 300 es 4275e5c31af7Sopenharmony_ci expect compile_fail 4276e5c31af7Sopenharmony_ci both "" 4277e5c31af7Sopenharmony_ci #version 300 es 4278e5c31af7Sopenharmony_ci precision mediump float; 4279e5c31af7Sopenharmony_ci ${DECLARATIONS} 4280e5c31af7Sopenharmony_ci uniform float ua; 4281e5c31af7Sopenharmony_ci uniform mediump int ub; 4282e5c31af7Sopenharmony_ci 4283e5c31af7Sopenharmony_ci float funcA (float x); 4284e5c31af7Sopenharmony_ci float funcB (float x); 4285e5c31af7Sopenharmony_ci 4286e5c31af7Sopenharmony_ci float funcA (float x) 4287e5c31af7Sopenharmony_ci { 4288e5c31af7Sopenharmony_ci switch (ub + int(x)) 4289e5c31af7Sopenharmony_ci { 4290e5c31af7Sopenharmony_ci case 0: return ua-1.0; 4291e5c31af7Sopenharmony_ci case 1: return ua; 4292e5c31af7Sopenharmony_ci case 2: return funcB(x*2.0); 4293e5c31af7Sopenharmony_ci default: return 0.0; 4294e5c31af7Sopenharmony_ci } 4295e5c31af7Sopenharmony_ci } 4296e5c31af7Sopenharmony_ci 4297e5c31af7Sopenharmony_ci float funcB (float x) 4298e5c31af7Sopenharmony_ci { 4299e5c31af7Sopenharmony_ci return sqrt(funcA(x)); 4300e5c31af7Sopenharmony_ci } 4301e5c31af7Sopenharmony_ci 4302e5c31af7Sopenharmony_ci void main () 4303e5c31af7Sopenharmony_ci { 4304e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(funcB(ua)); 4305e5c31af7Sopenharmony_ci } 4306e5c31af7Sopenharmony_ci "" 4307e5c31af7Sopenharmony_ci end 4308e5c31af7Sopenharmony_ci 4309e5c31af7Sopenharmony_ci case modify_const_arg 4310e5c31af7Sopenharmony_ci version 300 es 4311e5c31af7Sopenharmony_ci expect compile_fail 4312e5c31af7Sopenharmony_ci both "" 4313e5c31af7Sopenharmony_ci #version 300 es 4314e5c31af7Sopenharmony_ci precision mediump float; 4315e5c31af7Sopenharmony_ci precision mediump int; 4316e5c31af7Sopenharmony_ci ${DECLARATIONS} 4317e5c31af7Sopenharmony_ci 4318e5c31af7Sopenharmony_ci int func (const int a) 4319e5c31af7Sopenharmony_ci { 4320e5c31af7Sopenharmony_ci a = -a; 4321e5c31af7Sopenharmony_ci return 2 * a; 4322e5c31af7Sopenharmony_ci } 4323e5c31af7Sopenharmony_ci 4324e5c31af7Sopenharmony_ci void main() 4325e5c31af7Sopenharmony_ci { 4326e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(func(3)); 4327e5c31af7Sopenharmony_ci } 4328e5c31af7Sopenharmony_ci "" 4329e5c31af7Sopenharmony_ci end 4330e5c31af7Sopenharmony_ci 4331e5c31af7Sopenharmony_ci case init_const_local_from_const_arg 4332e5c31af7Sopenharmony_ci version 300 es 4333e5c31af7Sopenharmony_ci expect compile_fail 4334e5c31af7Sopenharmony_ci both "" 4335e5c31af7Sopenharmony_ci #version 300 es 4336e5c31af7Sopenharmony_ci precision mediump float; 4337e5c31af7Sopenharmony_ci precision mediump int; 4338e5c31af7Sopenharmony_ci ${DECLARATIONS} 4339e5c31af7Sopenharmony_ci 4340e5c31af7Sopenharmony_ci int func (const int a) 4341e5c31af7Sopenharmony_ci { 4342e5c31af7Sopenharmony_ci const int b = -a; 4343e5c31af7Sopenharmony_ci return 2 * b; 4344e5c31af7Sopenharmony_ci } 4345e5c31af7Sopenharmony_ci 4346e5c31af7Sopenharmony_ci void main() 4347e5c31af7Sopenharmony_ci { 4348e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(func(3)); 4349e5c31af7Sopenharmony_ci } 4350e5c31af7Sopenharmony_ci "" 4351e5c31af7Sopenharmony_ci end 4352e5c31af7Sopenharmony_ci 4353e5c31af7Sopenharmony_ci case array_size_from_const_arg 4354e5c31af7Sopenharmony_ci version 300 es 4355e5c31af7Sopenharmony_ci expect compile_fail 4356e5c31af7Sopenharmony_ci both "" 4357e5c31af7Sopenharmony_ci #version 300 es 4358e5c31af7Sopenharmony_ci precision mediump float; 4359e5c31af7Sopenharmony_ci precision mediump int; 4360e5c31af7Sopenharmony_ci ${DECLARATIONS} 4361e5c31af7Sopenharmony_ci 4362e5c31af7Sopenharmony_ci int func (const int a) 4363e5c31af7Sopenharmony_ci { 4364e5c31af7Sopenharmony_ci int arr[a]; 4365e5c31af7Sopenharmony_ci arr[1] = 3; 4366e5c31af7Sopenharmony_ci return arr[1]; 4367e5c31af7Sopenharmony_ci } 4368e5c31af7Sopenharmony_ci 4369e5c31af7Sopenharmony_ci void main() 4370e5c31af7Sopenharmony_ci { 4371e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(func(3)); 4372e5c31af7Sopenharmony_ci } 4373e5c31af7Sopenharmony_ci "" 4374e5c31af7Sopenharmony_ci end 4375e5c31af7Sopenharmony_ci 4376e5c31af7Sopenharmony_ciend # invalid 4377