xref: /aosp_15_r20/external/skia/tests/sksl/shared/Matrices.glsl (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1*c8dee2aaSAndroid Build Coastguard Worker
2*c8dee2aaSAndroid Build Coastguard Workerout vec4 sk_FragColor;
3*c8dee2aaSAndroid Build Coastguard Workeruniform vec4 colorGreen;
4*c8dee2aaSAndroid Build Coastguard Workeruniform vec4 colorRed;
5*c8dee2aaSAndroid Build Coastguard Workerbool test_half_b() {
6*c8dee2aaSAndroid Build Coastguard Worker    bool ok = true;
7*c8dee2aaSAndroid Build Coastguard Worker    mat2 m1 = mat2(1.0, 2.0, 3.0, 4.0);
8*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && m1 == mat2(1.0, 2.0, 3.0, 4.0);
9*c8dee2aaSAndroid Build Coastguard Worker    mat2 m3 = m1;
10*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && m3 == mat2(1.0, 2.0, 3.0, 4.0);
11*c8dee2aaSAndroid Build Coastguard Worker    mat2 m4 = mat2(6.0);
12*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && m4 == mat2(6.0, 0.0, 0.0, 6.0);
13*c8dee2aaSAndroid Build Coastguard Worker    m3 *= m4;
14*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && m3 == mat2(6.0, 12.0, 18.0, 24.0);
15*c8dee2aaSAndroid Build Coastguard Worker    mat2 m5 = mat2(m1[1].y);
16*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && m5 == mat2(4.0, 0.0, 0.0, 4.0);
17*c8dee2aaSAndroid Build Coastguard Worker    m1 += m5;
18*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && m1 == mat2(5.0, 2.0, 3.0, 8.0);
19*c8dee2aaSAndroid Build Coastguard Worker    mat2 m7 = mat2(5.0, 6.0, 7.0, 8.0);
20*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && m7 == mat2(5.0, 6.0, 7.0, 8.0);
21*c8dee2aaSAndroid Build Coastguard Worker    mat3 m9 = mat3(9.0);
22*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && m9 == mat3(9.0, 0.0, 0.0, 0.0, 9.0, 0.0, 0.0, 0.0, 9.0);
23*c8dee2aaSAndroid Build Coastguard Worker    mat4 m10 = mat4(11.0);
24*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && m10 == mat4(11.0, 0.0, 0.0, 0.0, 0.0, 11.0, 0.0, 0.0, 0.0, 0.0, 11.0, 0.0, 0.0, 0.0, 0.0, 11.0);
25*c8dee2aaSAndroid Build Coastguard Worker    mat4 m11 = mat4(20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0);
26*c8dee2aaSAndroid Build Coastguard Worker    m11 -= m10;
27*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && m11 == mat4(9.0, 20.0, 20.0, 20.0, 20.0, 9.0, 20.0, 20.0, 20.0, 20.0, 9.0, 20.0, 20.0, 20.0, 20.0, 9.0);
28*c8dee2aaSAndroid Build Coastguard Worker    return ok;
29*c8dee2aaSAndroid Build Coastguard Worker}
30*c8dee2aaSAndroid Build Coastguard Workerbool test_comma_b() {
31*c8dee2aaSAndroid Build Coastguard Worker    mat2 x;
32*c8dee2aaSAndroid Build Coastguard Worker    mat2 y;
33*c8dee2aaSAndroid Build Coastguard Worker    return ((x = mat2(1.0, 2.0, 3.0, 4.0), y = mat2(1.0, 2.0, 3.0, 4.0)), x == y);
34*c8dee2aaSAndroid Build Coastguard Worker}
35*c8dee2aaSAndroid Build Coastguard Workervec4 main() {
36*c8dee2aaSAndroid Build Coastguard Worker    bool _0_ok = true;
37*c8dee2aaSAndroid Build Coastguard Worker    mat2 _1_m1 = mat2(1.0, 2.0, 3.0, 4.0);
38*c8dee2aaSAndroid Build Coastguard Worker    _0_ok = _0_ok && _1_m1 == mat2(1.0, 2.0, 3.0, 4.0);
39*c8dee2aaSAndroid Build Coastguard Worker    mat2 _2_m3 = _1_m1;
40*c8dee2aaSAndroid Build Coastguard Worker    _0_ok = _0_ok && _2_m3 == mat2(1.0, 2.0, 3.0, 4.0);
41*c8dee2aaSAndroid Build Coastguard Worker    const mat2 _3_m4 = mat2(6.0);
42*c8dee2aaSAndroid Build Coastguard Worker    _2_m3 *= _3_m4;
43*c8dee2aaSAndroid Build Coastguard Worker    _0_ok = _0_ok && _2_m3 == mat2(6.0, 12.0, 18.0, 24.0);
44*c8dee2aaSAndroid Build Coastguard Worker    mat2 _4_m5 = mat2(_1_m1[1].y);
45*c8dee2aaSAndroid Build Coastguard Worker    _0_ok = _0_ok && _4_m5 == mat2(4.0, 0.0, 0.0, 4.0);
46*c8dee2aaSAndroid Build Coastguard Worker    _1_m1 += _4_m5;
47*c8dee2aaSAndroid Build Coastguard Worker    _0_ok = _0_ok && _1_m1 == mat2(5.0, 2.0, 3.0, 8.0);
48*c8dee2aaSAndroid Build Coastguard Worker    const mat4 _7_m10 = mat4(11.0);
49*c8dee2aaSAndroid Build Coastguard Worker    mat4 _8_m11 = mat4(20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0);
50*c8dee2aaSAndroid Build Coastguard Worker    _8_m11 -= _7_m10;
51*c8dee2aaSAndroid Build Coastguard Worker    _0_ok = _0_ok && _8_m11 == mat4(9.0, 20.0, 20.0, 20.0, 20.0, 9.0, 20.0, 20.0, 20.0, 20.0, 9.0, 20.0, 20.0, 20.0, 20.0, 9.0);
52*c8dee2aaSAndroid Build Coastguard Worker    return (_0_ok && test_half_b()) && test_comma_b() ? colorGreen : colorRed;
53*c8dee2aaSAndroid Build Coastguard Worker}
54