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