xref: /aosp_15_r20/external/skia/resources/sksl/folding/CastFolding.rts (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    const float floatOne = 1;
5*c8dee2aaSAndroid Build Coastguard Worker    const int intOne = 1;
6*c8dee2aaSAndroid Build Coastguard Worker    const half4 half4One = half4(1);
7*c8dee2aaSAndroid Build Coastguard Worker    const int4 int4One = int4(1);
8*c8dee2aaSAndroid Build Coastguard Worker
9*c8dee2aaSAndroid Build Coastguard Worker    bool ok = true;
10*c8dee2aaSAndroid Build Coastguard Worker
11*c8dee2aaSAndroid Build Coastguard Worker    // Typecasting a constant scalar variable should fold away.
12*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (int(floatOne) == intOne);
13*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (float(intOne) == floatOne);
14*c8dee2aaSAndroid Build Coastguard Worker
15*c8dee2aaSAndroid Build Coastguard Worker    // Typecasting a constant vector variable should fold away.
16*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (int4(half4One) == int4One);
17*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (half4(int4One) == half4One);
18*c8dee2aaSAndroid Build Coastguard Worker
19*c8dee2aaSAndroid Build Coastguard Worker    // More complex cases should also fold.
20*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (int4(half4One) == int4(intOne));            // cast(vector) == splat(scalar)
21*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (half4(int4One) == half4(half(floatOne)));   // cast(vector) == splat(cast(scalar))
22*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (half4(intOne) == half4(float4(floatOne)));  // splatcast(sclr) == cast(splat(sclr))
23*c8dee2aaSAndroid Build Coastguard Worker
24*c8dee2aaSAndroid Build Coastguard Worker    return ok;
25*c8dee2aaSAndroid Build Coastguard Worker}
26*c8dee2aaSAndroid Build Coastguard Worker
27*c8dee2aaSAndroid Build Coastguard Workerhalf4 main(float2 coords) {
28*c8dee2aaSAndroid Build Coastguard Worker    return test() ? colorGreen : colorRed;
29*c8dee2aaSAndroid Build Coastguard Worker}
30