xref: /aosp_15_r20/external/skia/resources/sksl/folding/StructFieldNoFolding.rts (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1*c8dee2aaSAndroid Build Coastguard Workeruniform half4 colorRed, colorGreen;
2*c8dee2aaSAndroid Build Coastguard Worker
3*c8dee2aaSAndroid Build Coastguard Workerstruct S {
4*c8dee2aaSAndroid Build Coastguard Worker    int a, b, c;
5*c8dee2aaSAndroid Build Coastguard Worker};
6*c8dee2aaSAndroid Build Coastguard Worker
7*c8dee2aaSAndroid Build Coastguard Workerint numSideEffects = 0;
8*c8dee2aaSAndroid Build Coastguard Worker
9*c8dee2aaSAndroid Build Coastguard Workernoinline int side_effecting(int value) {
10*c8dee2aaSAndroid Build Coastguard Worker    numSideEffects++;
11*c8dee2aaSAndroid Build Coastguard Worker    return value;
12*c8dee2aaSAndroid Build Coastguard Worker}
13*c8dee2aaSAndroid Build Coastguard Worker
14*c8dee2aaSAndroid Build Coastguard Workerbool test() {
15*c8dee2aaSAndroid Build Coastguard Worker    // Structs with elements that have side-effects are not eligible for optimization.
16*c8dee2aaSAndroid Build Coastguard Worker    int val1 = 2;
17*c8dee2aaSAndroid Build Coastguard Worker    int val2 = 1;
18*c8dee2aaSAndroid Build Coastguard Worker
19*c8dee2aaSAndroid Build Coastguard Worker    int noFlatten0 = S(--val1, side_effecting(2), 3).a;
20*c8dee2aaSAndroid Build Coastguard Worker    int noFlatten1 = S(side_effecting(1), 2, 3).b;
21*c8dee2aaSAndroid Build Coastguard Worker    int noFlatten2 = S(1, val2 += 1, 3).c;
22*c8dee2aaSAndroid Build Coastguard Worker
23*c8dee2aaSAndroid Build Coastguard Worker    return (noFlatten0 == 1) && (noFlatten1 == 2) && (noFlatten2 == 3) &&
24*c8dee2aaSAndroid Build Coastguard Worker           (val1 == 1) && (val2 == 2) && (numSideEffects == 2);
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