xref: /aosp_15_r20/external/skia/resources/sksl/runtime/RecursiveComparison_Vectors.rts (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1uniform half4 colorGreen, colorRed;
2
3bool test_same_vectors(bool eq, float f1, float f2, float f3, float f4) {
4    float one = colorGreen.r + 1;
5    vec4 a = float4(f1,       f2,       f3,       f4);
6    vec4 b = float4(f1 * one, f2 * one, f3 * one, f4 * one);
7    return eq ? a == b : a != b;
8}
9
10bool test_diff_vectors(bool eq, float f1, float f2, float f3, float f4) {
11    float two = colorGreen.r + 2;
12    vec4 a = float4(f1,       f2,       f3,       f4);
13    vec4 b = float4(f1 * two, f2 * two, f3 * two, f4 * two);
14    return eq ? a == b : a != b;
15}
16
17vec4 main(vec2 coords) {
18
19    float NAN1 = colorGreen.r/colorGreen.b;
20    float NAN2 = colorGreen.b/colorGreen.r;
21    float ZP = +colorGreen.r*colorGreen.b;
22    float ZM = -colorGreen.r*colorGreen.b;
23    float F42 = colorGreen.g * 42.0;
24    float F43 = colorGreen.g * 43.0;
25    float F44 = colorGreen.g * 44.0;
26    float F45 = colorGreen.g * 45.0;
27
28    bool EQ = true;     // Tests for ==
29    bool NE = false;    // Tests for !=
30
31    return  true
32            && test_same_vectors(EQ, F42, ZM, ZP, F43)      // equal, including -0 and +0 values
33            && !test_same_vectors(NE, F42, ZM, ZP, F43)     // not (not equal)
34            && test_same_vectors(NE, F42, NAN1, NAN2, F43)  // NA values always not equal
35            && !test_same_vectors(EQ, F42, NAN1, NAN2, F43)
36            && test_diff_vectors(NE, F42, F43, F44, F45)    // one of the normal values not equal
37            && !test_diff_vectors(EQ, F42, F43, F44, F45)
38            && test_diff_vectors(NE, NAN1, ZM, ZP, F42)     // one of the normal values not equal
39            && !test_diff_vectors(EQ, NAN1, ZM, ZP, F42)
40
41           ? colorGreen : colorRed;
42}
43