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