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 7*c8dee2aaSAndroid Build Coastguard Worker // Vector op scalar 8*c8dee2aaSAndroid Build Coastguard Worker half4 x = half4(half2(1), half2(2, 3)) + 5; 9*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (x == half4(6, 6, 7, 8)); 10*c8dee2aaSAndroid Build Coastguard Worker x = half4(8, half3(10)) - 1; 11*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (x == half4(7, 9, 9, 9)); 12*c8dee2aaSAndroid Build Coastguard Worker x = half4(half2(8), half2(9)) + 1; 13*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (x == half4(9, 9, 10, 10)); 14*c8dee2aaSAndroid Build Coastguard Worker x.xyz = half3(2) * 3; 15*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (x == half4(6, 6, 6, 10)); 16*c8dee2aaSAndroid Build Coastguard Worker x.xy = half2(12) / 4; 17*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (x == half4(3, 3, 6, 10)); 18*c8dee2aaSAndroid Build Coastguard Worker 19*c8dee2aaSAndroid Build Coastguard Worker // (Vector op scalar).swizzle 20*c8dee2aaSAndroid Build Coastguard Worker x = (half4(12) / 2).yxwz; 21*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (x == half4(6)); 22*c8dee2aaSAndroid Build Coastguard Worker 23*c8dee2aaSAndroid Build Coastguard Worker // Scalar op vector 24*c8dee2aaSAndroid Build Coastguard Worker x = 5 + half4(half2(1), half2(2, 3)); 25*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (x == half4(6, 6, 7, 8)); 26*c8dee2aaSAndroid Build Coastguard Worker x = 1 - half4(8, half3(10)); 27*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (x == half4(-7, -9, -9, -9)); 28*c8dee2aaSAndroid Build Coastguard Worker x = 1 + half4(half2(8), half2(9)); 29*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (x == half4(9, 9, 10, 10)); 30*c8dee2aaSAndroid Build Coastguard Worker x.xyz = 3 * half3(2); 31*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (x == half4(6, 6, 6, 10)); 32*c8dee2aaSAndroid Build Coastguard Worker x.xy = 4 / half2(0.5); 33*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (x == half4(8, 8, 6, 10)); 34*c8dee2aaSAndroid Build Coastguard Worker x = 20 / half4(10, 20, 40, 80); 35*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (x == half4(2, 1, 0.5, 0.25)); 36*c8dee2aaSAndroid Build Coastguard Worker 37*c8dee2aaSAndroid Build Coastguard Worker // (Scalar op vector).swizzle 38*c8dee2aaSAndroid Build Coastguard Worker x = (12 / half4(2)).yxwz; 39*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (x == half4(6)); 40*c8dee2aaSAndroid Build Coastguard Worker 41*c8dee2aaSAndroid Build Coastguard Worker // Vector op unknown scalar 42*c8dee2aaSAndroid Build Coastguard Worker half unknown = unknownInput; 43*c8dee2aaSAndroid Build Coastguard Worker x = half4(0) + unknown; 44*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (x == half4(unknown)); 45*c8dee2aaSAndroid Build Coastguard Worker x = half4(0) * unknown; 46*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (x == half4(0)); 47*c8dee2aaSAndroid Build Coastguard Worker x = half4(0) / unknown; 48*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (x == half4(0)); 49*c8dee2aaSAndroid Build Coastguard Worker x = half4(1) * unknown; 50*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (x == half4(unknown)); 51*c8dee2aaSAndroid Build Coastguard Worker 52*c8dee2aaSAndroid Build Coastguard Worker // Unknown scalar op vector 53*c8dee2aaSAndroid Build Coastguard Worker x = unknown * half4(1); 54*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (x == half4(unknown)); 55*c8dee2aaSAndroid Build Coastguard Worker x = unknown + half4(0); 56*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (x == half4(unknown)); 57*c8dee2aaSAndroid Build Coastguard Worker x = unknown - half4(0); 58*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (x == half4(unknown)); 59*c8dee2aaSAndroid Build Coastguard Worker x = unknown / half4(1); 60*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (x == half4(unknown)); 61*c8dee2aaSAndroid Build Coastguard Worker 62*c8dee2aaSAndroid Build Coastguard Worker // Scalar op unknown vector 63*c8dee2aaSAndroid Build Coastguard Worker x = 0 + half4(unknown); 64*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (x == half4(unknown)); 65*c8dee2aaSAndroid Build Coastguard Worker x = 0 * half4(unknown); 66*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (x == half4(0)); 67*c8dee2aaSAndroid Build Coastguard Worker x = 0 / half4(unknown); // this should NOT optimize away 68*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (x == half4(0)); 69*c8dee2aaSAndroid Build Coastguard Worker x = 1 * half4(unknown); 70*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (x == half4(unknown)); 71*c8dee2aaSAndroid Build Coastguard Worker 72*c8dee2aaSAndroid Build Coastguard Worker // X = Unknown op scalar 73*c8dee2aaSAndroid Build Coastguard Worker x = half4(unknown) + 0; 74*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (x == half4(unknown)); 75*c8dee2aaSAndroid Build Coastguard Worker x = half4(unknown) * 0; 76*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (x == half4(0)); 77*c8dee2aaSAndroid Build Coastguard Worker x = half4(unknown) * 1; 78*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (x == half4(unknown)); 79*c8dee2aaSAndroid Build Coastguard Worker x = half4(unknown) - 0; 80*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (x == half4(unknown)); 81*c8dee2aaSAndroid Build Coastguard Worker 82*c8dee2aaSAndroid Build Coastguard Worker // X op= scalar. 83*c8dee2aaSAndroid Build Coastguard Worker x = half4(unknown); 84*c8dee2aaSAndroid Build Coastguard Worker x += 1; 85*c8dee2aaSAndroid Build Coastguard Worker x += 0; 86*c8dee2aaSAndroid Build Coastguard Worker x -= 1; 87*c8dee2aaSAndroid Build Coastguard Worker x -= 0; 88*c8dee2aaSAndroid Build Coastguard Worker x *= 1; 89*c8dee2aaSAndroid Build Coastguard Worker x /= 1; 90*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (x == half4(unknown)); 91*c8dee2aaSAndroid Build Coastguard Worker 92*c8dee2aaSAndroid Build Coastguard Worker // X = X op scalar. 93*c8dee2aaSAndroid Build Coastguard Worker x = half4(unknown); 94*c8dee2aaSAndroid Build Coastguard Worker x = x + 1; 95*c8dee2aaSAndroid Build Coastguard Worker x = x + 0; 96*c8dee2aaSAndroid Build Coastguard Worker x = x - 1; 97*c8dee2aaSAndroid Build Coastguard Worker x = x - 0; 98*c8dee2aaSAndroid Build Coastguard Worker x = x * 1; 99*c8dee2aaSAndroid Build Coastguard Worker x = x / 1; 100*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (x == half4(unknown)); 101*c8dee2aaSAndroid Build Coastguard Worker 102*c8dee2aaSAndroid Build Coastguard Worker return ok; 103*c8dee2aaSAndroid Build Coastguard Worker} 104*c8dee2aaSAndroid Build Coastguard Worker 105*c8dee2aaSAndroid Build Coastguard Workerbool test_int() { 106*c8dee2aaSAndroid Build Coastguard Worker bool ok = true; 107*c8dee2aaSAndroid Build Coastguard Worker 108*c8dee2aaSAndroid Build Coastguard Worker // Vector op scalar 109*c8dee2aaSAndroid Build Coastguard Worker int4 x = int4(int2(1), int2(2, 3)) + 5; 110*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (x == int4(6, 6, 7, 8)); 111*c8dee2aaSAndroid Build Coastguard Worker x = int4(8, int3(10)) - 1; 112*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (x == int4(7, 9, 9, 9)); 113*c8dee2aaSAndroid Build Coastguard Worker x = int4(int2(8), int2(9)) + 1; 114*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (x == int4(9, 9, 10, 10)); 115*c8dee2aaSAndroid Build Coastguard Worker x.xyz = int3(2) * 3; 116*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (x == int4(6, 6, 6, 10)); 117*c8dee2aaSAndroid Build Coastguard Worker x.xy = int2(12) / 4; 118*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (x == int4(3, 3, 6, 10)); 119*c8dee2aaSAndroid Build Coastguard Worker 120*c8dee2aaSAndroid Build Coastguard Worker // (Vector op scalar).swizzle 121*c8dee2aaSAndroid Build Coastguard Worker x = (int4(12) / 2).yxwz; 122*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (x == int4(6)); 123*c8dee2aaSAndroid Build Coastguard Worker 124*c8dee2aaSAndroid Build Coastguard Worker // Scalar op vector 125*c8dee2aaSAndroid Build Coastguard Worker x = 5 + int4(int2(1), int2(2, 3)); 126*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (x == int4(6, 6, 7, 8)); 127*c8dee2aaSAndroid Build Coastguard Worker x = 1 - int4(8, int3(10)); 128*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (x == int4(-7, -9, -9, -9)); 129*c8dee2aaSAndroid Build Coastguard Worker x = 1 + int4(int2(8), int2(9)); 130*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (x == int4(9, 9, 10, 10)); 131*c8dee2aaSAndroid Build Coastguard Worker x.xyz = 3 * int3(2); 132*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (x == int4(6, 6, 6, 10)); 133*c8dee2aaSAndroid Build Coastguard Worker x.xy = 16 / int2(2); 134*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (x == int4(8, 8, 6, 10)); 135*c8dee2aaSAndroid Build Coastguard Worker x = 2000 / int4(10, 20, 40, 80); 136*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (x == int4(200, 100, 50, 25)); 137*c8dee2aaSAndroid Build Coastguard Worker 138*c8dee2aaSAndroid Build Coastguard Worker // (Scalar op vector).swizzle 139*c8dee2aaSAndroid Build Coastguard Worker x = (12 / int4(2)).yxwz; 140*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (x == int4(6)); 141*c8dee2aaSAndroid Build Coastguard Worker 142*c8dee2aaSAndroid Build Coastguard Worker // Vector op unknown scalar 143*c8dee2aaSAndroid Build Coastguard Worker int unknown = int(unknownInput); 144*c8dee2aaSAndroid Build Coastguard Worker x = int4(0) + unknown; 145*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (x == int4(unknown)); 146*c8dee2aaSAndroid Build Coastguard Worker x = int4(0) * unknown; 147*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (x == int4(0)); 148*c8dee2aaSAndroid Build Coastguard Worker x = int4(0) / unknown; 149*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (x == int4(0)); 150*c8dee2aaSAndroid Build Coastguard Worker x = int4(1) * unknown; 151*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (x == int4(unknown)); 152*c8dee2aaSAndroid Build Coastguard Worker 153*c8dee2aaSAndroid Build Coastguard Worker // Unknown scalar op vector 154*c8dee2aaSAndroid Build Coastguard Worker x = unknown * int4(1); 155*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (x == int4(unknown)); 156*c8dee2aaSAndroid Build Coastguard Worker x = unknown + int4(0); 157*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (x == int4(unknown)); 158*c8dee2aaSAndroid Build Coastguard Worker x = unknown - int4(0); 159*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (x == int4(unknown)); 160*c8dee2aaSAndroid Build Coastguard Worker x = unknown / int4(1); 161*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (x == int4(unknown)); 162*c8dee2aaSAndroid Build Coastguard Worker 163*c8dee2aaSAndroid Build Coastguard Worker // Scalar op unknown vector 164*c8dee2aaSAndroid Build Coastguard Worker x = 0 + int4(unknown); 165*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (x == int4(unknown)); 166*c8dee2aaSAndroid Build Coastguard Worker x = 0 * int4(unknown); 167*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (x == int4(0)); 168*c8dee2aaSAndroid Build Coastguard Worker x = 0 / int4(unknown); 169*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (x == int4(0)); 170*c8dee2aaSAndroid Build Coastguard Worker x = 1 * int4(unknown); 171*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (x == int4(unknown)); 172*c8dee2aaSAndroid Build Coastguard Worker 173*c8dee2aaSAndroid Build Coastguard Worker // Unknown vector op scalar 174*c8dee2aaSAndroid Build Coastguard Worker x = int4(unknown) + 0; 175*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (x == int4(unknown)); 176*c8dee2aaSAndroid Build Coastguard Worker x = int4(unknown) * 0; 177*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (x == int4(0)); 178*c8dee2aaSAndroid Build Coastguard Worker x = int4(unknown) * 1; 179*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (x == int4(unknown)); 180*c8dee2aaSAndroid Build Coastguard Worker x = int4(unknown) - 0; 181*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (x == int4(unknown)); 182*c8dee2aaSAndroid Build Coastguard Worker 183*c8dee2aaSAndroid Build Coastguard Worker // X op= scalar. 184*c8dee2aaSAndroid Build Coastguard Worker x = int4(unknown); 185*c8dee2aaSAndroid Build Coastguard Worker x += 1; 186*c8dee2aaSAndroid Build Coastguard Worker x += 0; 187*c8dee2aaSAndroid Build Coastguard Worker x -= 1; 188*c8dee2aaSAndroid Build Coastguard Worker x -= 0; 189*c8dee2aaSAndroid Build Coastguard Worker x *= 1; 190*c8dee2aaSAndroid Build Coastguard Worker x /= 1; 191*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (x == int4(unknown)); 192*c8dee2aaSAndroid Build Coastguard Worker 193*c8dee2aaSAndroid Build Coastguard Worker // X = X op scalar. 194*c8dee2aaSAndroid Build Coastguard Worker x = int4(unknown); 195*c8dee2aaSAndroid Build Coastguard Worker x = x + 1; 196*c8dee2aaSAndroid Build Coastguard Worker x = x + 0; 197*c8dee2aaSAndroid Build Coastguard Worker x = x - 1; 198*c8dee2aaSAndroid Build Coastguard Worker x = x - 0; 199*c8dee2aaSAndroid Build Coastguard Worker x = x * 1; 200*c8dee2aaSAndroid Build Coastguard Worker x = x / 1; 201*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (x == int4(unknown)); 202*c8dee2aaSAndroid Build Coastguard Worker 203*c8dee2aaSAndroid Build Coastguard Worker return ok; 204*c8dee2aaSAndroid Build Coastguard Worker} 205*c8dee2aaSAndroid Build Coastguard Worker 206*c8dee2aaSAndroid Build Coastguard Workerhalf4 main(float2 coords) { 207*c8dee2aaSAndroid Build Coastguard Worker return test_half() && test_int() ? colorGreen : colorRed; 208*c8dee2aaSAndroid Build Coastguard Worker} 209