xref: /aosp_15_r20/external/skia/tests/sksl/shared/MatrixScalarMath.wgsl (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1diagnostic(off, derivative_uniformity);
2diagnostic(off, chromium.unreachable_code);
3struct FSOut {
4  @location(0) sk_FragColor: vec4<f32>,
5};
6struct _GlobalUniforms {
7  colorGreen: vec4<f32>,
8  colorRed: vec4<f32>,
9  testInputs: vec4<f32>,
10};
11@binding(0) @group(0) var<uniform> _globalUniforms: _GlobalUniforms;
12const minus: i32 = 2;
13const star: i32 = 3;
14const slash: i32 = 4;
15fn test_bifffff22(op: i32, m11: f32, m12: f32, m21: f32, m22: f32, expected: mat2x2<f32>) -> bool {
16  {
17    let one: f32 = f32(_globalUniforms.colorRed.x);
18    var m2: mat2x2<f32> = mat2x2<f32>(m11 * one, m12 * one, m21 * one, m22 * one);
19    switch op {
20      case 1 {
21        m2 = mat2x2<f32>(1.0 + m2[0], 1.0 + m2[1]);
22        break;
23      }
24      case 2 {
25        m2 = mat2x2<f32>(m2[0] - 1.0, m2[1] - 1.0);
26        break;
27      }
28      case 3 {
29        m2 = m2 * 2.0;
30        break;
31      }
32      case 4 {
33        m2 = m2 * 0.5;
34        break;
35      }
36      case default {}
37    }
38    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);
39  }
40}
41fn divisionTest_b() -> bool {
42  {
43    let ten: f32 = f32(_globalUniforms.colorRed.x * 10.0);
44    let _skTemp0 = vec2<f32>(ten);
45    let _skTemp1 = vec2<f32>(ten);
46    var mat: mat2x2<f32> = mat2x2<f32>(_skTemp0[0], _skTemp0[1], _skTemp1[0], _skTemp1[1]);
47    let div: mat2x2<f32> = mat * (1.0 / _globalUniforms.testInputs.x);
48    mat = mat * (1.0 / _globalUniforms.testInputs.x);
49    let _skTemp2 = abs(vec4<f32>(div[0], div[1]) + vec4<f32>(8.0));
50    let _skTemp3 = all((_skTemp2 < vec4<f32>(0.01)));
51    let _skTemp4 = abs(vec4<f32>(mat[0], mat[1]) + vec4<f32>(8.0));
52    let _skTemp5 = all((_skTemp4 < vec4<f32>(0.01)));
53    return _skTemp3 && _skTemp5;
54  }
55}
56fn _skslMain(coords: vec2<f32>) -> vec4<f32> {
57  {
58    let f1: f32 = f32(_globalUniforms.colorGreen.y);
59    let f2: f32 = f32(2.0 * _globalUniforms.colorGreen.y);
60    let f3: f32 = f32(3.0 * _globalUniforms.colorGreen.y);
61    let f4: f32 = f32(4.0 * _globalUniforms.colorGreen.y);
62    let _0_expected: mat2x2<f32> = mat2x2<f32>(f1 + 1.0, f2 + 1.0, f3 + 1.0, f4 + 1.0);
63    let _1_one: f32 = f32(_globalUniforms.colorRed.x);
64    var _2_m2: mat2x2<f32> = mat2x2<f32>(f1 * _1_one, f2 * _1_one, f3 * _1_one, f4 * _1_one);
65    {
66      _2_m2 = mat2x2<f32>(1.0 + _2_m2[0], 1.0 + _2_m2[1]);
67    }
68    var _skTemp6: vec4<f32>;
69    var _skTemp7: bool;
70    var _skTemp8: bool;
71    var _skTemp9: bool;
72    var _skTemp10: bool;
73    if (((_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) {
74      let _skTemp11 = test_bifffff22(minus, f1, f2, f3, f4, mat2x2<f32>(f1 - 1.0, f2 - 1.0, f3 - 1.0, f4 - 1.0));
75      _skTemp10 = _skTemp11;
76    } else {
77      _skTemp10 = false;
78    }
79    if _skTemp10 {
80      let _skTemp12 = test_bifffff22(star, f1, f2, f3, f4, mat2x2<f32>(f1 * 2.0, f2 * 2.0, f3 * 2.0, f4 * 2.0));
81      _skTemp9 = _skTemp12;
82    } else {
83      _skTemp9 = false;
84    }
85    if _skTemp9 {
86      let _skTemp13 = test_bifffff22(slash, f1, f2, f3, f4, mat2x2<f32>(f1 * 0.5, f2 * 0.5, f3 * 0.5, f4 * 0.5));
87      _skTemp8 = _skTemp13;
88    } else {
89      _skTemp8 = false;
90    }
91    if _skTemp8 {
92      let _skTemp14 = divisionTest_b();
93      _skTemp7 = _skTemp14;
94    } else {
95      _skTemp7 = false;
96    }
97    if _skTemp7 {
98      _skTemp6 = _globalUniforms.colorGreen;
99    } else {
100      _skTemp6 = _globalUniforms.colorRed;
101    }
102    return _skTemp6;
103  }
104}
105@fragment fn main() -> FSOut {
106  var _stageOut: FSOut;
107  _stageOut.sk_FragColor = _skslMain(/*fragcoord*/ vec2<f32>());
108  return _stageOut;
109}
110