xref: /aosp_15_r20/external/skia/tests/sksl/intrinsics/Frexp.glsl (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1*c8dee2aaSAndroid Build Coastguard Worker
2*c8dee2aaSAndroid Build Coastguard Workerout vec4 sk_FragColor;
3*c8dee2aaSAndroid Build Coastguard Workeruniform vec4 colorGreen;
4*c8dee2aaSAndroid Build Coastguard Workeruniform vec4 colorRed;
5*c8dee2aaSAndroid Build Coastguard Workerbool checkIntrinsicAsFunctionArg_bf3i3(vec3 f3, ivec3 e3) {
6*c8dee2aaSAndroid Build Coastguard Worker    return f3 == vec3(0.75) && e3 == ivec3(3);
7*c8dee2aaSAndroid Build Coastguard Worker}
8*c8dee2aaSAndroid Build Coastguard Workervec4 main() {
9*c8dee2aaSAndroid Build Coastguard Worker    vec4 value = colorGreen.yyyy * 6.0;
10*c8dee2aaSAndroid Build Coastguard Worker    ivec4 _0_exp;
11*c8dee2aaSAndroid Build Coastguard Worker    vec4 result;
12*c8dee2aaSAndroid Build Coastguard Worker    bvec4 ok;
13*c8dee2aaSAndroid Build Coastguard Worker    result.x = frexp(value.x, _0_exp.x);
14*c8dee2aaSAndroid Build Coastguard Worker    ok.x = result.x == 0.75 && _0_exp.x == 3;
15*c8dee2aaSAndroid Build Coastguard Worker    result.xy = frexp(value.xy, _0_exp.xy);
16*c8dee2aaSAndroid Build Coastguard Worker    ok.y = result.y == 0.75 && _0_exp.y == 3;
17*c8dee2aaSAndroid Build Coastguard Worker    result.xyz = frexp(value.xyz, _0_exp.xyz);
18*c8dee2aaSAndroid Build Coastguard Worker    ok.z = result.z == 0.75 && _0_exp.z == 3;
19*c8dee2aaSAndroid Build Coastguard Worker    result = frexp(value, _0_exp);
20*c8dee2aaSAndroid Build Coastguard Worker    ok.w = result.w == 0.75 && _0_exp.w == 3;
21*c8dee2aaSAndroid Build Coastguard Worker    bool funcOk = checkIntrinsicAsFunctionArg_bf3i3(frexp(value.wzy, _0_exp.zxw).yxz, _0_exp.yxz);
22*c8dee2aaSAndroid Build Coastguard Worker    return all(ok) && funcOk ? colorGreen : colorRed;
23*c8dee2aaSAndroid Build Coastguard Worker}
24