1*c8dee2aaSAndroid Build Coastguard Workeruniform half4 colorGreen, colorRed; 2*c8dee2aaSAndroid Build Coastguard Worker 3*c8dee2aaSAndroid Build Coastguard Workerstruct S {float f1; float f2; float f3; }; 4*c8dee2aaSAndroid Build Coastguard Worker 5*c8dee2aaSAndroid Build Coastguard Workerbool test_same_structs(bool eq, float f1, float f2, float f3) { 6*c8dee2aaSAndroid Build Coastguard Worker float one = colorGreen.r + 1; 7*c8dee2aaSAndroid Build Coastguard Worker S a; a.f1 = f1; a.f2 = f2; a.f3 = f3; 8*c8dee2aaSAndroid Build Coastguard Worker S b; b.f1 = f1 * one; b.f2 = f2 * one; b.f3 = f3 * one; 9*c8dee2aaSAndroid Build Coastguard Worker return eq ? a == b : a != b; 10*c8dee2aaSAndroid Build Coastguard Worker} 11*c8dee2aaSAndroid Build Coastguard Worker 12*c8dee2aaSAndroid Build Coastguard Workerbool test_diff_structs(bool eq, float f1, float f2, float f3) { 13*c8dee2aaSAndroid Build Coastguard Worker float two = colorGreen.r + 2; 14*c8dee2aaSAndroid Build Coastguard Worker S a; a.f1 = f1; a.f2 = f2; a.f3 = f3; 15*c8dee2aaSAndroid Build Coastguard Worker S b; b.f1 = f1 * two; b.f2 = f2 * two; b.f3 = f3; 16*c8dee2aaSAndroid Build Coastguard Worker return eq ? a == b : a != b; 17*c8dee2aaSAndroid Build Coastguard Worker} 18*c8dee2aaSAndroid Build Coastguard Worker 19*c8dee2aaSAndroid Build Coastguard Workervec4 main(vec2 coords) { 20*c8dee2aaSAndroid Build Coastguard Worker 21*c8dee2aaSAndroid Build Coastguard Worker float NAN1 = colorGreen.r/colorGreen.b; 22*c8dee2aaSAndroid Build Coastguard Worker float NAN2 = colorGreen.b/colorGreen.r; 23*c8dee2aaSAndroid Build Coastguard Worker float ZP = +colorGreen.r*colorGreen.b; 24*c8dee2aaSAndroid Build Coastguard Worker float ZM = -colorGreen.r*colorGreen.b; 25*c8dee2aaSAndroid Build Coastguard Worker float F42 = colorGreen.g * 42.0; 26*c8dee2aaSAndroid Build Coastguard Worker float F43 = colorGreen.g * 43.0; 27*c8dee2aaSAndroid Build Coastguard Worker float F44 = colorGreen.g * 44.0; 28*c8dee2aaSAndroid Build Coastguard Worker 29*c8dee2aaSAndroid Build Coastguard Worker bool EQ = true; // Tests for == 30*c8dee2aaSAndroid Build Coastguard Worker bool NE = false; // Tests for != 31*c8dee2aaSAndroid Build Coastguard Worker 32*c8dee2aaSAndroid Build Coastguard Worker return true 33*c8dee2aaSAndroid Build Coastguard Worker && test_same_structs(EQ, F42, ZM, ZP) // equal, including -0 and +0 values 34*c8dee2aaSAndroid Build Coastguard Worker && !test_same_structs(NE, F42, ZM, ZP) // not (not equal) 35*c8dee2aaSAndroid Build Coastguard Worker && test_same_structs(NE, F42, NAN1, NAN2) // NA values always not equal 36*c8dee2aaSAndroid Build Coastguard Worker && !test_same_structs(EQ, F42, NAN1, NAN2) 37*c8dee2aaSAndroid Build Coastguard Worker && test_diff_structs(NE, F42, F43, F44) // one of the normal values not equal 38*c8dee2aaSAndroid Build Coastguard Worker && !test_diff_structs(EQ, F42, F43, F44) 39*c8dee2aaSAndroid Build Coastguard Worker && test_diff_structs(NE, NAN1, ZM, ZP) // one of the normal values not equal 40*c8dee2aaSAndroid Build Coastguard Worker && !test_diff_structs(EQ, NAN1, ZM, ZP) 41*c8dee2aaSAndroid Build Coastguard Worker 42*c8dee2aaSAndroid Build Coastguard Worker ? colorGreen : colorRed; 43*c8dee2aaSAndroid Build Coastguard Worker} 44