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 values 14e5c31af7Sopenharmony_ci { 15e5c31af7Sopenharmony_ci input float in0 = [ 0.0 | 1.0 | -2.0 | 2.5 ]; 16e5c31af7Sopenharmony_ci output float out0 = [ 0.0 | -1.0 | 2.0 | -2.5 ]; 17e5c31af7Sopenharmony_ci } 18e5c31af7Sopenharmony_ci 19e5c31af7Sopenharmony_ci both "" 20e5c31af7Sopenharmony_ci precision mediump float; 21e5c31af7Sopenharmony_ci ${DECLARATIONS} 22e5c31af7Sopenharmony_ci 23e5c31af7Sopenharmony_ci float func (float a) 24e5c31af7Sopenharmony_ci { 25e5c31af7Sopenharmony_ci return -a; 26e5c31af7Sopenharmony_ci } 27e5c31af7Sopenharmony_ci 28e5c31af7Sopenharmony_ci void main() 29e5c31af7Sopenharmony_ci { 30e5c31af7Sopenharmony_ci out0 = func(in0); 31e5c31af7Sopenharmony_ci ${OUTPUT} 32e5c31af7Sopenharmony_ci } 33e5c31af7Sopenharmony_ci "" 34e5c31af7Sopenharmony_ci end 35e5c31af7Sopenharmony_ci 36e5c31af7Sopenharmony_ci case float_vec2 37e5c31af7Sopenharmony_ci values 38e5c31af7Sopenharmony_ci { 39e5c31af7Sopenharmony_ci input vec2 in0 = [ vec2(0.0, 1.0) | vec2(2.0, 2.5) ]; 40e5c31af7Sopenharmony_ci output float out0 = [ -1.0 | -4.5 ]; 41e5c31af7Sopenharmony_ci } 42e5c31af7Sopenharmony_ci 43e5c31af7Sopenharmony_ci both "" 44e5c31af7Sopenharmony_ci precision mediump float; 45e5c31af7Sopenharmony_ci ${DECLARATIONS} 46e5c31af7Sopenharmony_ci 47e5c31af7Sopenharmony_ci float func (vec2 a) 48e5c31af7Sopenharmony_ci { 49e5c31af7Sopenharmony_ci return -(a.x + a.y); 50e5c31af7Sopenharmony_ci } 51e5c31af7Sopenharmony_ci 52e5c31af7Sopenharmony_ci void main() 53e5c31af7Sopenharmony_ci { 54e5c31af7Sopenharmony_ci out0 = func(in0); 55e5c31af7Sopenharmony_ci ${OUTPUT} 56e5c31af7Sopenharmony_ci } 57e5c31af7Sopenharmony_ci "" 58e5c31af7Sopenharmony_ci end 59e5c31af7Sopenharmony_ci 60e5c31af7Sopenharmony_ci case float_vec3 61e5c31af7Sopenharmony_ci values 62e5c31af7Sopenharmony_ci { 63e5c31af7Sopenharmony_ci input vec3 in0 = [ vec3(0.0, 1.0, -2.0) | vec3(2.0, 2.5, -4.0) ]; 64e5c31af7Sopenharmony_ci output float out0 = [ 1.0 | -0.5 ]; 65e5c31af7Sopenharmony_ci } 66e5c31af7Sopenharmony_ci 67e5c31af7Sopenharmony_ci both "" 68e5c31af7Sopenharmony_ci precision mediump float; 69e5c31af7Sopenharmony_ci ${DECLARATIONS} 70e5c31af7Sopenharmony_ci 71e5c31af7Sopenharmony_ci float func (vec3 a) 72e5c31af7Sopenharmony_ci { 73e5c31af7Sopenharmony_ci return -(a.x + a.y + a.z); 74e5c31af7Sopenharmony_ci } 75e5c31af7Sopenharmony_ci 76e5c31af7Sopenharmony_ci void main() 77e5c31af7Sopenharmony_ci { 78e5c31af7Sopenharmony_ci out0 = func(in0); 79e5c31af7Sopenharmony_ci ${OUTPUT} 80e5c31af7Sopenharmony_ci } 81e5c31af7Sopenharmony_ci "" 82e5c31af7Sopenharmony_ci end 83e5c31af7Sopenharmony_ci 84e5c31af7Sopenharmony_ci case float_vec4 85e5c31af7Sopenharmony_ci values 86e5c31af7Sopenharmony_ci { 87e5c31af7Sopenharmony_ci input vec4 in0 = [ vec4(0.0, 1.0, -2.0, 0.5) | vec4(2.0, 2.5, 4.0, -7.0) ]; 88e5c31af7Sopenharmony_ci output float out0 = [ 0.5 | -1.5 ]; 89e5c31af7Sopenharmony_ci } 90e5c31af7Sopenharmony_ci 91e5c31af7Sopenharmony_ci both "" 92e5c31af7Sopenharmony_ci precision mediump float; 93e5c31af7Sopenharmony_ci ${DECLARATIONS} 94e5c31af7Sopenharmony_ci 95e5c31af7Sopenharmony_ci float func (vec4 a) 96e5c31af7Sopenharmony_ci { 97e5c31af7Sopenharmony_ci return -(a.x + a.y + a.z + a.w); 98e5c31af7Sopenharmony_ci } 99e5c31af7Sopenharmony_ci 100e5c31af7Sopenharmony_ci void main() 101e5c31af7Sopenharmony_ci { 102e5c31af7Sopenharmony_ci out0 = func(in0); 103e5c31af7Sopenharmony_ci ${OUTPUT} 104e5c31af7Sopenharmony_ci } 105e5c31af7Sopenharmony_ci "" 106e5c31af7Sopenharmony_ci end 107e5c31af7Sopenharmony_ci 108e5c31af7Sopenharmony_ci case float_mat2 109e5c31af7Sopenharmony_ci values 110e5c31af7Sopenharmony_ci { 111e5c31af7Sopenharmony_ci input mat2 in0 = [ mat2(0.0, 1.0, -2.0, 0.5) | mat2(2.0, 2.5, 4.0, -7.0) ]; 112e5c31af7Sopenharmony_ci output float out0 = [ 0.5 | -1.5 ]; 113e5c31af7Sopenharmony_ci } 114e5c31af7Sopenharmony_ci 115e5c31af7Sopenharmony_ci both "" 116e5c31af7Sopenharmony_ci precision mediump float; 117e5c31af7Sopenharmony_ci ${DECLARATIONS} 118e5c31af7Sopenharmony_ci 119e5c31af7Sopenharmony_ci float func (mat2 a) 120e5c31af7Sopenharmony_ci { 121e5c31af7Sopenharmony_ci return -(a[0][0] + a[0][1] + a[1][0] + a[1][1]); 122e5c31af7Sopenharmony_ci } 123e5c31af7Sopenharmony_ci 124e5c31af7Sopenharmony_ci void main() 125e5c31af7Sopenharmony_ci { 126e5c31af7Sopenharmony_ci out0 = func(in0); 127e5c31af7Sopenharmony_ci ${OUTPUT} 128e5c31af7Sopenharmony_ci } 129e5c31af7Sopenharmony_ci "" 130e5c31af7Sopenharmony_ci end 131e5c31af7Sopenharmony_ci 132e5c31af7Sopenharmony_ci case float_mat3 133e5c31af7Sopenharmony_ci values 134e5c31af7Sopenharmony_ci { 135e5c31af7Sopenharmony_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) ]; 136e5c31af7Sopenharmony_ci output float out0 = [ -4.5 | -5.0 ]; 137e5c31af7Sopenharmony_ci } 138e5c31af7Sopenharmony_ci 139e5c31af7Sopenharmony_ci both "" 140e5c31af7Sopenharmony_ci precision mediump float; 141e5c31af7Sopenharmony_ci ${DECLARATIONS} 142e5c31af7Sopenharmony_ci 143e5c31af7Sopenharmony_ci float func (mat3 a) 144e5c31af7Sopenharmony_ci { 145e5c31af7Sopenharmony_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]); 146e5c31af7Sopenharmony_ci } 147e5c31af7Sopenharmony_ci 148e5c31af7Sopenharmony_ci void main() 149e5c31af7Sopenharmony_ci { 150e5c31af7Sopenharmony_ci out0 = func(in0); 151e5c31af7Sopenharmony_ci ${OUTPUT} 152e5c31af7Sopenharmony_ci } 153e5c31af7Sopenharmony_ci "" 154e5c31af7Sopenharmony_ci end 155e5c31af7Sopenharmony_ci 156e5c31af7Sopenharmony_ci case float_mat4 157e5c31af7Sopenharmony_ci values 158e5c31af7Sopenharmony_ci { 159e5c31af7Sopenharmony_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) ]; 160e5c31af7Sopenharmony_ci output float out0 = [ -5.5 | -9.0 ]; 161e5c31af7Sopenharmony_ci } 162e5c31af7Sopenharmony_ci 163e5c31af7Sopenharmony_ci both "" 164e5c31af7Sopenharmony_ci precision mediump float; 165e5c31af7Sopenharmony_ci ${DECLARATIONS} 166e5c31af7Sopenharmony_ci 167e5c31af7Sopenharmony_ci float func (mat4 a) 168e5c31af7Sopenharmony_ci { 169e5c31af7Sopenharmony_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]); 170e5c31af7Sopenharmony_ci } 171e5c31af7Sopenharmony_ci 172e5c31af7Sopenharmony_ci void main() 173e5c31af7Sopenharmony_ci { 174e5c31af7Sopenharmony_ci out0 = func(in0); 175e5c31af7Sopenharmony_ci ${OUTPUT} 176e5c31af7Sopenharmony_ci } 177e5c31af7Sopenharmony_ci "" 178e5c31af7Sopenharmony_ci end 179e5c31af7Sopenharmony_ci 180e5c31af7Sopenharmony_ci case int_int 181e5c31af7Sopenharmony_ci values 182e5c31af7Sopenharmony_ci { 183e5c31af7Sopenharmony_ci input int in0 = [ -1 | 0 | 1 | 4 ]; 184e5c31af7Sopenharmony_ci output int out0 = [ 1 | 0 | -1 | -4 ]; 185e5c31af7Sopenharmony_ci } 186e5c31af7Sopenharmony_ci 187e5c31af7Sopenharmony_ci both "" 188e5c31af7Sopenharmony_ci precision mediump float; 189e5c31af7Sopenharmony_ci precision mediump int; 190e5c31af7Sopenharmony_ci ${DECLARATIONS} 191e5c31af7Sopenharmony_ci 192e5c31af7Sopenharmony_ci int func (int a) 193e5c31af7Sopenharmony_ci { 194e5c31af7Sopenharmony_ci return -a; 195e5c31af7Sopenharmony_ci } 196e5c31af7Sopenharmony_ci 197e5c31af7Sopenharmony_ci void main() 198e5c31af7Sopenharmony_ci { 199e5c31af7Sopenharmony_ci ${SETUP} 200e5c31af7Sopenharmony_ci out0 = func(in0); 201e5c31af7Sopenharmony_ci ${OUTPUT} 202e5c31af7Sopenharmony_ci } 203e5c31af7Sopenharmony_ci "" 204e5c31af7Sopenharmony_ci end 205e5c31af7Sopenharmony_ci 206e5c31af7Sopenharmony_ci case int_ivec2 207e5c31af7Sopenharmony_ci values 208e5c31af7Sopenharmony_ci { 209e5c31af7Sopenharmony_ci input ivec2 in0 = [ ivec2(-1, 0) | ivec2(1, 4) ]; 210e5c31af7Sopenharmony_ci output int out0 = [ 1 | -5 ]; 211e5c31af7Sopenharmony_ci } 212e5c31af7Sopenharmony_ci 213e5c31af7Sopenharmony_ci both "" 214e5c31af7Sopenharmony_ci precision mediump float; 215e5c31af7Sopenharmony_ci precision mediump int; 216e5c31af7Sopenharmony_ci ${DECLARATIONS} 217e5c31af7Sopenharmony_ci 218e5c31af7Sopenharmony_ci int func (ivec2 a) 219e5c31af7Sopenharmony_ci { 220e5c31af7Sopenharmony_ci return -(a.x + a.y); 221e5c31af7Sopenharmony_ci } 222e5c31af7Sopenharmony_ci 223e5c31af7Sopenharmony_ci void main() 224e5c31af7Sopenharmony_ci { 225e5c31af7Sopenharmony_ci ${SETUP} 226e5c31af7Sopenharmony_ci out0 = func(in0); 227e5c31af7Sopenharmony_ci ${OUTPUT} 228e5c31af7Sopenharmony_ci } 229e5c31af7Sopenharmony_ci "" 230e5c31af7Sopenharmony_ci end 231e5c31af7Sopenharmony_ci 232e5c31af7Sopenharmony_ci case int_ivec3 233e5c31af7Sopenharmony_ci values 234e5c31af7Sopenharmony_ci { 235e5c31af7Sopenharmony_ci input ivec3 in0 = [ ivec3(-1, 0, 2) | ivec3(1, 4, -8) ]; 236e5c31af7Sopenharmony_ci output int out0 = [ -1 | 3 ]; 237e5c31af7Sopenharmony_ci } 238e5c31af7Sopenharmony_ci 239e5c31af7Sopenharmony_ci both "" 240e5c31af7Sopenharmony_ci precision mediump float; 241e5c31af7Sopenharmony_ci precision mediump int; 242e5c31af7Sopenharmony_ci ${DECLARATIONS} 243e5c31af7Sopenharmony_ci 244e5c31af7Sopenharmony_ci int func (ivec3 a) 245e5c31af7Sopenharmony_ci { 246e5c31af7Sopenharmony_ci return -(a.x + a.y + a.z); 247e5c31af7Sopenharmony_ci } 248e5c31af7Sopenharmony_ci 249e5c31af7Sopenharmony_ci void main() 250e5c31af7Sopenharmony_ci { 251e5c31af7Sopenharmony_ci ${SETUP} 252e5c31af7Sopenharmony_ci out0 = func(in0); 253e5c31af7Sopenharmony_ci ${OUTPUT} 254e5c31af7Sopenharmony_ci } 255e5c31af7Sopenharmony_ci "" 256e5c31af7Sopenharmony_ci end 257e5c31af7Sopenharmony_ci 258e5c31af7Sopenharmony_ci case int_ivec4 259e5c31af7Sopenharmony_ci values 260e5c31af7Sopenharmony_ci { 261e5c31af7Sopenharmony_ci input ivec4 in0 = [ ivec4(-1, 0, 2, 2) | ivec4(1, 4, -8, 2) ]; 262e5c31af7Sopenharmony_ci output int out0 = [ -3 | 1 ]; 263e5c31af7Sopenharmony_ci } 264e5c31af7Sopenharmony_ci 265e5c31af7Sopenharmony_ci both "" 266e5c31af7Sopenharmony_ci precision mediump float; 267e5c31af7Sopenharmony_ci precision mediump int; 268e5c31af7Sopenharmony_ci ${DECLARATIONS} 269e5c31af7Sopenharmony_ci 270e5c31af7Sopenharmony_ci int func (ivec4 a) 271e5c31af7Sopenharmony_ci { 272e5c31af7Sopenharmony_ci return -(a.x + a.y + a.z + a.w); 273e5c31af7Sopenharmony_ci } 274e5c31af7Sopenharmony_ci 275e5c31af7Sopenharmony_ci void main() 276e5c31af7Sopenharmony_ci { 277e5c31af7Sopenharmony_ci ${SETUP} 278e5c31af7Sopenharmony_ci out0 = func(in0); 279e5c31af7Sopenharmony_ci ${OUTPUT} 280e5c31af7Sopenharmony_ci } 281e5c31af7Sopenharmony_ci "" 282e5c31af7Sopenharmony_ci end 283e5c31af7Sopenharmony_ci 284e5c31af7Sopenharmony_ci case bool_bool 285e5c31af7Sopenharmony_ci values 286e5c31af7Sopenharmony_ci { 287e5c31af7Sopenharmony_ci input bool in0 = [ true | false ]; 288e5c31af7Sopenharmony_ci output bool out0 = [ false | true ]; 289e5c31af7Sopenharmony_ci } 290e5c31af7Sopenharmony_ci 291e5c31af7Sopenharmony_ci both "" 292e5c31af7Sopenharmony_ci precision mediump float; 293e5c31af7Sopenharmony_ci ${DECLARATIONS} 294e5c31af7Sopenharmony_ci 295e5c31af7Sopenharmony_ci bool func (bool a) 296e5c31af7Sopenharmony_ci { 297e5c31af7Sopenharmony_ci return !a; 298e5c31af7Sopenharmony_ci } 299e5c31af7Sopenharmony_ci 300e5c31af7Sopenharmony_ci void main() 301e5c31af7Sopenharmony_ci { 302e5c31af7Sopenharmony_ci ${SETUP} 303e5c31af7Sopenharmony_ci out0 = func(in0); 304e5c31af7Sopenharmony_ci ${OUTPUT} 305e5c31af7Sopenharmony_ci } 306e5c31af7Sopenharmony_ci "" 307e5c31af7Sopenharmony_ci end 308e5c31af7Sopenharmony_ci 309e5c31af7Sopenharmony_ci case bool_bvec2 310e5c31af7Sopenharmony_ci values 311e5c31af7Sopenharmony_ci { 312e5c31af7Sopenharmony_ci input bvec2 in0 = [ bvec2(true, true) | bvec2(false, true) ]; 313e5c31af7Sopenharmony_ci output bool out0 = [ false | true ]; 314e5c31af7Sopenharmony_ci } 315e5c31af7Sopenharmony_ci 316e5c31af7Sopenharmony_ci both "" 317e5c31af7Sopenharmony_ci precision mediump float; 318e5c31af7Sopenharmony_ci ${DECLARATIONS} 319e5c31af7Sopenharmony_ci 320e5c31af7Sopenharmony_ci bool func (bvec2 a) 321e5c31af7Sopenharmony_ci { 322e5c31af7Sopenharmony_ci return !(a.x == a.y); 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 bool_bvec3 335e5c31af7Sopenharmony_ci values 336e5c31af7Sopenharmony_ci { 337e5c31af7Sopenharmony_ci input bvec3 in0 = [ bvec3(true, true, false) | bvec3(true, false, false) ]; 338e5c31af7Sopenharmony_ci output bool out0 = [ false | true ]; 339e5c31af7Sopenharmony_ci } 340e5c31af7Sopenharmony_ci 341e5c31af7Sopenharmony_ci both "" 342e5c31af7Sopenharmony_ci precision mediump float; 343e5c31af7Sopenharmony_ci ${DECLARATIONS} 344e5c31af7Sopenharmony_ci 345e5c31af7Sopenharmony_ci bool func (bvec3 a) 346e5c31af7Sopenharmony_ci { 347e5c31af7Sopenharmony_ci return (a.x == a.y) == a.z; 348e5c31af7Sopenharmony_ci } 349e5c31af7Sopenharmony_ci 350e5c31af7Sopenharmony_ci void main() 351e5c31af7Sopenharmony_ci { 352e5c31af7Sopenharmony_ci ${SETUP} 353e5c31af7Sopenharmony_ci out0 = func(in0); 354e5c31af7Sopenharmony_ci ${OUTPUT} 355e5c31af7Sopenharmony_ci } 356e5c31af7Sopenharmony_ci "" 357e5c31af7Sopenharmony_ci end 358e5c31af7Sopenharmony_ci 359e5c31af7Sopenharmony_ci case bool_bvec4 360e5c31af7Sopenharmony_ci values 361e5c31af7Sopenharmony_ci { 362e5c31af7Sopenharmony_ci input bvec4 in0 = [ bvec4(true, true, true, false) | bvec4(false, false, true, true) | bvec4(true, false, false, true) ]; 363e5c31af7Sopenharmony_ci output bool out0 = [ false | true | true ]; 364e5c31af7Sopenharmony_ci } 365e5c31af7Sopenharmony_ci 366e5c31af7Sopenharmony_ci both "" 367e5c31af7Sopenharmony_ci precision mediump float; 368e5c31af7Sopenharmony_ci ${DECLARATIONS} 369e5c31af7Sopenharmony_ci 370e5c31af7Sopenharmony_ci bool func (bvec4 a) 371e5c31af7Sopenharmony_ci { 372e5c31af7Sopenharmony_ci return ((a.x == a.y) == (a.z == a.w)); 373e5c31af7Sopenharmony_ci } 374e5c31af7Sopenharmony_ci 375e5c31af7Sopenharmony_ci void main() 376e5c31af7Sopenharmony_ci { 377e5c31af7Sopenharmony_ci ${SETUP} 378e5c31af7Sopenharmony_ci out0 = func(in0); 379e5c31af7Sopenharmony_ci ${OUTPUT} 380e5c31af7Sopenharmony_ci } 381e5c31af7Sopenharmony_ci "" 382e5c31af7Sopenharmony_ci end 383e5c31af7Sopenharmony_ci 384e5c31af7Sopenharmony_ci case mat2 385e5c31af7Sopenharmony_ci values 386e5c31af7Sopenharmony_ci { 387e5c31af7Sopenharmony_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) ]; 388e5c31af7Sopenharmony_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) ]; 389e5c31af7Sopenharmony_ci } 390e5c31af7Sopenharmony_ci 391e5c31af7Sopenharmony_ci both "" 392e5c31af7Sopenharmony_ci precision mediump float; 393e5c31af7Sopenharmony_ci ${DECLARATIONS} 394e5c31af7Sopenharmony_ci 395e5c31af7Sopenharmony_ci mat2 func (mat2 a) 396e5c31af7Sopenharmony_ci { 397e5c31af7Sopenharmony_ci return -2.0*a; 398e5c31af7Sopenharmony_ci } 399e5c31af7Sopenharmony_ci 400e5c31af7Sopenharmony_ci void main() 401e5c31af7Sopenharmony_ci { 402e5c31af7Sopenharmony_ci ${SETUP} 403e5c31af7Sopenharmony_ci out0 = func(in0); 404e5c31af7Sopenharmony_ci ${OUTPUT} 405e5c31af7Sopenharmony_ci } 406e5c31af7Sopenharmony_ci "" 407e5c31af7Sopenharmony_ci end 408e5c31af7Sopenharmony_ci 409e5c31af7Sopenharmony_ci 410e5c31af7Sopenharmony_ci case mat3 411e5c31af7Sopenharmony_ci values 412e5c31af7Sopenharmony_ci { 413e5c31af7Sopenharmony_ci input mat3 in0 = [ mat3(2.5, 0.0, 1.0, -2.5, 1.0, 3.0, 0.0, 2.0, 1.5) | mat3(-3.5, 2.0, 0.5, -1.5, -3.5, 2.5, 0.0, 1.5, 3.0) | mat3(1.5, 3.0, -1.0, 2.5, -0.5, 3.5, 3.0, -3.0, -2.5) ]; 414e5c31af7Sopenharmony_ci output mat3 out0 = [ mat3(-5.0, -0.0, -2.0, 5.0, -2.0, -6.0, -0.0, -4.0, -3.0) | mat3(7.0, -4.0, -1.0, 3.0, 7.0, -5.0, -0.0, -3.0, -6.0) | mat3(-3.0, -6.0, 2.0, -5.0, 1.0, -7.0, -6.0, 6.0, 5.0) ]; 415e5c31af7Sopenharmony_ci } 416e5c31af7Sopenharmony_ci 417e5c31af7Sopenharmony_ci both "" 418e5c31af7Sopenharmony_ci precision mediump float; 419e5c31af7Sopenharmony_ci ${DECLARATIONS} 420e5c31af7Sopenharmony_ci 421e5c31af7Sopenharmony_ci mat3 func (mat3 a) 422e5c31af7Sopenharmony_ci { 423e5c31af7Sopenharmony_ci return -2.0*a; 424e5c31af7Sopenharmony_ci } 425e5c31af7Sopenharmony_ci 426e5c31af7Sopenharmony_ci void main() 427e5c31af7Sopenharmony_ci { 428e5c31af7Sopenharmony_ci ${SETUP} 429e5c31af7Sopenharmony_ci out0 = func(in0); 430e5c31af7Sopenharmony_ci ${OUTPUT} 431e5c31af7Sopenharmony_ci } 432e5c31af7Sopenharmony_ci "" 433e5c31af7Sopenharmony_ci end 434e5c31af7Sopenharmony_ci 435e5c31af7Sopenharmony_ci 436e5c31af7Sopenharmony_ci case mat4 437e5c31af7Sopenharmony_ci values 438e5c31af7Sopenharmony_ci { 439e5c31af7Sopenharmony_ci input mat4 in0 = [ mat4(-2.0, 3.5, -0.5, 1.0, -1.5, 0.0, -1.0, -1.0, 0.5, 0.5, 3.0, 1.5, 3.0, 2.5, 3.5, 1.5) | mat4(-2.5, 2.5, 3.5, 3.0, 0.5, 1.5, -2.0, 2.5, 0.5, -1.5, -3.5, 2.5, 3.5, -3.0, 2.5, -0.5) | mat4(-2.5, -1.5, 2.0, 3.0, -3.5, 1.0, -3.5, 1.5, -1.5, 3.0, 3.5, 0.0, 3.5, -1.5, -3.0, 0.5) ]; 440e5c31af7Sopenharmony_ci output mat4 out0 = [ mat4(4.0, -7.0, 1.0, -2.0, 3.0, -0.0, 2.0, 2.0, -1.0, -1.0, -6.0, -3.0, -6.0, -5.0, -7.0, -3.0) | mat4(5.0, -5.0, -7.0, -6.0, -1.0, -3.0, 4.0, -5.0, -1.0, 3.0, 7.0, -5.0, -7.0, 6.0, -5.0, 1.0) | mat4(5.0, 3.0, -4.0, -6.0, 7.0, -2.0, 7.0, -3.0, 3.0, -6.0, -7.0, -0.0, -7.0, 3.0, 6.0, -1.0) ]; 441e5c31af7Sopenharmony_ci } 442e5c31af7Sopenharmony_ci 443e5c31af7Sopenharmony_ci both "" 444e5c31af7Sopenharmony_ci precision mediump float; 445e5c31af7Sopenharmony_ci ${DECLARATIONS} 446e5c31af7Sopenharmony_ci 447e5c31af7Sopenharmony_ci mat4 func (mat4 a) 448e5c31af7Sopenharmony_ci { 449e5c31af7Sopenharmony_ci return -2.0*a; 450e5c31af7Sopenharmony_ci } 451e5c31af7Sopenharmony_ci 452e5c31af7Sopenharmony_ci void main() 453e5c31af7Sopenharmony_ci { 454e5c31af7Sopenharmony_ci ${SETUP} 455e5c31af7Sopenharmony_ci out0 = func(in0); 456e5c31af7Sopenharmony_ci ${OUTPUT} 457e5c31af7Sopenharmony_ci } 458e5c31af7Sopenharmony_ci "" 459e5c31af7Sopenharmony_ci end 460e5c31af7Sopenharmony_ci 461e5c31af7Sopenharmony_ci case float_struct 462e5c31af7Sopenharmony_ci values 463e5c31af7Sopenharmony_ci { 464e5c31af7Sopenharmony_ci input vec3 in0 = [ vec3(0.0, 1.0, -2.0) | vec3(2.0, 2.5, -4.0) ]; 465e5c31af7Sopenharmony_ci output float out0 = [ 1.0 | -0.5 ]; 466e5c31af7Sopenharmony_ci } 467e5c31af7Sopenharmony_ci 468e5c31af7Sopenharmony_ci both "" 469e5c31af7Sopenharmony_ci precision mediump float; 470e5c31af7Sopenharmony_ci ${DECLARATIONS} 471e5c31af7Sopenharmony_ci 472e5c31af7Sopenharmony_ci struct Pos { float a, b, c; }; 473e5c31af7Sopenharmony_ci 474e5c31af7Sopenharmony_ci float func (Pos p) 475e5c31af7Sopenharmony_ci { 476e5c31af7Sopenharmony_ci return -(p.a + p.b + p.c); 477e5c31af7Sopenharmony_ci } 478e5c31af7Sopenharmony_ci 479e5c31af7Sopenharmony_ci void main() 480e5c31af7Sopenharmony_ci { 481e5c31af7Sopenharmony_ci Pos p = Pos(in0.x, in0.y, in0.z); 482e5c31af7Sopenharmony_ci out0 = func(p); 483e5c31af7Sopenharmony_ci ${OUTPUT} 484e5c31af7Sopenharmony_ci } 485e5c31af7Sopenharmony_ci "" 486e5c31af7Sopenharmony_ci end 487e5c31af7Sopenharmony_ci 488e5c31af7Sopenharmony_ci case struct_struct 489e5c31af7Sopenharmony_ci values 490e5c31af7Sopenharmony_ci { 491e5c31af7Sopenharmony_ci input vec3 in0 = [ vec3(0.0, 1.0, -2.0) | vec3(2.0, 2.5, -4.0) ]; 492e5c31af7Sopenharmony_ci output float out0 = [ 1.0 | -0.5 ]; 493e5c31af7Sopenharmony_ci } 494e5c31af7Sopenharmony_ci 495e5c31af7Sopenharmony_ci both "" 496e5c31af7Sopenharmony_ci precision mediump float; 497e5c31af7Sopenharmony_ci ${DECLARATIONS} 498e5c31af7Sopenharmony_ci 499e5c31af7Sopenharmony_ci struct Pos { float a, b, c; }; 500e5c31af7Sopenharmony_ci 501e5c31af7Sopenharmony_ci Pos func (Pos p) 502e5c31af7Sopenharmony_ci { 503e5c31af7Sopenharmony_ci return Pos(-p.a, -p.b, -p.c); 504e5c31af7Sopenharmony_ci } 505e5c31af7Sopenharmony_ci 506e5c31af7Sopenharmony_ci void main() 507e5c31af7Sopenharmony_ci { 508e5c31af7Sopenharmony_ci Pos p = Pos(in0.x, in0.y, in0.z); 509e5c31af7Sopenharmony_ci p = func(p); 510e5c31af7Sopenharmony_ci out0 = p.a + p.b + p.c; 511e5c31af7Sopenharmony_ci ${OUTPUT} 512e5c31af7Sopenharmony_ci } 513e5c31af7Sopenharmony_ci "" 514e5c31af7Sopenharmony_ci end 515e5c31af7Sopenharmony_ci 516e5c31af7Sopenharmony_ci case struct_nested_struct 517e5c31af7Sopenharmony_ci values 518e5c31af7Sopenharmony_ci { 519e5c31af7Sopenharmony_ci input vec3 in0 = [ vec3(0.0, 1.0, -2.0) | vec3(2.0, 2.5, -4.0) ]; 520e5c31af7Sopenharmony_ci output float out0 = [ 1.0 | -0.5 ]; 521e5c31af7Sopenharmony_ci } 522e5c31af7Sopenharmony_ci 523e5c31af7Sopenharmony_ci both "" 524e5c31af7Sopenharmony_ci precision mediump float; 525e5c31af7Sopenharmony_ci ${DECLARATIONS} 526e5c31af7Sopenharmony_ci 527e5c31af7Sopenharmony_ci struct Pos { float a, b, c; }; 528e5c31af7Sopenharmony_ci struct Line { Pos start, end; }; 529e5c31af7Sopenharmony_ci 530e5c31af7Sopenharmony_ci Line func (Pos p) 531e5c31af7Sopenharmony_ci { 532e5c31af7Sopenharmony_ci return Line(p, Pos(-p.a, -p.b, -p.c)); 533e5c31af7Sopenharmony_ci } 534e5c31af7Sopenharmony_ci 535e5c31af7Sopenharmony_ci float sum (Pos p) 536e5c31af7Sopenharmony_ci { 537e5c31af7Sopenharmony_ci return (p.a + p.b + p.c); 538e5c31af7Sopenharmony_ci } 539e5c31af7Sopenharmony_ci 540e5c31af7Sopenharmony_ci void main() 541e5c31af7Sopenharmony_ci { 542e5c31af7Sopenharmony_ci Pos p = Pos(in0.x, in0.y, in0.z); 543e5c31af7Sopenharmony_ci Line line = func(p); 544e5c31af7Sopenharmony_ci out0 = sum(line.start) + (2.0 * sum(line.end)); 545e5c31af7Sopenharmony_ci ${OUTPUT} 546e5c31af7Sopenharmony_ci } 547e5c31af7Sopenharmony_ci "" 548e5c31af7Sopenharmony_ci end 549e5c31af7Sopenharmony_ci 550e5c31af7Sopenharmony_ci case struct_constructor_highp_in_fragment 551e5c31af7Sopenharmony_ci desc "passing highp vector to struct constructor in fragment shader yields all zeros" 552e5c31af7Sopenharmony_ci vertex "" 553e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 554e5c31af7Sopenharmony_ci void main() 555e5c31af7Sopenharmony_ci { 556e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 557e5c31af7Sopenharmony_ci } 558e5c31af7Sopenharmony_ci "" 559e5c31af7Sopenharmony_ci fragment "" 560e5c31af7Sopenharmony_ci #ifdef GL_FRAGMENT_PRECISION_HIGH 561e5c31af7Sopenharmony_ci #define PRECISION highp 562e5c31af7Sopenharmony_ci #else 563e5c31af7Sopenharmony_ci #define PRECISION mediump 564e5c31af7Sopenharmony_ci #endif 565e5c31af7Sopenharmony_ci struct Test { 566e5c31af7Sopenharmony_ci PRECISION vec3 color; 567e5c31af7Sopenharmony_ci } ; 568e5c31af7Sopenharmony_ci void main() { 569e5c31af7Sopenharmony_ci PRECISION vec3 color = vec3(0.2, 2.0, 0.1); 570e5c31af7Sopenharmony_ci Test test = Test(color); 571e5c31af7Sopenharmony_ci // Bias the color so all components are guaranteed > 1.0. 572e5c31af7Sopenharmony_ci gl_FragColor = vec4(vec3(0.25, 0.55, 0.65) + vec3(4.0, 0.25, 4.0) * test.color, 1.0); 573e5c31af7Sopenharmony_ci } 574e5c31af7Sopenharmony_ci "" 575e5c31af7Sopenharmony_ci end 576e5c31af7Sopenharmony_ci 577e5c31af7Sopenharmony_ciend # datatypes 578e5c31af7Sopenharmony_ci 579e5c31af7Sopenharmony_cigroup qualifiers "Function Parameter Qualifiers" 580e5c31af7Sopenharmony_ci 581e5c31af7Sopenharmony_ci case in_float 582e5c31af7Sopenharmony_ci values 583e5c31af7Sopenharmony_ci { 584e5c31af7Sopenharmony_ci input float in0 = [ 0.0 | 1.0 | -2.0 | 2.5 ]; 585e5c31af7Sopenharmony_ci output float out0 = [ 0.0 | -1.0 | 2.0 | -2.5 ]; 586e5c31af7Sopenharmony_ci } 587e5c31af7Sopenharmony_ci 588e5c31af7Sopenharmony_ci both "" 589e5c31af7Sopenharmony_ci precision mediump float; 590e5c31af7Sopenharmony_ci precision mediump int; 591e5c31af7Sopenharmony_ci ${DECLARATIONS} 592e5c31af7Sopenharmony_ci 593e5c31af7Sopenharmony_ci float func (in float a) 594e5c31af7Sopenharmony_ci { 595e5c31af7Sopenharmony_ci a = -a; 596e5c31af7Sopenharmony_ci return 2.0 * a; 597e5c31af7Sopenharmony_ci } 598e5c31af7Sopenharmony_ci 599e5c31af7Sopenharmony_ci void main() 600e5c31af7Sopenharmony_ci { 601e5c31af7Sopenharmony_ci ${SETUP} 602e5c31af7Sopenharmony_ci float f = in0; 603e5c31af7Sopenharmony_ci float g = func(f); 604e5c31af7Sopenharmony_ci out0 = f + g; 605e5c31af7Sopenharmony_ci ${OUTPUT} 606e5c31af7Sopenharmony_ci } 607e5c31af7Sopenharmony_ci "" 608e5c31af7Sopenharmony_ci end 609e5c31af7Sopenharmony_ci 610e5c31af7Sopenharmony_ci case out_float 611e5c31af7Sopenharmony_ci values 612e5c31af7Sopenharmony_ci { 613e5c31af7Sopenharmony_ci input float in0 = [ 0.0 | 1.0 | -2.0 | 2.5 ]; 614e5c31af7Sopenharmony_ci output float out0 = [ 0.0 | -1.0 | 2.0 | -2.5 ]; 615e5c31af7Sopenharmony_ci } 616e5c31af7Sopenharmony_ci 617e5c31af7Sopenharmony_ci both "" 618e5c31af7Sopenharmony_ci precision mediump float; 619e5c31af7Sopenharmony_ci precision mediump int; 620e5c31af7Sopenharmony_ci ${DECLARATIONS} 621e5c31af7Sopenharmony_ci 622e5c31af7Sopenharmony_ci void func (out float a) 623e5c31af7Sopenharmony_ci { 624e5c31af7Sopenharmony_ci a = -1.0; 625e5c31af7Sopenharmony_ci } 626e5c31af7Sopenharmony_ci 627e5c31af7Sopenharmony_ci void main() 628e5c31af7Sopenharmony_ci { 629e5c31af7Sopenharmony_ci ${SETUP} 630e5c31af7Sopenharmony_ci float f = 1.0; 631e5c31af7Sopenharmony_ci func(f); 632e5c31af7Sopenharmony_ci out0 = f * in0; 633e5c31af7Sopenharmony_ci ${OUTPUT} 634e5c31af7Sopenharmony_ci } 635e5c31af7Sopenharmony_ci "" 636e5c31af7Sopenharmony_ci end 637e5c31af7Sopenharmony_ci 638e5c31af7Sopenharmony_ci case inout_float 639e5c31af7Sopenharmony_ci values 640e5c31af7Sopenharmony_ci { 641e5c31af7Sopenharmony_ci input float in0 = [ 0.0 | 1.0 | -2.0 | 2.5 ]; 642e5c31af7Sopenharmony_ci output float out0 = [ 0.0 | -1.0 | 2.0 | -2.5 ]; 643e5c31af7Sopenharmony_ci } 644e5c31af7Sopenharmony_ci 645e5c31af7Sopenharmony_ci both "" 646e5c31af7Sopenharmony_ci precision mediump float; 647e5c31af7Sopenharmony_ci precision mediump int; 648e5c31af7Sopenharmony_ci ${DECLARATIONS} 649e5c31af7Sopenharmony_ci 650e5c31af7Sopenharmony_ci void func (inout float a) 651e5c31af7Sopenharmony_ci { 652e5c31af7Sopenharmony_ci a = -a; 653e5c31af7Sopenharmony_ci } 654e5c31af7Sopenharmony_ci 655e5c31af7Sopenharmony_ci void main() 656e5c31af7Sopenharmony_ci { 657e5c31af7Sopenharmony_ci ${SETUP} 658e5c31af7Sopenharmony_ci float f = 1.0; 659e5c31af7Sopenharmony_ci func(f); 660e5c31af7Sopenharmony_ci out0 = f * in0; 661e5c31af7Sopenharmony_ci ${OUTPUT} 662e5c31af7Sopenharmony_ci } 663e5c31af7Sopenharmony_ci "" 664e5c31af7Sopenharmony_ci end 665e5c31af7Sopenharmony_ci 666e5c31af7Sopenharmony_ci case in_lowp_float 667e5c31af7Sopenharmony_ci values 668e5c31af7Sopenharmony_ci { 669e5c31af7Sopenharmony_ci input float in0 = [ 0.0 | 1.0 | -2.0 | 2.5 ]; 670e5c31af7Sopenharmony_ci output float out0 = [ 0.0 | -1.0 | 2.0 | -2.5 ]; 671e5c31af7Sopenharmony_ci } 672e5c31af7Sopenharmony_ci 673e5c31af7Sopenharmony_ci both "" 674e5c31af7Sopenharmony_ci precision mediump float; 675e5c31af7Sopenharmony_ci precision mediump int; 676e5c31af7Sopenharmony_ci ${DECLARATIONS} 677e5c31af7Sopenharmony_ci 678e5c31af7Sopenharmony_ci float func (in lowp float a) 679e5c31af7Sopenharmony_ci { 680e5c31af7Sopenharmony_ci a = -a; 681e5c31af7Sopenharmony_ci return 2.0 * a; 682e5c31af7Sopenharmony_ci } 683e5c31af7Sopenharmony_ci 684e5c31af7Sopenharmony_ci void main() 685e5c31af7Sopenharmony_ci { 686e5c31af7Sopenharmony_ci ${SETUP} 687e5c31af7Sopenharmony_ci float f = in0; 688e5c31af7Sopenharmony_ci float g = func(f); 689e5c31af7Sopenharmony_ci out0 = f + g; 690e5c31af7Sopenharmony_ci ${OUTPUT} 691e5c31af7Sopenharmony_ci } 692e5c31af7Sopenharmony_ci "" 693e5c31af7Sopenharmony_ci end 694e5c31af7Sopenharmony_ci 695e5c31af7Sopenharmony_ci case out_lowp_float 696e5c31af7Sopenharmony_ci values 697e5c31af7Sopenharmony_ci { 698e5c31af7Sopenharmony_ci input float in0 = [ 0.0 | 1.0 | -2.0 | 2.5 ]; 699e5c31af7Sopenharmony_ci output float out0 = [ 0.0 | -1.0 | 2.0 | -2.5 ]; 700e5c31af7Sopenharmony_ci } 701e5c31af7Sopenharmony_ci 702e5c31af7Sopenharmony_ci both "" 703e5c31af7Sopenharmony_ci precision mediump float; 704e5c31af7Sopenharmony_ci precision mediump int; 705e5c31af7Sopenharmony_ci ${DECLARATIONS} 706e5c31af7Sopenharmony_ci 707e5c31af7Sopenharmony_ci void func (out lowp float a) 708e5c31af7Sopenharmony_ci { 709e5c31af7Sopenharmony_ci a = -1.0; 710e5c31af7Sopenharmony_ci } 711e5c31af7Sopenharmony_ci 712e5c31af7Sopenharmony_ci void main() 713e5c31af7Sopenharmony_ci { 714e5c31af7Sopenharmony_ci ${SETUP} 715e5c31af7Sopenharmony_ci float f = 1.0; 716e5c31af7Sopenharmony_ci func(f); 717e5c31af7Sopenharmony_ci out0 = f * in0; 718e5c31af7Sopenharmony_ci ${OUTPUT} 719e5c31af7Sopenharmony_ci } 720e5c31af7Sopenharmony_ci "" 721e5c31af7Sopenharmony_ci end 722e5c31af7Sopenharmony_ci 723e5c31af7Sopenharmony_ci case inout_lowp_float 724e5c31af7Sopenharmony_ci values 725e5c31af7Sopenharmony_ci { 726e5c31af7Sopenharmony_ci input float in0 = [ 0.0 | 1.0 | -2.0 | 2.5 ]; 727e5c31af7Sopenharmony_ci output float out0 = [ 0.0 | -1.0 | 2.0 | -2.5 ]; 728e5c31af7Sopenharmony_ci } 729e5c31af7Sopenharmony_ci 730e5c31af7Sopenharmony_ci both "" 731e5c31af7Sopenharmony_ci precision mediump float; 732e5c31af7Sopenharmony_ci precision mediump int; 733e5c31af7Sopenharmony_ci ${DECLARATIONS} 734e5c31af7Sopenharmony_ci 735e5c31af7Sopenharmony_ci void func (inout lowp float a) 736e5c31af7Sopenharmony_ci { 737e5c31af7Sopenharmony_ci a = -a; 738e5c31af7Sopenharmony_ci } 739e5c31af7Sopenharmony_ci 740e5c31af7Sopenharmony_ci void main() 741e5c31af7Sopenharmony_ci { 742e5c31af7Sopenharmony_ci ${SETUP} 743e5c31af7Sopenharmony_ci float f = 1.0; 744e5c31af7Sopenharmony_ci func(f); 745e5c31af7Sopenharmony_ci out0 = f * in0; 746e5c31af7Sopenharmony_ci ${OUTPUT} 747e5c31af7Sopenharmony_ci } 748e5c31af7Sopenharmony_ci "" 749e5c31af7Sopenharmony_ci end 750e5c31af7Sopenharmony_ci 751e5c31af7Sopenharmony_ci case in_highp_float 752e5c31af7Sopenharmony_ci values 753e5c31af7Sopenharmony_ci { 754e5c31af7Sopenharmony_ci input float in0 = [ 0.0 | 1.0 | -2.0 | 2.5 ]; 755e5c31af7Sopenharmony_ci output float out0 = [ 0.0 | -1.0 | 2.0 | -2.5 ]; 756e5c31af7Sopenharmony_ci } 757e5c31af7Sopenharmony_ci 758e5c31af7Sopenharmony_ci both "" 759e5c31af7Sopenharmony_ci precision mediump float; 760e5c31af7Sopenharmony_ci precision mediump int; 761e5c31af7Sopenharmony_ci ${DECLARATIONS} 762e5c31af7Sopenharmony_ci 763e5c31af7Sopenharmony_ci float func (in highp float a) 764e5c31af7Sopenharmony_ci { 765e5c31af7Sopenharmony_ci a = -a; 766e5c31af7Sopenharmony_ci return 2.0 * a; 767e5c31af7Sopenharmony_ci } 768e5c31af7Sopenharmony_ci 769e5c31af7Sopenharmony_ci void main() 770e5c31af7Sopenharmony_ci { 771e5c31af7Sopenharmony_ci ${SETUP} 772e5c31af7Sopenharmony_ci float f = in0; 773e5c31af7Sopenharmony_ci float g = func(f); 774e5c31af7Sopenharmony_ci out0 = f + g; 775e5c31af7Sopenharmony_ci ${OUTPUT} 776e5c31af7Sopenharmony_ci } 777e5c31af7Sopenharmony_ci "" 778e5c31af7Sopenharmony_ci end 779e5c31af7Sopenharmony_ci 780e5c31af7Sopenharmony_ci case out_highp_float 781e5c31af7Sopenharmony_ci values 782e5c31af7Sopenharmony_ci { 783e5c31af7Sopenharmony_ci input float in0 = [ 0.0 | 1.0 | -2.0 | 2.5 ]; 784e5c31af7Sopenharmony_ci output float out0 = [ 0.0 | -1.0 | 2.0 | -2.5 ]; 785e5c31af7Sopenharmony_ci } 786e5c31af7Sopenharmony_ci 787e5c31af7Sopenharmony_ci both "" 788e5c31af7Sopenharmony_ci precision mediump float; 789e5c31af7Sopenharmony_ci precision mediump int; 790e5c31af7Sopenharmony_ci ${DECLARATIONS} 791e5c31af7Sopenharmony_ci 792e5c31af7Sopenharmony_ci void func (out highp float a) 793e5c31af7Sopenharmony_ci { 794e5c31af7Sopenharmony_ci a = -1.0; 795e5c31af7Sopenharmony_ci } 796e5c31af7Sopenharmony_ci 797e5c31af7Sopenharmony_ci void main() 798e5c31af7Sopenharmony_ci { 799e5c31af7Sopenharmony_ci ${SETUP} 800e5c31af7Sopenharmony_ci float f = 1.0; 801e5c31af7Sopenharmony_ci func(f); 802e5c31af7Sopenharmony_ci out0 = f * in0; 803e5c31af7Sopenharmony_ci ${OUTPUT} 804e5c31af7Sopenharmony_ci } 805e5c31af7Sopenharmony_ci "" 806e5c31af7Sopenharmony_ci end 807e5c31af7Sopenharmony_ci 808e5c31af7Sopenharmony_ci case inout_highp_float 809e5c31af7Sopenharmony_ci values 810e5c31af7Sopenharmony_ci { 811e5c31af7Sopenharmony_ci input float in0 = [ 0.0 | 1.0 | -2.0 | 2.5 ]; 812e5c31af7Sopenharmony_ci output float out0 = [ 0.0 | -1.0 | 2.0 | -2.5 ]; 813e5c31af7Sopenharmony_ci } 814e5c31af7Sopenharmony_ci 815e5c31af7Sopenharmony_ci both "" 816e5c31af7Sopenharmony_ci precision mediump float; 817e5c31af7Sopenharmony_ci precision mediump int; 818e5c31af7Sopenharmony_ci ${DECLARATIONS} 819e5c31af7Sopenharmony_ci 820e5c31af7Sopenharmony_ci void func (inout highp float a) 821e5c31af7Sopenharmony_ci { 822e5c31af7Sopenharmony_ci a = -a; 823e5c31af7Sopenharmony_ci } 824e5c31af7Sopenharmony_ci 825e5c31af7Sopenharmony_ci void main() 826e5c31af7Sopenharmony_ci { 827e5c31af7Sopenharmony_ci ${SETUP} 828e5c31af7Sopenharmony_ci float f = 1.0; 829e5c31af7Sopenharmony_ci func(f); 830e5c31af7Sopenharmony_ci out0 = f * in0; 831e5c31af7Sopenharmony_ci ${OUTPUT} 832e5c31af7Sopenharmony_ci } 833e5c31af7Sopenharmony_ci "" 834e5c31af7Sopenharmony_ci end 835e5c31af7Sopenharmony_ci 836e5c31af7Sopenharmony_ci case const_float 837e5c31af7Sopenharmony_ci values 838e5c31af7Sopenharmony_ci { 839e5c31af7Sopenharmony_ci input float in0 = [ 0.0 | 1.0 | -2.0 | 2.5 ]; 840e5c31af7Sopenharmony_ci output float out0 = [ 0.0 | -1.0 | 2.0 | -2.5 ]; 841e5c31af7Sopenharmony_ci } 842e5c31af7Sopenharmony_ci 843e5c31af7Sopenharmony_ci both "" 844e5c31af7Sopenharmony_ci precision mediump float; 845e5c31af7Sopenharmony_ci precision mediump int; 846e5c31af7Sopenharmony_ci ${DECLARATIONS} 847e5c31af7Sopenharmony_ci 848e5c31af7Sopenharmony_ci float func (const float a) 849e5c31af7Sopenharmony_ci { 850e5c31af7Sopenharmony_ci float b = -a; 851e5c31af7Sopenharmony_ci return 2.0 * b; 852e5c31af7Sopenharmony_ci } 853e5c31af7Sopenharmony_ci 854e5c31af7Sopenharmony_ci void main() 855e5c31af7Sopenharmony_ci { 856e5c31af7Sopenharmony_ci ${SETUP} 857e5c31af7Sopenharmony_ci float f = in0; 858e5c31af7Sopenharmony_ci float g = func(f); 859e5c31af7Sopenharmony_ci out0 = f + g; 860e5c31af7Sopenharmony_ci ${OUTPUT} 861e5c31af7Sopenharmony_ci } 862e5c31af7Sopenharmony_ci "" 863e5c31af7Sopenharmony_ci end 864e5c31af7Sopenharmony_ci 865e5c31af7Sopenharmony_ci case const_in_float 866e5c31af7Sopenharmony_ci values 867e5c31af7Sopenharmony_ci { 868e5c31af7Sopenharmony_ci input float in0 = [ 0.0 | 1.0 | -2.0 | 2.5 ]; 869e5c31af7Sopenharmony_ci output float out0 = [ 0.0 | -1.0 | 2.0 | -2.5 ]; 870e5c31af7Sopenharmony_ci } 871e5c31af7Sopenharmony_ci 872e5c31af7Sopenharmony_ci both "" 873e5c31af7Sopenharmony_ci precision mediump float; 874e5c31af7Sopenharmony_ci precision mediump int; 875e5c31af7Sopenharmony_ci ${DECLARATIONS} 876e5c31af7Sopenharmony_ci 877e5c31af7Sopenharmony_ci float func (const in float a) 878e5c31af7Sopenharmony_ci { 879e5c31af7Sopenharmony_ci float b = -a; 880e5c31af7Sopenharmony_ci return 2.0 * b; 881e5c31af7Sopenharmony_ci } 882e5c31af7Sopenharmony_ci 883e5c31af7Sopenharmony_ci void main() 884e5c31af7Sopenharmony_ci { 885e5c31af7Sopenharmony_ci ${SETUP} 886e5c31af7Sopenharmony_ci float f = in0; 887e5c31af7Sopenharmony_ci float g = func(f); 888e5c31af7Sopenharmony_ci out0 = f + g; 889e5c31af7Sopenharmony_ci ${OUTPUT} 890e5c31af7Sopenharmony_ci } 891e5c31af7Sopenharmony_ci "" 892e5c31af7Sopenharmony_ci end 893e5c31af7Sopenharmony_ci 894e5c31af7Sopenharmony_ci case in_int 895e5c31af7Sopenharmony_ci values 896e5c31af7Sopenharmony_ci { 897e5c31af7Sopenharmony_ci input int in0 = [ 0 | 1 | -2 | 4 ]; 898e5c31af7Sopenharmony_ci output int out0 = [ 0 | -1 | 2 | -4 ]; 899e5c31af7Sopenharmony_ci } 900e5c31af7Sopenharmony_ci 901e5c31af7Sopenharmony_ci both "" 902e5c31af7Sopenharmony_ci precision mediump float; 903e5c31af7Sopenharmony_ci precision mediump int; 904e5c31af7Sopenharmony_ci ${DECLARATIONS} 905e5c31af7Sopenharmony_ci 906e5c31af7Sopenharmony_ci int func (in int a) 907e5c31af7Sopenharmony_ci { 908e5c31af7Sopenharmony_ci a = -a; 909e5c31af7Sopenharmony_ci return 2 * a; 910e5c31af7Sopenharmony_ci } 911e5c31af7Sopenharmony_ci 912e5c31af7Sopenharmony_ci void main() 913e5c31af7Sopenharmony_ci { 914e5c31af7Sopenharmony_ci ${SETUP} 915e5c31af7Sopenharmony_ci int f = in0; 916e5c31af7Sopenharmony_ci int g = func(f); 917e5c31af7Sopenharmony_ci out0 = f + g; 918e5c31af7Sopenharmony_ci ${OUTPUT} 919e5c31af7Sopenharmony_ci } 920e5c31af7Sopenharmony_ci "" 921e5c31af7Sopenharmony_ci end 922e5c31af7Sopenharmony_ci 923e5c31af7Sopenharmony_ci case out_int 924e5c31af7Sopenharmony_ci values 925e5c31af7Sopenharmony_ci { 926e5c31af7Sopenharmony_ci input int in0 = [ 0 | 1 | -2 | 6 ]; 927e5c31af7Sopenharmony_ci output int out0 = [ 0 | -1 | 2 | -6 ]; 928e5c31af7Sopenharmony_ci } 929e5c31af7Sopenharmony_ci 930e5c31af7Sopenharmony_ci both "" 931e5c31af7Sopenharmony_ci precision mediump float; 932e5c31af7Sopenharmony_ci precision mediump int; 933e5c31af7Sopenharmony_ci ${DECLARATIONS} 934e5c31af7Sopenharmony_ci 935e5c31af7Sopenharmony_ci void func (out int a) 936e5c31af7Sopenharmony_ci { 937e5c31af7Sopenharmony_ci a = -1; 938e5c31af7Sopenharmony_ci } 939e5c31af7Sopenharmony_ci 940e5c31af7Sopenharmony_ci void main() 941e5c31af7Sopenharmony_ci { 942e5c31af7Sopenharmony_ci ${SETUP} 943e5c31af7Sopenharmony_ci int f = 1; 944e5c31af7Sopenharmony_ci func(f); 945e5c31af7Sopenharmony_ci out0 = f * in0; 946e5c31af7Sopenharmony_ci ${OUTPUT} 947e5c31af7Sopenharmony_ci } 948e5c31af7Sopenharmony_ci "" 949e5c31af7Sopenharmony_ci end 950e5c31af7Sopenharmony_ci 951e5c31af7Sopenharmony_ci case inout_int 952e5c31af7Sopenharmony_ci values 953e5c31af7Sopenharmony_ci { 954e5c31af7Sopenharmony_ci input int in0 = [ 0 | 1 | -2 | 6 ]; 955e5c31af7Sopenharmony_ci output int out0 = [ 0 | -1 | 2 | -6 ]; 956e5c31af7Sopenharmony_ci } 957e5c31af7Sopenharmony_ci 958e5c31af7Sopenharmony_ci both "" 959e5c31af7Sopenharmony_ci precision mediump float; 960e5c31af7Sopenharmony_ci precision mediump int; 961e5c31af7Sopenharmony_ci ${DECLARATIONS} 962e5c31af7Sopenharmony_ci 963e5c31af7Sopenharmony_ci void func (inout int a) 964e5c31af7Sopenharmony_ci { 965e5c31af7Sopenharmony_ci a = -a; 966e5c31af7Sopenharmony_ci } 967e5c31af7Sopenharmony_ci 968e5c31af7Sopenharmony_ci void main() 969e5c31af7Sopenharmony_ci { 970e5c31af7Sopenharmony_ci ${SETUP} 971e5c31af7Sopenharmony_ci int f = 1; 972e5c31af7Sopenharmony_ci func(f); 973e5c31af7Sopenharmony_ci out0 = f * in0; 974e5c31af7Sopenharmony_ci ${OUTPUT} 975e5c31af7Sopenharmony_ci } 976e5c31af7Sopenharmony_ci "" 977e5c31af7Sopenharmony_ci end 978e5c31af7Sopenharmony_ci 979e5c31af7Sopenharmony_ci case in_lowp_int 980e5c31af7Sopenharmony_ci values 981e5c31af7Sopenharmony_ci { 982e5c31af7Sopenharmony_ci input int in0 = [ 0 | 1 | -2 | 4 ]; 983e5c31af7Sopenharmony_ci output int out0 = [ 0 | -1 | 2 | -4 ]; 984e5c31af7Sopenharmony_ci } 985e5c31af7Sopenharmony_ci 986e5c31af7Sopenharmony_ci both "" 987e5c31af7Sopenharmony_ci precision mediump float; 988e5c31af7Sopenharmony_ci precision mediump int; 989e5c31af7Sopenharmony_ci ${DECLARATIONS} 990e5c31af7Sopenharmony_ci 991e5c31af7Sopenharmony_ci int func (in lowp int a) 992e5c31af7Sopenharmony_ci { 993e5c31af7Sopenharmony_ci a = -a; 994e5c31af7Sopenharmony_ci return 2 * a; 995e5c31af7Sopenharmony_ci } 996e5c31af7Sopenharmony_ci 997e5c31af7Sopenharmony_ci void main() 998e5c31af7Sopenharmony_ci { 999e5c31af7Sopenharmony_ci ${SETUP} 1000e5c31af7Sopenharmony_ci int f = in0; 1001e5c31af7Sopenharmony_ci int g = func(f); 1002e5c31af7Sopenharmony_ci out0 = f + g; 1003e5c31af7Sopenharmony_ci ${OUTPUT} 1004e5c31af7Sopenharmony_ci } 1005e5c31af7Sopenharmony_ci "" 1006e5c31af7Sopenharmony_ci end 1007e5c31af7Sopenharmony_ci 1008e5c31af7Sopenharmony_ci case out_lowp_int 1009e5c31af7Sopenharmony_ci values 1010e5c31af7Sopenharmony_ci { 1011e5c31af7Sopenharmony_ci input int in0 = [ 0 | 1 | -2 | 6 ]; 1012e5c31af7Sopenharmony_ci output int out0 = [ 0 | -1 | 2 | -6 ]; 1013e5c31af7Sopenharmony_ci } 1014e5c31af7Sopenharmony_ci 1015e5c31af7Sopenharmony_ci both "" 1016e5c31af7Sopenharmony_ci precision mediump float; 1017e5c31af7Sopenharmony_ci precision mediump int; 1018e5c31af7Sopenharmony_ci ${DECLARATIONS} 1019e5c31af7Sopenharmony_ci 1020e5c31af7Sopenharmony_ci void func (out lowp int a) 1021e5c31af7Sopenharmony_ci { 1022e5c31af7Sopenharmony_ci a = -1; 1023e5c31af7Sopenharmony_ci } 1024e5c31af7Sopenharmony_ci 1025e5c31af7Sopenharmony_ci void main() 1026e5c31af7Sopenharmony_ci { 1027e5c31af7Sopenharmony_ci ${SETUP} 1028e5c31af7Sopenharmony_ci int f = 1; 1029e5c31af7Sopenharmony_ci func(f); 1030e5c31af7Sopenharmony_ci out0 = f * in0; 1031e5c31af7Sopenharmony_ci ${OUTPUT} 1032e5c31af7Sopenharmony_ci } 1033e5c31af7Sopenharmony_ci "" 1034e5c31af7Sopenharmony_ci end 1035e5c31af7Sopenharmony_ci 1036e5c31af7Sopenharmony_ci case inout_lowp_int 1037e5c31af7Sopenharmony_ci values 1038e5c31af7Sopenharmony_ci { 1039e5c31af7Sopenharmony_ci input int in0 = [ 0 | 1 | -2 | 6 ]; 1040e5c31af7Sopenharmony_ci output int out0 = [ 0 | -1 | 2 | -6 ]; 1041e5c31af7Sopenharmony_ci } 1042e5c31af7Sopenharmony_ci 1043e5c31af7Sopenharmony_ci both "" 1044e5c31af7Sopenharmony_ci precision mediump float; 1045e5c31af7Sopenharmony_ci precision mediump int; 1046e5c31af7Sopenharmony_ci ${DECLARATIONS} 1047e5c31af7Sopenharmony_ci 1048e5c31af7Sopenharmony_ci void func (inout lowp int a) 1049e5c31af7Sopenharmony_ci { 1050e5c31af7Sopenharmony_ci a = -a; 1051e5c31af7Sopenharmony_ci } 1052e5c31af7Sopenharmony_ci 1053e5c31af7Sopenharmony_ci void main() 1054e5c31af7Sopenharmony_ci { 1055e5c31af7Sopenharmony_ci ${SETUP} 1056e5c31af7Sopenharmony_ci int f = 1; 1057e5c31af7Sopenharmony_ci func(f); 1058e5c31af7Sopenharmony_ci out0 = f * in0; 1059e5c31af7Sopenharmony_ci ${OUTPUT} 1060e5c31af7Sopenharmony_ci } 1061e5c31af7Sopenharmony_ci "" 1062e5c31af7Sopenharmony_ci end 1063e5c31af7Sopenharmony_ci 1064e5c31af7Sopenharmony_ci case in_highp_int 1065e5c31af7Sopenharmony_ci values 1066e5c31af7Sopenharmony_ci { 1067e5c31af7Sopenharmony_ci input int in0 = [ 0 | 1 | -2 | 4 ]; 1068e5c31af7Sopenharmony_ci output int out0 = [ 0 | -1 | 2 | -4 ]; 1069e5c31af7Sopenharmony_ci } 1070e5c31af7Sopenharmony_ci 1071e5c31af7Sopenharmony_ci both "" 1072e5c31af7Sopenharmony_ci precision mediump float; 1073e5c31af7Sopenharmony_ci precision mediump int; 1074e5c31af7Sopenharmony_ci ${DECLARATIONS} 1075e5c31af7Sopenharmony_ci 1076e5c31af7Sopenharmony_ci int func (in highp int a) 1077e5c31af7Sopenharmony_ci { 1078e5c31af7Sopenharmony_ci a = -a; 1079e5c31af7Sopenharmony_ci return 2 * a; 1080e5c31af7Sopenharmony_ci } 1081e5c31af7Sopenharmony_ci 1082e5c31af7Sopenharmony_ci void main() 1083e5c31af7Sopenharmony_ci { 1084e5c31af7Sopenharmony_ci ${SETUP} 1085e5c31af7Sopenharmony_ci int f = in0; 1086e5c31af7Sopenharmony_ci int g = func(f); 1087e5c31af7Sopenharmony_ci out0 = f + g; 1088e5c31af7Sopenharmony_ci ${OUTPUT} 1089e5c31af7Sopenharmony_ci } 1090e5c31af7Sopenharmony_ci "" 1091e5c31af7Sopenharmony_ci end 1092e5c31af7Sopenharmony_ci 1093e5c31af7Sopenharmony_ci case out_highp_int 1094e5c31af7Sopenharmony_ci values 1095e5c31af7Sopenharmony_ci { 1096e5c31af7Sopenharmony_ci input int in0 = [ 0 | 1 | -2 | 6 ]; 1097e5c31af7Sopenharmony_ci output int out0 = [ 0 | -1 | 2 | -6 ]; 1098e5c31af7Sopenharmony_ci } 1099e5c31af7Sopenharmony_ci 1100e5c31af7Sopenharmony_ci both "" 1101e5c31af7Sopenharmony_ci precision mediump float; 1102e5c31af7Sopenharmony_ci precision mediump int; 1103e5c31af7Sopenharmony_ci ${DECLARATIONS} 1104e5c31af7Sopenharmony_ci 1105e5c31af7Sopenharmony_ci void func (out highp int a) 1106e5c31af7Sopenharmony_ci { 1107e5c31af7Sopenharmony_ci a = -1; 1108e5c31af7Sopenharmony_ci } 1109e5c31af7Sopenharmony_ci 1110e5c31af7Sopenharmony_ci void main() 1111e5c31af7Sopenharmony_ci { 1112e5c31af7Sopenharmony_ci ${SETUP} 1113e5c31af7Sopenharmony_ci int f = 1; 1114e5c31af7Sopenharmony_ci func(f); 1115e5c31af7Sopenharmony_ci out0 = f * in0; 1116e5c31af7Sopenharmony_ci ${OUTPUT} 1117e5c31af7Sopenharmony_ci } 1118e5c31af7Sopenharmony_ci "" 1119e5c31af7Sopenharmony_ci end 1120e5c31af7Sopenharmony_ci 1121e5c31af7Sopenharmony_ci case inout_highp_int 1122e5c31af7Sopenharmony_ci values 1123e5c31af7Sopenharmony_ci { 1124e5c31af7Sopenharmony_ci input int in0 = [ 0 | 1 | -2 | 6 ]; 1125e5c31af7Sopenharmony_ci output int out0 = [ 0 | -1 | 2 | -6 ]; 1126e5c31af7Sopenharmony_ci } 1127e5c31af7Sopenharmony_ci 1128e5c31af7Sopenharmony_ci both "" 1129e5c31af7Sopenharmony_ci precision mediump float; 1130e5c31af7Sopenharmony_ci precision mediump int; 1131e5c31af7Sopenharmony_ci ${DECLARATIONS} 1132e5c31af7Sopenharmony_ci 1133e5c31af7Sopenharmony_ci void func (inout highp int a) 1134e5c31af7Sopenharmony_ci { 1135e5c31af7Sopenharmony_ci a = -a; 1136e5c31af7Sopenharmony_ci } 1137e5c31af7Sopenharmony_ci 1138e5c31af7Sopenharmony_ci void main() 1139e5c31af7Sopenharmony_ci { 1140e5c31af7Sopenharmony_ci ${SETUP} 1141e5c31af7Sopenharmony_ci int f = 1; 1142e5c31af7Sopenharmony_ci func(f); 1143e5c31af7Sopenharmony_ci out0 = f * in0; 1144e5c31af7Sopenharmony_ci ${OUTPUT} 1145e5c31af7Sopenharmony_ci } 1146e5c31af7Sopenharmony_ci "" 1147e5c31af7Sopenharmony_ci end 1148e5c31af7Sopenharmony_ci 1149e5c31af7Sopenharmony_ci case const_int 1150e5c31af7Sopenharmony_ci values 1151e5c31af7Sopenharmony_ci { 1152e5c31af7Sopenharmony_ci input int in0 = [ 0 | 1 | -2 | 4 ]; 1153e5c31af7Sopenharmony_ci output int out0 = [ 0 | -1 | 2 | -4 ]; 1154e5c31af7Sopenharmony_ci } 1155e5c31af7Sopenharmony_ci 1156e5c31af7Sopenharmony_ci both "" 1157e5c31af7Sopenharmony_ci precision mediump float; 1158e5c31af7Sopenharmony_ci precision mediump int; 1159e5c31af7Sopenharmony_ci ${DECLARATIONS} 1160e5c31af7Sopenharmony_ci 1161e5c31af7Sopenharmony_ci int func (const int a) 1162e5c31af7Sopenharmony_ci { 1163e5c31af7Sopenharmony_ci int b = -a; 1164e5c31af7Sopenharmony_ci return 2 * b; 1165e5c31af7Sopenharmony_ci } 1166e5c31af7Sopenharmony_ci 1167e5c31af7Sopenharmony_ci void main() 1168e5c31af7Sopenharmony_ci { 1169e5c31af7Sopenharmony_ci ${SETUP} 1170e5c31af7Sopenharmony_ci int f = in0; 1171e5c31af7Sopenharmony_ci int g = func(f); 1172e5c31af7Sopenharmony_ci out0 = f + g; 1173e5c31af7Sopenharmony_ci ${OUTPUT} 1174e5c31af7Sopenharmony_ci } 1175e5c31af7Sopenharmony_ci "" 1176e5c31af7Sopenharmony_ci end 1177e5c31af7Sopenharmony_ci 1178e5c31af7Sopenharmony_ci case const_in_int 1179e5c31af7Sopenharmony_ci values 1180e5c31af7Sopenharmony_ci { 1181e5c31af7Sopenharmony_ci input int in0 = [ 0 | 1 | -2 | 4 ]; 1182e5c31af7Sopenharmony_ci output int out0 = [ 0 | -1 | 2 | -4 ]; 1183e5c31af7Sopenharmony_ci } 1184e5c31af7Sopenharmony_ci 1185e5c31af7Sopenharmony_ci both "" 1186e5c31af7Sopenharmony_ci precision mediump float; 1187e5c31af7Sopenharmony_ci precision mediump int; 1188e5c31af7Sopenharmony_ci ${DECLARATIONS} 1189e5c31af7Sopenharmony_ci 1190e5c31af7Sopenharmony_ci int func (const in int a) 1191e5c31af7Sopenharmony_ci { 1192e5c31af7Sopenharmony_ci int b = -a; 1193e5c31af7Sopenharmony_ci return 2 * b; 1194e5c31af7Sopenharmony_ci } 1195e5c31af7Sopenharmony_ci 1196e5c31af7Sopenharmony_ci void main() 1197e5c31af7Sopenharmony_ci { 1198e5c31af7Sopenharmony_ci ${SETUP} 1199e5c31af7Sopenharmony_ci int f = in0; 1200e5c31af7Sopenharmony_ci int g = func(f); 1201e5c31af7Sopenharmony_ci out0 = f + g; 1202e5c31af7Sopenharmony_ci ${OUTPUT} 1203e5c31af7Sopenharmony_ci } 1204e5c31af7Sopenharmony_ci "" 1205e5c31af7Sopenharmony_ci end 1206e5c31af7Sopenharmony_ci 1207e5c31af7Sopenharmony_ci case in_bool 1208e5c31af7Sopenharmony_ci values 1209e5c31af7Sopenharmony_ci { 1210e5c31af7Sopenharmony_ci input bool in0 = [ true | false ]; 1211e5c31af7Sopenharmony_ci output bool out0 = [ true | true ]; 1212e5c31af7Sopenharmony_ci } 1213e5c31af7Sopenharmony_ci 1214e5c31af7Sopenharmony_ci both "" 1215e5c31af7Sopenharmony_ci precision mediump float; 1216e5c31af7Sopenharmony_ci ${DECLARATIONS} 1217e5c31af7Sopenharmony_ci 1218e5c31af7Sopenharmony_ci bool func (in bool a) 1219e5c31af7Sopenharmony_ci { 1220e5c31af7Sopenharmony_ci a = !a; 1221e5c31af7Sopenharmony_ci return a; 1222e5c31af7Sopenharmony_ci } 1223e5c31af7Sopenharmony_ci 1224e5c31af7Sopenharmony_ci void main() 1225e5c31af7Sopenharmony_ci { 1226e5c31af7Sopenharmony_ci ${SETUP} 1227e5c31af7Sopenharmony_ci bool f = in0; 1228e5c31af7Sopenharmony_ci bool g = func(f); 1229e5c31af7Sopenharmony_ci out0 = (f != g); 1230e5c31af7Sopenharmony_ci ${OUTPUT} 1231e5c31af7Sopenharmony_ci } 1232e5c31af7Sopenharmony_ci "" 1233e5c31af7Sopenharmony_ci end 1234e5c31af7Sopenharmony_ci 1235e5c31af7Sopenharmony_ci case out_bool 1236e5c31af7Sopenharmony_ci values 1237e5c31af7Sopenharmony_ci { 1238e5c31af7Sopenharmony_ci input bool in0 = [ true | false ]; 1239e5c31af7Sopenharmony_ci output bool out0 = [ false | true ]; 1240e5c31af7Sopenharmony_ci } 1241e5c31af7Sopenharmony_ci 1242e5c31af7Sopenharmony_ci both "" 1243e5c31af7Sopenharmony_ci precision mediump float; 1244e5c31af7Sopenharmony_ci ${DECLARATIONS} 1245e5c31af7Sopenharmony_ci 1246e5c31af7Sopenharmony_ci void func (out bool a) 1247e5c31af7Sopenharmony_ci { 1248e5c31af7Sopenharmony_ci a = false; 1249e5c31af7Sopenharmony_ci } 1250e5c31af7Sopenharmony_ci 1251e5c31af7Sopenharmony_ci void main() 1252e5c31af7Sopenharmony_ci { 1253e5c31af7Sopenharmony_ci ${SETUP} 1254e5c31af7Sopenharmony_ci bool f = true; 1255e5c31af7Sopenharmony_ci func(f); 1256e5c31af7Sopenharmony_ci out0 = (in0 == f); 1257e5c31af7Sopenharmony_ci ${OUTPUT} 1258e5c31af7Sopenharmony_ci } 1259e5c31af7Sopenharmony_ci "" 1260e5c31af7Sopenharmony_ci end 1261e5c31af7Sopenharmony_ci 1262e5c31af7Sopenharmony_ci case inout_bool 1263e5c31af7Sopenharmony_ci values 1264e5c31af7Sopenharmony_ci { 1265e5c31af7Sopenharmony_ci input bool in0 = [ true | false ]; 1266e5c31af7Sopenharmony_ci output bool out0 = [ false | true ]; 1267e5c31af7Sopenharmony_ci } 1268e5c31af7Sopenharmony_ci 1269e5c31af7Sopenharmony_ci both "" 1270e5c31af7Sopenharmony_ci precision mediump float; 1271e5c31af7Sopenharmony_ci ${DECLARATIONS} 1272e5c31af7Sopenharmony_ci 1273e5c31af7Sopenharmony_ci void func (inout bool a) 1274e5c31af7Sopenharmony_ci { 1275e5c31af7Sopenharmony_ci a = !a; 1276e5c31af7Sopenharmony_ci } 1277e5c31af7Sopenharmony_ci 1278e5c31af7Sopenharmony_ci void main() 1279e5c31af7Sopenharmony_ci { 1280e5c31af7Sopenharmony_ci ${SETUP} 1281e5c31af7Sopenharmony_ci bool f = true; 1282e5c31af7Sopenharmony_ci func(f); 1283e5c31af7Sopenharmony_ci out0 = (in0 == f); 1284e5c31af7Sopenharmony_ci ${OUTPUT} 1285e5c31af7Sopenharmony_ci } 1286e5c31af7Sopenharmony_ci "" 1287e5c31af7Sopenharmony_ci end 1288e5c31af7Sopenharmony_ci 1289e5c31af7Sopenharmony_ciend # qualifiers 1290e5c31af7Sopenharmony_ci 1291e5c31af7Sopenharmony_cigroup declarations "Function Declarations" 1292e5c31af7Sopenharmony_ci 1293e5c31af7Sopenharmony_ci case void_vs_no_void 1294e5c31af7Sopenharmony_ci values 1295e5c31af7Sopenharmony_ci { 1296e5c31af7Sopenharmony_ci input float in0 = [ 0.0 | 1.0 | -2.0 | 2.5 ]; 1297e5c31af7Sopenharmony_ci output float out0 = [ 0.0 | -1.0 | 2.0 | -2.5 ]; 1298e5c31af7Sopenharmony_ci } 1299e5c31af7Sopenharmony_ci 1300e5c31af7Sopenharmony_ci both "" 1301e5c31af7Sopenharmony_ci precision mediump float; 1302e5c31af7Sopenharmony_ci ${DECLARATIONS} 1303e5c31af7Sopenharmony_ci 1304e5c31af7Sopenharmony_ci float func (); 1305e5c31af7Sopenharmony_ci 1306e5c31af7Sopenharmony_ci void main() 1307e5c31af7Sopenharmony_ci { 1308e5c31af7Sopenharmony_ci out0 = func() * in0; 1309e5c31af7Sopenharmony_ci ${OUTPUT} 1310e5c31af7Sopenharmony_ci } 1311e5c31af7Sopenharmony_ci 1312e5c31af7Sopenharmony_ci float func (void) 1313e5c31af7Sopenharmony_ci { 1314e5c31af7Sopenharmony_ci return -1.0; 1315e5c31af7Sopenharmony_ci } 1316e5c31af7Sopenharmony_ci "" 1317e5c31af7Sopenharmony_ci end 1318e5c31af7Sopenharmony_ci 1319e5c31af7Sopenharmony_ci case in_vs_no_in 1320e5c31af7Sopenharmony_ci values 1321e5c31af7Sopenharmony_ci { 1322e5c31af7Sopenharmony_ci input float in0 = [ 0.0 | 1.0 | -2.0 | 2.5 ]; 1323e5c31af7Sopenharmony_ci output float out0 = [ 0.0 | -1.0 | 2.0 | -2.5 ]; 1324e5c31af7Sopenharmony_ci } 1325e5c31af7Sopenharmony_ci 1326e5c31af7Sopenharmony_ci both "" 1327e5c31af7Sopenharmony_ci precision mediump float; 1328e5c31af7Sopenharmony_ci ${DECLARATIONS} 1329e5c31af7Sopenharmony_ci 1330e5c31af7Sopenharmony_ci float func (float f); 1331e5c31af7Sopenharmony_ci 1332e5c31af7Sopenharmony_ci void main() 1333e5c31af7Sopenharmony_ci { 1334e5c31af7Sopenharmony_ci out0 = func(in0); 1335e5c31af7Sopenharmony_ci ${OUTPUT} 1336e5c31af7Sopenharmony_ci } 1337e5c31af7Sopenharmony_ci 1338e5c31af7Sopenharmony_ci float func (in float f) 1339e5c31af7Sopenharmony_ci { 1340e5c31af7Sopenharmony_ci return -f; 1341e5c31af7Sopenharmony_ci } 1342e5c31af7Sopenharmony_ci "" 1343e5c31af7Sopenharmony_ci end 1344e5c31af7Sopenharmony_ci 1345e5c31af7Sopenharmony_ci case default_vs_explicit_precision 1346e5c31af7Sopenharmony_ci values 1347e5c31af7Sopenharmony_ci { 1348e5c31af7Sopenharmony_ci input float in0 = [ 0.0 | 1.0 | -2.0 | 2.5 ]; 1349e5c31af7Sopenharmony_ci output float out0 = [ 0.0 | -1.0 | 2.0 | -2.5 ]; 1350e5c31af7Sopenharmony_ci } 1351e5c31af7Sopenharmony_ci 1352e5c31af7Sopenharmony_ci both "" 1353e5c31af7Sopenharmony_ci precision mediump float; 1354e5c31af7Sopenharmony_ci ${DECLARATIONS} 1355e5c31af7Sopenharmony_ci 1356e5c31af7Sopenharmony_ci float func (float f); 1357e5c31af7Sopenharmony_ci 1358e5c31af7Sopenharmony_ci void main() 1359e5c31af7Sopenharmony_ci { 1360e5c31af7Sopenharmony_ci out0 = func(in0); 1361e5c31af7Sopenharmony_ci ${OUTPUT} 1362e5c31af7Sopenharmony_ci } 1363e5c31af7Sopenharmony_ci 1364e5c31af7Sopenharmony_ci float func (mediump float f) 1365e5c31af7Sopenharmony_ci { 1366e5c31af7Sopenharmony_ci return -f; 1367e5c31af7Sopenharmony_ci } 1368e5c31af7Sopenharmony_ci "" 1369e5c31af7Sopenharmony_ci end 1370e5c31af7Sopenharmony_ci 1371e5c31af7Sopenharmony_ciend # declarations 1372e5c31af7Sopenharmony_ci 1373e5c31af7Sopenharmony_cigroup overloading "Function Overloading" 1374e5c31af7Sopenharmony_ci 1375e5c31af7Sopenharmony_ci case user_func_arg_type_simple 1376e5c31af7Sopenharmony_ci values 1377e5c31af7Sopenharmony_ci { 1378e5c31af7Sopenharmony_ci input float in0 = [ 0.0 | 1.0 | -2.0 | 2.5 ]; 1379e5c31af7Sopenharmony_ci output float out0 = [ 0.0 | -1.0 | 2.0 | -2.5 ]; 1380e5c31af7Sopenharmony_ci } 1381e5c31af7Sopenharmony_ci 1382e5c31af7Sopenharmony_ci both "" 1383e5c31af7Sopenharmony_ci precision mediump float; 1384e5c31af7Sopenharmony_ci precision mediump int; 1385e5c31af7Sopenharmony_ci ${DECLARATIONS} 1386e5c31af7Sopenharmony_ci 1387e5c31af7Sopenharmony_ci float func (float a) 1388e5c31af7Sopenharmony_ci { 1389e5c31af7Sopenharmony_ci return -a; 1390e5c31af7Sopenharmony_ci } 1391e5c31af7Sopenharmony_ci 1392e5c31af7Sopenharmony_ci int func (int a) 1393e5c31af7Sopenharmony_ci { 1394e5c31af7Sopenharmony_ci return -a; 1395e5c31af7Sopenharmony_ci } 1396e5c31af7Sopenharmony_ci 1397e5c31af7Sopenharmony_ci void main() 1398e5c31af7Sopenharmony_ci { 1399e5c31af7Sopenharmony_ci out0 = func(in0) * float(func(-1)); 1400e5c31af7Sopenharmony_ci ${OUTPUT} 1401e5c31af7Sopenharmony_ci } 1402e5c31af7Sopenharmony_ci "" 1403e5c31af7Sopenharmony_ci end 1404e5c31af7Sopenharmony_ci 1405e5c31af7Sopenharmony_ci case user_func_arg_float_types 1406e5c31af7Sopenharmony_ci values 1407e5c31af7Sopenharmony_ci { 1408e5c31af7Sopenharmony_ci input float in0 = [ 0.0 | 1.0 | -2.0 | 2.5 ]; 1409e5c31af7Sopenharmony_ci output float out0 = [ 0.0 | -1.0 | 2.0 | -2.5 ]; 1410e5c31af7Sopenharmony_ci } 1411e5c31af7Sopenharmony_ci 1412e5c31af7Sopenharmony_ci both "" 1413e5c31af7Sopenharmony_ci precision mediump float; 1414e5c31af7Sopenharmony_ci precision mediump int; 1415e5c31af7Sopenharmony_ci ${DECLARATIONS} 1416e5c31af7Sopenharmony_ci 1417e5c31af7Sopenharmony_ci float func (float a) { return -a; } 1418e5c31af7Sopenharmony_ci vec2 func (vec2 a) { return a.yx; } 1419e5c31af7Sopenharmony_ci vec3 func (vec3 a) { return a.xxx; } 1420e5c31af7Sopenharmony_ci vec4 func (vec4 a) { return a.wwww; } 1421e5c31af7Sopenharmony_ci 1422e5c31af7Sopenharmony_ci void main() 1423e5c31af7Sopenharmony_ci { 1424e5c31af7Sopenharmony_ci out0 = func(func(func(func(vec4(in0)).xyz).xy).x); 1425e5c31af7Sopenharmony_ci ${OUTPUT} 1426e5c31af7Sopenharmony_ci } 1427e5c31af7Sopenharmony_ci "" 1428e5c31af7Sopenharmony_ci end 1429e5c31af7Sopenharmony_ci 1430e5c31af7Sopenharmony_ci case user_func_arg_int_types 1431e5c31af7Sopenharmony_ci values 1432e5c31af7Sopenharmony_ci { 1433e5c31af7Sopenharmony_ci input int in0 = [ 0 | 1 | -2 | 6 ]; 1434e5c31af7Sopenharmony_ci output int out0 = [ 0 | -1 | 2 | -6 ]; 1435e5c31af7Sopenharmony_ci } 1436e5c31af7Sopenharmony_ci 1437e5c31af7Sopenharmony_ci both "" 1438e5c31af7Sopenharmony_ci precision mediump float; 1439e5c31af7Sopenharmony_ci precision mediump int; 1440e5c31af7Sopenharmony_ci ${DECLARATIONS} 1441e5c31af7Sopenharmony_ci 1442e5c31af7Sopenharmony_ci int func (int a) { return -a; } 1443e5c31af7Sopenharmony_ci ivec2 func (ivec2 a) { return a.yx; } 1444e5c31af7Sopenharmony_ci ivec3 func (ivec3 a) { return a.xxx; } 1445e5c31af7Sopenharmony_ci ivec4 func (ivec4 a) { return a.wwww; } 1446e5c31af7Sopenharmony_ci 1447e5c31af7Sopenharmony_ci void main() 1448e5c31af7Sopenharmony_ci { 1449e5c31af7Sopenharmony_ci ${SETUP} 1450e5c31af7Sopenharmony_ci out0 = func(func(func(func(ivec4(in0)).xyz).xy).x); 1451e5c31af7Sopenharmony_ci ${OUTPUT} 1452e5c31af7Sopenharmony_ci } 1453e5c31af7Sopenharmony_ci "" 1454e5c31af7Sopenharmony_ci end 1455e5c31af7Sopenharmony_ci 1456e5c31af7Sopenharmony_ci case user_func_arg_bool_types 1457e5c31af7Sopenharmony_ci values 1458e5c31af7Sopenharmony_ci { 1459e5c31af7Sopenharmony_ci input bool in0 = [ true | false ]; 1460e5c31af7Sopenharmony_ci output bool out0 = [ false | true ]; 1461e5c31af7Sopenharmony_ci } 1462e5c31af7Sopenharmony_ci 1463e5c31af7Sopenharmony_ci both "" 1464e5c31af7Sopenharmony_ci precision mediump float; 1465e5c31af7Sopenharmony_ci ${DECLARATIONS} 1466e5c31af7Sopenharmony_ci 1467e5c31af7Sopenharmony_ci bool func (bool a) { return !a; } 1468e5c31af7Sopenharmony_ci bvec2 func (bvec2 a) { return a.yx; } 1469e5c31af7Sopenharmony_ci bvec3 func (bvec3 a) { return a.xxx; } 1470e5c31af7Sopenharmony_ci bvec4 func (bvec4 a) { return a.wwww; } 1471e5c31af7Sopenharmony_ci 1472e5c31af7Sopenharmony_ci void main() 1473e5c31af7Sopenharmony_ci { 1474e5c31af7Sopenharmony_ci ${SETUP} 1475e5c31af7Sopenharmony_ci out0 = func(func(func(func(bvec4(in0)).xyz).xy).x); 1476e5c31af7Sopenharmony_ci ${OUTPUT} 1477e5c31af7Sopenharmony_ci } 1478e5c31af7Sopenharmony_ci "" 1479e5c31af7Sopenharmony_ci end 1480e5c31af7Sopenharmony_ci 1481e5c31af7Sopenharmony_ci case user_func_arg_basic_types 1482e5c31af7Sopenharmony_ci values 1483e5c31af7Sopenharmony_ci { 1484e5c31af7Sopenharmony_ci input float in0 = [ 0.0 | 1.0 | -2.0 | 2.5 ]; 1485e5c31af7Sopenharmony_ci output float out0 = [ 0.0 | -1.0 | 2.0 | -2.5 ]; 1486e5c31af7Sopenharmony_ci } 1487e5c31af7Sopenharmony_ci 1488e5c31af7Sopenharmony_ci both "" 1489e5c31af7Sopenharmony_ci precision mediump float; 1490e5c31af7Sopenharmony_ci precision mediump int; 1491e5c31af7Sopenharmony_ci ${DECLARATIONS} 1492e5c31af7Sopenharmony_ci 1493e5c31af7Sopenharmony_ci float func (float a) { return -a; } 1494e5c31af7Sopenharmony_ci vec2 func (vec2 a) { return a.yx; } 1495e5c31af7Sopenharmony_ci vec3 func (vec3 a) { return a.xxx; } 1496e5c31af7Sopenharmony_ci vec4 func (vec4 a) { return a.wwww; } 1497e5c31af7Sopenharmony_ci int func (int a) { return -a; } 1498e5c31af7Sopenharmony_ci ivec2 func (ivec2 a) { return a.yx; } 1499e5c31af7Sopenharmony_ci ivec3 func (ivec3 a) { return a.xxx; } 1500e5c31af7Sopenharmony_ci ivec4 func (ivec4 a) { return a.wwww; } 1501e5c31af7Sopenharmony_ci bool func (bool a) { return !a; } 1502e5c31af7Sopenharmony_ci bvec2 func (bvec2 a) { return a.yx; } 1503e5c31af7Sopenharmony_ci bvec3 func (bvec3 a) { return a.xxx; } 1504e5c31af7Sopenharmony_ci bvec4 func (bvec4 a) { return a.wwww; } 1505e5c31af7Sopenharmony_ci 1506e5c31af7Sopenharmony_ci void main() 1507e5c31af7Sopenharmony_ci { 1508e5c31af7Sopenharmony_ci ${SETUP} 1509e5c31af7Sopenharmony_ci if (func(func(bvec4(false)).x)) 1510e5c31af7Sopenharmony_ci out0 = func(in0) * float(func(-1)); 1511e5c31af7Sopenharmony_ci else 1512e5c31af7Sopenharmony_ci out0 = float(func(func(ivec4(func(func(func(vec4(0.5)).xyz).xy).xxxx)).xy).x); 1513e5c31af7Sopenharmony_ci ${OUTPUT} 1514e5c31af7Sopenharmony_ci } 1515e5c31af7Sopenharmony_ci "" 1516e5c31af7Sopenharmony_ci end 1517e5c31af7Sopenharmony_ci 1518e5c31af7Sopenharmony_ci case user_func_arg_complex_types 1519e5c31af7Sopenharmony_ci values 1520e5c31af7Sopenharmony_ci { 1521e5c31af7Sopenharmony_ci input float in0 = [ 0.0 | 1.0 | -2.0 | 2.5 ]; 1522e5c31af7Sopenharmony_ci output float out0 = [ 0.0 | -1.0 | 2.0 | -2.5 ]; 1523e5c31af7Sopenharmony_ci } 1524e5c31af7Sopenharmony_ci 1525e5c31af7Sopenharmony_ci both "" 1526e5c31af7Sopenharmony_ci precision mediump float; 1527e5c31af7Sopenharmony_ci precision mediump int; 1528e5c31af7Sopenharmony_ci ${DECLARATIONS} 1529e5c31af7Sopenharmony_ci 1530e5c31af7Sopenharmony_ci struct Pos { float a, b, c; }; 1531e5c31af7Sopenharmony_ci struct Line { Pos start, end; }; 1532e5c31af7Sopenharmony_ci 1533e5c31af7Sopenharmony_ci float func (float a) { return -a; } 1534e5c31af7Sopenharmony_ci float func (float a[4]) { return a[0] + a[3]; } 1535e5c31af7Sopenharmony_ci vec2 func (vec2 a) { return a.yx; } 1536e5c31af7Sopenharmony_ci vec3 func (vec3 a) { return a.xxx; } 1537e5c31af7Sopenharmony_ci vec4 func (vec4 a) { return a.wwww; } 1538e5c31af7Sopenharmony_ci vec4 func (vec4 a[4]) { return a[1] + a[2]; } 1539e5c31af7Sopenharmony_ci int func (int a) { return -a; } 1540e5c31af7Sopenharmony_ci ivec2 func (ivec2 a) { return a.yx; } 1541e5c31af7Sopenharmony_ci ivec3 func (ivec3 a) { return a.xxx; } 1542e5c31af7Sopenharmony_ci ivec4 func (ivec4 a) { return a.wwww; } 1543e5c31af7Sopenharmony_ci bool func (bool a) { return !a; } 1544e5c31af7Sopenharmony_ci bvec2 func (bvec2 a) { return a.yx; } 1545e5c31af7Sopenharmony_ci bvec3 func (bvec3 a) { return a.xxx; } 1546e5c31af7Sopenharmony_ci bvec4 func (bvec4 a) { return a.wwww; } 1547e5c31af7Sopenharmony_ci Pos func (Pos a) { return a; } 1548e5c31af7Sopenharmony_ci Line func (Line a) { return Line(a.end, a.start); } 1549e5c31af7Sopenharmony_ci 1550e5c31af7Sopenharmony_ci void main() 1551e5c31af7Sopenharmony_ci { 1552e5c31af7Sopenharmony_ci ${SETUP} 1553e5c31af7Sopenharmony_ci float arr[4]; 1554e5c31af7Sopenharmony_ci vec4 arr2[4]; 1555e5c31af7Sopenharmony_ci out0 = func(arr) + func(arr2).x; 1556e5c31af7Sopenharmony_ci if (func(func(bvec4(false)).x)) 1557e5c31af7Sopenharmony_ci out0 = func(in0) * float(func(-1)); 1558e5c31af7Sopenharmony_ci else 1559e5c31af7Sopenharmony_ci out0 = float(func(func(ivec4(func(func(func(vec4(0.5)).xyz).xy).xxxx)).xy).x); 1560e5c31af7Sopenharmony_ci ${OUTPUT} 1561e5c31af7Sopenharmony_ci } 1562e5c31af7Sopenharmony_ci "" 1563e5c31af7Sopenharmony_ci end 1564e5c31af7Sopenharmony_ci 1565e5c31af7Sopenharmony_ci case user_func_arguments 1566e5c31af7Sopenharmony_ci values 1567e5c31af7Sopenharmony_ci { 1568e5c31af7Sopenharmony_ci input float in0 = [ 0.0 | 1.0 | -2.0 | 2.5 ]; 1569e5c31af7Sopenharmony_ci output float out0 = [ 0.0 | -1.0 | 2.0 | -2.5 ]; 1570e5c31af7Sopenharmony_ci } 1571e5c31af7Sopenharmony_ci 1572e5c31af7Sopenharmony_ci both "" 1573e5c31af7Sopenharmony_ci precision mediump float; 1574e5c31af7Sopenharmony_ci ${DECLARATIONS} 1575e5c31af7Sopenharmony_ci 1576e5c31af7Sopenharmony_ci float func (float a) 1577e5c31af7Sopenharmony_ci { 1578e5c31af7Sopenharmony_ci return -a; 1579e5c31af7Sopenharmony_ci } 1580e5c31af7Sopenharmony_ci 1581e5c31af7Sopenharmony_ci float func (float a, float b) 1582e5c31af7Sopenharmony_ci { 1583e5c31af7Sopenharmony_ci return a * b; 1584e5c31af7Sopenharmony_ci } 1585e5c31af7Sopenharmony_ci 1586e5c31af7Sopenharmony_ci void main() 1587e5c31af7Sopenharmony_ci { 1588e5c31af7Sopenharmony_ci out0 = func(in0) * func(-0.5, -2.0); 1589e5c31af7Sopenharmony_ci ${OUTPUT} 1590e5c31af7Sopenharmony_ci } 1591e5c31af7Sopenharmony_ci "" 1592e5c31af7Sopenharmony_ci end 1593e5c31af7Sopenharmony_ci 1594e5c31af7Sopenharmony_ci case builtin_sin 1595e5c31af7Sopenharmony_ci values 1596e5c31af7Sopenharmony_ci { 1597e5c31af7Sopenharmony_ci input int in0 = [ -1 | 0 | 1 | 4 ]; 1598e5c31af7Sopenharmony_ci output int out0 = [ 1 | 0 | -1 | -4 ]; 1599e5c31af7Sopenharmony_ci } 1600e5c31af7Sopenharmony_ci 1601e5c31af7Sopenharmony_ci both "" 1602e5c31af7Sopenharmony_ci precision mediump float; 1603e5c31af7Sopenharmony_ci precision mediump int; 1604e5c31af7Sopenharmony_ci ${DECLARATIONS} 1605e5c31af7Sopenharmony_ci 1606e5c31af7Sopenharmony_ci int sin(int a) { return -a; } 1607e5c31af7Sopenharmony_ci 1608e5c31af7Sopenharmony_ci void main() 1609e5c31af7Sopenharmony_ci { 1610e5c31af7Sopenharmony_ci ${SETUP} 1611e5c31af7Sopenharmony_ci out0 = sin(in0); 1612e5c31af7Sopenharmony_ci ${OUTPUT} 1613e5c31af7Sopenharmony_ci } 1614e5c31af7Sopenharmony_ci "" 1615e5c31af7Sopenharmony_ci end 1616e5c31af7Sopenharmony_ci 1617e5c31af7Sopenharmony_ci case builtin_step 1618e5c31af7Sopenharmony_ci values 1619e5c31af7Sopenharmony_ci { 1620e5c31af7Sopenharmony_ci input int in0 = [ -1 | 0 | 1 | 4 ]; 1621e5c31af7Sopenharmony_ci output int out0 = [ 1 | 0 | -1 | -4 ]; 1622e5c31af7Sopenharmony_ci } 1623e5c31af7Sopenharmony_ci 1624e5c31af7Sopenharmony_ci both "" 1625e5c31af7Sopenharmony_ci precision mediump float; 1626e5c31af7Sopenharmony_ci precision mediump int; 1627e5c31af7Sopenharmony_ci ${DECLARATIONS} 1628e5c31af7Sopenharmony_ci 1629e5c31af7Sopenharmony_ci int step (float i, float j, int a) { return -a; } 1630e5c31af7Sopenharmony_ci 1631e5c31af7Sopenharmony_ci void main() 1632e5c31af7Sopenharmony_ci { 1633e5c31af7Sopenharmony_ci ${SETUP} 1634e5c31af7Sopenharmony_ci out0 = step(0.0, 1.0, in0); 1635e5c31af7Sopenharmony_ci ${OUTPUT} 1636e5c31af7Sopenharmony_ci } 1637e5c31af7Sopenharmony_ci "" 1638e5c31af7Sopenharmony_ci end 1639e5c31af7Sopenharmony_ci 1640e5c31af7Sopenharmony_ci case array_size 1641e5c31af7Sopenharmony_ci values 1642e5c31af7Sopenharmony_ci { 1643e5c31af7Sopenharmony_ci output float out0 = [ 1.0 ]; 1644e5c31af7Sopenharmony_ci } 1645e5c31af7Sopenharmony_ci 1646e5c31af7Sopenharmony_ci both "" 1647e5c31af7Sopenharmony_ci precision mediump float; 1648e5c31af7Sopenharmony_ci ${DECLARATIONS} 1649e5c31af7Sopenharmony_ci 1650e5c31af7Sopenharmony_ci float func (float f[3]) 1651e5c31af7Sopenharmony_ci { 1652e5c31af7Sopenharmony_ci return f[0]; 1653e5c31af7Sopenharmony_ci } 1654e5c31af7Sopenharmony_ci 1655e5c31af7Sopenharmony_ci float func (float f[4]) 1656e5c31af7Sopenharmony_ci { 1657e5c31af7Sopenharmony_ci return f[1]; 1658e5c31af7Sopenharmony_ci } 1659e5c31af7Sopenharmony_ci 1660e5c31af7Sopenharmony_ci void main () 1661e5c31af7Sopenharmony_ci { 1662e5c31af7Sopenharmony_ci ${SETUP} 1663e5c31af7Sopenharmony_ci float x[4]; 1664e5c31af7Sopenharmony_ci x[0] = -1.0; 1665e5c31af7Sopenharmony_ci x[1] = 1.0; 1666e5c31af7Sopenharmony_ci x[2] = x[3] = 0.0; 1667e5c31af7Sopenharmony_ci out0 = func(x); 1668e5c31af7Sopenharmony_ci ${OUTPUT} 1669e5c31af7Sopenharmony_ci } 1670e5c31af7Sopenharmony_ci "" 1671e5c31af7Sopenharmony_ci end 1672e5c31af7Sopenharmony_ci 1673e5c31af7Sopenharmony_ciend # overloading 1674e5c31af7Sopenharmony_ci 1675e5c31af7Sopenharmony_cigroup array_arguments "Arrays as Arguments" 1676e5c31af7Sopenharmony_ci 1677e5c31af7Sopenharmony_ci case local_in_float 1678e5c31af7Sopenharmony_ci values 1679e5c31af7Sopenharmony_ci { 1680e5c31af7Sopenharmony_ci input vec4 in0 = [ vec4(0.0, 1.0, 2.0, -4.0) | vec4(-7.5, 12.125, -0.25, 16.0) ]; 1681e5c31af7Sopenharmony_ci output vec4 out0 = [ vec4(0.0, -1.0, -2.0, 4.0) | vec4(7.5, -12.125, 0.25, -16.0) ]; 1682e5c31af7Sopenharmony_ci } 1683e5c31af7Sopenharmony_ci 1684e5c31af7Sopenharmony_ci both "" 1685e5c31af7Sopenharmony_ci precision mediump float; 1686e5c31af7Sopenharmony_ci ${DECLARATIONS} 1687e5c31af7Sopenharmony_ci 1688e5c31af7Sopenharmony_ci float func (in float a[4]) 1689e5c31af7Sopenharmony_ci { 1690e5c31af7Sopenharmony_ci a[0] = -1.0; 1691e5c31af7Sopenharmony_ci a[2] = -4.0; 1692e5c31af7Sopenharmony_ci a[3] = -3.0 * a[1]; 1693e5c31af7Sopenharmony_ci return a[0]; 1694e5c31af7Sopenharmony_ci } 1695e5c31af7Sopenharmony_ci 1696e5c31af7Sopenharmony_ci void main() 1697e5c31af7Sopenharmony_ci { 1698e5c31af7Sopenharmony_ci float arr[4]; 1699e5c31af7Sopenharmony_ci arr[0] = in0.x; 1700e5c31af7Sopenharmony_ci arr[1] = in0.y; 1701e5c31af7Sopenharmony_ci arr[2] = in0.z; 1702e5c31af7Sopenharmony_ci arr[3] = in0.w; 1703e5c31af7Sopenharmony_ci float f = func(arr); 1704e5c31af7Sopenharmony_ci out0 = f * vec4(arr[0], arr[1], arr[2], arr[3]); 1705e5c31af7Sopenharmony_ci ${OUTPUT} 1706e5c31af7Sopenharmony_ci } 1707e5c31af7Sopenharmony_ci "" 1708e5c31af7Sopenharmony_ci end 1709e5c31af7Sopenharmony_ci 1710e5c31af7Sopenharmony_ci case global_in_float 1711e5c31af7Sopenharmony_ci values 1712e5c31af7Sopenharmony_ci { 1713e5c31af7Sopenharmony_ci input vec4 in0 = [ vec4(0.0, 1.0, 2.0, -4.0) | vec4(-7.5, 12.125, -0.25, 16.0) ]; 1714e5c31af7Sopenharmony_ci output vec4 out0 = [ vec4(0.0, -1.0, -2.0, 4.0) | vec4(7.5, -12.125, 0.25, -16.0) ]; 1715e5c31af7Sopenharmony_ci } 1716e5c31af7Sopenharmony_ci 1717e5c31af7Sopenharmony_ci both "" 1718e5c31af7Sopenharmony_ci precision mediump float; 1719e5c31af7Sopenharmony_ci ${DECLARATIONS} 1720e5c31af7Sopenharmony_ci 1721e5c31af7Sopenharmony_ci float func (in float a[4]) 1722e5c31af7Sopenharmony_ci { 1723e5c31af7Sopenharmony_ci a[0] = -1.0; 1724e5c31af7Sopenharmony_ci a[2] = -4.0; 1725e5c31af7Sopenharmony_ci a[3] = -3.0 * a[1]; 1726e5c31af7Sopenharmony_ci return a[0]; 1727e5c31af7Sopenharmony_ci } 1728e5c31af7Sopenharmony_ci 1729e5c31af7Sopenharmony_ci float arr[4]; 1730e5c31af7Sopenharmony_ci 1731e5c31af7Sopenharmony_ci void main() 1732e5c31af7Sopenharmony_ci { 1733e5c31af7Sopenharmony_ci arr[0] = in0.x; 1734e5c31af7Sopenharmony_ci arr[1] = in0.y; 1735e5c31af7Sopenharmony_ci arr[2] = in0.z; 1736e5c31af7Sopenharmony_ci arr[3] = in0.w; 1737e5c31af7Sopenharmony_ci float f = func(arr); 1738e5c31af7Sopenharmony_ci out0 = f * vec4(arr[0], arr[1], arr[2], arr[3]); 1739e5c31af7Sopenharmony_ci ${OUTPUT} 1740e5c31af7Sopenharmony_ci } 1741e5c31af7Sopenharmony_ci "" 1742e5c31af7Sopenharmony_ci end 1743e5c31af7Sopenharmony_ci 1744e5c31af7Sopenharmony_ci case local_in_int 1745e5c31af7Sopenharmony_ci values 1746e5c31af7Sopenharmony_ci { 1747e5c31af7Sopenharmony_ci input ivec4 in0 = [ ivec4(0, 1, 2, -4) | ivec4(-7, -11, 13, 19) ]; 1748e5c31af7Sopenharmony_ci output ivec4 out0 = [ ivec4(0, -1, -2, 4) | ivec4(7, 11, -13, -19) ]; 1749e5c31af7Sopenharmony_ci } 1750e5c31af7Sopenharmony_ci 1751e5c31af7Sopenharmony_ci both "" 1752e5c31af7Sopenharmony_ci precision mediump float; 1753e5c31af7Sopenharmony_ci precision mediump int; 1754e5c31af7Sopenharmony_ci ${DECLARATIONS} 1755e5c31af7Sopenharmony_ci 1756e5c31af7Sopenharmony_ci int func (in int a[4]) 1757e5c31af7Sopenharmony_ci { 1758e5c31af7Sopenharmony_ci a[0] = -1; 1759e5c31af7Sopenharmony_ci a[2] = -4; 1760e5c31af7Sopenharmony_ci a[3] = -3 * a[1]; 1761e5c31af7Sopenharmony_ci return a[0]; 1762e5c31af7Sopenharmony_ci } 1763e5c31af7Sopenharmony_ci 1764e5c31af7Sopenharmony_ci void main() 1765e5c31af7Sopenharmony_ci { 1766e5c31af7Sopenharmony_ci ${SETUP} 1767e5c31af7Sopenharmony_ci int arr[4]; 1768e5c31af7Sopenharmony_ci arr[0] = in0.x; 1769e5c31af7Sopenharmony_ci arr[1] = in0.y; 1770e5c31af7Sopenharmony_ci arr[2] = in0.z; 1771e5c31af7Sopenharmony_ci arr[3] = in0.w; 1772e5c31af7Sopenharmony_ci int f = func(arr); 1773e5c31af7Sopenharmony_ci out0 = f * ivec4(arr[0], arr[1], arr[2], arr[3]); 1774e5c31af7Sopenharmony_ci ${OUTPUT} 1775e5c31af7Sopenharmony_ci } 1776e5c31af7Sopenharmony_ci "" 1777e5c31af7Sopenharmony_ci end 1778e5c31af7Sopenharmony_ci 1779e5c31af7Sopenharmony_ci case global_in_int 1780e5c31af7Sopenharmony_ci values 1781e5c31af7Sopenharmony_ci { 1782e5c31af7Sopenharmony_ci input ivec4 in0 = [ ivec4(0, 1, 2, 4) | ivec4(-7, -11, 13, 19) ]; 1783e5c31af7Sopenharmony_ci output ivec4 out0 = [ ivec4(0, -1, -2, -4) | ivec4(7, 11, -13, -19) ]; 1784e5c31af7Sopenharmony_ci } 1785e5c31af7Sopenharmony_ci 1786e5c31af7Sopenharmony_ci both "" 1787e5c31af7Sopenharmony_ci precision mediump float; 1788e5c31af7Sopenharmony_ci precision mediump int; 1789e5c31af7Sopenharmony_ci ${DECLARATIONS} 1790e5c31af7Sopenharmony_ci 1791e5c31af7Sopenharmony_ci int func (in int a[4]) 1792e5c31af7Sopenharmony_ci { 1793e5c31af7Sopenharmony_ci a[0] = -1; 1794e5c31af7Sopenharmony_ci a[2] = -4; 1795e5c31af7Sopenharmony_ci a[3] = -3 * a[1]; 1796e5c31af7Sopenharmony_ci return a[0]; 1797e5c31af7Sopenharmony_ci } 1798e5c31af7Sopenharmony_ci 1799e5c31af7Sopenharmony_ci int arr[4]; 1800e5c31af7Sopenharmony_ci 1801e5c31af7Sopenharmony_ci void main() 1802e5c31af7Sopenharmony_ci { 1803e5c31af7Sopenharmony_ci ${SETUP} 1804e5c31af7Sopenharmony_ci arr[0] = in0.x; 1805e5c31af7Sopenharmony_ci arr[1] = in0.y; 1806e5c31af7Sopenharmony_ci arr[2] = in0.z; 1807e5c31af7Sopenharmony_ci arr[3] = in0.w; 1808e5c31af7Sopenharmony_ci int f = func(arr); 1809e5c31af7Sopenharmony_ci out0 = f * ivec4(arr[0], arr[1], arr[2], arr[3]); 1810e5c31af7Sopenharmony_ci ${OUTPUT} 1811e5c31af7Sopenharmony_ci } 1812e5c31af7Sopenharmony_ci 1813e5c31af7Sopenharmony_ci "" 1814e5c31af7Sopenharmony_ci end 1815e5c31af7Sopenharmony_ci 1816e5c31af7Sopenharmony_ci case local_in_bool 1817e5c31af7Sopenharmony_ci values 1818e5c31af7Sopenharmony_ci { 1819e5c31af7Sopenharmony_ci input bvec4 in0 = [ bvec4(true, true, false, true) | bvec4(false, false, false, false) ]; 1820e5c31af7Sopenharmony_ci output bvec4 out0 = [ bvec4(false, false, true, false) | bvec4(true, true, true, true) ]; 1821e5c31af7Sopenharmony_ci } 1822e5c31af7Sopenharmony_ci 1823e5c31af7Sopenharmony_ci both "" 1824e5c31af7Sopenharmony_ci precision mediump float; 1825e5c31af7Sopenharmony_ci ${DECLARATIONS} 1826e5c31af7Sopenharmony_ci 1827e5c31af7Sopenharmony_ci bool func (in bool a[4]) 1828e5c31af7Sopenharmony_ci { 1829e5c31af7Sopenharmony_ci a[0] = false; 1830e5c31af7Sopenharmony_ci a[2] = true; 1831e5c31af7Sopenharmony_ci a[3] = !a[1]; 1832e5c31af7Sopenharmony_ci return a[0]; 1833e5c31af7Sopenharmony_ci } 1834e5c31af7Sopenharmony_ci 1835e5c31af7Sopenharmony_ci void main() 1836e5c31af7Sopenharmony_ci { 1837e5c31af7Sopenharmony_ci ${SETUP} 1838e5c31af7Sopenharmony_ci bool arr[4]; 1839e5c31af7Sopenharmony_ci arr[0] = !in0.x; 1840e5c31af7Sopenharmony_ci arr[1] = !in0.y; 1841e5c31af7Sopenharmony_ci arr[2] = !in0.z; 1842e5c31af7Sopenharmony_ci arr[3] = !in0.w; 1843e5c31af7Sopenharmony_ci func(arr); 1844e5c31af7Sopenharmony_ci out0 = bvec4(arr[0], arr[1], arr[2], arr[3]); 1845e5c31af7Sopenharmony_ci ${OUTPUT} 1846e5c31af7Sopenharmony_ci } 1847e5c31af7Sopenharmony_ci "" 1848e5c31af7Sopenharmony_ci end 1849e5c31af7Sopenharmony_ci 1850e5c31af7Sopenharmony_ci case global_in_bool 1851e5c31af7Sopenharmony_ci values 1852e5c31af7Sopenharmony_ci { 1853e5c31af7Sopenharmony_ci input bvec4 in0 = [ bvec4(true, true, false, true) | bvec4(false, false, false, false) ]; 1854e5c31af7Sopenharmony_ci output bvec4 out0 = [ bvec4(false, false, true, false) | bvec4(true, true, true, true) ]; 1855e5c31af7Sopenharmony_ci } 1856e5c31af7Sopenharmony_ci 1857e5c31af7Sopenharmony_ci both "" 1858e5c31af7Sopenharmony_ci precision mediump float; 1859e5c31af7Sopenharmony_ci ${DECLARATIONS} 1860e5c31af7Sopenharmony_ci 1861e5c31af7Sopenharmony_ci bool func (in bool a[4]) 1862e5c31af7Sopenharmony_ci { 1863e5c31af7Sopenharmony_ci a[0] = false; 1864e5c31af7Sopenharmony_ci a[2] = true; 1865e5c31af7Sopenharmony_ci a[3] = !a[1]; 1866e5c31af7Sopenharmony_ci return a[0]; 1867e5c31af7Sopenharmony_ci } 1868e5c31af7Sopenharmony_ci 1869e5c31af7Sopenharmony_ci bool arr[4]; 1870e5c31af7Sopenharmony_ci 1871e5c31af7Sopenharmony_ci void main() 1872e5c31af7Sopenharmony_ci { 1873e5c31af7Sopenharmony_ci ${SETUP} 1874e5c31af7Sopenharmony_ci arr[0] = !in0.x; 1875e5c31af7Sopenharmony_ci arr[1] = !in0.y; 1876e5c31af7Sopenharmony_ci arr[2] = !in0.z; 1877e5c31af7Sopenharmony_ci arr[3] = !in0.w; 1878e5c31af7Sopenharmony_ci func(arr); 1879e5c31af7Sopenharmony_ci out0 = bvec4(arr[0], arr[1], arr[2], arr[3]); 1880e5c31af7Sopenharmony_ci ${OUTPUT} 1881e5c31af7Sopenharmony_ci } 1882e5c31af7Sopenharmony_ci "" 1883e5c31af7Sopenharmony_ci end 1884e5c31af7Sopenharmony_ci 1885e5c31af7Sopenharmony_ci case test_helpers 1886e5c31af7Sopenharmony_ci desc "Check that helper functions are supported properly." 1887e5c31af7Sopenharmony_ci values 1888e5c31af7Sopenharmony_ci { 1889e5c31af7Sopenharmony_ci input vec4 in0 = [ vec4(0.0, 1.0, 2.0, -4.0) | vec4(-7.5, 12.125, -0.25, 16.0) ]; 1890e5c31af7Sopenharmony_ci output float out0 = [ 1.0 | 1.0 ]; 1891e5c31af7Sopenharmony_ci } 1892e5c31af7Sopenharmony_ci 1893e5c31af7Sopenharmony_ci both "" 1894e5c31af7Sopenharmony_ci precision mediump float; 1895e5c31af7Sopenharmony_ci ${DECLARATIONS} 1896e5c31af7Sopenharmony_ci 1897e5c31af7Sopenharmony_ci vec4 get (in float arr[4]); 1898e5c31af7Sopenharmony_ci void set (out float arr[4], vec4 val); 1899e5c31af7Sopenharmony_ci void negate (inout float arr[4]); 1900e5c31af7Sopenharmony_ci bool test (in float arr[4], vec4 ref); 1901e5c31af7Sopenharmony_ci bool isEqual (in float a[4], in float b[4]); 1902e5c31af7Sopenharmony_ci 1903e5c31af7Sopenharmony_ci void main() 1904e5c31af7Sopenharmony_ci { 1905e5c31af7Sopenharmony_ci float arr[4]; 1906e5c31af7Sopenharmony_ci set(arr, in0); 1907e5c31af7Sopenharmony_ci negate(arr); 1908e5c31af7Sopenharmony_ci out0 = float(test(arr, -in0)); 1909e5c31af7Sopenharmony_ci ${OUTPUT} 1910e5c31af7Sopenharmony_ci } 1911e5c31af7Sopenharmony_ci 1912e5c31af7Sopenharmony_ci float absDiff (vec4 a, vec4 b) { vec4 d = abs(a - b); return max(max(d.x, d.y), max(d.z, d.w)); } 1913e5c31af7Sopenharmony_ci vec4 get (in float arr[4]) { return vec4(arr[0], arr[1], arr[2], arr[3]); } 1914e5c31af7Sopenharmony_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; } 1915e5c31af7Sopenharmony_ci void negate (inout float arr[4]) { set(arr, -get(arr)); } 1916e5c31af7Sopenharmony_ci bool test (in float arr[4], vec4 ref) { return (absDiff(get(arr), ref) < 0.1); } 1917e5c31af7Sopenharmony_ci bool isEqual (in float a[4], in float b[4]) { return (absDiff(get(a), get(b)) < 0.1); } 1918e5c31af7Sopenharmony_ci "" 1919e5c31af7Sopenharmony_ci end 1920e5c31af7Sopenharmony_ci 1921e5c31af7Sopenharmony_ci case copy_local_in_on_call 1922e5c31af7Sopenharmony_ci desc "Check that local 'in' arguments are copied on call and don't alias." 1923e5c31af7Sopenharmony_ci values 1924e5c31af7Sopenharmony_ci { 1925e5c31af7Sopenharmony_ci input vec4 in0 = [ vec4(0.0, 1.0, 2.0, -4.0) | vec4(-7.5, 12.125, -0.25, 16.0) ]; 1926e5c31af7Sopenharmony_ci output vec4 out0 = [ vec4(0.0, -1.0, -2.0, 4.0) | vec4(7.5, -12.125, 0.25, -16.0) ]; 1927e5c31af7Sopenharmony_ci } 1928e5c31af7Sopenharmony_ci 1929e5c31af7Sopenharmony_ci both "" 1930e5c31af7Sopenharmony_ci precision mediump float; 1931e5c31af7Sopenharmony_ci ${DECLARATIONS} 1932e5c31af7Sopenharmony_ci 1933e5c31af7Sopenharmony_ci vec4 get (in float arr[4]); 1934e5c31af7Sopenharmony_ci void set (out float arr[4], vec4 val); 1935e5c31af7Sopenharmony_ci void negate (inout float arr[4]); 1936e5c31af7Sopenharmony_ci bool test (in float arr[4], vec4 ref); 1937e5c31af7Sopenharmony_ci bool isEqual (in float a[4], in float b[4]); 1938e5c31af7Sopenharmony_ci 1939e5c31af7Sopenharmony_ci float func (in float a[4], in float b[4]) 1940e5c31af7Sopenharmony_ci { 1941e5c31af7Sopenharmony_ci a[0] = 2.123; 1942e5c31af7Sopenharmony_ci a[2] = -4.123; 1943e5c31af7Sopenharmony_ci return isEqual(a, b) ? 1.0 : -1.0; 1944e5c31af7Sopenharmony_ci } 1945e5c31af7Sopenharmony_ci 1946e5c31af7Sopenharmony_ci void main() 1947e5c31af7Sopenharmony_ci { 1948e5c31af7Sopenharmony_ci float arr[4]; 1949e5c31af7Sopenharmony_ci set(arr, in0); 1950e5c31af7Sopenharmony_ci out0 = in0 * func(arr, arr); 1951e5c31af7Sopenharmony_ci ${OUTPUT} 1952e5c31af7Sopenharmony_ci } 1953e5c31af7Sopenharmony_ci 1954e5c31af7Sopenharmony_ci float absDiff (vec4 a, vec4 b) { vec4 d = abs(a - b); return max(max(d.x, d.y), max(d.z, d.w)); } 1955e5c31af7Sopenharmony_ci vec4 get (in float arr[4]) { return vec4(arr[0], arr[1], arr[2], arr[3]); } 1956e5c31af7Sopenharmony_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; } 1957e5c31af7Sopenharmony_ci void negate (inout float arr[4]) { set(arr, -get(arr)); } 1958e5c31af7Sopenharmony_ci bool test (in float arr[4], vec4 ref) { return (absDiff(get(arr), ref) < 0.1); } 1959e5c31af7Sopenharmony_ci bool isEqual (in float a[4], in float b[4]) { return (absDiff(get(a), get(b)) < 0.1); } 1960e5c31af7Sopenharmony_ci "" 1961e5c31af7Sopenharmony_ci end 1962e5c31af7Sopenharmony_ci 1963e5c31af7Sopenharmony_ci case copy_global_in_on_call 1964e5c31af7Sopenharmony_ci desc "Check that global 'in' arguments are copied on call and don't alias." 1965e5c31af7Sopenharmony_ci values 1966e5c31af7Sopenharmony_ci { 1967e5c31af7Sopenharmony_ci input vec4 in0 = [ vec4(0.0, 1.0, 2.0, -4.0) | vec4(-7.5, 12.125, -0.25, 16.0) ]; 1968e5c31af7Sopenharmony_ci output vec4 out0 = [ vec4(0.0, -1.0, -2.0, 4.0) | vec4(7.5, -12.125, 0.25, -16.0) ]; 1969e5c31af7Sopenharmony_ci } 1970e5c31af7Sopenharmony_ci 1971e5c31af7Sopenharmony_ci both "" 1972e5c31af7Sopenharmony_ci precision mediump float; 1973e5c31af7Sopenharmony_ci ${DECLARATIONS} 1974e5c31af7Sopenharmony_ci 1975e5c31af7Sopenharmony_ci vec4 get (in float arr[4]); 1976e5c31af7Sopenharmony_ci void set (out float arr[4], vec4 val); 1977e5c31af7Sopenharmony_ci void negate (inout float arr[4]); 1978e5c31af7Sopenharmony_ci bool test (in float arr[4], vec4 ref); 1979e5c31af7Sopenharmony_ci bool isEqual (in float a[4], in float b[4]); 1980e5c31af7Sopenharmony_ci 1981e5c31af7Sopenharmony_ci float func (in float a[4], in float b[4]) 1982e5c31af7Sopenharmony_ci { 1983e5c31af7Sopenharmony_ci a[0] = 2.123; 1984e5c31af7Sopenharmony_ci a[2] = -4.123; 1985e5c31af7Sopenharmony_ci return isEqual(a, b) ? 1.0 : -1.0; 1986e5c31af7Sopenharmony_ci } 1987e5c31af7Sopenharmony_ci 1988e5c31af7Sopenharmony_ci float arr[4]; 1989e5c31af7Sopenharmony_ci 1990e5c31af7Sopenharmony_ci void main() 1991e5c31af7Sopenharmony_ci { 1992e5c31af7Sopenharmony_ci set(arr, in0); 1993e5c31af7Sopenharmony_ci out0 = in0 * func(arr, arr); 1994e5c31af7Sopenharmony_ci ${OUTPUT} 1995e5c31af7Sopenharmony_ci } 1996e5c31af7Sopenharmony_ci 1997e5c31af7Sopenharmony_ci float absDiff (vec4 a, vec4 b) { vec4 d = abs(a - b); return max(max(d.x, d.y), max(d.z, d.w)); } 1998e5c31af7Sopenharmony_ci vec4 get (in float arr[4]) { return vec4(arr[0], arr[1], arr[2], arr[3]); } 1999e5c31af7Sopenharmony_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; } 2000e5c31af7Sopenharmony_ci void negate (inout float arr[4]) { set(arr, -get(arr)); } 2001e5c31af7Sopenharmony_ci bool test (in float arr[4], vec4 ref) { return (absDiff(get(arr), ref) < 0.1); } 2002e5c31af7Sopenharmony_ci bool isEqual (in float a[4], in float b[4]) { return (absDiff(get(a), get(b)) < 0.1); } 2003e5c31af7Sopenharmony_ci "" 2004e5c31af7Sopenharmony_ci end 2005e5c31af7Sopenharmony_ci 2006e5c31af7Sopenharmony_ci case copy_local_inout_on_call 2007e5c31af7Sopenharmony_ci desc "Check that local 'in' arguments are copied on call and don't alias." 2008e5c31af7Sopenharmony_ci values 2009e5c31af7Sopenharmony_ci { 2010e5c31af7Sopenharmony_ci input vec4 in0 = [ vec4(0.0, 1.0, 2.0, -4.0) | vec4(-7.5, 12.125, -0.25, 16.0) ]; 2011e5c31af7Sopenharmony_ci output vec4 out0 = [ vec4(0.0, -1.0, -2.0, 4.0) | vec4(7.5, -12.125, 0.25, -16.0) ]; 2012e5c31af7Sopenharmony_ci } 2013e5c31af7Sopenharmony_ci 2014e5c31af7Sopenharmony_ci both "" 2015e5c31af7Sopenharmony_ci precision mediump float; 2016e5c31af7Sopenharmony_ci ${DECLARATIONS} 2017e5c31af7Sopenharmony_ci 2018e5c31af7Sopenharmony_ci vec4 get (in float arr[4]); 2019e5c31af7Sopenharmony_ci void set (out float arr[4], vec4 val); 2020e5c31af7Sopenharmony_ci void negate (inout float arr[4]); 2021e5c31af7Sopenharmony_ci bool test (in float arr[4], vec4 ref); 2022e5c31af7Sopenharmony_ci bool isEqual (in float a[4], in float b[4]); 2023e5c31af7Sopenharmony_ci 2024e5c31af7Sopenharmony_ci float func (inout float a[4], inout float b[4]) 2025e5c31af7Sopenharmony_ci { 2026e5c31af7Sopenharmony_ci negate(a); 2027e5c31af7Sopenharmony_ci return isEqual(a, b) ? 1.0 : -1.0; 2028e5c31af7Sopenharmony_ci } 2029e5c31af7Sopenharmony_ci 2030e5c31af7Sopenharmony_ci void main() 2031e5c31af7Sopenharmony_ci { 2032e5c31af7Sopenharmony_ci float arr[4]; 2033e5c31af7Sopenharmony_ci set(arr, in0); 2034e5c31af7Sopenharmony_ci float m = func(arr, arr); // returns -1.0 2035e5c31af7Sopenharmony_ci float n = float(test(arr, in0) || test(arr, -in0)); 2036e5c31af7Sopenharmony_ci out0 = in0 * m * n; 2037e5c31af7Sopenharmony_ci ${OUTPUT} 2038e5c31af7Sopenharmony_ci } 2039e5c31af7Sopenharmony_ci 2040e5c31af7Sopenharmony_ci float absDiff (vec4 a, vec4 b) { vec4 d = abs(a - b); return max(max(d.x, d.y), max(d.z, d.w)); } 2041e5c31af7Sopenharmony_ci vec4 get (in float arr[4]) { return vec4(arr[0], arr[1], arr[2], arr[3]); } 2042e5c31af7Sopenharmony_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; } 2043e5c31af7Sopenharmony_ci void negate (inout float arr[4]) { set(arr, -get(arr)); } 2044e5c31af7Sopenharmony_ci bool test (in float arr[4], vec4 ref) { return (absDiff(get(arr), ref) < 0.1); } 2045e5c31af7Sopenharmony_ci bool isEqual (in float a[4], in float b[4]) { return (absDiff(get(a), get(b)) < 0.1); } 2046e5c31af7Sopenharmony_ci "" 2047e5c31af7Sopenharmony_ci end 2048e5c31af7Sopenharmony_ci 2049e5c31af7Sopenharmony_ci case copy_global_inout_on_call 2050e5c31af7Sopenharmony_ci desc "Check that global 'in' arguments are copied on call and don't alias." 2051e5c31af7Sopenharmony_ci values 2052e5c31af7Sopenharmony_ci { 2053e5c31af7Sopenharmony_ci input vec4 in0 = [ vec4(0.0, 1.0, 2.0, -4.0) | vec4(-7.5, 12.125, -0.25, 16.0) ]; 2054e5c31af7Sopenharmony_ci output vec4 out0 = [ vec4(0.0, -1.0, -2.0, 4.0) | vec4(7.5, -12.125, 0.25, -16.0) ]; 2055e5c31af7Sopenharmony_ci } 2056e5c31af7Sopenharmony_ci 2057e5c31af7Sopenharmony_ci both "" 2058e5c31af7Sopenharmony_ci precision mediump float; 2059e5c31af7Sopenharmony_ci ${DECLARATIONS} 2060e5c31af7Sopenharmony_ci 2061e5c31af7Sopenharmony_ci vec4 get (in float arr[4]); 2062e5c31af7Sopenharmony_ci void set (out float arr[4], vec4 val); 2063e5c31af7Sopenharmony_ci void negate (inout float arr[4]); 2064e5c31af7Sopenharmony_ci bool test (in float arr[4], vec4 ref); 2065e5c31af7Sopenharmony_ci bool isEqual (in float a[4], in float b[4]); 2066e5c31af7Sopenharmony_ci 2067e5c31af7Sopenharmony_ci float func (in float a[4], in float b[4]) 2068e5c31af7Sopenharmony_ci { 2069e5c31af7Sopenharmony_ci negate(a); 2070e5c31af7Sopenharmony_ci return isEqual(a, b) ? 1.0 : -1.0; 2071e5c31af7Sopenharmony_ci } 2072e5c31af7Sopenharmony_ci 2073e5c31af7Sopenharmony_ci float arr[4]; 2074e5c31af7Sopenharmony_ci 2075e5c31af7Sopenharmony_ci void main() 2076e5c31af7Sopenharmony_ci { 2077e5c31af7Sopenharmony_ci set(arr, in0); 2078e5c31af7Sopenharmony_ci float m = func(arr, arr); // returns -1.0 2079e5c31af7Sopenharmony_ci float n = float(test(arr, in0) || test(arr, -in0)); 2080e5c31af7Sopenharmony_ci out0 = in0 * m * n; 2081e5c31af7Sopenharmony_ci ${OUTPUT} 2082e5c31af7Sopenharmony_ci } 2083e5c31af7Sopenharmony_ci 2084e5c31af7Sopenharmony_ci float absDiff (vec4 a, vec4 b) { vec4 d = abs(a - b); return max(max(d.x, d.y), max(d.z, d.w)); } 2085e5c31af7Sopenharmony_ci vec4 get (in float arr[4]) { return vec4(arr[0], arr[1], arr[2], arr[3]); } 2086e5c31af7Sopenharmony_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; } 2087e5c31af7Sopenharmony_ci void negate (inout float arr[4]) { set(arr, -get(arr)); } 2088e5c31af7Sopenharmony_ci bool test (in float arr[4], vec4 ref) { return (absDiff(get(arr), ref) < 0.1); } 2089e5c31af7Sopenharmony_ci bool isEqual (in float a[4], in float b[4]) { return (absDiff(get(a), get(b)) < 0.1); } 2090e5c31af7Sopenharmony_ci "" 2091e5c31af7Sopenharmony_ci end 2092e5c31af7Sopenharmony_ci 2093e5c31af7Sopenharmony_ci# vec4 get (in float arr[4]); 2094e5c31af7Sopenharmony_ci# void set (out float arr[4], vec4 val); 2095e5c31af7Sopenharmony_ci# void negate (inout float arr[4]); 2096e5c31af7Sopenharmony_ci# bool test (in float arr[4], vec4 ref); 2097e5c31af7Sopenharmony_ci# bool isEqual (in float a[4], in float b[4]); 2098e5c31af7Sopenharmony_ci 2099e5c31af7Sopenharmony_ci# float absDiff (vec4 a, vec4 b) { vec4 d = abs(a - b); return max(max(d.x, d.y), max(d.z, d.w)); } 2100e5c31af7Sopenharmony_ci# vec4 get (in float arr[4]) { return vec4(arr[0], arr[1], arr[2], arr[3]); } 2101e5c31af7Sopenharmony_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; } 2102e5c31af7Sopenharmony_ci# void negate (inout float arr[4]) { set(arr, -get(arr)); } 2103e5c31af7Sopenharmony_ci# bool test (in float arr[4], vec4 ref) { return (absDiff(get(arr), ref) < 0.1); } 2104e5c31af7Sopenharmony_ci# bool isEqual (in float a[4], in float b[4]) { return (absDiff(get(a), get(b)) < 0.1); } 2105e5c31af7Sopenharmony_ci 2106e5c31af7Sopenharmony_ciend # array_arguments 2107e5c31af7Sopenharmony_ci 2108e5c31af7Sopenharmony_ci#group qualifiers "Function Parameter Qualifiers" 2109e5c31af7Sopenharmony_ci# 2110e5c31af7Sopenharmony_ci#end # qualifiers 2111e5c31af7Sopenharmony_ci 2112e5c31af7Sopenharmony_cigroup control_flow "Control Flow In Functions" 2113e5c31af7Sopenharmony_ci 2114e5c31af7Sopenharmony_ci case simple_return 2115e5c31af7Sopenharmony_ci values 2116e5c31af7Sopenharmony_ci { 2117e5c31af7Sopenharmony_ci input float in0 = [ -0.5 | 1.5 ]; 2118e5c31af7Sopenharmony_ci output float out0 = [ 0.5 | -1.5 ]; 2119e5c31af7Sopenharmony_ci } 2120e5c31af7Sopenharmony_ci 2121e5c31af7Sopenharmony_ci both "" 2122e5c31af7Sopenharmony_ci precision mediump float; 2123e5c31af7Sopenharmony_ci ${DECLARATIONS} 2124e5c31af7Sopenharmony_ci 2125e5c31af7Sopenharmony_ci float func (float a) 2126e5c31af7Sopenharmony_ci { 2127e5c31af7Sopenharmony_ci return -a; 2128e5c31af7Sopenharmony_ci a = a * -1.0; 2129e5c31af7Sopenharmony_ci return 1.0; 2130e5c31af7Sopenharmony_ci } 2131e5c31af7Sopenharmony_ci 2132e5c31af7Sopenharmony_ci void main() 2133e5c31af7Sopenharmony_ci { 2134e5c31af7Sopenharmony_ci ${SETUP} 2135e5c31af7Sopenharmony_ci out0 = func(in0); 2136e5c31af7Sopenharmony_ci ${OUTPUT} 2137e5c31af7Sopenharmony_ci } 2138e5c31af7Sopenharmony_ci "" 2139e5c31af7Sopenharmony_ci end 2140e5c31af7Sopenharmony_ci 2141e5c31af7Sopenharmony_ci case return_in_if 2142e5c31af7Sopenharmony_ci values 2143e5c31af7Sopenharmony_ci { 2144e5c31af7Sopenharmony_ci input float in0 = [ -0.5 | 1.5 ]; 2145e5c31af7Sopenharmony_ci output float out0 = [ 0.5 | -1.5 ]; 2146e5c31af7Sopenharmony_ci } 2147e5c31af7Sopenharmony_ci 2148e5c31af7Sopenharmony_ci both "" 2149e5c31af7Sopenharmony_ci precision mediump float; 2150e5c31af7Sopenharmony_ci ${DECLARATIONS} 2151e5c31af7Sopenharmony_ci 2152e5c31af7Sopenharmony_ci float func (float a) 2153e5c31af7Sopenharmony_ci { 2154e5c31af7Sopenharmony_ci if (a != 0.0) 2155e5c31af7Sopenharmony_ci return -a; 2156e5c31af7Sopenharmony_ci return 1.0; 2157e5c31af7Sopenharmony_ci } 2158e5c31af7Sopenharmony_ci 2159e5c31af7Sopenharmony_ci void main() 2160e5c31af7Sopenharmony_ci { 2161e5c31af7Sopenharmony_ci ${SETUP} 2162e5c31af7Sopenharmony_ci out0 = func(in0); 2163e5c31af7Sopenharmony_ci ${OUTPUT} 2164e5c31af7Sopenharmony_ci } 2165e5c31af7Sopenharmony_ci "" 2166e5c31af7Sopenharmony_ci end 2167e5c31af7Sopenharmony_ci 2168e5c31af7Sopenharmony_ci case return_in_else 2169e5c31af7Sopenharmony_ci values 2170e5c31af7Sopenharmony_ci { 2171e5c31af7Sopenharmony_ci input float in0 = [ -0.5 | 1.5 ]; 2172e5c31af7Sopenharmony_ci output float out0 = [ 0.5 | -1.5 ]; 2173e5c31af7Sopenharmony_ci } 2174e5c31af7Sopenharmony_ci 2175e5c31af7Sopenharmony_ci both "" 2176e5c31af7Sopenharmony_ci precision mediump float; 2177e5c31af7Sopenharmony_ci ${DECLARATIONS} 2178e5c31af7Sopenharmony_ci 2179e5c31af7Sopenharmony_ci float func (float a) 2180e5c31af7Sopenharmony_ci { 2181e5c31af7Sopenharmony_ci if (a == 0.0) 2182e5c31af7Sopenharmony_ci return 1.0; 2183e5c31af7Sopenharmony_ci else 2184e5c31af7Sopenharmony_ci return -a; 2185e5c31af7Sopenharmony_ci return 1.0; 2186e5c31af7Sopenharmony_ci } 2187e5c31af7Sopenharmony_ci 2188e5c31af7Sopenharmony_ci void main() 2189e5c31af7Sopenharmony_ci { 2190e5c31af7Sopenharmony_ci ${SETUP} 2191e5c31af7Sopenharmony_ci out0 = func(in0); 2192e5c31af7Sopenharmony_ci ${OUTPUT} 2193e5c31af7Sopenharmony_ci } 2194e5c31af7Sopenharmony_ci "" 2195e5c31af7Sopenharmony_ci end 2196e5c31af7Sopenharmony_ci 2197e5c31af7Sopenharmony_ci case return_in_loop 2198e5c31af7Sopenharmony_ci values 2199e5c31af7Sopenharmony_ci { 2200e5c31af7Sopenharmony_ci input float in0 = [ -0.5 | 1.5 ]; 2201e5c31af7Sopenharmony_ci output float out0 = [ 0.5 | -1.5 ]; 2202e5c31af7Sopenharmony_ci } 2203e5c31af7Sopenharmony_ci 2204e5c31af7Sopenharmony_ci both "" 2205e5c31af7Sopenharmony_ci precision mediump float; 2206e5c31af7Sopenharmony_ci ${DECLARATIONS} 2207e5c31af7Sopenharmony_ci 2208e5c31af7Sopenharmony_ci float func (float a) 2209e5c31af7Sopenharmony_ci { 2210e5c31af7Sopenharmony_ci for (int i = 0; i < 1; i++) 2211e5c31af7Sopenharmony_ci return -a; 2212e5c31af7Sopenharmony_ci return 1.0; 2213e5c31af7Sopenharmony_ci } 2214e5c31af7Sopenharmony_ci 2215e5c31af7Sopenharmony_ci void main() 2216e5c31af7Sopenharmony_ci { 2217e5c31af7Sopenharmony_ci ${SETUP} 2218e5c31af7Sopenharmony_ci out0 = func(in0); 2219e5c31af7Sopenharmony_ci ${OUTPUT} 2220e5c31af7Sopenharmony_ci } 2221e5c31af7Sopenharmony_ci "" 2222e5c31af7Sopenharmony_ci end 2223e5c31af7Sopenharmony_ci 2224e5c31af7Sopenharmony_ci case return_in_loop_if 2225e5c31af7Sopenharmony_ci values 2226e5c31af7Sopenharmony_ci { 2227e5c31af7Sopenharmony_ci input float in0 = [ -0.5 | 1.5 ]; 2228e5c31af7Sopenharmony_ci output float out0 = [ 0.5 | -1.5 ]; 2229e5c31af7Sopenharmony_ci } 2230e5c31af7Sopenharmony_ci 2231e5c31af7Sopenharmony_ci both "" 2232e5c31af7Sopenharmony_ci precision mediump float; 2233e5c31af7Sopenharmony_ci ${DECLARATIONS} 2234e5c31af7Sopenharmony_ci 2235e5c31af7Sopenharmony_ci float func (float a) 2236e5c31af7Sopenharmony_ci { 2237e5c31af7Sopenharmony_ci for (int i = 0; i < 3; i++) 2238e5c31af7Sopenharmony_ci { 2239e5c31af7Sopenharmony_ci if (i == 1) 2240e5c31af7Sopenharmony_ci return a; 2241e5c31af7Sopenharmony_ci else if (i > 1) 2242e5c31af7Sopenharmony_ci return -1.0; 2243e5c31af7Sopenharmony_ci a = -a; 2244e5c31af7Sopenharmony_ci } 2245e5c31af7Sopenharmony_ci return 1.0; 2246e5c31af7Sopenharmony_ci } 2247e5c31af7Sopenharmony_ci 2248e5c31af7Sopenharmony_ci void main() 2249e5c31af7Sopenharmony_ci { 2250e5c31af7Sopenharmony_ci ${SETUP} 2251e5c31af7Sopenharmony_ci out0 = func(in0); 2252e5c31af7Sopenharmony_ci ${OUTPUT} 2253e5c31af7Sopenharmony_ci } 2254e5c31af7Sopenharmony_ci "" 2255e5c31af7Sopenharmony_ci end 2256e5c31af7Sopenharmony_ci 2257e5c31af7Sopenharmony_ci case return_after_loop 2258e5c31af7Sopenharmony_ci values 2259e5c31af7Sopenharmony_ci { 2260e5c31af7Sopenharmony_ci input float in0 = [ -0.5 | 1.5 ]; 2261e5c31af7Sopenharmony_ci output float out0 = [ 0.5 | -1.5 ]; 2262e5c31af7Sopenharmony_ci } 2263e5c31af7Sopenharmony_ci 2264e5c31af7Sopenharmony_ci both "" 2265e5c31af7Sopenharmony_ci precision mediump float; 2266e5c31af7Sopenharmony_ci ${DECLARATIONS} 2267e5c31af7Sopenharmony_ci 2268e5c31af7Sopenharmony_ci float func (float a) 2269e5c31af7Sopenharmony_ci { 2270e5c31af7Sopenharmony_ci for (int i = 0; i < 5; i++) 2271e5c31af7Sopenharmony_ci a = -a; 2272e5c31af7Sopenharmony_ci return a; 2273e5c31af7Sopenharmony_ci } 2274e5c31af7Sopenharmony_ci 2275e5c31af7Sopenharmony_ci void main() 2276e5c31af7Sopenharmony_ci { 2277e5c31af7Sopenharmony_ci ${SETUP} 2278e5c31af7Sopenharmony_ci out0 = func(in0); 2279e5c31af7Sopenharmony_ci ${OUTPUT} 2280e5c31af7Sopenharmony_ci } 2281e5c31af7Sopenharmony_ci "" 2282e5c31af7Sopenharmony_ci end 2283e5c31af7Sopenharmony_ci 2284e5c31af7Sopenharmony_ci case return_after_break 2285e5c31af7Sopenharmony_ci values 2286e5c31af7Sopenharmony_ci { 2287e5c31af7Sopenharmony_ci input float in0 = [ -0.5 | 1.5 ]; 2288e5c31af7Sopenharmony_ci output float out0 = [ 0.5 | -1.5 ]; 2289e5c31af7Sopenharmony_ci } 2290e5c31af7Sopenharmony_ci 2291e5c31af7Sopenharmony_ci both "" 2292e5c31af7Sopenharmony_ci precision mediump float; 2293e5c31af7Sopenharmony_ci ${DECLARATIONS} 2294e5c31af7Sopenharmony_ci 2295e5c31af7Sopenharmony_ci float func (float a) 2296e5c31af7Sopenharmony_ci { 2297e5c31af7Sopenharmony_ci for (int i = 0; i < 6; i++) 2298e5c31af7Sopenharmony_ci { 2299e5c31af7Sopenharmony_ci a = -a; 2300e5c31af7Sopenharmony_ci if (i == 4) 2301e5c31af7Sopenharmony_ci break; 2302e5c31af7Sopenharmony_ci } 2303e5c31af7Sopenharmony_ci return a; 2304e5c31af7Sopenharmony_ci } 2305e5c31af7Sopenharmony_ci 2306e5c31af7Sopenharmony_ci void main() 2307e5c31af7Sopenharmony_ci { 2308e5c31af7Sopenharmony_ci ${SETUP} 2309e5c31af7Sopenharmony_ci out0 = func(in0); 2310e5c31af7Sopenharmony_ci ${OUTPUT} 2311e5c31af7Sopenharmony_ci } 2312e5c31af7Sopenharmony_ci "" 2313e5c31af7Sopenharmony_ci end 2314e5c31af7Sopenharmony_ci 2315e5c31af7Sopenharmony_ci case return_after_continue 2316e5c31af7Sopenharmony_ci values 2317e5c31af7Sopenharmony_ci { 2318e5c31af7Sopenharmony_ci input float in0 = [ -0.5 | 1.5 ]; 2319e5c31af7Sopenharmony_ci output float out0 = [ 0.5 | -1.5 ]; 2320e5c31af7Sopenharmony_ci } 2321e5c31af7Sopenharmony_ci 2322e5c31af7Sopenharmony_ci both "" 2323e5c31af7Sopenharmony_ci precision mediump float; 2324e5c31af7Sopenharmony_ci ${DECLARATIONS} 2325e5c31af7Sopenharmony_ci 2326e5c31af7Sopenharmony_ci float func (float a) 2327e5c31af7Sopenharmony_ci { 2328e5c31af7Sopenharmony_ci for (int i = 0; i < 6; i++) 2329e5c31af7Sopenharmony_ci { 2330e5c31af7Sopenharmony_ci if (i == 4) 2331e5c31af7Sopenharmony_ci continue; 2332e5c31af7Sopenharmony_ci a = -a; 2333e5c31af7Sopenharmony_ci } 2334e5c31af7Sopenharmony_ci return a; 2335e5c31af7Sopenharmony_ci } 2336e5c31af7Sopenharmony_ci 2337e5c31af7Sopenharmony_ci void main() 2338e5c31af7Sopenharmony_ci { 2339e5c31af7Sopenharmony_ci ${SETUP} 2340e5c31af7Sopenharmony_ci out0 = func(in0); 2341e5c31af7Sopenharmony_ci ${OUTPUT} 2342e5c31af7Sopenharmony_ci } 2343e5c31af7Sopenharmony_ci "" 2344e5c31af7Sopenharmony_ci end 2345e5c31af7Sopenharmony_ci 2346e5c31af7Sopenharmony_ci case return_in_nested_loop 2347e5c31af7Sopenharmony_ci values 2348e5c31af7Sopenharmony_ci { 2349e5c31af7Sopenharmony_ci input float in0 = [ -0.5 | 1.5 ]; 2350e5c31af7Sopenharmony_ci output float out0 = [ 0.5 | -1.5 ]; 2351e5c31af7Sopenharmony_ci } 2352e5c31af7Sopenharmony_ci 2353e5c31af7Sopenharmony_ci both "" 2354e5c31af7Sopenharmony_ci precision mediump float; 2355e5c31af7Sopenharmony_ci ${DECLARATIONS} 2356e5c31af7Sopenharmony_ci 2357e5c31af7Sopenharmony_ci float func (float a) 2358e5c31af7Sopenharmony_ci { 2359e5c31af7Sopenharmony_ci for (int i = 0; i < 6; i++) 2360e5c31af7Sopenharmony_ci { 2361e5c31af7Sopenharmony_ci a = -a; 2362e5c31af7Sopenharmony_ci for (int j = 0; j < 4; j++) 2363e5c31af7Sopenharmony_ci { 2364e5c31af7Sopenharmony_ci a = -a; 2365e5c31af7Sopenharmony_ci if (i == 1) 2366e5c31af7Sopenharmony_ci return a; 2367e5c31af7Sopenharmony_ci } 2368e5c31af7Sopenharmony_ci if (i == 4) 2369e5c31af7Sopenharmony_ci return 1.0; 2370e5c31af7Sopenharmony_ci } 2371e5c31af7Sopenharmony_ci return 1.0; 2372e5c31af7Sopenharmony_ci } 2373e5c31af7Sopenharmony_ci 2374e5c31af7Sopenharmony_ci void main() 2375e5c31af7Sopenharmony_ci { 2376e5c31af7Sopenharmony_ci ${SETUP} 2377e5c31af7Sopenharmony_ci out0 = func(in0); 2378e5c31af7Sopenharmony_ci ${OUTPUT} 2379e5c31af7Sopenharmony_ci } 2380e5c31af7Sopenharmony_ci "" 2381e5c31af7Sopenharmony_ci end 2382e5c31af7Sopenharmony_ci 2383e5c31af7Sopenharmony_ci case return_after_loop_sequence 2384e5c31af7Sopenharmony_ci require full_glsl_es_100_support 2385e5c31af7Sopenharmony_ci 2386e5c31af7Sopenharmony_ci values 2387e5c31af7Sopenharmony_ci { 2388e5c31af7Sopenharmony_ci input float in0 = [ -0.5 | 1.5 ]; 2389e5c31af7Sopenharmony_ci output float out0 = [ 0.5 | -1.5 ]; 2390e5c31af7Sopenharmony_ci } 2391e5c31af7Sopenharmony_ci 2392e5c31af7Sopenharmony_ci both "" 2393e5c31af7Sopenharmony_ci precision mediump float; 2394e5c31af7Sopenharmony_ci ${DECLARATIONS} 2395e5c31af7Sopenharmony_ci 2396e5c31af7Sopenharmony_ci float func (float a) 2397e5c31af7Sopenharmony_ci { 2398e5c31af7Sopenharmony_ci int i; 2399e5c31af7Sopenharmony_ci for (i = 0; i < 6; i++) // negate a 2400e5c31af7Sopenharmony_ci { 2401e5c31af7Sopenharmony_ci a = -a; 2402e5c31af7Sopenharmony_ci if (i == 4) 2403e5c31af7Sopenharmony_ci a = -a; 2404e5c31af7Sopenharmony_ci } 2405e5c31af7Sopenharmony_ci 2406e5c31af7Sopenharmony_ci for (; i < 10; i++) // keep a 2407e5c31af7Sopenharmony_ci { 2408e5c31af7Sopenharmony_ci if (i == 8) 2409e5c31af7Sopenharmony_ci continue; 2410e5c31af7Sopenharmony_ci else if (i == 9) 2411e5c31af7Sopenharmony_ci break; 2412e5c31af7Sopenharmony_ci a = -a; 2413e5c31af7Sopenharmony_ci } 2414e5c31af7Sopenharmony_ci 2415e5c31af7Sopenharmony_ci return a; 2416e5c31af7Sopenharmony_ci } 2417e5c31af7Sopenharmony_ci 2418e5c31af7Sopenharmony_ci void main() 2419e5c31af7Sopenharmony_ci { 2420e5c31af7Sopenharmony_ci ${SETUP} 2421e5c31af7Sopenharmony_ci out0 = func(in0); 2422e5c31af7Sopenharmony_ci ${OUTPUT} 2423e5c31af7Sopenharmony_ci } 2424e5c31af7Sopenharmony_ci "" 2425e5c31af7Sopenharmony_ci end 2426e5c31af7Sopenharmony_ci 2427e5c31af7Sopenharmony_ci case mixed_return_break_continue 2428e5c31af7Sopenharmony_ci values 2429e5c31af7Sopenharmony_ci { 2430e5c31af7Sopenharmony_ci input float in0 = [ -0.5 | 1.5 ]; 2431e5c31af7Sopenharmony_ci output float out0 = [ 0.5 | -1.5 ]; 2432e5c31af7Sopenharmony_ci } 2433e5c31af7Sopenharmony_ci 2434e5c31af7Sopenharmony_ci both "" 2435e5c31af7Sopenharmony_ci precision mediump float; 2436e5c31af7Sopenharmony_ci ${DECLARATIONS} 2437e5c31af7Sopenharmony_ci 2438e5c31af7Sopenharmony_ci float func (float a) 2439e5c31af7Sopenharmony_ci { 2440e5c31af7Sopenharmony_ci for (int i = 0; i < 6; i++) 2441e5c31af7Sopenharmony_ci { 2442e5c31af7Sopenharmony_ci if (i == 0) 2443e5c31af7Sopenharmony_ci continue; 2444e5c31af7Sopenharmony_ci else if (i == 1) 2445e5c31af7Sopenharmony_ci { 2446e5c31af7Sopenharmony_ci } 2447e5c31af7Sopenharmony_ci else if (i == 3) 2448e5c31af7Sopenharmony_ci break; 2449e5c31af7Sopenharmony_ci else 2450e5c31af7Sopenharmony_ci return a; 2451e5c31af7Sopenharmony_ci a = -a; 2452e5c31af7Sopenharmony_ci } 2453e5c31af7Sopenharmony_ci 2454e5c31af7Sopenharmony_ci return 1.0; 2455e5c31af7Sopenharmony_ci } 2456e5c31af7Sopenharmony_ci 2457e5c31af7Sopenharmony_ci void main() 2458e5c31af7Sopenharmony_ci { 2459e5c31af7Sopenharmony_ci ${SETUP} 2460e5c31af7Sopenharmony_ci out0 = func(in0); 2461e5c31af7Sopenharmony_ci ${OUTPUT} 2462e5c31af7Sopenharmony_ci } 2463e5c31af7Sopenharmony_ci "" 2464e5c31af7Sopenharmony_ci end 2465e5c31af7Sopenharmony_ci 2466e5c31af7Sopenharmony_ciend # control_flow 2467e5c31af7Sopenharmony_ci 2468e5c31af7Sopenharmony_cigroup misc "Miscellaneous" 2469e5c31af7Sopenharmony_ci 2470e5c31af7Sopenharmony_ci case multi_arg_float 2471e5c31af7Sopenharmony_ci values 2472e5c31af7Sopenharmony_ci { 2473e5c31af7Sopenharmony_ci input vec4 in0 = [ vec4(0.0, 1.0, -2.0, 0.5) | vec4(2.0, 2.5, 4.0, -7.0) ]; 2474e5c31af7Sopenharmony_ci output float out0 = [ 0.5 | -1.5 ]; # -sum(in0) 2475e5c31af7Sopenharmony_ci } 2476e5c31af7Sopenharmony_ci 2477e5c31af7Sopenharmony_ci both "" 2478e5c31af7Sopenharmony_ci precision mediump float; 2479e5c31af7Sopenharmony_ci ${DECLARATIONS} 2480e5c31af7Sopenharmony_ci 2481e5c31af7Sopenharmony_ci float sum(vec4 v) { return (v.x + v.y + v.z + v.w); } 2482e5c31af7Sopenharmony_ci 2483e5c31af7Sopenharmony_ci float func (float a, vec3 b, vec2 c, vec2 d, vec4 e) 2484e5c31af7Sopenharmony_ci { 2485e5c31af7Sopenharmony_ci return -sum(vec4(a, b) + vec4(c, d)) + sum(e); 2486e5c31af7Sopenharmony_ci } 2487e5c31af7Sopenharmony_ci 2488e5c31af7Sopenharmony_ci void main() 2489e5c31af7Sopenharmony_ci { 2490e5c31af7Sopenharmony_ci ${SETUP} 2491e5c31af7Sopenharmony_ci out0 = func(in0.y, in0.xzw, in0.wz, in0.yx, in0); 2492e5c31af7Sopenharmony_ci ${OUTPUT} 2493e5c31af7Sopenharmony_ci } 2494e5c31af7Sopenharmony_ci "" 2495e5c31af7Sopenharmony_ci end 2496e5c31af7Sopenharmony_ci 2497e5c31af7Sopenharmony_ci case multi_arg_int 2498e5c31af7Sopenharmony_ci values 2499e5c31af7Sopenharmony_ci { 2500e5c31af7Sopenharmony_ci input ivec4 in0 = [ ivec4(-1, 0, 2, 2) | ivec4(1, 4, -8, 2) ]; 2501e5c31af7Sopenharmony_ci output int out0 = [ -3 | 1 ]; 2502e5c31af7Sopenharmony_ci } 2503e5c31af7Sopenharmony_ci 2504e5c31af7Sopenharmony_ci both "" 2505e5c31af7Sopenharmony_ci precision mediump float; 2506e5c31af7Sopenharmony_ci precision mediump int; 2507e5c31af7Sopenharmony_ci ${DECLARATIONS} 2508e5c31af7Sopenharmony_ci 2509e5c31af7Sopenharmony_ci int sum(ivec4 v) { return (v.x + v.y + v.z + v.w); } 2510e5c31af7Sopenharmony_ci 2511e5c31af7Sopenharmony_ci int func (int a, ivec3 b, ivec2 c, ivec2 d, ivec4 e) 2512e5c31af7Sopenharmony_ci { 2513e5c31af7Sopenharmony_ci return -sum(ivec4(a, b) + ivec4(c, d)) + sum(e); 2514e5c31af7Sopenharmony_ci } 2515e5c31af7Sopenharmony_ci 2516e5c31af7Sopenharmony_ci void main() 2517e5c31af7Sopenharmony_ci { 2518e5c31af7Sopenharmony_ci ${SETUP} 2519e5c31af7Sopenharmony_ci out0 = func(in0.y, in0.xzw, in0.wz, in0.yx, in0); 2520e5c31af7Sopenharmony_ci ${OUTPUT} 2521e5c31af7Sopenharmony_ci } 2522e5c31af7Sopenharmony_ci "" 2523e5c31af7Sopenharmony_ci end 2524e5c31af7Sopenharmony_ci 2525e5c31af7Sopenharmony_ci case argument_eval_order_1 2526e5c31af7Sopenharmony_ci values 2527e5c31af7Sopenharmony_ci { 2528e5c31af7Sopenharmony_ci input int in0 = [ 0 | 1 | 3 | 5 ]; 2529e5c31af7Sopenharmony_ci output int out0 = [ -1 | 5 | 11 | 17 ]; 2530e5c31af7Sopenharmony_ci } 2531e5c31af7Sopenharmony_ci 2532e5c31af7Sopenharmony_ci both "" 2533e5c31af7Sopenharmony_ci precision mediump float; 2534e5c31af7Sopenharmony_ci ${DECLARATIONS} 2535e5c31af7Sopenharmony_ci 2536e5c31af7Sopenharmony_ci int func (float a, int b, bool c, int d) 2537e5c31af7Sopenharmony_ci { 2538e5c31af7Sopenharmony_ci if (c) 2539e5c31af7Sopenharmony_ci return b + int(a) + d; 2540e5c31af7Sopenharmony_ci else 2541e5c31af7Sopenharmony_ci return -1; 2542e5c31af7Sopenharmony_ci } 2543e5c31af7Sopenharmony_ci 2544e5c31af7Sopenharmony_ci void main () 2545e5c31af7Sopenharmony_ci { 2546e5c31af7Sopenharmony_ci ${SETUP} 2547e5c31af7Sopenharmony_ci float v0 = float(in0); 2548e5c31af7Sopenharmony_ci int v1 = in0; 2549e5c31af7Sopenharmony_ci out0 = func((v0 += 1.0), v1++, (v0 > 1.5), v1); 2550e5c31af7Sopenharmony_ci ${OUTPUT} 2551e5c31af7Sopenharmony_ci } 2552e5c31af7Sopenharmony_ci "" 2553e5c31af7Sopenharmony_ci end 2554e5c31af7Sopenharmony_ci 2555e5c31af7Sopenharmony_ci case argument_eval_order_2 2556e5c31af7Sopenharmony_ci values 2557e5c31af7Sopenharmony_ci { 2558e5c31af7Sopenharmony_ci input int in0 = [ 0 | -1 | 3 | 5 ]; 2559e5c31af7Sopenharmony_ci output int out0 = [ 3 | -1 | 9 | 13 ]; 2560e5c31af7Sopenharmony_ci } 2561e5c31af7Sopenharmony_ci 2562e5c31af7Sopenharmony_ci both "" 2563e5c31af7Sopenharmony_ci precision mediump float; 2564e5c31af7Sopenharmony_ci ${DECLARATIONS} 2565e5c31af7Sopenharmony_ci 2566e5c31af7Sopenharmony_ci int g; 2567e5c31af7Sopenharmony_ci 2568e5c31af7Sopenharmony_ci int modG (int v) 2569e5c31af7Sopenharmony_ci { 2570e5c31af7Sopenharmony_ci g += v; 2571e5c31af7Sopenharmony_ci return v; 2572e5c31af7Sopenharmony_ci } 2573e5c31af7Sopenharmony_ci 2574e5c31af7Sopenharmony_ci int func (float a, int b, bool c, int d) 2575e5c31af7Sopenharmony_ci { 2576e5c31af7Sopenharmony_ci if (c) 2577e5c31af7Sopenharmony_ci return b + int(a) + d; 2578e5c31af7Sopenharmony_ci else 2579e5c31af7Sopenharmony_ci return -1; 2580e5c31af7Sopenharmony_ci } 2581e5c31af7Sopenharmony_ci 2582e5c31af7Sopenharmony_ci void main () 2583e5c31af7Sopenharmony_ci { 2584e5c31af7Sopenharmony_ci ${SETUP} 2585e5c31af7Sopenharmony_ci out0 = func(float(g = in0), modG(2), --g > 0, g); 2586e5c31af7Sopenharmony_ci ${OUTPUT} 2587e5c31af7Sopenharmony_ci } 2588e5c31af7Sopenharmony_ci "" 2589e5c31af7Sopenharmony_ci end 2590e5c31af7Sopenharmony_ci 2591e5c31af7Sopenharmony_ci case missing_returns 2592e5c31af7Sopenharmony_ci values 2593e5c31af7Sopenharmony_ci { 2594e5c31af7Sopenharmony_ci input float in0 = [ 1.0 | 2.0 | 3.0 ]; 2595e5c31af7Sopenharmony_ci output float out0 = [ -1.0 | -2.0 | -3.0 ]; 2596e5c31af7Sopenharmony_ci } 2597e5c31af7Sopenharmony_ci both "" 2598e5c31af7Sopenharmony_ci // Note specification says that returned value is undefined if no return 2599e5c31af7Sopenharmony_ci // statement has been executed. In this case func() is called only with 2600e5c31af7Sopenharmony_ci // positive values. 2601e5c31af7Sopenharmony_ci precision mediump float; 2602e5c31af7Sopenharmony_ci ${DECLARATIONS} 2603e5c31af7Sopenharmony_ci 2604e5c31af7Sopenharmony_ci float func (float f) 2605e5c31af7Sopenharmony_ci { 2606e5c31af7Sopenharmony_ci if (f > 0.0) 2607e5c31af7Sopenharmony_ci return -f; 2608e5c31af7Sopenharmony_ci } 2609e5c31af7Sopenharmony_ci 2610e5c31af7Sopenharmony_ci void main () 2611e5c31af7Sopenharmony_ci { 2612e5c31af7Sopenharmony_ci ${SETUP} 2613e5c31af7Sopenharmony_ci out0 = func(in0); 2614e5c31af7Sopenharmony_ci ${OUTPUT} 2615e5c31af7Sopenharmony_ci } 2616e5c31af7Sopenharmony_ci "" 2617e5c31af7Sopenharmony_ci end 2618e5c31af7Sopenharmony_ci 2619e5c31af7Sopenharmony_ciend # misc 2620e5c31af7Sopenharmony_ci 2621e5c31af7Sopenharmony_cigroup invalid "Invalid Functions" 2622e5c31af7Sopenharmony_ci case break_in_body 2623e5c31af7Sopenharmony_ci expect compile_fail 2624e5c31af7Sopenharmony_ci both "" 2625e5c31af7Sopenharmony_ci precision mediump float; 2626e5c31af7Sopenharmony_ci 2627e5c31af7Sopenharmony_ci void func () 2628e5c31af7Sopenharmony_ci { 2629e5c31af7Sopenharmony_ci break; 2630e5c31af7Sopenharmony_ci } 2631e5c31af7Sopenharmony_ci 2632e5c31af7Sopenharmony_ci void main () 2633e5c31af7Sopenharmony_ci { 2634e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(1.0); 2635e5c31af7Sopenharmony_ci } 2636e5c31af7Sopenharmony_ci "" 2637e5c31af7Sopenharmony_ci end 2638e5c31af7Sopenharmony_ci 2639e5c31af7Sopenharmony_ci case continue_in_body 2640e5c31af7Sopenharmony_ci expect compile_fail 2641e5c31af7Sopenharmony_ci both "" 2642e5c31af7Sopenharmony_ci precision mediump float; 2643e5c31af7Sopenharmony_ci 2644e5c31af7Sopenharmony_ci void func () 2645e5c31af7Sopenharmony_ci { 2646e5c31af7Sopenharmony_ci continue; 2647e5c31af7Sopenharmony_ci } 2648e5c31af7Sopenharmony_ci 2649e5c31af7Sopenharmony_ci void main () 2650e5c31af7Sopenharmony_ci { 2651e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(1.0); 2652e5c31af7Sopenharmony_ci } 2653e5c31af7Sopenharmony_ci "" 2654e5c31af7Sopenharmony_ci end 2655e5c31af7Sopenharmony_ci 2656e5c31af7Sopenharmony_ci case return_value_from_void_function 2657e5c31af7Sopenharmony_ci expect compile_fail 2658e5c31af7Sopenharmony_ci both "" 2659e5c31af7Sopenharmony_ci precision mediump float; 2660e5c31af7Sopenharmony_ci 2661e5c31af7Sopenharmony_ci void func () 2662e5c31af7Sopenharmony_ci { 2663e5c31af7Sopenharmony_ci return 1.0; 2664e5c31af7Sopenharmony_ci } 2665e5c31af7Sopenharmony_ci 2666e5c31af7Sopenharmony_ci void main () 2667e5c31af7Sopenharmony_ci { 2668e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(1.0); 2669e5c31af7Sopenharmony_ci } 2670e5c31af7Sopenharmony_ci "" 2671e5c31af7Sopenharmony_ci end 2672e5c31af7Sopenharmony_ci 2673e5c31af7Sopenharmony_ci case extra_arguments 2674e5c31af7Sopenharmony_ci expect compile_fail 2675e5c31af7Sopenharmony_ci both "" 2676e5c31af7Sopenharmony_ci precision mediump float; 2677e5c31af7Sopenharmony_ci 2678e5c31af7Sopenharmony_ci void func (float f) 2679e5c31af7Sopenharmony_ci { 2680e5c31af7Sopenharmony_ci } 2681e5c31af7Sopenharmony_ci 2682e5c31af7Sopenharmony_ci void main () 2683e5c31af7Sopenharmony_ci { 2684e5c31af7Sopenharmony_ci func(1.0, 2.0); 2685e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(1.0); 2686e5c31af7Sopenharmony_ci } 2687e5c31af7Sopenharmony_ci "" 2688e5c31af7Sopenharmony_ci end 2689e5c31af7Sopenharmony_ci 2690e5c31af7Sopenharmony_ci case missing_arguments 2691e5c31af7Sopenharmony_ci expect compile_fail 2692e5c31af7Sopenharmony_ci both "" 2693e5c31af7Sopenharmony_ci precision mediump float; 2694e5c31af7Sopenharmony_ci 2695e5c31af7Sopenharmony_ci void func (float f) 2696e5c31af7Sopenharmony_ci { 2697e5c31af7Sopenharmony_ci } 2698e5c31af7Sopenharmony_ci 2699e5c31af7Sopenharmony_ci void main () 2700e5c31af7Sopenharmony_ci { 2701e5c31af7Sopenharmony_ci func(); 2702e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(1.0); 2703e5c31af7Sopenharmony_ci } 2704e5c31af7Sopenharmony_ci "" 2705e5c31af7Sopenharmony_ci end 2706e5c31af7Sopenharmony_ci 2707e5c31af7Sopenharmony_ci case missing_argument_type 2708e5c31af7Sopenharmony_ci expect compile_fail 2709e5c31af7Sopenharmony_ci both "" 2710e5c31af7Sopenharmony_ci precision mediump float; 2711e5c31af7Sopenharmony_ci 2712e5c31af7Sopenharmony_ci void func (in f) 2713e5c31af7Sopenharmony_ci { 2714e5c31af7Sopenharmony_ci } 2715e5c31af7Sopenharmony_ci 2716e5c31af7Sopenharmony_ci void main () 2717e5c31af7Sopenharmony_ci { 2718e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(1.0); 2719e5c31af7Sopenharmony_ci } 2720e5c31af7Sopenharmony_ci "" 2721e5c31af7Sopenharmony_ci end 2722e5c31af7Sopenharmony_ci 2723e5c31af7Sopenharmony_ci case argument_basetype_mismatch 2724e5c31af7Sopenharmony_ci expect compile_fail 2725e5c31af7Sopenharmony_ci both "" 2726e5c31af7Sopenharmony_ci precision mediump float; 2727e5c31af7Sopenharmony_ci precision mediump int; 2728e5c31af7Sopenharmony_ci 2729e5c31af7Sopenharmony_ci void func (float f) 2730e5c31af7Sopenharmony_ci { 2731e5c31af7Sopenharmony_ci } 2732e5c31af7Sopenharmony_ci 2733e5c31af7Sopenharmony_ci void main () 2734e5c31af7Sopenharmony_ci { 2735e5c31af7Sopenharmony_ci func(2); 2736e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(1.0); 2737e5c31af7Sopenharmony_ci } 2738e5c31af7Sopenharmony_ci "" 2739e5c31af7Sopenharmony_ci end 2740e5c31af7Sopenharmony_ci 2741e5c31af7Sopenharmony_ci case argument_scalar_vector_mismatch 2742e5c31af7Sopenharmony_ci expect compile_fail 2743e5c31af7Sopenharmony_ci both "" 2744e5c31af7Sopenharmony_ci precision mediump float; 2745e5c31af7Sopenharmony_ci 2746e5c31af7Sopenharmony_ci void func (vec2 f) 2747e5c31af7Sopenharmony_ci { 2748e5c31af7Sopenharmony_ci } 2749e5c31af7Sopenharmony_ci 2750e5c31af7Sopenharmony_ci void main () 2751e5c31af7Sopenharmony_ci { 2752e5c31af7Sopenharmony_ci func(2.0); 2753e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(1.0); 2754e5c31af7Sopenharmony_ci } 2755e5c31af7Sopenharmony_ci "" 2756e5c31af7Sopenharmony_ci end 2757e5c31af7Sopenharmony_ci 2758e5c31af7Sopenharmony_ci case argument_vector_size_mismatch 2759e5c31af7Sopenharmony_ci expect compile_fail 2760e5c31af7Sopenharmony_ci both "" 2761e5c31af7Sopenharmony_ci precision mediump float; 2762e5c31af7Sopenharmony_ci 2763e5c31af7Sopenharmony_ci void func (vec3 f) 2764e5c31af7Sopenharmony_ci { 2765e5c31af7Sopenharmony_ci } 2766e5c31af7Sopenharmony_ci 2767e5c31af7Sopenharmony_ci void main () 2768e5c31af7Sopenharmony_ci { 2769e5c31af7Sopenharmony_ci func(vec2(2.0)); 2770e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(1.0); 2771e5c31af7Sopenharmony_ci } 2772e5c31af7Sopenharmony_ci "" 2773e5c31af7Sopenharmony_ci end 2774e5c31af7Sopenharmony_ci 2775e5c31af7Sopenharmony_ci case duplicate_function 2776e5c31af7Sopenharmony_ci expect compile_fail 2777e5c31af7Sopenharmony_ci both "" 2778e5c31af7Sopenharmony_ci precision mediump float; 2779e5c31af7Sopenharmony_ci 2780e5c31af7Sopenharmony_ci void func (vec3 f); 2781e5c31af7Sopenharmony_ci 2782e5c31af7Sopenharmony_ci void func (vec3 f) 2783e5c31af7Sopenharmony_ci { 2784e5c31af7Sopenharmony_ci } 2785e5c31af7Sopenharmony_ci 2786e5c31af7Sopenharmony_ci void func (vec3 f) 2787e5c31af7Sopenharmony_ci { 2788e5c31af7Sopenharmony_ci } 2789e5c31af7Sopenharmony_ci 2790e5c31af7Sopenharmony_ci void main () 2791e5c31af7Sopenharmony_ci { 2792e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(1.0); 2793e5c31af7Sopenharmony_ci } 2794e5c31af7Sopenharmony_ci "" 2795e5c31af7Sopenharmony_ci end 2796e5c31af7Sopenharmony_ci 2797e5c31af7Sopenharmony_ci case prototype_mismatch_return_type 2798e5c31af7Sopenharmony_ci expect compile_fail 2799e5c31af7Sopenharmony_ci both "" 2800e5c31af7Sopenharmony_ci precision mediump float; 2801e5c31af7Sopenharmony_ci 2802e5c31af7Sopenharmony_ci void func (vec3 f); 2803e5c31af7Sopenharmony_ci 2804e5c31af7Sopenharmony_ci void main () 2805e5c31af7Sopenharmony_ci { 2806e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(1.0); 2807e5c31af7Sopenharmony_ci } 2808e5c31af7Sopenharmony_ci 2809e5c31af7Sopenharmony_ci float func (vec3 f) 2810e5c31af7Sopenharmony_ci { 2811e5c31af7Sopenharmony_ci return f.x; 2812e5c31af7Sopenharmony_ci } 2813e5c31af7Sopenharmony_ci "" 2814e5c31af7Sopenharmony_ci end 2815e5c31af7Sopenharmony_ci 2816e5c31af7Sopenharmony_ci case prototype_unspecified_array_size 2817e5c31af7Sopenharmony_ci expect compile_fail 2818e5c31af7Sopenharmony_ci both "" 2819e5c31af7Sopenharmony_ci precision mediump float; 2820e5c31af7Sopenharmony_ci 2821e5c31af7Sopenharmony_ci void func (vec3 f[]); 2822e5c31af7Sopenharmony_ci 2823e5c31af7Sopenharmony_ci void main () 2824e5c31af7Sopenharmony_ci { 2825e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(1.0); 2826e5c31af7Sopenharmony_ci } 2827e5c31af7Sopenharmony_ci "" 2828e5c31af7Sopenharmony_ci end 2829e5c31af7Sopenharmony_ci 2830e5c31af7Sopenharmony_ci case call_mismatch_argument_array_size 2831e5c31af7Sopenharmony_ci expect compile_fail 2832e5c31af7Sopenharmony_ci both "" 2833e5c31af7Sopenharmony_ci precision mediump float; 2834e5c31af7Sopenharmony_ci 2835e5c31af7Sopenharmony_ci void func (vec3 f[3]); 2836e5c31af7Sopenharmony_ci void func (vec3 f[3]) 2837e5c31af7Sopenharmony_ci { 2838e5c31af7Sopenharmony_ci } 2839e5c31af7Sopenharmony_ci 2840e5c31af7Sopenharmony_ci void main () 2841e5c31af7Sopenharmony_ci { 2842e5c31af7Sopenharmony_ci vec3 array[4]; 2843e5c31af7Sopenharmony_ci func(array); 2844e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(1.0); 2845e5c31af7Sopenharmony_ci } 2846e5c31af7Sopenharmony_ci "" 2847e5c31af7Sopenharmony_ci end 2848e5c31af7Sopenharmony_ci 2849e5c31af7Sopenharmony_ci case prototype_mismatch_argument_const 2850e5c31af7Sopenharmony_ci expect compile_fail 2851e5c31af7Sopenharmony_ci both "" 2852e5c31af7Sopenharmony_ci precision mediump float; 2853e5c31af7Sopenharmony_ci 2854e5c31af7Sopenharmony_ci void func (vec3 f); 2855e5c31af7Sopenharmony_ci void func (const vec3 f) 2856e5c31af7Sopenharmony_ci { 2857e5c31af7Sopenharmony_ci } 2858e5c31af7Sopenharmony_ci 2859e5c31af7Sopenharmony_ci void main () 2860e5c31af7Sopenharmony_ci { 2861e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(1.0); 2862e5c31af7Sopenharmony_ci } 2863e5c31af7Sopenharmony_ci "" 2864e5c31af7Sopenharmony_ci end 2865e5c31af7Sopenharmony_ci 2866e5c31af7Sopenharmony_ci case prototype_mismatch_argument_array_const 2867e5c31af7Sopenharmony_ci expect compile_fail 2868e5c31af7Sopenharmony_ci both "" 2869e5c31af7Sopenharmony_ci precision mediump float; 2870e5c31af7Sopenharmony_ci 2871e5c31af7Sopenharmony_ci void func (vec3 f[3]); 2872e5c31af7Sopenharmony_ci void func (const vec3 f[3]) 2873e5c31af7Sopenharmony_ci { 2874e5c31af7Sopenharmony_ci } 2875e5c31af7Sopenharmony_ci 2876e5c31af7Sopenharmony_ci void main () 2877e5c31af7Sopenharmony_ci { 2878e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(1.0); 2879e5c31af7Sopenharmony_ci } 2880e5c31af7Sopenharmony_ci "" 2881e5c31af7Sopenharmony_ci end 2882e5c31af7Sopenharmony_ci 2883e5c31af7Sopenharmony_ci case prototype_mismatch_array_inout 2884e5c31af7Sopenharmony_ci expect compile_fail 2885e5c31af7Sopenharmony_ci both "" 2886e5c31af7Sopenharmony_ci precision mediump float; 2887e5c31af7Sopenharmony_ci 2888e5c31af7Sopenharmony_ci void func (out vec3 f); 2889e5c31af7Sopenharmony_ci void func (inout vec3 f) 2890e5c31af7Sopenharmony_ci { 2891e5c31af7Sopenharmony_ci } 2892e5c31af7Sopenharmony_ci 2893e5c31af7Sopenharmony_ci void main () 2894e5c31af7Sopenharmony_ci { 2895e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(1.0); 2896e5c31af7Sopenharmony_ci } 2897e5c31af7Sopenharmony_ci "" 2898e5c31af7Sopenharmony_ci end 2899e5c31af7Sopenharmony_ci 2900e5c31af7Sopenharmony_ci case missing_return_type 2901e5c31af7Sopenharmony_ci expect compile_fail 2902e5c31af7Sopenharmony_ci both "" 2903e5c31af7Sopenharmony_ci precision mediump float; 2904e5c31af7Sopenharmony_ci 2905e5c31af7Sopenharmony_ci func (float f); 2906e5c31af7Sopenharmony_ci func (inout vec3 f[3]) 2907e5c31af7Sopenharmony_ci { 2908e5c31af7Sopenharmony_ci } 2909e5c31af7Sopenharmony_ci 2910e5c31af7Sopenharmony_ci void main () 2911e5c31af7Sopenharmony_ci { 2912e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(1.0); 2913e5c31af7Sopenharmony_ci } 2914e5c31af7Sopenharmony_ci "" 2915e5c31af7Sopenharmony_ci end 2916e5c31af7Sopenharmony_ci 2917e5c31af7Sopenharmony_ci case call_before_definition 2918e5c31af7Sopenharmony_ci expect compile_fail 2919e5c31af7Sopenharmony_ci both "" 2920e5c31af7Sopenharmony_ci precision mediump float; 2921e5c31af7Sopenharmony_ci 2922e5c31af7Sopenharmony_ci void main () 2923e5c31af7Sopenharmony_ci { 2924e5c31af7Sopenharmony_ci func(1.0); 2925e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(1.0); 2926e5c31af7Sopenharmony_ci } 2927e5c31af7Sopenharmony_ci 2928e5c31af7Sopenharmony_ci void func (float f) 2929e5c31af7Sopenharmony_ci { 2930e5c31af7Sopenharmony_ci } 2931e5c31af7Sopenharmony_ci 2932e5c31af7Sopenharmony_ci "" 2933e5c31af7Sopenharmony_ci end 2934e5c31af7Sopenharmony_ci 2935e5c31af7Sopenharmony_ci case return_array_in_struct 2936e5c31af7Sopenharmony_ci expect compile_fail 2937e5c31af7Sopenharmony_ci both "" 2938e5c31af7Sopenharmony_ci precision mediump float; 2939e5c31af7Sopenharmony_ci 2940e5c31af7Sopenharmony_ci struct Foo 2941e5c31af7Sopenharmony_ci { 2942e5c31af7Sopenharmony_ci float f; 2943e5c31af7Sopenharmony_ci float arr[2]; 2944e5c31af7Sopenharmony_ci }; 2945e5c31af7Sopenharmony_ci 2946e5c31af7Sopenharmony_ci Foo func () 2947e5c31af7Sopenharmony_ci { 2948e5c31af7Sopenharmony_ci Foo f; 2949e5c31af7Sopenharmony_ci f.f = 1.0; 2950e5c31af7Sopenharmony_ci f.arr[0] = 2.0; 2951e5c31af7Sopenharmony_ci return f; 2952e5c31af7Sopenharmony_ci } 2953e5c31af7Sopenharmony_ci 2954e5c31af7Sopenharmony_ci void main () 2955e5c31af7Sopenharmony_ci { 2956e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(1.0); 2957e5c31af7Sopenharmony_ci } 2958e5c31af7Sopenharmony_ci "" 2959e5c31af7Sopenharmony_ci end 2960e5c31af7Sopenharmony_ci 2961e5c31af7Sopenharmony_ci case argument_precision_overload 2962e5c31af7Sopenharmony_ci expect compile_fail 2963e5c31af7Sopenharmony_ci both "" 2964e5c31af7Sopenharmony_ci precision mediump float; 2965e5c31af7Sopenharmony_ci 2966e5c31af7Sopenharmony_ci float func (lowp float f) 2967e5c31af7Sopenharmony_ci { 2968e5c31af7Sopenharmony_ci return f; 2969e5c31af7Sopenharmony_ci } 2970e5c31af7Sopenharmony_ci 2971e5c31af7Sopenharmony_ci float func (mediump float f) 2972e5c31af7Sopenharmony_ci { 2973e5c31af7Sopenharmony_ci return f; 2974e5c31af7Sopenharmony_ci } 2975e5c31af7Sopenharmony_ci 2976e5c31af7Sopenharmony_ci void main () 2977e5c31af7Sopenharmony_ci { 2978e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(1.0); 2979e5c31af7Sopenharmony_ci } 2980e5c31af7Sopenharmony_ci "" 2981e5c31af7Sopenharmony_ci end 2982e5c31af7Sopenharmony_ci 2983e5c31af7Sopenharmony_ci case argument_in_out_overload 2984e5c31af7Sopenharmony_ci expect compile_fail 2985e5c31af7Sopenharmony_ci both "" 2986e5c31af7Sopenharmony_ci precision mediump float; 2987e5c31af7Sopenharmony_ci 2988e5c31af7Sopenharmony_ci void func (in float f) 2989e5c31af7Sopenharmony_ci { 2990e5c31af7Sopenharmony_ci } 2991e5c31af7Sopenharmony_ci 2992e5c31af7Sopenharmony_ci void func (out float f) 2993e5c31af7Sopenharmony_ci { 2994e5c31af7Sopenharmony_ci f = 1.0; 2995e5c31af7Sopenharmony_ci } 2996e5c31af7Sopenharmony_ci 2997e5c31af7Sopenharmony_ci void main () 2998e5c31af7Sopenharmony_ci { 2999e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(1.0); 3000e5c31af7Sopenharmony_ci } 3001e5c31af7Sopenharmony_ci "" 3002e5c31af7Sopenharmony_ci end 3003e5c31af7Sopenharmony_ci 3004e5c31af7Sopenharmony_ci case argument_in_inout_overload 3005e5c31af7Sopenharmony_ci expect compile_fail 3006e5c31af7Sopenharmony_ci both "" 3007e5c31af7Sopenharmony_ci precision mediump float; 3008e5c31af7Sopenharmony_ci 3009e5c31af7Sopenharmony_ci void func (in float f) 3010e5c31af7Sopenharmony_ci { 3011e5c31af7Sopenharmony_ci } 3012e5c31af7Sopenharmony_ci 3013e5c31af7Sopenharmony_ci void func (inout float f) 3014e5c31af7Sopenharmony_ci { 3015e5c31af7Sopenharmony_ci f = -f; 3016e5c31af7Sopenharmony_ci } 3017e5c31af7Sopenharmony_ci 3018e5c31af7Sopenharmony_ci void main () 3019e5c31af7Sopenharmony_ci { 3020e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(1.0); 3021e5c31af7Sopenharmony_ci } 3022e5c31af7Sopenharmony_ci "" 3023e5c31af7Sopenharmony_ci end 3024e5c31af7Sopenharmony_ci 3025e5c31af7Sopenharmony_ci case argument_out_inout_overload 3026e5c31af7Sopenharmony_ci expect compile_fail 3027e5c31af7Sopenharmony_ci both "" 3028e5c31af7Sopenharmony_ci precision mediump float; 3029e5c31af7Sopenharmony_ci 3030e5c31af7Sopenharmony_ci void func (out float f) 3031e5c31af7Sopenharmony_ci { 3032e5c31af7Sopenharmony_ci f = -1.0; 3033e5c31af7Sopenharmony_ci } 3034e5c31af7Sopenharmony_ci 3035e5c31af7Sopenharmony_ci void func (inout float f) 3036e5c31af7Sopenharmony_ci { 3037e5c31af7Sopenharmony_ci f = -f; 3038e5c31af7Sopenharmony_ci } 3039e5c31af7Sopenharmony_ci 3040e5c31af7Sopenharmony_ci void main () 3041e5c31af7Sopenharmony_ci { 3042e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(1.0); 3043e5c31af7Sopenharmony_ci } 3044e5c31af7Sopenharmony_ci "" 3045e5c31af7Sopenharmony_ci end 3046e5c31af7Sopenharmony_ci 3047e5c31af7Sopenharmony_ci case return_type_overload 3048e5c31af7Sopenharmony_ci expect compile_fail 3049e5c31af7Sopenharmony_ci both "" 3050e5c31af7Sopenharmony_ci precision mediump float; 3051e5c31af7Sopenharmony_ci 3052e5c31af7Sopenharmony_ci float func (float f) 3053e5c31af7Sopenharmony_ci { 3054e5c31af7Sopenharmony_ci return f; 3055e5c31af7Sopenharmony_ci } 3056e5c31af7Sopenharmony_ci 3057e5c31af7Sopenharmony_ci int func (float f) 3058e5c31af7Sopenharmony_ci { 3059e5c31af7Sopenharmony_ci return int(f); 3060e5c31af7Sopenharmony_ci } 3061e5c31af7Sopenharmony_ci 3062e5c31af7Sopenharmony_ci void main () 3063e5c31af7Sopenharmony_ci { 3064e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(1.0); 3065e5c31af7Sopenharmony_ci } 3066e5c31af7Sopenharmony_ci "" 3067e5c31af7Sopenharmony_ci end 3068e5c31af7Sopenharmony_ci 3069e5c31af7Sopenharmony_ci case return_type_precision_overload 3070e5c31af7Sopenharmony_ci expect compile_fail 3071e5c31af7Sopenharmony_ci both "" 3072e5c31af7Sopenharmony_ci precision mediump float; 3073e5c31af7Sopenharmony_ci 3074e5c31af7Sopenharmony_ci lowp float func (float f) 3075e5c31af7Sopenharmony_ci { 3076e5c31af7Sopenharmony_ci return f; 3077e5c31af7Sopenharmony_ci } 3078e5c31af7Sopenharmony_ci 3079e5c31af7Sopenharmony_ci mediump float func (float f) 3080e5c31af7Sopenharmony_ci { 3081e5c31af7Sopenharmony_ci return f; 3082e5c31af7Sopenharmony_ci } 3083e5c31af7Sopenharmony_ci 3084e5c31af7Sopenharmony_ci void main () 3085e5c31af7Sopenharmony_ci { 3086e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(1.0); 3087e5c31af7Sopenharmony_ci } 3088e5c31af7Sopenharmony_ci "" 3089e5c31af7Sopenharmony_ci end 3090e5c31af7Sopenharmony_ci 3091e5c31af7Sopenharmony_ci case return_type_const_overload 3092e5c31af7Sopenharmony_ci expect compile_fail 3093e5c31af7Sopenharmony_ci both "" 3094e5c31af7Sopenharmony_ci precision mediump float; 3095e5c31af7Sopenharmony_ci 3096e5c31af7Sopenharmony_ci float func (float f) 3097e5c31af7Sopenharmony_ci { 3098e5c31af7Sopenharmony_ci return f; 3099e5c31af7Sopenharmony_ci } 3100e5c31af7Sopenharmony_ci 3101e5c31af7Sopenharmony_ci const float func (float f) 3102e5c31af7Sopenharmony_ci { 3103e5c31af7Sopenharmony_ci return f; 3104e5c31af7Sopenharmony_ci } 3105e5c31af7Sopenharmony_ci 3106e5c31af7Sopenharmony_ci void main () 3107e5c31af7Sopenharmony_ci { 3108e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(1.0); 3109e5c31af7Sopenharmony_ci } 3110e5c31af7Sopenharmony_ci "" 3111e5c31af7Sopenharmony_ci end 3112e5c31af7Sopenharmony_ci 3113e5c31af7Sopenharmony_ci case return_without_value 3114e5c31af7Sopenharmony_ci expect compile_fail 3115e5c31af7Sopenharmony_ci both "" 3116e5c31af7Sopenharmony_ci precision mediump float; 3117e5c31af7Sopenharmony_ci 3118e5c31af7Sopenharmony_ci float func (float f) 3119e5c31af7Sopenharmony_ci { 3120e5c31af7Sopenharmony_ci return; 3121e5c31af7Sopenharmony_ci return 1.0; 3122e5c31af7Sopenharmony_ci } 3123e5c31af7Sopenharmony_ci 3124e5c31af7Sopenharmony_ci void main () 3125e5c31af7Sopenharmony_ci { 3126e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(1.0); 3127e5c31af7Sopenharmony_ci } 3128e5c31af7Sopenharmony_ci "" 3129e5c31af7Sopenharmony_ci end 3130e5c31af7Sopenharmony_ci 3131e5c31af7Sopenharmony_ci case local_function_prototype 3132e5c31af7Sopenharmony_ci expect compile_fail 3133e5c31af7Sopenharmony_ci both "" 3134e5c31af7Sopenharmony_ci precision mediump float; 3135e5c31af7Sopenharmony_ci 3136e5c31af7Sopenharmony_ci void main () 3137e5c31af7Sopenharmony_ci { 3138e5c31af7Sopenharmony_ci float func (float f); 3139e5c31af7Sopenharmony_ci 3140e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(1.0); 3141e5c31af7Sopenharmony_ci } 3142e5c31af7Sopenharmony_ci "" 3143e5c31af7Sopenharmony_ci end 3144e5c31af7Sopenharmony_ci 3145e5c31af7Sopenharmony_ci case local_function_definition 3146e5c31af7Sopenharmony_ci expect compile_fail 3147e5c31af7Sopenharmony_ci both "" 3148e5c31af7Sopenharmony_ci precision mediump float; 3149e5c31af7Sopenharmony_ci 3150e5c31af7Sopenharmony_ci void main () 3151e5c31af7Sopenharmony_ci { 3152e5c31af7Sopenharmony_ci float func (float f) 3153e5c31af7Sopenharmony_ci { 3154e5c31af7Sopenharmony_ci return 1.0; 3155e5c31af7Sopenharmony_ci } 3156e5c31af7Sopenharmony_ci 3157e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(1.0); 3158e5c31af7Sopenharmony_ci } 3159e5c31af7Sopenharmony_ci "" 3160e5c31af7Sopenharmony_ci end 3161e5c31af7Sopenharmony_ci 3162e5c31af7Sopenharmony_ci case name_type_conflict 3163e5c31af7Sopenharmony_ci expect compile_fail 3164e5c31af7Sopenharmony_ci both "" 3165e5c31af7Sopenharmony_ci precision mediump float; 3166e5c31af7Sopenharmony_ci 3167e5c31af7Sopenharmony_ci struct foo { float a; } 3168e5c31af7Sopenharmony_ci 3169e5c31af7Sopenharmony_ci float foo (float f) 3170e5c31af7Sopenharmony_ci { 3171e5c31af7Sopenharmony_ci return 1.0; 3172e5c31af7Sopenharmony_ci } 3173e5c31af7Sopenharmony_ci 3174e5c31af7Sopenharmony_ci void main () 3175e5c31af7Sopenharmony_ci { 3176e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(1.0); 3177e5c31af7Sopenharmony_ci } 3178e5c31af7Sopenharmony_ci "" 3179e5c31af7Sopenharmony_ci end 3180e5c31af7Sopenharmony_ci 3181e5c31af7Sopenharmony_ci case const_overload 3182e5c31af7Sopenharmony_ci expect compile_fail 3183e5c31af7Sopenharmony_ci both "" 3184e5c31af7Sopenharmony_ci precision mediump float; 3185e5c31af7Sopenharmony_ci 3186e5c31af7Sopenharmony_ci void func (vec3 f) 3187e5c31af7Sopenharmony_ci { 3188e5c31af7Sopenharmony_ci } 3189e5c31af7Sopenharmony_ci 3190e5c31af7Sopenharmony_ci void func (const vec3 f) 3191e5c31af7Sopenharmony_ci { 3192e5c31af7Sopenharmony_ci } 3193e5c31af7Sopenharmony_ci 3194e5c31af7Sopenharmony_ci void main () 3195e5c31af7Sopenharmony_ci { 3196e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(1.0); 3197e5c31af7Sopenharmony_ci } 3198e5c31af7Sopenharmony_ci "" 3199e5c31af7Sopenharmony_ci end 3200e5c31af7Sopenharmony_ci 3201e5c31af7Sopenharmony_ci case uniform_local 3202e5c31af7Sopenharmony_ci expect compile_fail 3203e5c31af7Sopenharmony_ci both "" 3204e5c31af7Sopenharmony_ci precision mediump float; 3205e5c31af7Sopenharmony_ci 3206e5c31af7Sopenharmony_ci void func (vec3 f) 3207e5c31af7Sopenharmony_ci { 3208e5c31af7Sopenharmony_ci uniform float u; 3209e5c31af7Sopenharmony_ci } 3210e5c31af7Sopenharmony_ci 3211e5c31af7Sopenharmony_ci void main () 3212e5c31af7Sopenharmony_ci { 3213e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(1.0); 3214e5c31af7Sopenharmony_ci } 3215e5c31af7Sopenharmony_ci "" 3216e5c31af7Sopenharmony_ci end 3217e5c31af7Sopenharmony_ci 3218e5c31af7Sopenharmony_ci case varying_local 3219e5c31af7Sopenharmony_ci expect compile_fail 3220e5c31af7Sopenharmony_ci both "" 3221e5c31af7Sopenharmony_ci precision mediump float; 3222e5c31af7Sopenharmony_ci 3223e5c31af7Sopenharmony_ci void func (vec3 f) 3224e5c31af7Sopenharmony_ci { 3225e5c31af7Sopenharmony_ci varying float v; 3226e5c31af7Sopenharmony_ci } 3227e5c31af7Sopenharmony_ci 3228e5c31af7Sopenharmony_ci void main () 3229e5c31af7Sopenharmony_ci { 3230e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(1.0); 3231e5c31af7Sopenharmony_ci } 3232e5c31af7Sopenharmony_ci "" 3233e5c31af7Sopenharmony_ci end 3234e5c31af7Sopenharmony_ci 3235e5c31af7Sopenharmony_ci case attribute_local 3236e5c31af7Sopenharmony_ci expect compile_fail 3237e5c31af7Sopenharmony_ci both "" 3238e5c31af7Sopenharmony_ci precision mediump float; 3239e5c31af7Sopenharmony_ci 3240e5c31af7Sopenharmony_ci void func (vec3 f) 3241e5c31af7Sopenharmony_ci { 3242e5c31af7Sopenharmony_ci attribute float a; 3243e5c31af7Sopenharmony_ci } 3244e5c31af7Sopenharmony_ci 3245e5c31af7Sopenharmony_ci void main () 3246e5c31af7Sopenharmony_ci { 3247e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(1.0); 3248e5c31af7Sopenharmony_ci } 3249e5c31af7Sopenharmony_ci "" 3250e5c31af7Sopenharmony_ci end 3251e5c31af7Sopenharmony_ci 3252e5c31af7Sopenharmony_ci case uniform_argument 3253e5c31af7Sopenharmony_ci expect compile_fail 3254e5c31af7Sopenharmony_ci both "" 3255e5c31af7Sopenharmony_ci precision mediump float; 3256e5c31af7Sopenharmony_ci 3257e5c31af7Sopenharmony_ci void func (uniform vec3 f) 3258e5c31af7Sopenharmony_ci { 3259e5c31af7Sopenharmony_ci } 3260e5c31af7Sopenharmony_ci 3261e5c31af7Sopenharmony_ci void main () 3262e5c31af7Sopenharmony_ci { 3263e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(1.0); 3264e5c31af7Sopenharmony_ci } 3265e5c31af7Sopenharmony_ci "" 3266e5c31af7Sopenharmony_ci end 3267e5c31af7Sopenharmony_ci 3268e5c31af7Sopenharmony_ci case varying_argument 3269e5c31af7Sopenharmony_ci expect compile_fail 3270e5c31af7Sopenharmony_ci both "" 3271e5c31af7Sopenharmony_ci precision mediump float; 3272e5c31af7Sopenharmony_ci 3273e5c31af7Sopenharmony_ci void func (varying vec3 f) 3274e5c31af7Sopenharmony_ci { 3275e5c31af7Sopenharmony_ci } 3276e5c31af7Sopenharmony_ci 3277e5c31af7Sopenharmony_ci void main () 3278e5c31af7Sopenharmony_ci { 3279e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(1.0); 3280e5c31af7Sopenharmony_ci } 3281e5c31af7Sopenharmony_ci "" 3282e5c31af7Sopenharmony_ci end 3283e5c31af7Sopenharmony_ci 3284e5c31af7Sopenharmony_ci case attribute_argument 3285e5c31af7Sopenharmony_ci expect compile_fail 3286e5c31af7Sopenharmony_ci both "" 3287e5c31af7Sopenharmony_ci precision mediump float; 3288e5c31af7Sopenharmony_ci 3289e5c31af7Sopenharmony_ci void func (attribute vec3 f) 3290e5c31af7Sopenharmony_ci { 3291e5c31af7Sopenharmony_ci } 3292e5c31af7Sopenharmony_ci 3293e5c31af7Sopenharmony_ci void main () 3294e5c31af7Sopenharmony_ci { 3295e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(1.0); 3296e5c31af7Sopenharmony_ci } 3297e5c31af7Sopenharmony_ci "" 3298e5c31af7Sopenharmony_ci end 3299e5c31af7Sopenharmony_ci 3300e5c31af7Sopenharmony_ci case uniform_return_type 3301e5c31af7Sopenharmony_ci expect compile_fail 3302e5c31af7Sopenharmony_ci both "" 3303e5c31af7Sopenharmony_ci precision mediump float; 3304e5c31af7Sopenharmony_ci 3305e5c31af7Sopenharmony_ci uniform float func (vec3 f) 3306e5c31af7Sopenharmony_ci { 3307e5c31af7Sopenharmony_ci return f.x; 3308e5c31af7Sopenharmony_ci } 3309e5c31af7Sopenharmony_ci 3310e5c31af7Sopenharmony_ci void main () 3311e5c31af7Sopenharmony_ci { 3312e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(1.0); 3313e5c31af7Sopenharmony_ci } 3314e5c31af7Sopenharmony_ci "" 3315e5c31af7Sopenharmony_ci end 3316e5c31af7Sopenharmony_ci 3317e5c31af7Sopenharmony_ci case varying_return_type 3318e5c31af7Sopenharmony_ci expect compile_fail 3319e5c31af7Sopenharmony_ci both "" 3320e5c31af7Sopenharmony_ci precision mediump float; 3321e5c31af7Sopenharmony_ci 3322e5c31af7Sopenharmony_ci varying float func (vec3 f) 3323e5c31af7Sopenharmony_ci { 3324e5c31af7Sopenharmony_ci return f.x; 3325e5c31af7Sopenharmony_ci } 3326e5c31af7Sopenharmony_ci 3327e5c31af7Sopenharmony_ci void main () 3328e5c31af7Sopenharmony_ci { 3329e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(1.0); 3330e5c31af7Sopenharmony_ci } 3331e5c31af7Sopenharmony_ci "" 3332e5c31af7Sopenharmony_ci end 3333e5c31af7Sopenharmony_ci 3334e5c31af7Sopenharmony_ci case attribute_return_type 3335e5c31af7Sopenharmony_ci expect compile_fail 3336e5c31af7Sopenharmony_ci both "" 3337e5c31af7Sopenharmony_ci precision mediump float; 3338e5c31af7Sopenharmony_ci 3339e5c31af7Sopenharmony_ci attribute float func (vec3 f) 3340e5c31af7Sopenharmony_ci { 3341e5c31af7Sopenharmony_ci return f.x; 3342e5c31af7Sopenharmony_ci } 3343e5c31af7Sopenharmony_ci 3344e5c31af7Sopenharmony_ci void main () 3345e5c31af7Sopenharmony_ci { 3346e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(1.0); 3347e5c31af7Sopenharmony_ci } 3348e5c31af7Sopenharmony_ci "" 3349e5c31af7Sopenharmony_ci end 3350e5c31af7Sopenharmony_ci 3351e5c31af7Sopenharmony_ci case main_invalid_return_type 3352e5c31af7Sopenharmony_ci expect compile_fail 3353e5c31af7Sopenharmony_ci both "" 3354e5c31af7Sopenharmony_ci precision mediump float; 3355e5c31af7Sopenharmony_ci 3356e5c31af7Sopenharmony_ci float main () 3357e5c31af7Sopenharmony_ci { 3358e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(1.0); 3359e5c31af7Sopenharmony_ci } 3360e5c31af7Sopenharmony_ci "" 3361e5c31af7Sopenharmony_ci end 3362e5c31af7Sopenharmony_ci 3363e5c31af7Sopenharmony_ci case main_has_arguments 3364e5c31af7Sopenharmony_ci expect compile_fail 3365e5c31af7Sopenharmony_ci both "" 3366e5c31af7Sopenharmony_ci precision mediump float; 3367e5c31af7Sopenharmony_ci 3368e5c31af7Sopenharmony_ci void main (float f) 3369e5c31af7Sopenharmony_ci { 3370e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(1.0); 3371e5c31af7Sopenharmony_ci } 3372e5c31af7Sopenharmony_ci "" 3373e5c31af7Sopenharmony_ci end 3374e5c31af7Sopenharmony_ci 3375e5c31af7Sopenharmony_ci case main_missing_return_type 3376e5c31af7Sopenharmony_ci expect compile_fail 3377e5c31af7Sopenharmony_ci both "" 3378e5c31af7Sopenharmony_ci precision mediump float; 3379e5c31af7Sopenharmony_ci 3380e5c31af7Sopenharmony_ci main () 3381e5c31af7Sopenharmony_ci { 3382e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(1.0); 3383e5c31af7Sopenharmony_ci } 3384e5c31af7Sopenharmony_ci "" 3385e5c31af7Sopenharmony_ci end 3386e5c31af7Sopenharmony_ci 3387e5c31af7Sopenharmony_ci case write_const_arg 3388e5c31af7Sopenharmony_ci expect compile_fail 3389e5c31af7Sopenharmony_ci both "" 3390e5c31af7Sopenharmony_ci precision mediump float; 3391e5c31af7Sopenharmony_ci 3392e5c31af7Sopenharmony_ci func (const float f) 3393e5c31af7Sopenharmony_ci { 3394e5c31af7Sopenharmony_ci f = 1.0; 3395e5c31af7Sopenharmony_ci } 3396e5c31af7Sopenharmony_ci 3397e5c31af7Sopenharmony_ci main () 3398e5c31af7Sopenharmony_ci { 3399e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(1.0); 3400e5c31af7Sopenharmony_ci } 3401e5c31af7Sopenharmony_ci "" 3402e5c31af7Sopenharmony_ci end 3403e5c31af7Sopenharmony_ci 3404e5c31af7Sopenharmony_ci case write_const_array_arg 3405e5c31af7Sopenharmony_ci expect compile_fail 3406e5c31af7Sopenharmony_ci both "" 3407e5c31af7Sopenharmony_ci precision mediump float; 3408e5c31af7Sopenharmony_ci 3409e5c31af7Sopenharmony_ci func (const float f[3]) 3410e5c31af7Sopenharmony_ci { 3411e5c31af7Sopenharmony_ci f[0] = 1.0; 3412e5c31af7Sopenharmony_ci } 3413e5c31af7Sopenharmony_ci 3414e5c31af7Sopenharmony_ci main () 3415e5c31af7Sopenharmony_ci { 3416e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(1.0); 3417e5c31af7Sopenharmony_ci } 3418e5c31af7Sopenharmony_ci "" 3419e5c31af7Sopenharmony_ci end 3420e5c31af7Sopenharmony_ci 3421e5c31af7Sopenharmony_ci case modify_const_arg 3422e5c31af7Sopenharmony_ci expect compile_fail 3423e5c31af7Sopenharmony_ci both "" 3424e5c31af7Sopenharmony_ci precision mediump float; 3425e5c31af7Sopenharmony_ci precision mediump int; 3426e5c31af7Sopenharmony_ci ${DECLARATIONS} 3427e5c31af7Sopenharmony_ci 3428e5c31af7Sopenharmony_ci int func (const int a) 3429e5c31af7Sopenharmony_ci { 3430e5c31af7Sopenharmony_ci a = -a; 3431e5c31af7Sopenharmony_ci return 2 * a; 3432e5c31af7Sopenharmony_ci } 3433e5c31af7Sopenharmony_ci 3434e5c31af7Sopenharmony_ci void main() 3435e5c31af7Sopenharmony_ci { 3436e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(func(3)); 3437e5c31af7Sopenharmony_ci } 3438e5c31af7Sopenharmony_ci "" 3439e5c31af7Sopenharmony_ci end 3440e5c31af7Sopenharmony_ci 3441e5c31af7Sopenharmony_ci case init_const_local_from_const_arg 3442e5c31af7Sopenharmony_ci expect compile_fail 3443e5c31af7Sopenharmony_ci both "" 3444e5c31af7Sopenharmony_ci precision mediump float; 3445e5c31af7Sopenharmony_ci precision mediump int; 3446e5c31af7Sopenharmony_ci ${DECLARATIONS} 3447e5c31af7Sopenharmony_ci 3448e5c31af7Sopenharmony_ci int func (const int a) 3449e5c31af7Sopenharmony_ci { 3450e5c31af7Sopenharmony_ci const int b = -a; 3451e5c31af7Sopenharmony_ci return 2 * b; 3452e5c31af7Sopenharmony_ci } 3453e5c31af7Sopenharmony_ci 3454e5c31af7Sopenharmony_ci void main() 3455e5c31af7Sopenharmony_ci { 3456e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(func(3)); 3457e5c31af7Sopenharmony_ci } 3458e5c31af7Sopenharmony_ci "" 3459e5c31af7Sopenharmony_ci end 3460e5c31af7Sopenharmony_ci 3461e5c31af7Sopenharmony_ci case array_size_from_const_arg 3462e5c31af7Sopenharmony_ci expect compile_fail 3463e5c31af7Sopenharmony_ci both "" 3464e5c31af7Sopenharmony_ci precision mediump float; 3465e5c31af7Sopenharmony_ci precision mediump int; 3466e5c31af7Sopenharmony_ci ${DECLARATIONS} 3467e5c31af7Sopenharmony_ci 3468e5c31af7Sopenharmony_ci int func (const int a) 3469e5c31af7Sopenharmony_ci { 3470e5c31af7Sopenharmony_ci int arr[a]; 3471e5c31af7Sopenharmony_ci arr[1] = 3; 3472e5c31af7Sopenharmony_ci return arr[1]; 3473e5c31af7Sopenharmony_ci } 3474e5c31af7Sopenharmony_ci 3475e5c31af7Sopenharmony_ci void main() 3476e5c31af7Sopenharmony_ci { 3477e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(func(3)); 3478e5c31af7Sopenharmony_ci } 3479e5c31af7Sopenharmony_ci "" 3480e5c31af7Sopenharmony_ci end 3481e5c31af7Sopenharmony_ci 3482e5c31af7Sopenharmony_ci case double_declare 3483e5c31af7Sopenharmony_ci expect compile_fail 3484e5c31af7Sopenharmony_ci both "" 3485e5c31af7Sopenharmony_ci precision mediump float; 3486e5c31af7Sopenharmony_ci ${DECLARATIONS} 3487e5c31af7Sopenharmony_ci 3488e5c31af7Sopenharmony_ci float func (float f); 3489e5c31af7Sopenharmony_ci float func (float f); 3490e5c31af7Sopenharmony_ci 3491e5c31af7Sopenharmony_ci float func (float f) 3492e5c31af7Sopenharmony_ci { 3493e5c31af7Sopenharmony_ci return -f; 3494e5c31af7Sopenharmony_ci } 3495e5c31af7Sopenharmony_ci 3496e5c31af7Sopenharmony_ci void main() 3497e5c31af7Sopenharmony_ci { 3498e5c31af7Sopenharmony_ci ${POSITION_FRAG_COLOR} = vec4(func(1.0)); 3499e5c31af7Sopenharmony_ci } 3500e5c31af7Sopenharmony_ci "" 3501e5c31af7Sopenharmony_ci end 3502e5c31af7Sopenharmony_ci 3503e5c31af7Sopenharmony_ciend # invalid 3504