| #version 310 es | |
| precision mediump float; | |
| in lowp float lowfin; | |
| in mediump float mediumfin; | |
| in highp vec4 highfin; | |
| highp int uniform_high; | |
| mediump int uniform_medium; | |
| lowp int uniform_low; | |
| bvec2 ub2; | |
| out mediump vec4 mediumfout; | |
| highp float global_highp; | |
| lowp vec2 foo(mediump vec3 mv3) | |
| { | |
| return highfin.xy; | |
| } | |
| bool boolfun(bvec2 bv2) | |
| { | |
| return bv2 == bvec2(false, true); | |
| } | |
| struct S { | |
| highp float a; | |
| lowp float b; | |
| }; | |
| in S s; | |
| void main() | |
| { | |
| lowp int sum = uniform_medium + uniform_high; | |
| sum += uniform_high; | |
| sum += uniform_low; | |
| // test maxing precisions of args to get precision of builtin | |
| lowp float arg1 = 3.2; | |
| mediump float arg2 = 1023908.2; | |
| lowp float d = distance(lowfin, mediumfin); | |
| global_highp = length(highfin); | |
| highp vec4 local_highp = vec4(global_highp); | |
| mediumfout = vec4(sin(d)) + arg2 + local_highp; | |
| sum += 4 + ((ivec2(uniform_low) * ivec2(uniform_high) + ivec2((/* comma operator */uniform_low, uniform_high)))).x; | |
| mediumfout += vec4(sum); | |
| if (boolfun(ub2)) | |
| ++mediumfout; | |
| mediumfout *= s.a; | |
| mediumfout *= s.b; | |
| mediumfout = ((mediumfin * mediumfin > 4.2) ? 2.0 * mediumfout : 3.0 * mediumfout); | |
| } |