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