1*c8dee2aaSAndroid Build Coastguard Workeruniform half4 colorRed, colorGreen; 2*c8dee2aaSAndroid Build Coastguard Worker 3*c8dee2aaSAndroid Build Coastguard Workerbool test_eq_float() { 4*c8dee2aaSAndroid Build Coastguard Worker bool ok = true; 5*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (float3x2(2) == float3x2(float2(2.0, 0.0), float2(0.0, 2.0), float2(0.0))); 6*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (float3x2(1, 2, 3, 4, 5, 6) == float3x2(float4x2(1, 2, 3, 4, 5, 6, 7, 8))); 7*c8dee2aaSAndroid Build Coastguard Worker return ok; 8*c8dee2aaSAndroid Build Coastguard Worker} 9*c8dee2aaSAndroid Build Coastguard Worker 10*c8dee2aaSAndroid Build Coastguard Workerbool test_eq_half() { 11*c8dee2aaSAndroid Build Coastguard Worker bool ok = true; 12*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (half3x2(2) == half3x2(half2(2.0, 0.0), half2(0.0, 2.0), half2(0.0))); 13*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (half3x2(1, 2, 3, 4, 5, 6) == half3x2(half4x2(1, 2, 3, 4, 5, 6, 7, 8))); 14*c8dee2aaSAndroid Build Coastguard Worker return ok; 15*c8dee2aaSAndroid Build Coastguard Worker} 16*c8dee2aaSAndroid Build Coastguard Worker 17*c8dee2aaSAndroid Build Coastguard Workerbool test_matrix_op_matrix_float() { 18*c8dee2aaSAndroid Build Coastguard Worker bool ok = true; 19*c8dee2aaSAndroid Build Coastguard Worker 20*c8dee2aaSAndroid Build Coastguard Worker // Addition, subtraction and division operate componentwise. 21*c8dee2aaSAndroid Build Coastguard Worker { 22*c8dee2aaSAndroid Build Coastguard Worker const float3x2 splat_4 = float3x2(4, 4, 4, 4, 4, 4); 23*c8dee2aaSAndroid Build Coastguard Worker 24*c8dee2aaSAndroid Build Coastguard Worker ok = ok && ((float3x2(2) + splat_4) == float3x2(6, 4, 4, 6, 4, 4)); 25*c8dee2aaSAndroid Build Coastguard Worker ok = ok && ((float3x2(2) - splat_4) == float3x2(-2, -4, -4, -2, -4, -4)); 26*c8dee2aaSAndroid Build Coastguard Worker ok = ok && ((float3x2(2) / splat_4) == float3x2(0.5)); 27*c8dee2aaSAndroid Build Coastguard Worker } 28*c8dee2aaSAndroid Build Coastguard Worker { 29*c8dee2aaSAndroid Build Coastguard Worker const float2x3 splat_4 = float2x3(4, 4, 4, 4, 4, 4); 30*c8dee2aaSAndroid Build Coastguard Worker 31*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (splat_4 + (float2x3(2)) == float2x3(6, 4, 4, 4, 6, 4)); 32*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (splat_4 - (float2x3(2)) == float2x3(2, 4, 4, 4, 2, 4)); 33*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (splat_4 / (float2x3(2, 2, 2, 2, 2, 2)) == float2x3(2, 2, 2, 2, 2, 2)); 34*c8dee2aaSAndroid Build Coastguard Worker } 35*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (float4x3(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12) + 36*c8dee2aaSAndroid Build Coastguard Worker float4x3(16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5) == 37*c8dee2aaSAndroid Build Coastguard Worker float4x3(17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17)); 38*c8dee2aaSAndroid Build Coastguard Worker 39*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (float4x2(10, 20, 30, 40, 50, 60, 70, 80) - 40*c8dee2aaSAndroid Build Coastguard Worker float4x2(1, 2, 3, 4, 5, 6, 7, 8) == 41*c8dee2aaSAndroid Build Coastguard Worker float4x2(9, 18, 27, 36, 45, 54, 63, 72)); 42*c8dee2aaSAndroid Build Coastguard Worker 43*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (float2x4(10, 20, 30, 40, 10, 20, 30, 40) / 44*c8dee2aaSAndroid Build Coastguard Worker float2x4(10, 10, 10, 10, 5, 5, 5, 5) == 45*c8dee2aaSAndroid Build Coastguard Worker float2x4(1, 2, 3, 4, 2, 4, 6, 8)); 46*c8dee2aaSAndroid Build Coastguard Worker 47*c8dee2aaSAndroid Build Coastguard Worker // Multiplication performs a proper matrix multiply. 48*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (float3x2(1, 4, 2, 5, 3, 6) * 49*c8dee2aaSAndroid Build Coastguard Worker float2x3(7, 9, 11, 8, 10, 12) == 50*c8dee2aaSAndroid Build Coastguard Worker float2x2(58, 139, 64, 154)); 51*c8dee2aaSAndroid Build Coastguard Worker return ok; 52*c8dee2aaSAndroid Build Coastguard Worker} 53*c8dee2aaSAndroid Build Coastguard Worker 54*c8dee2aaSAndroid Build Coastguard Workerbool test_matrix_op_matrix_half() { 55*c8dee2aaSAndroid Build Coastguard Worker bool ok = true; 56*c8dee2aaSAndroid Build Coastguard Worker 57*c8dee2aaSAndroid Build Coastguard Worker // Addition, subtraction and division operate componentwise. 58*c8dee2aaSAndroid Build Coastguard Worker { 59*c8dee2aaSAndroid Build Coastguard Worker const half3x2 splat_4 = half3x2(4, 4, 4, 4, 4, 4); 60*c8dee2aaSAndroid Build Coastguard Worker 61*c8dee2aaSAndroid Build Coastguard Worker ok = ok && ((half3x2(2) + splat_4) == half3x2(6, 4, 4, 6, 4, 4)); 62*c8dee2aaSAndroid Build Coastguard Worker ok = ok && ((half3x2(2) - splat_4) == half3x2(-2, -4, -4, -2, -4, -4)); 63*c8dee2aaSAndroid Build Coastguard Worker ok = ok && ((half3x2(2) / splat_4) == half3x2(0.5)); 64*c8dee2aaSAndroid Build Coastguard Worker } 65*c8dee2aaSAndroid Build Coastguard Worker { 66*c8dee2aaSAndroid Build Coastguard Worker const half2x3 splat_4 = half2x3(4, 4, 4, 4, 4, 4); 67*c8dee2aaSAndroid Build Coastguard Worker 68*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (splat_4 + (half2x3(2)) == half2x3(6, 4, 4, 4, 6, 4)); 69*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (splat_4 - (half2x3(2)) == half2x3(2, 4, 4, 4, 2, 4)); 70*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (splat_4 / (half2x3(2, 2, 2, 2, 2, 2)) == half2x3(2, 2, 2, 2, 2, 2)); 71*c8dee2aaSAndroid Build Coastguard Worker } 72*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (half4x3(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12) + 73*c8dee2aaSAndroid Build Coastguard Worker half4x3(16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5) == 74*c8dee2aaSAndroid Build Coastguard Worker half4x3(17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17)); 75*c8dee2aaSAndroid Build Coastguard Worker 76*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (half4x2(10, 20, 30, 40, 50, 60, 70, 80) - 77*c8dee2aaSAndroid Build Coastguard Worker half4x2(1, 2, 3, 4, 5, 6, 7, 8) == 78*c8dee2aaSAndroid Build Coastguard Worker half4x2(9, 18, 27, 36, 45, 54, 63, 72)); 79*c8dee2aaSAndroid Build Coastguard Worker 80*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (half2x4(10, 20, 30, 40, 10, 20, 30, 40) / 81*c8dee2aaSAndroid Build Coastguard Worker half2x4(10, 10, 10, 10, 5, 5, 5, 5) == 82*c8dee2aaSAndroid Build Coastguard Worker half2x4(1, 2, 3, 4, 2, 4, 6, 8)); 83*c8dee2aaSAndroid Build Coastguard Worker 84*c8dee2aaSAndroid Build Coastguard Worker // Multiplication performs a proper matrix multiply. 85*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (half3x2(1, 4, 2, 5, 3, 6) * 86*c8dee2aaSAndroid Build Coastguard Worker half2x3(7, 9, 11, 8, 10, 12) == 87*c8dee2aaSAndroid Build Coastguard Worker half2x2(58, 139, 64, 154)); 88*c8dee2aaSAndroid Build Coastguard Worker return ok; 89*c8dee2aaSAndroid Build Coastguard Worker} 90*c8dee2aaSAndroid Build Coastguard Worker 91*c8dee2aaSAndroid Build Coastguard Workerbool test_vector_op_matrix_float() { 92*c8dee2aaSAndroid Build Coastguard Worker bool ok = true; 93*c8dee2aaSAndroid Build Coastguard Worker 94*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (float2(1, 2) * float4x2(3, 4, 5, 6, 7, 8, 9, 10) == float4(11, 17, 23, 29)); 95*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (float3(1, 2, 3) * float2x3(-1, 0, 0, 1, 2, 0) == float2(-1, 5)); 96*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (float4(1, 2, 3, 4) * float3x4(1,0,2, 3,-1,0, 0,1,2, 0,1,0) == float3(19, 3, 5)); 97*c8dee2aaSAndroid Build Coastguard Worker 98*c8dee2aaSAndroid Build Coastguard Worker return ok; 99*c8dee2aaSAndroid Build Coastguard Worker} 100*c8dee2aaSAndroid Build Coastguard Worker 101*c8dee2aaSAndroid Build Coastguard Workerbool test_vector_op_matrix_half() { 102*c8dee2aaSAndroid Build Coastguard Worker bool ok = true; 103*c8dee2aaSAndroid Build Coastguard Worker 104*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (half2(1, 2) * half4x2(3, 4, 5, 6, 7, 8, 9, 10) == half4(11, 17, 23, 29)); 105*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (half3(1, 2, 3) * half2x3(-1, 0, 0, 1, 2, 0) == half2(-1, 5)); 106*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (half4(1, 2, 3, 4) * half3x4(1,0,2, 3,-1,0, 0,1,2, 0,1,0) == half3(19, 3, 5)); 107*c8dee2aaSAndroid Build Coastguard Worker 108*c8dee2aaSAndroid Build Coastguard Worker return ok; 109*c8dee2aaSAndroid Build Coastguard Worker} 110*c8dee2aaSAndroid Build Coastguard Worker 111*c8dee2aaSAndroid Build Coastguard Workerbool test_matrix_op_vector_float() { 112*c8dee2aaSAndroid Build Coastguard Worker bool ok = true; 113*c8dee2aaSAndroid Build Coastguard Worker 114*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (float2x4(1, 0, 2, 3, -1, 0, 0, 1) * float2(1, 2) == float4(-1, 0, 2, 5)); 115*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (float3x2(-1, 0, 0, 1, 2, 0) * float3(1, 2, 3) == float2(5, 2)); 116*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (float4x3(3,4,5,6, 7,8,9,10, 11,12,13,14) * float4(1,2,3,4) == float3(90, 100, 110)); 117*c8dee2aaSAndroid Build Coastguard Worker 118*c8dee2aaSAndroid Build Coastguard Worker return ok; 119*c8dee2aaSAndroid Build Coastguard Worker} 120*c8dee2aaSAndroid Build Coastguard Worker 121*c8dee2aaSAndroid Build Coastguard Workerbool test_matrix_op_vector_half() { 122*c8dee2aaSAndroid Build Coastguard Worker bool ok = true; 123*c8dee2aaSAndroid Build Coastguard Worker 124*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (half2x4(1, 0, 2, 3, -1, 0, 0, 1) * half2(1, 2) == half4(-1, 0, 2, 5)); 125*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (half3x2(-1, 0, 0, 1, 2, 0) * half3(1, 2, 3) == half2(5, 2)); 126*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (half4x3(3,4,5,6, 7,8,9,10, 11,12,13,14) * half4(1,2,3,4) == half3(90, 100, 110)); 127*c8dee2aaSAndroid Build Coastguard Worker 128*c8dee2aaSAndroid Build Coastguard Worker return ok; 129*c8dee2aaSAndroid Build Coastguard Worker} 130*c8dee2aaSAndroid Build Coastguard Worker 131*c8dee2aaSAndroid Build Coastguard Workerhalf4 main(float2 coords) { 132*c8dee2aaSAndroid Build Coastguard Worker return (test_eq_float() && 133*c8dee2aaSAndroid Build Coastguard Worker test_eq_half() && 134*c8dee2aaSAndroid Build Coastguard Worker test_matrix_op_matrix_float() && 135*c8dee2aaSAndroid Build Coastguard Worker test_matrix_op_matrix_half() && 136*c8dee2aaSAndroid Build Coastguard Worker test_vector_op_matrix_float() && 137*c8dee2aaSAndroid Build Coastguard Worker test_vector_op_matrix_half() && 138*c8dee2aaSAndroid Build Coastguard Worker test_matrix_op_vector_float() && 139*c8dee2aaSAndroid Build Coastguard Worker test_matrix_op_vector_half()) ? colorGreen : colorRed; 140*c8dee2aaSAndroid Build Coastguard Worker} 141