1 2out vec4 sk_FragColor; 3uniform vec4 colorGreen; 4uniform vec4 colorRed; 5uniform vec4 testInputs; 6const int minus = 2; 7const int star = 3; 8const int slash = 4; 9bool test_bifffff22(int op, float m11, float m12, float m21, float m22, mat2 expected) { 10 float one = colorRed.x; 11 mat2 m2 = mat2(m11 * one, m12 * one, m21 * one, m22 * one); 12 switch (op) { 13 case 1: 14 m2 = 1.0 + m2; 15 break; 16 case 2: 17 m2 -= 1.0; 18 break; 19 case 3: 20 m2 *= 2.0; 21 break; 22 case 4: 23 m2 = m2 * 0.5; 24 break; 25 } 26 return ((m2[0].x == expected[0].x && m2[0].y == expected[0].y) && m2[1].x == expected[1].x) && m2[1].y == expected[1].y; 27} 28bool divisionTest_b() { 29 float ten = colorRed.x * 10.0; 30 mat2 mat = mat2(vec2(ten), vec2(ten)); 31 mat2 div = mat * (1.0 / testInputs.x); 32 mat *= 1.0 / testInputs.x; 33 return all(lessThan(abs(vec4(div) + vec4(8.0)), vec4(0.01))) && all(lessThan(abs(vec4(mat) + vec4(8.0)), vec4(0.01))); 34} 35vec4 main() { 36 float f1 = colorGreen.y; 37 float f2 = 2.0 * colorGreen.y; 38 float f3 = 3.0 * colorGreen.y; 39 float f4 = 4.0 * colorGreen.y; 40 mat2 _0_expected = mat2(f1 + 1.0, f2 + 1.0, f3 + 1.0, f4 + 1.0); 41 float _1_one = colorRed.x; 42 mat2 _2_m2 = mat2(f1 * _1_one, f2 * _1_one, f3 * _1_one, f4 * _1_one); 43 { 44 _2_m2 = 1.0 + _2_m2; 45 } 46 return ((((((_2_m2[0].x == _0_expected[0].x && _2_m2[0].y == _0_expected[0].y) && _2_m2[1].x == _0_expected[1].x) && _2_m2[1].y == _0_expected[1].y) && test_bifffff22(minus, f1, f2, f3, f4, mat2(f1 - 1.0, f2 - 1.0, f3 - 1.0, f4 - 1.0))) && test_bifffff22(star, f1, f2, f3, f4, mat2(f1 * 2.0, f2 * 2.0, f3 * 2.0, f4 * 2.0))) && test_bifffff22(slash, f1, f2, f3, f4, mat2(f1 * 0.5, f2 * 0.5, f3 * 0.5, f4 * 0.5))) && divisionTest_b() ? colorGreen : colorRed; 47} 48