xref: /aosp_15_r20/external/skia/resources/sksl/shared/PrefixExpressionsES2.sksl (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1*c8dee2aaSAndroid Build Coastguard Workeruniform half4 colorGreen, colorRed;
2*c8dee2aaSAndroid Build Coastguard Workeruniform float2x2 testMatrix2x2;
3*c8dee2aaSAndroid Build Coastguard Worker
4*c8dee2aaSAndroid Build Coastguard Workerhalf4 main(float2) {
5*c8dee2aaSAndroid Build Coastguard Worker    bool ok = true;
6*c8dee2aaSAndroid Build Coastguard Worker
7*c8dee2aaSAndroid Build Coastguard Worker    // Prefix ++ and -- (scalar int).
8*c8dee2aaSAndroid Build Coastguard Worker    int i = 5;
9*c8dee2aaSAndroid Build Coastguard Worker    ++i;
10*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (i == 6);
11*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (++i == 7);
12*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (--i == 6);
13*c8dee2aaSAndroid Build Coastguard Worker    --i;
14*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (i == 5);
15*c8dee2aaSAndroid Build Coastguard Worker
16*c8dee2aaSAndroid Build Coastguard Worker    // Prefix ++ and -- (scalar float).
17*c8dee2aaSAndroid Build Coastguard Worker    float f = 0.5;
18*c8dee2aaSAndroid Build Coastguard Worker    ++f;
19*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (f == 1.5);
20*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (++f == 2.5);
21*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (--f == 1.5);
22*c8dee2aaSAndroid Build Coastguard Worker    --f;
23*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (f == 0.5);
24*c8dee2aaSAndroid Build Coastguard Worker
25*c8dee2aaSAndroid Build Coastguard Worker    // Prefix ++ and -- (vector-component float).
26*c8dee2aaSAndroid Build Coastguard Worker    float2 f2 = float2(0.5);
27*c8dee2aaSAndroid Build Coastguard Worker    ++f2.x;
28*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (f2.x == 1.5);
29*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (++f2.x == 2.5);
30*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (--f2.x == 1.5);
31*c8dee2aaSAndroid Build Coastguard Worker    --f2.x;
32*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (f2.x == 0.5);
33*c8dee2aaSAndroid Build Coastguard Worker
34*c8dee2aaSAndroid Build Coastguard Worker    // Prefix ++ and -- (vector float).
35*c8dee2aaSAndroid Build Coastguard Worker    ++f2;
36*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (f2 == float2(1.5));
37*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (++f2 == float2(2.5));
38*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (--f2 == float2(1.5));
39*c8dee2aaSAndroid Build Coastguard Worker    --f2;
40*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (f2 == float2(0.5));
41*c8dee2aaSAndroid Build Coastguard Worker
42*c8dee2aaSAndroid Build Coastguard Worker    // Prefix ++ and -- (vector int).
43*c8dee2aaSAndroid Build Coastguard Worker    int4 i4 = int4(7, 8, 9, 10);
44*c8dee2aaSAndroid Build Coastguard Worker    ++i4;
45*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (i4 == int4(8, 9, 10, 11));
46*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (++i4 == int4(9, 10, 11, 12));
47*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (--i4 == int4(8, 9, 10, 11));
48*c8dee2aaSAndroid Build Coastguard Worker    --i4;
49*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (i4 == int4(7, 8, 9, 10));
50*c8dee2aaSAndroid Build Coastguard Worker
51*c8dee2aaSAndroid Build Coastguard Worker    // Prefix ++ and -- (matrix).
52*c8dee2aaSAndroid Build Coastguard Worker    float3x3 m3x3 = float3x3(1, 2, 3, 4, 5, 6, 7, 8, 9);
53*c8dee2aaSAndroid Build Coastguard Worker    ++m3x3;
54*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (m3x3 == float3x3(2, 3, 4, 5, 6, 7, 8, 9, 10));
55*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (++m3x3 == float3x3(3, 4, 5, 6, 7, 8, 9, 10, 11));
56*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (--m3x3 == float3x3(2, 3, 4, 5, 6, 7, 8, 9, 10));
57*c8dee2aaSAndroid Build Coastguard Worker    --m3x3;
58*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (m3x3 == float3x3(1, 2, 3, 4, 5, 6, 7, 8, 9));
59*c8dee2aaSAndroid Build Coastguard Worker
60*c8dee2aaSAndroid Build Coastguard Worker    // Prefix '!'
61*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && !(colorGreen.r == 1.0);
62*c8dee2aaSAndroid Build Coastguard Worker
63*c8dee2aaSAndroid Build Coastguard Worker    // Prefix '-' (scalar, vector, matrix float)
64*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (-1 == -colorGreen.g);
65*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (half4(0, -1, 0, -1) == -colorGreen);
66*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (float2x2(-1, -2, -3, -4) == -testMatrix2x2);
67*c8dee2aaSAndroid Build Coastguard Worker
68*c8dee2aaSAndroid Build Coastguard Worker    // Prefix '-' (scalar, vector int)
69*c8dee2aaSAndroid Build Coastguard Worker    int2 iv = int2(i, -i);  // (5, -5)
70*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (-i == -5);
71*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (-iv == int2(-5, 5));
72*c8dee2aaSAndroid Build Coastguard Worker
73*c8dee2aaSAndroid Build Coastguard Worker    return ok ? colorGreen : colorRed;
74*c8dee2aaSAndroid Build Coastguard Worker}
75