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