xref: /aosp_15_r20/external/skia/resources/sksl/folding/Negation.rts (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1*c8dee2aaSAndroid Build Coastguard Workeruniform half4 colorGreen, colorRed;
2*c8dee2aaSAndroid Build Coastguard Worker
3*c8dee2aaSAndroid Build Coastguard Workerbool test_fvec() {
4*c8dee2aaSAndroid Build Coastguard Worker    const float one = 1;
5*c8dee2aaSAndroid Build Coastguard Worker    float two = 2;
6*c8dee2aaSAndroid Build Coastguard Worker    const half4 one_splat = half4(1);
7*c8dee2aaSAndroid Build Coastguard Worker    const half4 one_compound = half4(1, 1, 1, 1);
8*c8dee2aaSAndroid Build Coastguard Worker
9*c8dee2aaSAndroid Build Coastguard Worker    bool ok = true;
10*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (half4(-1) == -one_splat);
11*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (half4(-1, -1, -1, -1) == -one_splat);
12*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (half4(-1) == -one_compound);
13*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (half4(-1, -1, -1, -1) == -one_compound);
14*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (-half4(1) == -one_splat);
15*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (-half4(1, 1, 1, 1) == -one_splat);
16*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (-half4(1) == -one_compound);
17*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (-half4(1, 1, 1, 1) == -one_compound);
18*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (half4(-1) == -one_compound);
19*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (half4(-1) == -half4(-half2(-1), half2(1)));
20*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (half4(1) != -half4(1));
21*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (-half4(two) == half4(-two, half3(-two)));
22*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (-half2(-one, one + one) == -half2(one - two, two));
23*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (-1 * one == -one);
24*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (-two == -1 * two);
25*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (colorGreen.g * -1 == -colorGreen.g);
26*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (-colorGreen == -1 * colorGreen);
27*c8dee2aaSAndroid Build Coastguard Worker    return ok;
28*c8dee2aaSAndroid Build Coastguard Worker}
29*c8dee2aaSAndroid Build Coastguard Worker
30*c8dee2aaSAndroid Build Coastguard Workerbool test_ivec() {
31*c8dee2aaSAndroid Build Coastguard Worker    int one = 1;
32*c8dee2aaSAndroid Build Coastguard Worker    const int two = 2;
33*c8dee2aaSAndroid Build Coastguard Worker    const int4 one_splat = int4(1);
34*c8dee2aaSAndroid Build Coastguard Worker    const int4 one_compound = int4(1, 1, 1, 1);
35*c8dee2aaSAndroid Build Coastguard Worker
36*c8dee2aaSAndroid Build Coastguard Worker    bool ok = true;
37*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (int4(-1) == -one_splat);
38*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (int4(-1, -1, -1, -1) == -one_splat);
39*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (int4(-1) == -one_compound);
40*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (int4(-1, -1, -1, -1) == -one_compound);
41*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (-int4(1) == -one_splat);
42*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (-int4(1, 1, 1, 1) == -one_splat);
43*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (-int4(1) == -one_compound);
44*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (-int4(1, 1, 1, 1) == -one_compound);
45*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (int4(-1) == -int4(-int2(-1), int2(1)));
46*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (int4(1) != -int4(1));
47*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (-int4(two) == int4(-two, int3(-two)));
48*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (-int2(-one, one + one) == -int2(one - two, two));
49*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (-1 * one == -one);
50*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (-two == -1 * two);
51*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (-int(colorGreen.g) == -1 * int(colorGreen.g));
52*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (int4(colorGreen) * -1 == -int4(colorGreen));
53*c8dee2aaSAndroid Build Coastguard Worker    return ok;
54*c8dee2aaSAndroid Build Coastguard Worker}
55*c8dee2aaSAndroid Build Coastguard Worker
56*c8dee2aaSAndroid Build Coastguard Workerbool test_mat() {
57*c8dee2aaSAndroid Build Coastguard Worker    const float3x3 one_diagonal = float3x3(1);
58*c8dee2aaSAndroid Build Coastguard Worker    const float3x3 one_compound = float3x3(1, 0, 0,
59*c8dee2aaSAndroid Build Coastguard Worker                                           0, 1, 0,
60*c8dee2aaSAndroid Build Coastguard Worker                                           0, 0, 1);
61*c8dee2aaSAndroid Build Coastguard Worker    bool ok = true;
62*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (float3x3(-1) == -one_diagonal);
63*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (float3x3(-1, 0, 0, 0, -1, 0, 0, 0, -1) == -one_diagonal);
64*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (float3x3(-1) == -one_compound);
65*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (float3x3(-1, 0, 0, 0, -1, 0, 0, 0, -1) == -one_compound);
66*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (-float3x3(1) == -one_diagonal);
67*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (-float3x3(1, 0, 0, 0, 1, 0, 0, 0, 1) == -one_diagonal);
68*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (-float3x3(1) == -one_compound);
69*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (-float3x3(1, 0, 0, 0, 1, 0, 0, 0, 1) == -one_compound);
70*c8dee2aaSAndroid Build Coastguard Worker    return ok;
71*c8dee2aaSAndroid Build Coastguard Worker}
72*c8dee2aaSAndroid Build Coastguard Worker
73*c8dee2aaSAndroid Build Coastguard Workerhalf4 main(float2 coords) {
74*c8dee2aaSAndroid Build Coastguard Worker    return test_fvec() && test_ivec() && test_mat() ? colorGreen : colorRed;
75*c8dee2aaSAndroid Build Coastguard Worker}
76