xref: /aosp_15_r20/external/skia/resources/sksl/intrinsics/Frexp.sksl (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1*c8dee2aaSAndroid Build Coastguard Workeruniform half4 colorGreen, colorRed;
2*c8dee2aaSAndroid Build Coastguard Worker
3*c8dee2aaSAndroid Build Coastguard Workernoinline bool checkIntrinsicAsFunctionArg(float3 f3, int3 e3) {
4*c8dee2aaSAndroid Build Coastguard Worker    // 6 equals 0.75 * 2^3.
5*c8dee2aaSAndroid Build Coastguard Worker    return (f3 == float3(0.75) && e3 == int3(3));
6*c8dee2aaSAndroid Build Coastguard Worker}
7*c8dee2aaSAndroid Build Coastguard Worker
8*c8dee2aaSAndroid Build Coastguard Workerhalf4 main(float2 coords) {
9*c8dee2aaSAndroid Build Coastguard Worker    float4 value = colorGreen.gggg * 6;
10*c8dee2aaSAndroid Build Coastguard Worker    int4   exp;
11*c8dee2aaSAndroid Build Coastguard Worker    float4 result;
12*c8dee2aaSAndroid Build Coastguard Worker    bool4  ok;
13*c8dee2aaSAndroid Build Coastguard Worker
14*c8dee2aaSAndroid Build Coastguard Worker    // 6 equals 0.75 * 2^3.
15*c8dee2aaSAndroid Build Coastguard Worker    result.x    = frexp(value.x,    exp.x);
16*c8dee2aaSAndroid Build Coastguard Worker    ok.x        = (result.x == 0.75 && exp.x == 3);
17*c8dee2aaSAndroid Build Coastguard Worker    result.xy   = frexp(value.xy,   exp.xy);
18*c8dee2aaSAndroid Build Coastguard Worker    ok.y        = (result.y == 0.75 && exp.y == 3);
19*c8dee2aaSAndroid Build Coastguard Worker    result.xyz  = frexp(value.xyz,  exp.xyz);
20*c8dee2aaSAndroid Build Coastguard Worker    ok.z        = (result.z == 0.75 && exp.z == 3);
21*c8dee2aaSAndroid Build Coastguard Worker    result.xyzw = frexp(value.xyzw, exp.xyzw);
22*c8dee2aaSAndroid Build Coastguard Worker    ok.w        = (result.w == 0.75 && exp.w == 3);
23*c8dee2aaSAndroid Build Coastguard Worker
24*c8dee2aaSAndroid Build Coastguard Worker    bool funcOk = checkIntrinsicAsFunctionArg(frexp(value.wzy, exp.zxw).yxz, exp.yxz);
25*c8dee2aaSAndroid Build Coastguard Worker
26*c8dee2aaSAndroid Build Coastguard Worker    return all(ok) && funcOk ? colorGreen : colorRed;
27*c8dee2aaSAndroid Build Coastguard Worker}
28