xref: /aosp_15_r20/external/skia/tests/sksl/shared/SwitchWithLoopsES3.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_while_loop_bi(x: i32) -> bool {
12  {
13    var val: i32 = 0;
14    var i: i32 = 0;
15    switch x {
16      case 1, default {
17        var _skTemp0: bool = false;
18        if x == 1 {
19          loop {
20            if i < 10 {
21              {
22                i = i + i32(1);
23                val = val + i32(1);
24                continue;
25              }
26            } else {
27              break;
28            }
29          }
30          // fallthrough
31        }
32        val = val + i32(1);
33      }
34    }
35    return val == 11;
36  }
37}
38fn while_loop_with_break_in_switch_bi(x: i32) -> bool {
39  {
40    var val: i32 = 0;
41    var i: i32 = 0;
42    loop {
43      if i < 10 {
44        {
45          i = i + i32(1);
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      } else {
58        break;
59      }
60    }
61    return val == 20;
62  }
63}
64fn switch_with_break_in_do_while_loop_bi(x: i32) -> bool {
65  {
66    var val: i32 = 0;
67    var i: i32 = 0;
68    switch x {
69      case 1, default {
70        var _skTemp1: bool = false;
71        if x == 1 {
72          loop {
73            {
74              i = i + i32(1);
75              val = val + i32(1);
76              break;
77            }
78            continuing {
79              break if i >= 10;
80            }
81          }
82          // fallthrough
83        }
84        val = val + i32(1);
85      }
86    }
87    return val == 2;
88  }
89}
90fn switch_with_continue_in_do_while_loop_bi(x: i32) -> bool {
91  {
92    var val: i32 = 0;
93    var i: i32 = 0;
94    switch x {
95      case 1, default {
96        var _skTemp2: bool = false;
97        if x == 1 {
98          loop {
99            {
100              i = i + i32(1);
101              val = val + i32(1);
102              continue;
103            }
104            continuing {
105              break if i >= 10;
106            }
107          }
108          // fallthrough
109        }
110        val = val + i32(1);
111      }
112    }
113    return val == 11;
114  }
115}
116fn do_while_loop_with_break_in_switch_bi(x: i32) -> bool {
117  {
118    var val: i32 = 0;
119    var i: i32 = 0;
120    loop {
121      {
122        i = i + i32(1);
123        switch x {
124          case 1 {
125            val = val + i32(1);
126            break;
127          }
128          case default {
129            return false;
130          }
131        }
132        val = val + i32(1);
133      }
134      continuing {
135        break if i >= 10;
136      }
137    }
138    return val == 20;
139  }
140}
141fn _skslMain(coords: vec2<f32>) -> vec4<f32> {
142  {
143    let x: i32 = i32(_globalUniforms.colorGreen.y);
144    var _0_val: i32 = 0;
145    var _1_i: i32 = 0;
146    switch x {
147      case 1, default {
148        var _skTemp3: bool = false;
149        if x == 1 {
150          loop {
151            if _1_i < 10 {
152              {
153                _1_i = _1_i + i32(1);
154                _0_val = _0_val + i32(1);
155                break;
156              }
157            } else {
158              break;
159            }
160          }
161          // fallthrough
162        }
163        _0_val = _0_val + i32(1);
164      }
165    }
166    var _skTemp4: vec4<f32>;
167    var _skTemp5: bool;
168    var _skTemp6: bool;
169    var _skTemp7: bool;
170    var _skTemp8: bool;
171    var _skTemp9: bool;
172    if _0_val == 2 {
173      let _skTemp10 = switch_with_continue_in_while_loop_bi(x);
174      _skTemp9 = _skTemp10;
175    } else {
176      _skTemp9 = false;
177    }
178    if _skTemp9 {
179      let _skTemp11 = while_loop_with_break_in_switch_bi(x);
180      _skTemp8 = _skTemp11;
181    } else {
182      _skTemp8 = false;
183    }
184    if _skTemp8 {
185      let _skTemp12 = switch_with_break_in_do_while_loop_bi(x);
186      _skTemp7 = _skTemp12;
187    } else {
188      _skTemp7 = false;
189    }
190    if _skTemp7 {
191      let _skTemp13 = switch_with_continue_in_do_while_loop_bi(x);
192      _skTemp6 = _skTemp13;
193    } else {
194      _skTemp6 = false;
195    }
196    if _skTemp6 {
197      let _skTemp14 = do_while_loop_with_break_in_switch_bi(x);
198      _skTemp5 = _skTemp14;
199    } else {
200      _skTemp5 = false;
201    }
202    if _skTemp5 {
203      _skTemp4 = _globalUniforms.colorGreen;
204    } else {
205      _skTemp4 = _globalUniforms.colorRed;
206    }
207    return _skTemp4;
208  }
209}
210@fragment fn main() -> FSOut {
211  var _stageOut: FSOut;
212  _stageOut.sk_FragColor = _skslMain(/*fragcoord*/ vec2<f32>());
213  return _stageOut;
214}
215