1*c8dee2aaSAndroid Build Coastguard Workeruniform half4 colorGreen, colorRed; 2*c8dee2aaSAndroid Build Coastguard Worker 3*c8dee2aaSAndroid Build Coastguard Workerbool test_fvec() { 4*c8dee2aaSAndroid Build Coastguard Worker const float one = 1; 5*c8dee2aaSAndroid Build Coastguard Worker float two = 2; 6*c8dee2aaSAndroid Build Coastguard Worker const half4 one_splat = half4(1); 7*c8dee2aaSAndroid Build Coastguard Worker const half4 one_compound = half4(1, 1, 1, 1); 8*c8dee2aaSAndroid Build Coastguard Worker 9*c8dee2aaSAndroid Build Coastguard Worker bool ok = true; 10*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (half4(-1) == -one_splat); 11*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (half4(-1, -1, -1, -1) == -one_splat); 12*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (half4(-1) == -one_compound); 13*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (half4(-1, -1, -1, -1) == -one_compound); 14*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (-half4(1) == -one_splat); 15*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (-half4(1, 1, 1, 1) == -one_splat); 16*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (-half4(1) == -one_compound); 17*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (-half4(1, 1, 1, 1) == -one_compound); 18*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (half4(-1) == -one_compound); 19*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (half4(-1) == -half4(-half2(-1), half2(1))); 20*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (half4(1) != -half4(1)); 21*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (-half4(two) == half4(-two, half3(-two))); 22*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (-half2(-one, one + one) == -half2(one - two, two)); 23*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (-1 * one == -one); 24*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (-two == -1 * two); 25*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (colorGreen.g * -1 == -colorGreen.g); 26*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (-colorGreen == -1 * colorGreen); 27*c8dee2aaSAndroid Build Coastguard Worker return ok; 28*c8dee2aaSAndroid Build Coastguard Worker} 29*c8dee2aaSAndroid Build Coastguard Worker 30*c8dee2aaSAndroid Build Coastguard Workerbool test_ivec() { 31*c8dee2aaSAndroid Build Coastguard Worker int one = 1; 32*c8dee2aaSAndroid Build Coastguard Worker const int two = 2; 33*c8dee2aaSAndroid Build Coastguard Worker const int4 one_splat = int4(1); 34*c8dee2aaSAndroid Build Coastguard Worker const int4 one_compound = int4(1, 1, 1, 1); 35*c8dee2aaSAndroid Build Coastguard Worker 36*c8dee2aaSAndroid Build Coastguard Worker bool ok = true; 37*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (int4(-1) == -one_splat); 38*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (int4(-1, -1, -1, -1) == -one_splat); 39*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (int4(-1) == -one_compound); 40*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (int4(-1, -1, -1, -1) == -one_compound); 41*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (-int4(1) == -one_splat); 42*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (-int4(1, 1, 1, 1) == -one_splat); 43*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (-int4(1) == -one_compound); 44*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (-int4(1, 1, 1, 1) == -one_compound); 45*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (int4(-1) == -int4(-int2(-1), int2(1))); 46*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (int4(1) != -int4(1)); 47*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (-int4(two) == int4(-two, int3(-two))); 48*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (-int2(-one, one + one) == -int2(one - two, two)); 49*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (-1 * one == -one); 50*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (-two == -1 * two); 51*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (-int(colorGreen.g) == -1 * int(colorGreen.g)); 52*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (int4(colorGreen) * -1 == -int4(colorGreen)); 53*c8dee2aaSAndroid Build Coastguard Worker return ok; 54*c8dee2aaSAndroid Build Coastguard Worker} 55*c8dee2aaSAndroid Build Coastguard Worker 56*c8dee2aaSAndroid Build Coastguard Workerbool test_mat() { 57*c8dee2aaSAndroid Build Coastguard Worker const float3x3 one_diagonal = float3x3(1); 58*c8dee2aaSAndroid Build Coastguard Worker const float3x3 one_compound = float3x3(1, 0, 0, 59*c8dee2aaSAndroid Build Coastguard Worker 0, 1, 0, 60*c8dee2aaSAndroid Build Coastguard Worker 0, 0, 1); 61*c8dee2aaSAndroid Build Coastguard Worker bool ok = true; 62*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (float3x3(-1) == -one_diagonal); 63*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (float3x3(-1, 0, 0, 0, -1, 0, 0, 0, -1) == -one_diagonal); 64*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (float3x3(-1) == -one_compound); 65*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (float3x3(-1, 0, 0, 0, -1, 0, 0, 0, -1) == -one_compound); 66*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (-float3x3(1) == -one_diagonal); 67*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (-float3x3(1, 0, 0, 0, 1, 0, 0, 0, 1) == -one_diagonal); 68*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (-float3x3(1) == -one_compound); 69*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (-float3x3(1, 0, 0, 0, 1, 0, 0, 0, 1) == -one_compound); 70*c8dee2aaSAndroid Build Coastguard Worker return ok; 71*c8dee2aaSAndroid Build Coastguard Worker} 72*c8dee2aaSAndroid Build Coastguard Worker 73*c8dee2aaSAndroid Build Coastguard Workerhalf4 main(float2 coords) { 74*c8dee2aaSAndroid Build Coastguard Worker return test_fvec() && test_ivec() && test_mat() ? colorGreen : colorRed; 75*c8dee2aaSAndroid Build Coastguard Worker} 76