xref: /aosp_15_r20/external/skia/resources/sksl/folding/IntFoldingES3.sksl (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1*c8dee2aaSAndroid Build Coastguard Workeruniform half4 colorRed, colorGreen;
2*c8dee2aaSAndroid Build Coastguard Worker
3*c8dee2aaSAndroid Build Coastguard Workerbool test() {
4*c8dee2aaSAndroid Build Coastguard Worker    bool ok = true;
5*c8dee2aaSAndroid Build Coastguard Worker    int x = 12 | 6;
6*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (x == 14);
7*c8dee2aaSAndroid Build Coastguard Worker    x = 254 & 7;
8*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (x == 6);
9*c8dee2aaSAndroid Build Coastguard Worker    x = 2 ^ 7;
10*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (x == 5);
11*c8dee2aaSAndroid Build Coastguard Worker    x = 1 << 4;
12*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (x == 16);
13*c8dee2aaSAndroid Build Coastguard Worker    x = ~~~x;
14*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (x == ~16);
15*c8dee2aaSAndroid Build Coastguard Worker    x = ~~~~x;
16*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (x == ~16);
17*c8dee2aaSAndroid Build Coastguard Worker
18*c8dee2aaSAndroid Build Coastguard Worker    int3 v = ~int3(12, 34, 56);
19*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (v == int3(~12, ~34, ~56));
20*c8dee2aaSAndroid Build Coastguard Worker
21*c8dee2aaSAndroid Build Coastguard Worker    // Left-shifting a negative integer is undefined in C++, but allowed in GPU shading languages.
22*c8dee2aaSAndroid Build Coastguard Worker    // https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=29093
23*c8dee2aaSAndroid Build Coastguard Worker    x = -2 << 2;
24*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (x == -8);
25*c8dee2aaSAndroid Build Coastguard Worker    x = 128 >> 2;
26*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (x == 32);
27*c8dee2aaSAndroid Build Coastguard Worker    x = 123 % 45;
28*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (x == 33);
29*c8dee2aaSAndroid Build Coastguard Worker    return ok;
30*c8dee2aaSAndroid Build Coastguard Worker}
31*c8dee2aaSAndroid Build Coastguard Worker
32*c8dee2aaSAndroid Build Coastguard Workerhalf4 main(float2 coords) {
33*c8dee2aaSAndroid Build Coastguard Worker    return test() ? colorGreen : colorRed;
34*c8dee2aaSAndroid Build Coastguard Worker}
35