1*c8dee2aaSAndroid Build Coastguard Workeruniform half4 colorGreen, colorRed; 2*c8dee2aaSAndroid Build Coastguard Worker 3*c8dee2aaSAndroid Build Coastguard Workerbool test_float() { 4*c8dee2aaSAndroid Build Coastguard Worker bool ok = true; 5*c8dee2aaSAndroid Build Coastguard Worker 6*c8dee2aaSAndroid Build Coastguard Worker float2x2 m1 = float2x2(float4(1, 2, 3, 4)); 7*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (m1 == float2x2(1, 2, 3, 4)); 8*c8dee2aaSAndroid Build Coastguard Worker 9*c8dee2aaSAndroid Build Coastguard Worker // This generates {5, 0, 0, 5} on some Radeon GPUs. 10*c8dee2aaSAndroid Build Coastguard Worker// float2x2 m2 = float2x2(float4(5)); 11*c8dee2aaSAndroid Build Coastguard Worker// ok = ok && (m2 == float2x2(5, 5, 5, 5)); 12*c8dee2aaSAndroid Build Coastguard Worker 13*c8dee2aaSAndroid Build Coastguard Worker float2x2 m3 = float2x2(m1); 14*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (m3 == float2x2(1, 2, 3, 4)); 15*c8dee2aaSAndroid Build Coastguard Worker 16*c8dee2aaSAndroid Build Coastguard Worker float2x2 m4 = float2x2(6); 17*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (m4 == float2x2(6, 0, 0, 6)); 18*c8dee2aaSAndroid Build Coastguard Worker 19*c8dee2aaSAndroid Build Coastguard Worker m3 *= m4; 20*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (m3 == float2x2(6, 12, 18, 24)); 21*c8dee2aaSAndroid Build Coastguard Worker 22*c8dee2aaSAndroid Build Coastguard Worker float2x2 m5 = float2x2(m1[1][1]); 23*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (m5 == float2x2(4, 0, 0, 4)); 24*c8dee2aaSAndroid Build Coastguard Worker 25*c8dee2aaSAndroid Build Coastguard Worker m1 += m5; 26*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (m1 == float2x2(5, 2, 3, 8)); 27*c8dee2aaSAndroid Build Coastguard Worker 28*c8dee2aaSAndroid Build Coastguard Worker float2x2 m7 = float2x2(5, float3(6, 7, 8)); 29*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (m7 == float2x2(5, 6, 7, 8)); 30*c8dee2aaSAndroid Build Coastguard Worker 31*c8dee2aaSAndroid Build Coastguard Worker float3x3 m9 = float3x3(9); 32*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (m9 == float3x3(9, 0, 0, 0, 9, 0, 0, 0, 9)); 33*c8dee2aaSAndroid Build Coastguard Worker 34*c8dee2aaSAndroid Build Coastguard Worker float4x4 m10 = float4x4(11); 35*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (m10 == float4x4(11, 0, 0, 0, 0, 11, 0, 0, 0, 0, 11, 0, 0, 0, 0, 11)); 36*c8dee2aaSAndroid Build Coastguard Worker 37*c8dee2aaSAndroid Build Coastguard Worker float4x4 m11 = float4x4(20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20); 38*c8dee2aaSAndroid Build Coastguard Worker m11 -= m10; 39*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (m11 == float4x4(9, 20, 20, 20, 20, 9, 20, 20, 20, 20, 9, 20, 20, 20, 20, 9)); 40*c8dee2aaSAndroid Build Coastguard Worker 41*c8dee2aaSAndroid Build Coastguard Worker return ok; 42*c8dee2aaSAndroid Build Coastguard Worker} 43*c8dee2aaSAndroid Build Coastguard Worker 44*c8dee2aaSAndroid Build Coastguard Workerbool test_half() { 45*c8dee2aaSAndroid Build Coastguard Worker bool ok = true; 46*c8dee2aaSAndroid Build Coastguard Worker 47*c8dee2aaSAndroid Build Coastguard Worker half2x2 m1 = half2x2(half4(1, 2, 3, 4)); 48*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (m1 == half2x2(1, 2, 3, 4)); 49*c8dee2aaSAndroid Build Coastguard Worker 50*c8dee2aaSAndroid Build Coastguard Worker // This generates {5, 0, 0, 5} on some Radeon GPUs. 51*c8dee2aaSAndroid Build Coastguard Worker// half2x2 m2 = half2x2(half4(5)); 52*c8dee2aaSAndroid Build Coastguard Worker// ok = ok && (m2 == half2x2(5, 5, 5, 5)); 53*c8dee2aaSAndroid Build Coastguard Worker 54*c8dee2aaSAndroid Build Coastguard Worker half2x2 m3 = half2x2(m1); 55*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (m3 == half2x2(1, 2, 3, 4)); 56*c8dee2aaSAndroid Build Coastguard Worker 57*c8dee2aaSAndroid Build Coastguard Worker half2x2 m4 = half2x2(6); 58*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (m4 == half2x2(6, 0, 0, 6)); 59*c8dee2aaSAndroid Build Coastguard Worker 60*c8dee2aaSAndroid Build Coastguard Worker m3 *= m4; 61*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (m3 == half2x2(6, 12, 18, 24)); 62*c8dee2aaSAndroid Build Coastguard Worker 63*c8dee2aaSAndroid Build Coastguard Worker half2x2 m5 = half2x2(m1[1][1]); 64*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (m5 == half2x2(4, 0, 0, 4)); 65*c8dee2aaSAndroid Build Coastguard Worker 66*c8dee2aaSAndroid Build Coastguard Worker m1 += m5; 67*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (m1 == half2x2(5, 2, 3, 8)); 68*c8dee2aaSAndroid Build Coastguard Worker 69*c8dee2aaSAndroid Build Coastguard Worker half2x2 m7 = half2x2(5, half3(6, 7, 8)); 70*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (m7 == half2x2(5, 6, 7, 8)); 71*c8dee2aaSAndroid Build Coastguard Worker 72*c8dee2aaSAndroid Build Coastguard Worker half3x3 m9 = half3x3(9); 73*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (m9 == half3x3(9, 0, 0, 0, 9, 0, 0, 0, 9)); 74*c8dee2aaSAndroid Build Coastguard Worker 75*c8dee2aaSAndroid Build Coastguard Worker half4x4 m10 = half4x4(11); 76*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (m10 == half4x4(11, 0, 0, 0, 0, 11, 0, 0, 0, 0, 11, 0, 0, 0, 0, 11)); 77*c8dee2aaSAndroid Build Coastguard Worker 78*c8dee2aaSAndroid Build Coastguard Worker half4x4 m11 = half4x4(20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20); 79*c8dee2aaSAndroid Build Coastguard Worker m11 -= m10; 80*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (m11 == half4x4(9, 20, 20, 20, 20, 9, 20, 20, 20, 20, 9, 20, 20, 20, 20, 9)); 81*c8dee2aaSAndroid Build Coastguard Worker 82*c8dee2aaSAndroid Build Coastguard Worker return ok; 83*c8dee2aaSAndroid Build Coastguard Worker} 84*c8dee2aaSAndroid Build Coastguard Worker 85*c8dee2aaSAndroid Build Coastguard Workerbool test_comma() { 86*c8dee2aaSAndroid Build Coastguard Worker float2x2 x, y; 87*c8dee2aaSAndroid Build Coastguard Worker return (x = float2x2(1, 2, 3, 4), 88*c8dee2aaSAndroid Build Coastguard Worker y = 0.5 * float2x2(2, 4, 6, 8), 89*c8dee2aaSAndroid Build Coastguard Worker x == y); 90*c8dee2aaSAndroid Build Coastguard Worker} 91*c8dee2aaSAndroid Build Coastguard Worker 92*c8dee2aaSAndroid Build Coastguard Workerhalf4 main(float2 coords) { 93*c8dee2aaSAndroid Build Coastguard Worker return test_float() && test_half() && test_comma() ? colorGreen : colorRed; 94*c8dee2aaSAndroid Build Coastguard Worker} 95