1*c8dee2aaSAndroid Build Coastguard Workeruniform half4 colorRed, colorGreen; 2*c8dee2aaSAndroid Build Coastguard Worker 3*c8dee2aaSAndroid Build Coastguard Workerbool test_matrix_op_matrix_float() { 4*c8dee2aaSAndroid Build Coastguard Worker bool ok = true; 5*c8dee2aaSAndroid Build Coastguard Worker 6*c8dee2aaSAndroid Build Coastguard Worker // Addition, subtraction and division operate componentwise. 7*c8dee2aaSAndroid Build Coastguard Worker { 8*c8dee2aaSAndroid Build Coastguard Worker const float3x2 splat_4 = float3x2(4, 4, 4, 4, 4, 4); 9*c8dee2aaSAndroid Build Coastguard Worker float3x2 m; 10*c8dee2aaSAndroid Build Coastguard Worker 11*c8dee2aaSAndroid Build Coastguard Worker m = float3x2(2); m += splat_4; ok = ok && (m == float3x2(6, 4, 4, 6, 4, 4)); 12*c8dee2aaSAndroid Build Coastguard Worker m = float3x2(2); m -= splat_4; ok = ok && (m == float3x2(-2, -4, -4, -2, -4, -4)); 13*c8dee2aaSAndroid Build Coastguard Worker m = float3x2(2); m /= splat_4; ok = ok && (m == float3x2(0.5)); 14*c8dee2aaSAndroid Build Coastguard Worker } 15*c8dee2aaSAndroid Build Coastguard Worker { 16*c8dee2aaSAndroid Build Coastguard Worker const float2x3 splat_4 = float2x3(4, 4, 4, 4, 4, 4); 17*c8dee2aaSAndroid Build Coastguard Worker float2x3 m; 18*c8dee2aaSAndroid Build Coastguard Worker 19*c8dee2aaSAndroid Build Coastguard Worker m = splat_4; m += float2x3(2); ok = ok && (m == float2x3(6, 4, 4, 4, 6, 4)); 20*c8dee2aaSAndroid Build Coastguard Worker m = splat_4; m -= float2x3(2); ok = ok && (m == float2x3(2, 4, 4, 4, 2, 4)); 21*c8dee2aaSAndroid Build Coastguard Worker m = splat_4; m /= float2x3(2,2,2,2,2,2); ok = ok && (m == float2x3(2, 2, 2, 2, 2, 2)); 22*c8dee2aaSAndroid Build Coastguard Worker } 23*c8dee2aaSAndroid Build Coastguard Worker { 24*c8dee2aaSAndroid Build Coastguard Worker float4x3 m = float4x3(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12); 25*c8dee2aaSAndroid Build Coastguard Worker m += float4x3(16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5); 26*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (m == float4x3(17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17)); 27*c8dee2aaSAndroid Build Coastguard Worker } 28*c8dee2aaSAndroid Build Coastguard Worker { 29*c8dee2aaSAndroid Build Coastguard Worker float4x2 m = float4x2(10, 20, 30, 40, 50, 60, 70, 80); 30*c8dee2aaSAndroid Build Coastguard Worker m -= float4x2(1, 2, 3, 4, 5, 6, 7, 8); 31*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (m == float4x2(9, 18, 27, 36, 45, 54, 63, 72)); 32*c8dee2aaSAndroid Build Coastguard Worker } 33*c8dee2aaSAndroid Build Coastguard Worker { 34*c8dee2aaSAndroid Build Coastguard Worker float2x4 m = float2x4(10, 20, 30, 40, 10, 20, 30, 40); 35*c8dee2aaSAndroid Build Coastguard Worker m /= float2x4(10, 10, 10, 10, 5, 5, 5, 5); 36*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (m == float2x4(1, 2, 3, 4, 2, 4, 6, 8)); 37*c8dee2aaSAndroid Build Coastguard Worker } 38*c8dee2aaSAndroid Build Coastguard Worker { 39*c8dee2aaSAndroid Build Coastguard Worker // Multiplication performs a proper matrix multiply. 40*c8dee2aaSAndroid Build Coastguard Worker float2x3 m = float2x3(7, 9, 11, 8, 10, 12); 41*c8dee2aaSAndroid Build Coastguard Worker m *= float2x2(1, 4, 2, 5); 42*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (m == float2x3(39, 49, 59, 54, 68, 82)); 43*c8dee2aaSAndroid Build Coastguard Worker } 44*c8dee2aaSAndroid Build Coastguard Worker return ok; 45*c8dee2aaSAndroid Build Coastguard Worker} 46*c8dee2aaSAndroid Build Coastguard Worker 47*c8dee2aaSAndroid Build Coastguard Workerbool test_matrix_op_matrix_half() { 48*c8dee2aaSAndroid Build Coastguard Worker bool ok = true; 49*c8dee2aaSAndroid Build Coastguard Worker 50*c8dee2aaSAndroid Build Coastguard Worker // Addition, subtraction and division operate componentwise. 51*c8dee2aaSAndroid Build Coastguard Worker { 52*c8dee2aaSAndroid Build Coastguard Worker const half3x2 splat_4 = half3x2(4, 4, 4, 4, 4, 4); 53*c8dee2aaSAndroid Build Coastguard Worker half3x2 m; 54*c8dee2aaSAndroid Build Coastguard Worker 55*c8dee2aaSAndroid Build Coastguard Worker m = half3x2(2); m += splat_4; ok = ok && (m == half3x2(6, 4, 4, 6, 4, 4)); 56*c8dee2aaSAndroid Build Coastguard Worker m = half3x2(2); m -= splat_4; ok = ok && (m == half3x2(-2, -4, -4, -2, -4, -4)); 57*c8dee2aaSAndroid Build Coastguard Worker m = half3x2(2); m /= splat_4; ok = ok && (m == half3x2(0.5)); 58*c8dee2aaSAndroid Build Coastguard Worker } 59*c8dee2aaSAndroid Build Coastguard Worker { 60*c8dee2aaSAndroid Build Coastguard Worker const half2x3 splat_4 = half2x3(4, 4, 4, 4, 4, 4); 61*c8dee2aaSAndroid Build Coastguard Worker half2x3 m; 62*c8dee2aaSAndroid Build Coastguard Worker 63*c8dee2aaSAndroid Build Coastguard Worker m = splat_4; m += half2x3(2); ok = ok && (m == half2x3(6, 4, 4, 4, 6, 4)); 64*c8dee2aaSAndroid Build Coastguard Worker m = splat_4; m -= half2x3(2); ok = ok && (m == half2x3(2, 4, 4, 4, 2, 4)); 65*c8dee2aaSAndroid Build Coastguard Worker m = splat_4; m /= half2x3(2,2,2,2,2,2); ok = ok && (m == half2x3(2, 2, 2, 2, 2, 2)); 66*c8dee2aaSAndroid Build Coastguard Worker } 67*c8dee2aaSAndroid Build Coastguard Worker { 68*c8dee2aaSAndroid Build Coastguard Worker half4x3 m = half4x3(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12); 69*c8dee2aaSAndroid Build Coastguard Worker m += half4x3(16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5); 70*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (m == half4x3(17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17)); 71*c8dee2aaSAndroid Build Coastguard Worker } 72*c8dee2aaSAndroid Build Coastguard Worker { 73*c8dee2aaSAndroid Build Coastguard Worker half4x2 m = half4x2(10, 20, 30, 40, 50, 60, 70, 80); 74*c8dee2aaSAndroid Build Coastguard Worker m -= half4x2(1, 2, 3, 4, 5, 6, 7, 8); 75*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (m == half4x2(9, 18, 27, 36, 45, 54, 63, 72)); 76*c8dee2aaSAndroid Build Coastguard Worker } 77*c8dee2aaSAndroid Build Coastguard Worker { 78*c8dee2aaSAndroid Build Coastguard Worker half2x4 m = half2x4(10, 20, 30, 40, 10, 20, 30, 40); 79*c8dee2aaSAndroid Build Coastguard Worker m /= half2x4(10, 10, 10, 10, 5, 5, 5, 5); 80*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (m == half2x4(1, 2, 3, 4, 2, 4, 6, 8)); 81*c8dee2aaSAndroid Build Coastguard Worker } 82*c8dee2aaSAndroid Build Coastguard Worker { 83*c8dee2aaSAndroid Build Coastguard Worker // Multiplication performs a proper matrix multiply. 84*c8dee2aaSAndroid Build Coastguard Worker half2x3 m = half2x3(7, 9, 11, 8, 10, 12); 85*c8dee2aaSAndroid Build Coastguard Worker m *= half2x2(1, 4, 2, 5); 86*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (m == half2x3(39, 49, 59, 54, 68, 82)); 87*c8dee2aaSAndroid Build Coastguard Worker } 88*c8dee2aaSAndroid Build Coastguard Worker return ok; 89*c8dee2aaSAndroid Build Coastguard Worker} 90*c8dee2aaSAndroid Build Coastguard Worker 91*c8dee2aaSAndroid Build Coastguard Workerhalf4 main(float2 coords) { 92*c8dee2aaSAndroid Build Coastguard Worker return (test_matrix_op_matrix_float() && 93*c8dee2aaSAndroid Build Coastguard Worker test_matrix_op_matrix_half()) ? colorGreen : colorRed; 94*c8dee2aaSAndroid Build Coastguard Worker} 95