xref: /aosp_15_r20/external/skia/tests/sksl/shared/SwitchWithLoops.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};
10@binding(0) @group(0) var<uniform> _globalUniforms: _GlobalUniforms;
11fn switch_with_continue_in_loop_bi(x: i32) -> bool {
12  {
13    var val: i32 = 0;
14    switch x {
15      case 1, default {
16        var _skTemp0: bool = false;
17        if x == 1 {
18          {
19            var i: i32 = 0;
20            loop {
21              {
22                val = val + i32(1);
23                continue;
24              }
25              continuing {
26                i = i + i32(1);
27                break if i >= 10;
28              }
29            }
30          }
31          // fallthrough
32        }
33        val = val + i32(1);
34      }
35    }
36    return val == 11;
37  }
38}
39fn loop_with_break_in_switch_bi(x: i32) -> bool {
40  {
41    var val: i32 = 0;
42    {
43      var i: i32 = 0;
44      loop {
45        {
46          switch x {
47            case 1 {
48              val = val + i32(1);
49              break;
50            }
51            case default {
52              return false;
53            }
54          }
55          val = val + i32(1);
56        }
57        continuing {
58          i = i + i32(1);
59          break if i >= 10;
60        }
61      }
62    }
63    return val == 20;
64  }
65}
66fn _skslMain(coords: vec2<f32>) -> vec4<f32> {
67  {
68    let x: i32 = i32(_globalUniforms.colorGreen.y);
69    var _0_val: i32 = 0;
70    switch x {
71      case 1, default {
72        var _skTemp1: bool = false;
73        if x == 1 {
74          {
75            var _1_i: i32 = 0;
76            loop {
77              {
78                _0_val = _0_val + i32(1);
79                break;
80              }
81              continuing {
82                _1_i = _1_i + i32(1);
83                break if _1_i >= 10;
84              }
85            }
86          }
87          // fallthrough
88        }
89        _0_val = _0_val + i32(1);
90      }
91    }
92    var _skTemp2: vec4<f32>;
93    var _skTemp3: bool;
94    var _skTemp4: bool;
95    if _0_val == 2 {
96      let _skTemp5 = switch_with_continue_in_loop_bi(x);
97      _skTemp4 = _skTemp5;
98    } else {
99      _skTemp4 = false;
100    }
101    if _skTemp4 {
102      let _skTemp6 = loop_with_break_in_switch_bi(x);
103      _skTemp3 = _skTemp6;
104    } else {
105      _skTemp3 = false;
106    }
107    if _skTemp3 {
108      _skTemp2 = _globalUniforms.colorGreen;
109    } else {
110      _skTemp2 = _globalUniforms.colorRed;
111    }
112    return _skTemp2;
113  }
114}
115@fragment fn main() -> FSOut {
116  var _stageOut: FSOut;
117  _stageOut.sk_FragColor = _skslMain(/*fragcoord*/ vec2<f32>());
118  return _stageOut;
119}
120