1*c8dee2aaSAndroid Build Coastguard Workeruniform half4 colorRed, colorGreen; 2*c8dee2aaSAndroid Build Coastguard Workeruniform half unknownInput; 3*c8dee2aaSAndroid Build Coastguard Worker 4*c8dee2aaSAndroid Build Coastguard Workerbool test_half() { 5*c8dee2aaSAndroid Build Coastguard Worker bool ok = true; 6*c8dee2aaSAndroid Build Coastguard Worker half4 inputRed = colorRed; 7*c8dee2aaSAndroid Build Coastguard Worker half4 inputGreen = colorGreen; 8*c8dee2aaSAndroid Build Coastguard Worker 9*c8dee2aaSAndroid Build Coastguard Worker // Vector op scalar 10*c8dee2aaSAndroid Build Coastguard Worker half4 x = inputRed + 2; 11*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (x == half4(3, 2, 2, 3)); 12*c8dee2aaSAndroid Build Coastguard Worker x = inputGreen.garb - 2; 13*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (x == half4(-1, -1, -2, -2)); 14*c8dee2aaSAndroid Build Coastguard Worker x = inputRed + inputGreen.g; 15*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (x == half4(2, 1, 1, 2)); 16*c8dee2aaSAndroid Build Coastguard Worker x.xyz = inputGreen.aga * 9; 17*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (x == half4(9, 9, 9, 2)); 18*c8dee2aaSAndroid Build Coastguard Worker x.xy = x.zw / 0.5; 19*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (x == half4(18, 4, 9, 2)); 20*c8dee2aaSAndroid Build Coastguard Worker 21*c8dee2aaSAndroid Build Coastguard Worker // (Vector op scalar).swizzle 22*c8dee2aaSAndroid Build Coastguard Worker x = (inputRed * 5).yxwz; 23*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (x == half4(0, 5, 5, 0)); 24*c8dee2aaSAndroid Build Coastguard Worker 25*c8dee2aaSAndroid Build Coastguard Worker // Scalar op vector 26*c8dee2aaSAndroid Build Coastguard Worker x = 2 + inputRed; 27*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (x == half4(3, 2, 2, 3)); 28*c8dee2aaSAndroid Build Coastguard Worker x = 10 - inputGreen.garb; 29*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (x == half4(9, 9, 10, 10)); 30*c8dee2aaSAndroid Build Coastguard Worker x = inputRed.r + inputGreen; 31*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (x == half4(1, 2, 1, 2)); 32*c8dee2aaSAndroid Build Coastguard Worker x.xyz = 8 * inputGreen.aga; 33*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (x == half4(8, 8, 8, 2)); 34*c8dee2aaSAndroid Build Coastguard Worker x.xy = 32 / x.zw; 35*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (x == half4(4, 16, 8, 2)); 36*c8dee2aaSAndroid Build Coastguard Worker 37*c8dee2aaSAndroid Build Coastguard Worker // (Scalar op vector).swizzle 38*c8dee2aaSAndroid Build Coastguard Worker x = (32 / x).yxwz; 39*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (x == half4(2, 8, 16, 4)); 40*c8dee2aaSAndroid Build Coastguard Worker 41*c8dee2aaSAndroid Build Coastguard Worker // X op= scalar. 42*c8dee2aaSAndroid Build Coastguard Worker x += 2; 43*c8dee2aaSAndroid Build Coastguard Worker x *= 2; 44*c8dee2aaSAndroid Build Coastguard Worker x -= 4; 45*c8dee2aaSAndroid Build Coastguard Worker x /= 2; 46*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (x == half4(2, 8, 16, 4)); 47*c8dee2aaSAndroid Build Coastguard Worker 48*c8dee2aaSAndroid Build Coastguard Worker // X = X op scalar. 49*c8dee2aaSAndroid Build Coastguard Worker x = x + 2; 50*c8dee2aaSAndroid Build Coastguard Worker x = x * 2; 51*c8dee2aaSAndroid Build Coastguard Worker x = x - 4; 52*c8dee2aaSAndroid Build Coastguard Worker x = x / 2; 53*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (x == half4(2, 8, 16, 4)); 54*c8dee2aaSAndroid Build Coastguard Worker 55*c8dee2aaSAndroid Build Coastguard Worker return ok; 56*c8dee2aaSAndroid Build Coastguard Worker} 57*c8dee2aaSAndroid Build Coastguard Worker 58*c8dee2aaSAndroid Build Coastguard Workerbool test_int() { 59*c8dee2aaSAndroid Build Coastguard Worker bool ok = true; 60*c8dee2aaSAndroid Build Coastguard Worker int4 inputRed = int4(colorRed); 61*c8dee2aaSAndroid Build Coastguard Worker int4 inputGreen = int4(colorGreen); 62*c8dee2aaSAndroid Build Coastguard Worker 63*c8dee2aaSAndroid Build Coastguard Worker // Vector op scalar 64*c8dee2aaSAndroid Build Coastguard Worker int4 x = inputRed + 2; 65*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (x == int4(3, 2, 2, 3)); 66*c8dee2aaSAndroid Build Coastguard Worker x = inputGreen.garb - 2; 67*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (x == int4(-1, -1, -2, -2)); 68*c8dee2aaSAndroid Build Coastguard Worker x = inputRed + inputGreen.g; 69*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (x == int4(2, 1, 1, 2)); 70*c8dee2aaSAndroid Build Coastguard Worker x.xyz = inputGreen.aga * 9; 71*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (x == int4(9, 9, 9, 2)); 72*c8dee2aaSAndroid Build Coastguard Worker x.xy = x.zw / 4; 73*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (x == int4(2, 0, 9, 2)); 74*c8dee2aaSAndroid Build Coastguard Worker 75*c8dee2aaSAndroid Build Coastguard Worker // (Vector op scalar).swizzle 76*c8dee2aaSAndroid Build Coastguard Worker x = (inputRed * 5).yxwz; 77*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (x == int4(0, 5, 5, 0)); 78*c8dee2aaSAndroid Build Coastguard Worker 79*c8dee2aaSAndroid Build Coastguard Worker // Scalar op vector 80*c8dee2aaSAndroid Build Coastguard Worker x = 2 + inputRed; 81*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (x == int4(3, 2, 2, 3)); 82*c8dee2aaSAndroid Build Coastguard Worker x = 10 - inputGreen.garb; 83*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (x == int4(9, 9, 10, 10)); 84*c8dee2aaSAndroid Build Coastguard Worker x = inputRed.r + inputGreen; 85*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (x == int4(1, 2, 1, 2)); 86*c8dee2aaSAndroid Build Coastguard Worker x.xyz = 8 * inputGreen.aga; 87*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (x == int4(8, 8, 8, 2)); 88*c8dee2aaSAndroid Build Coastguard Worker x.xy = 36 / x.zw; 89*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (x == int4(4, 18, 8, 2)); 90*c8dee2aaSAndroid Build Coastguard Worker 91*c8dee2aaSAndroid Build Coastguard Worker // (Scalar op vector).swizzle 92*c8dee2aaSAndroid Build Coastguard Worker x = (37 / x).yxwz; 93*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (x == int4(2, 9, 18, 4)); 94*c8dee2aaSAndroid Build Coastguard Worker 95*c8dee2aaSAndroid Build Coastguard Worker // X op= scalar. 96*c8dee2aaSAndroid Build Coastguard Worker x += 2; 97*c8dee2aaSAndroid Build Coastguard Worker x *= 2; 98*c8dee2aaSAndroid Build Coastguard Worker x -= 4; 99*c8dee2aaSAndroid Build Coastguard Worker x /= 2; 100*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (x == int4(2, 9, 18, 4)); 101*c8dee2aaSAndroid Build Coastguard Worker 102*c8dee2aaSAndroid Build Coastguard Worker // X = X op scalar. 103*c8dee2aaSAndroid Build Coastguard Worker x = x + 2; 104*c8dee2aaSAndroid Build Coastguard Worker x = x * 2; 105*c8dee2aaSAndroid Build Coastguard Worker x = x - 4; 106*c8dee2aaSAndroid Build Coastguard Worker x = x / 2; 107*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (x == int4(2, 9, 18, 4)); 108*c8dee2aaSAndroid Build Coastguard Worker 109*c8dee2aaSAndroid Build Coastguard Worker return ok; 110*c8dee2aaSAndroid Build Coastguard Worker} 111*c8dee2aaSAndroid Build Coastguard Worker 112*c8dee2aaSAndroid Build Coastguard Workerhalf4 main(float2 coords) { 113*c8dee2aaSAndroid Build Coastguard Worker return test_half() && test_int() ? colorGreen : colorRed; 114*c8dee2aaSAndroid Build Coastguard Worker} 115