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