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