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