1*c8dee2aaSAndroid Build Coastguard Workeruniform half4 colorGreen, colorRed; 2*c8dee2aaSAndroid Build Coastguard Workeruniform half2x2 testMatrix2x2; 3*c8dee2aaSAndroid Build Coastguard Workeruniform half3x3 testMatrix3x3; 4*c8dee2aaSAndroid Build Coastguard Worker 5*c8dee2aaSAndroid Build Coastguard Workerbool test_equality() { 6*c8dee2aaSAndroid Build Coastguard Worker bool ok = true; 7*c8dee2aaSAndroid Build Coastguard Worker ok = ok && testMatrix2x2 == half2x2(1,2,3,4); 8*c8dee2aaSAndroid Build Coastguard Worker ok = ok && testMatrix3x3 == half3x3(1,2,3,4,5,6,7,8,9); 9*c8dee2aaSAndroid Build Coastguard Worker ok = ok && testMatrix2x2 != half2x2(100); 10*c8dee2aaSAndroid Build Coastguard Worker ok = ok && testMatrix3x3 != half3x3(9,8,7,6,5,4,3,2,1); 11*c8dee2aaSAndroid Build Coastguard Worker 12*c8dee2aaSAndroid Build Coastguard Worker // Similar tests (focused on constant-folding) can also be found in folding/MatrixFoldingES2. 13*c8dee2aaSAndroid Build Coastguard Worker float zero = colorGreen.r; 14*c8dee2aaSAndroid Build Coastguard Worker float one = colorGreen.g; 15*c8dee2aaSAndroid Build Coastguard Worker float two = 2 * one; 16*c8dee2aaSAndroid Build Coastguard Worker float nine = 9 * one; 17*c8dee2aaSAndroid Build Coastguard Worker 18*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (float2x2(float2(one, zero), float2(zero, one)) == 19*c8dee2aaSAndroid Build Coastguard Worker float2x2(float2(1.0, 0.0), float2(0.0, 1.0))); 20*c8dee2aaSAndroid Build Coastguard Worker ok = ok && !(float2x2(float2(one, zero), float2(one, one)) == 21*c8dee2aaSAndroid Build Coastguard Worker float2x2(float2(1.0, 0.0), float2(0.0, 1.0))); 22*c8dee2aaSAndroid Build Coastguard Worker 23*c8dee2aaSAndroid Build Coastguard Worker ok = ok && ( float2x2(one) == float2x2(1)); 24*c8dee2aaSAndroid Build Coastguard Worker ok = ok && !( float2x2(one) == float2x2(0)); 25*c8dee2aaSAndroid Build Coastguard Worker ok = ok && ( float2x2(-one) == -float2x2(1)); 26*c8dee2aaSAndroid Build Coastguard Worker ok = ok && ( float2x2(zero) == -float2x2(0)); 27*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (-float2x2(-one) == float2x2(1)); 28*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (-float2x2(zero) == -float2x2(-0)); 29*c8dee2aaSAndroid Build Coastguard Worker 30*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (float2x2(one) == float2x2(float2(1.0, 0.0), float2(0.0, 1.0))); 31*c8dee2aaSAndroid Build Coastguard Worker ok = ok && !(float2x2(two) == float2x2(float2(1.0, 0.0), float2(0.0, 1.0))); 32*c8dee2aaSAndroid Build Coastguard Worker 33*c8dee2aaSAndroid Build Coastguard Worker ok = ok && !(float2x2(one) != float2x2(1)); 34*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (float2x2(one) != float2x2(0)); 35*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (float3x3(float3(one,zero,zero), float3(zero,one,zero), float3(zero,zero,one)) == 36*c8dee2aaSAndroid Build Coastguard Worker float3x3(float2x2(1.0))); 37*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (float3x3(float3(nine,zero,zero), float3(zero,nine,zero), float3(zero,zero,one)) == 38*c8dee2aaSAndroid Build Coastguard Worker float3x3(float2x2(9.0))); 39*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (float3x3(one) == float3x3(float2x2(1.0))); 40*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (float3x3(float3(nine).x00, float3(nine).0x0, float3(one).00x) == 41*c8dee2aaSAndroid Build Coastguard Worker float3x3(float2x2(9.0))); 42*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (float2x2(float3x3(one)) == float2x2(1.0)); 43*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (float2x2(float3x3(one)) == float2x2(1.0)); 44*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (float2x2(float4(one, zero, zero, one)) == float2x2(1.0)); 45*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (float2x2(one, zero, float2(zero, one)) == float2x2(1.0)); 46*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (float2x2(float2(one, zero), zero, one) == float2x2(1.0)); 47*c8dee2aaSAndroid Build Coastguard Worker 48*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (float4(testMatrix2x2) * float4(one)) == float4(1, 2, 3, 4); 49*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (float4(testMatrix2x2) * float4(one)) == float4(testMatrix2x2); 50*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (float4(testMatrix2x2) * float4(zero)) == float4(0); 51*c8dee2aaSAndroid Build Coastguard Worker 52*c8dee2aaSAndroid Build Coastguard Worker // TODO: enable this section when RP index expressions are more flexible 53*c8dee2aaSAndroid Build Coastguard Worker// ok = ok && (float2x2(nine)[0] == float2(9.0, 0.0)); 54*c8dee2aaSAndroid Build Coastguard Worker// ok = ok && (float2x2(nine)[1] == float2(0.0, 9.0)); 55*c8dee2aaSAndroid Build Coastguard Worker 56*c8dee2aaSAndroid Build Coastguard Worker// ok = ok && (float2x2(nine)[0][0] == 9.0); 57*c8dee2aaSAndroid Build Coastguard Worker// ok = ok && (float2x2(nine)[0][1] == 0.0); 58*c8dee2aaSAndroid Build Coastguard Worker// ok = ok && (float2x2(nine)[1][0] == 0.0); 59*c8dee2aaSAndroid Build Coastguard Worker// ok = ok && (float2x2(nine)[1][1] == 9.0); 60*c8dee2aaSAndroid Build Coastguard Worker 61*c8dee2aaSAndroid Build Coastguard Worker float3x3 m = float3x3(one, two, 3, 4, 5, 6, 7, 8, nine); 62*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (m[0] == float3(1, 2, 3)); 63*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (m[1] == float3(4, 5, 6)); 64*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (m[2] == float3(7, 8, 9)); 65*c8dee2aaSAndroid Build Coastguard Worker 66*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (m[0][0] == 1); 67*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (m[0][1] == 2); 68*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (m[0][2] == 3); 69*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (m[1][0] == 4); 70*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (m[1][1] == 5); 71*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (m[1][2] == 6); 72*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (m[2][0] == 7); 73*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (m[2][1] == 8); 74*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (m[2][2] == 9); 75*c8dee2aaSAndroid Build Coastguard Worker 76*c8dee2aaSAndroid Build Coastguard Worker // TODO: enable this section when RP index expressions are more flexible 77*c8dee2aaSAndroid Build Coastguard Worker// ok = ok && (float3x3(one, two, 3, 4, 5, 6, 7, 8, nine)[0] == float3(1, 2, 3)); 78*c8dee2aaSAndroid Build Coastguard Worker// ok = ok && (float3x3(one, two, 3, 4, 5, 6, 7, 8, nine)[1] == float3(4, 5, 6)); 79*c8dee2aaSAndroid Build Coastguard Worker// ok = ok && (float3x3(one, two, 3, 4, 5, 6, 7, 8, nine)[2] == float3(7, 8, 9)); 80*c8dee2aaSAndroid Build Coastguard Worker// 81*c8dee2aaSAndroid Build Coastguard Worker// ok = ok && float4x4(half3x3(testMatrix2x2))[0] == float4(one, two, zero, zero); 82*c8dee2aaSAndroid Build Coastguard Worker// ok = ok && float4x4(half3x3(testMatrix2x2))[1] == float4( 3, 4, zero, zero); 83*c8dee2aaSAndroid Build Coastguard Worker// ok = ok && float4x4(half3x3(testMatrix2x2))[2] == float4(zero, zero, one, zero); 84*c8dee2aaSAndroid Build Coastguard Worker// ok = ok && float4x4(half3x3(testMatrix2x2))[3] == float4(zero, zero, zero, one); 85*c8dee2aaSAndroid Build Coastguard Worker 86*c8dee2aaSAndroid Build Coastguard Worker return ok; 87*c8dee2aaSAndroid Build Coastguard Worker} 88*c8dee2aaSAndroid Build Coastguard Worker 89*c8dee2aaSAndroid Build Coastguard Workerhalf4 main(float2 coords) { 90*c8dee2aaSAndroid Build Coastguard Worker return test_equality() ? colorGreen : colorRed; 91*c8dee2aaSAndroid Build Coastguard Worker} 92