xref: /aosp_15_r20/external/skia/tests/sksl/intrinsics/Modf.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 Workervec4 main() {
6*c8dee2aaSAndroid Build Coastguard Worker    vec4 value = vec4(2.5, -2.5, 8.0, -0.125);
7*c8dee2aaSAndroid Build Coastguard Worker    const vec4 expectedWhole = vec4(2.0, -2.0, 8.0, 0.0);
8*c8dee2aaSAndroid Build Coastguard Worker    const vec4 expectedFraction = vec4(0.5, -0.5, 0.0, -0.125);
9*c8dee2aaSAndroid Build Coastguard Worker    bvec4 ok = bvec4(false);
10*c8dee2aaSAndroid Build Coastguard Worker    vec4 whole;
11*c8dee2aaSAndroid Build Coastguard Worker    vec4 fraction;
12*c8dee2aaSAndroid Build Coastguard Worker    fraction.x = modf(value.x, whole.x);
13*c8dee2aaSAndroid Build Coastguard Worker    ok.x = whole.x == 2.0 && fraction.x == 0.5;
14*c8dee2aaSAndroid Build Coastguard Worker    fraction.xy = modf(value.xy, whole.xy);
15*c8dee2aaSAndroid Build Coastguard Worker    ok.y = whole.xy == vec2(2.0, -2.0) && fraction.xy == vec2(0.5, -0.5);
16*c8dee2aaSAndroid Build Coastguard Worker    fraction.xyz = modf(value.xyz, whole.xyz);
17*c8dee2aaSAndroid Build Coastguard Worker    ok.z = whole.xyz == vec3(2.0, -2.0, 8.0) && fraction.xyz == vec3(0.5, -0.5, 0.0);
18*c8dee2aaSAndroid Build Coastguard Worker    fraction = modf(value, whole);
19*c8dee2aaSAndroid Build Coastguard Worker    ok.w = whole == expectedWhole && fraction == expectedFraction;
20*c8dee2aaSAndroid Build Coastguard Worker    return all(ok) ? colorGreen : colorRed;
21*c8dee2aaSAndroid Build Coastguard Worker}
22