xref: /aosp_15_r20/external/skia/resources/sksl/runtime/Commutative.rts (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1*c8dee2aaSAndroid Build Coastguard Worker#version 300
2*c8dee2aaSAndroid Build Coastguard Worker
3*c8dee2aaSAndroid Build Coastguard Worker/*#pragma settings DebugTrace*/
4*c8dee2aaSAndroid Build Coastguard Worker
5*c8dee2aaSAndroid Build Coastguard Workeruniform half4 colorGreen, colorRed;
6*c8dee2aaSAndroid Build Coastguard Workeruniform float2x2 testMatrix2x2;
7*c8dee2aaSAndroid Build Coastguard Worker
8*c8dee2aaSAndroid Build Coastguard Workerhalf4 main(float2 xy) {
9*c8dee2aaSAndroid Build Coastguard Worker    bool ok = true;
10*c8dee2aaSAndroid Build Coastguard Worker    int   a = int(testMatrix2x2[0][0]), b = int(testMatrix2x2[0][1]);
11*c8dee2aaSAndroid Build Coastguard Worker    float c =    (testMatrix2x2[1][0]), d =    (testMatrix2x2[1][1]);
12*c8dee2aaSAndroid Build Coastguard Worker
13*c8dee2aaSAndroid Build Coastguard Worker    int a_and_b = a & b;
14*c8dee2aaSAndroid Build Coastguard Worker    int b_and_a = b & a;
15*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (a_and_b == b_and_a);
16*c8dee2aaSAndroid Build Coastguard Worker
17*c8dee2aaSAndroid Build Coastguard Worker    int a_or_b = a | b;
18*c8dee2aaSAndroid Build Coastguard Worker    int b_or_a = b | a;
19*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (a_or_b == b_or_a);
20*c8dee2aaSAndroid Build Coastguard Worker
21*c8dee2aaSAndroid Build Coastguard Worker    int a_xor_b = a ^ b;
22*c8dee2aaSAndroid Build Coastguard Worker    int b_xor_a = b ^ a;
23*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (a_xor_b == b_xor_a);
24*c8dee2aaSAndroid Build Coastguard Worker
25*c8dee2aaSAndroid Build Coastguard Worker    bool a_eq_b = a == b;
26*c8dee2aaSAndroid Build Coastguard Worker    bool b_eq_a = b == a;
27*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (a_eq_b == b_eq_a);
28*c8dee2aaSAndroid Build Coastguard Worker
29*c8dee2aaSAndroid Build Coastguard Worker    bool a_neq_b = a != b;
30*c8dee2aaSAndroid Build Coastguard Worker    bool b_neq_a = b != a;
31*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (a_neq_b == b_neq_a);
32*c8dee2aaSAndroid Build Coastguard Worker
33*c8dee2aaSAndroid Build Coastguard Worker    int a_add_b = a + b;
34*c8dee2aaSAndroid Build Coastguard Worker    int b_add_a = b + a;
35*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (a_add_b == b_add_a);
36*c8dee2aaSAndroid Build Coastguard Worker
37*c8dee2aaSAndroid Build Coastguard Worker    float c_add_d = c + d;
38*c8dee2aaSAndroid Build Coastguard Worker    float d_add_c = d + c;
39*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (c_add_d == d_add_c);
40*c8dee2aaSAndroid Build Coastguard Worker
41*c8dee2aaSAndroid Build Coastguard Worker    int a_mul_b = a * b;
42*c8dee2aaSAndroid Build Coastguard Worker    int b_mul_a = b * a;
43*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (a_mul_b == b_mul_a);
44*c8dee2aaSAndroid Build Coastguard Worker
45*c8dee2aaSAndroid Build Coastguard Worker    float c_mul_d = c * d;
46*c8dee2aaSAndroid Build Coastguard Worker    float d_mul_c = d * c;
47*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && (c_mul_d == d_mul_c);
48*c8dee2aaSAndroid Build Coastguard Worker
49*c8dee2aaSAndroid Build Coastguard Worker    return ok ? colorGreen : colorRed;
50*c8dee2aaSAndroid Build Coastguard Worker}
51