xref: /aosp_15_r20/external/skia/tests/sksl/shared/MatrixIndexLookup.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  testMatrix3x3: mat3x3<f32>,
10  testMatrix4x4: mat4x4<f32>,
11};
12@binding(0) @group(0) var<uniform> _globalUniforms: _GlobalUniforms;
13fn test3x3_b() -> bool {
14  {
15    let matrix: mat3x3<f32> = _globalUniforms.testMatrix3x3;
16    var expected: vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
17    {
18      var index: i32 = 0;
19      loop {
20        {
21          if any(matrix[index] != expected) {
22            {
23              return false;
24            }
25          }
26          expected = expected + 3.0;
27        }
28        continuing {
29          index = index + i32(1);
30          break if index >= 3;
31        }
32      }
33    }
34    return true;
35  }
36}
37fn test4x4_b() -> bool {
38  {
39    let matrix: mat4x4<f32> = _globalUniforms.testMatrix4x4;
40    var expected: vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
41    {
42      var index: i32 = 0;
43      loop {
44        {
45          if any(matrix[index] != expected) {
46            {
47              return false;
48            }
49          }
50          expected = expected + 4.0;
51        }
52        continuing {
53          index = index + i32(1);
54          break if index >= 4;
55        }
56      }
57    }
58    return true;
59  }
60}
61fn _skslMain(coords: vec2<f32>) -> vec4<f32> {
62  {
63    var _skTemp0: vec4<f32>;
64    var _skTemp1: bool;
65    let _skTemp2 = test3x3_b();
66    if _skTemp2 {
67      let _skTemp3 = test4x4_b();
68      _skTemp1 = _skTemp3;
69    } else {
70      _skTemp1 = false;
71    }
72    if _skTemp1 {
73      _skTemp0 = _globalUniforms.colorGreen;
74    } else {
75      _skTemp0 = _globalUniforms.colorRed;
76    }
77    return _skTemp0;
78  }
79}
80@fragment fn main() -> FSOut {
81  var _stageOut: FSOut;
82  _stageOut.sk_FragColor = _skslMain(/*fragcoord*/ vec2<f32>());
83  return _stageOut;
84}
85