1uniform half4 colorGreen, colorRed; 2 3struct S {float f1; float f2; float f3; }; 4 5bool test_same_structs(bool eq, float f1, float f2, float f3) { 6 float one = colorGreen.r + 1; 7 S a; a.f1 = f1; a.f2 = f2; a.f3 = f3; 8 S b; b.f1 = f1 * one; b.f2 = f2 * one; b.f3 = f3 * one; 9 return eq ? a == b : a != b; 10} 11 12bool test_diff_structs(bool eq, float f1, float f2, float f3) { 13 float two = colorGreen.r + 2; 14 S a; a.f1 = f1; a.f2 = f2; a.f3 = f3; 15 S b; b.f1 = f1 * two; b.f2 = f2 * two; b.f3 = 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_structs(EQ, F42, ZM, ZP) // equal, including -0 and +0 values 34 && !test_same_structs(NE, F42, ZM, ZP) // not (not equal) 35 && test_same_structs(NE, F42, NAN1, NAN2) // NA values always not equal 36 && !test_same_structs(EQ, F42, NAN1, NAN2) 37 && test_diff_structs(NE, F42, F43, F44) // one of the normal values not equal 38 && !test_diff_structs(EQ, F42, F43, F44) 39 && test_diff_structs(NE, NAN1, ZM, ZP) // one of the normal values not equal 40 && !test_diff_structs(EQ, NAN1, ZM, ZP) 41 42 ? colorGreen : colorRed; 43} 44