xref: /aosp_15_r20/external/skia/tests/sksl/folding/MatrixNoOpFolding.wgsl (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1diagnostic(off, derivative_uniformity);
2diagnostic(off, chromium.unreachable_code);
3struct _GlobalUniforms {
4  testMatrix2x2: mat2x2<f32>,
5  testMatrix3x3: mat3x3<f32>,
6  testInputs: vec4<f32>,
7  colorRed: vec4<f32>,
8  colorGreen: vec4<f32>,
9  unknownInput: f32,
10};
11@binding(0) @group(0) var<uniform> _globalUniforms: _GlobalUniforms;
12fn test_mat3_mat3_b() -> bool {
13  {
14    var m: mat3x3<f32>;
15    var mm: mat3x3<f32>;
16    const z: mat3x3<f32> = mat3x3<f32>(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
17    m = _globalUniforms.testMatrix3x3;
18    m = _globalUniforms.testMatrix3x3;
19    m = (-1.0 * m);
20    mm = mat3x3<f32>(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
21    mm = mat3x3<f32>(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
22    let _skTemp0 = (-1.0 * _globalUniforms.testMatrix3x3);
23    return (all(m[0] == _skTemp0[0]) && all(m[1] == _skTemp0[1]) && all(m[2] == _skTemp0[2])) && (all(mm[0] == z[0]) && all(mm[1] == z[1]) && all(mm[2] == z[2]));
24  }
25}
26fn test_mat4_mat4_b() -> bool {
27  {
28    let testMatrix4x4: mat4x4<f32> = mat4x4<f32>(_globalUniforms.testInputs[0], _globalUniforms.testInputs[1], _globalUniforms.testInputs[2], _globalUniforms.testInputs[3], _globalUniforms.testInputs[0], _globalUniforms.testInputs[1], _globalUniforms.testInputs[2], _globalUniforms.testInputs[3], _globalUniforms.testInputs[0], _globalUniforms.testInputs[1], _globalUniforms.testInputs[2], _globalUniforms.testInputs[3], _globalUniforms.testInputs[0], _globalUniforms.testInputs[1], _globalUniforms.testInputs[2], _globalUniforms.testInputs[3]);
29    var m: mat4x4<f32>;
30    var mm: mat4x4<f32>;
31    const z: mat4x4<f32> = mat4x4<f32>(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
32    m = testMatrix4x4;
33    m = testMatrix4x4;
34    m = (-1.0 * m);
35    mm = mat4x4<f32>(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
36    mm = mat4x4<f32>(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
37    let _skTemp1 = (-1.0 * testMatrix4x4);
38    return (all(m[0] == _skTemp1[0]) && all(m[1] == _skTemp1[1]) && all(m[2] == _skTemp1[2]) && all(m[3] == _skTemp1[3])) && (all(mm[0] == z[0]) && all(mm[1] == z[1]) && all(mm[2] == z[2]) && all(mm[3] == z[3]));
39  }
40}
41fn _skslMain(coords: vec2<f32>) -> vec4<f32> {
42  {
43    var _0_m: mat2x2<f32>;
44    var _1_mm: mat2x2<f32>;
45    const _3_z: mat2x2<f32> = mat2x2<f32>(0.0, 0.0, 0.0, 0.0);
46    _0_m = _globalUniforms.testMatrix2x2;
47    _0_m = _globalUniforms.testMatrix2x2;
48    _0_m = (-1.0 * _0_m);
49    _1_mm = mat2x2<f32>(0.0, 0.0, 0.0, 0.0);
50    _1_mm = mat2x2<f32>(0.0, 0.0, 0.0, 0.0);
51    var _skTemp2: vec4<f32>;
52    var _skTemp3: bool;
53    var _skTemp4: bool;
54    let _skTemp5 = (-1.0 * _globalUniforms.testMatrix2x2);
55    if (all(_0_m[0] == _skTemp5[0]) && all(_0_m[1] == _skTemp5[1])) && (all(_1_mm[0] == _3_z[0]) && all(_1_mm[1] == _3_z[1])) {
56      let _skTemp6 = test_mat3_mat3_b();
57      _skTemp4 = _skTemp6;
58    } else {
59      _skTemp4 = false;
60    }
61    if _skTemp4 {
62      let _skTemp7 = test_mat4_mat4_b();
63      _skTemp3 = _skTemp7;
64    } else {
65      _skTemp3 = false;
66    }
67    if _skTemp3 {
68      _skTemp2 = _globalUniforms.colorGreen;
69    } else {
70      _skTemp2 = _globalUniforms.colorRed;
71    }
72    return _skTemp2;
73  }
74}
75@fragment fn main(@location(0) _coords: vec2<f32>) -> @location(0) vec4<f32> {
76  return _skslMain(_coords);
77}
78