xref: /aosp_15_r20/external/skia/tests/sksl/runtime/LoopInt.wgsl (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1diagnostic(off, derivative_uniformity);
2diagnostic(off, chromium.unreachable_code);
3struct _GlobalUniforms {
4  colorRed: vec4<f32>,
5  colorGreen: vec4<f32>,
6};
7@binding(0) @group(0) var<uniform> _globalUniforms: _GlobalUniforms;
8const kZero: i32 = 0;
9fn return_loop_ii(five: i32) -> i32 {
10  {
11    {
12      var i: i32 = kZero;
13      loop {
14        {
15          if i == five {
16            {
17              return i;
18            }
19          }
20        }
21        continuing {
22          i = i + i32(1);
23          break if i >= 10;
24        }
25      }
26    }
27    return 0;
28  }
29}
30const kTen: i32 = 10;
31fn continue_loop_ii(five: i32) -> i32 {
32  {
33    var sum: i32 = 0;
34    {
35      var i: i32 = 0;
36      loop {
37        {
38          if i < five {
39            {
40              continue;
41            }
42          }
43          sum = sum + i;
44        }
45        continuing {
46          i = i + i32(1);
47          break if i >= kTen;
48        }
49      }
50    }
51    return sum;
52  }
53}
54fn break_loop_ii(five: i32) -> i32 {
55  {
56    var sum: i32 = 0;
57    const kOne: i32 = 1;
58    {
59      var i: i32 = 0;
60      loop {
61        {
62          if i > five {
63            {
64              break;
65            }
66          }
67          sum = sum + i;
68        }
69        continuing {
70          i = i + kOne;
71          break if i >= 10;
72        }
73      }
74    }
75    return sum;
76  }
77}
78fn loop_operator_le_b() -> bool {
79  {
80    var result: vec4<i32> = vec4<i32>(8);
81    {
82      var i: i32 = 0;
83      loop {
84        {
85          result = result + vec4<i32>(1);
86        }
87        continuing {
88          i = i + i32(1);
89          break if i > 0;
90        }
91      }
92    }
93    {
94      var i: i32 = 1;
95      loop {
96        {
97          result = vec4<i32>(result.yzw, i);
98        }
99        continuing {
100          i = i + i32(1);
101          break if i > 3;
102        }
103      }
104    }
105    return all(result == vec4<i32>(9, 1, 2, 3));
106  }
107}
108fn loop_operator_lt_b() -> bool {
109  {
110    var result: vec4<i32> = vec4<i32>(8);
111    {
112      var i: i32 = 0;
113      loop {
114        {
115          result = result + vec4<i32>(1);
116        }
117        continuing {
118          i = i + i32(1);
119          break if i >= 1;
120        }
121      }
122    }
123    {
124      var i: i32 = 1;
125      loop {
126        {
127          result = vec4<i32>(result.yzw, i);
128        }
129        continuing {
130          i = i + i32(1);
131          break if i >= 4;
132        }
133      }
134    }
135    return all(result == vec4<i32>(9, 1, 2, 3));
136  }
137}
138fn loop_operator_ge_b() -> bool {
139  {
140    var result: vec4<i32> = vec4<i32>(8);
141    {
142      var i: i32 = 0;
143      loop {
144        {
145          result = result + vec4<i32>(1);
146        }
147        continuing {
148          i = i - i32(1);
149          break if i < 0;
150        }
151      }
152    }
153    {
154      var i: i32 = 3;
155      loop {
156        {
157          result = vec4<i32>(result.yzw, i);
158        }
159        continuing {
160          i = i - i32(1);
161          break if i < 1;
162        }
163      }
164    }
165    return all(result == vec4<i32>(9, 3, 2, 1));
166  }
167}
168fn loop_operator_gt_b() -> bool {
169  {
170    var result: vec4<i32> = vec4<i32>(8);
171    {
172      var i: i32 = 1;
173      loop {
174        {
175          result = result + vec4<i32>(1);
176        }
177        continuing {
178          i = i - i32(1);
179          break if i <= 0;
180        }
181      }
182    }
183    {
184      var i: i32 = 3;
185      loop {
186        {
187          result = vec4<i32>(result.yzw, i);
188        }
189        continuing {
190          i = i - i32(1);
191          break if i <= 0;
192        }
193      }
194    }
195    return all(result == vec4<i32>(9, 3, 2, 1));
196  }
197}
198fn loop_operator_ne_b() -> bool {
199  {
200    var result: vec4<i32> = vec4<i32>(8);
201    {
202      var i: i32 = 1;
203      loop {
204        {
205          result = result + vec4<i32>(1);
206        }
207        continuing {
208          i = i + i32(1);
209          break if i == 2;
210        }
211      }
212    }
213    {
214      var i: i32 = 1;
215      loop {
216        {
217          result = vec4<i32>(result.yzw, i);
218        }
219        continuing {
220          i = i + i32(1);
221          break if i == 4;
222        }
223      }
224    }
225    return all(result == vec4<i32>(9, 1, 2, 3));
226  }
227}
228fn loop_operator_eq_b() -> bool {
229  {
230    var result: vec4<i32> = vec4<i32>(9);
231    {
232      var i: i32 = 1;
233      loop {
234        {
235          result = vec4<i32>(result.yzw, i);
236        }
237        continuing {
238          i = i + i32(1);
239          break if i != 1;
240        }
241      }
242    }
243    return all(result == vec4<i32>(9, 9, 9, 1));
244  }
245}
246fn _skslMain(pos: vec2<f32>) -> vec4<f32> {
247  {
248    let _skTemp0 = clamp(pos.x, f32(_globalUniforms.colorGreen.y), f32(_globalUniforms.colorGreen.w));
249    let five: i32 = i32(_skTemp0) * 5;
250    var _skTemp1: vec4<f32>;
251    var _skTemp2: bool;
252    var _skTemp3: bool;
253    var _skTemp4: bool;
254    var _skTemp5: bool;
255    var _skTemp6: bool;
256    var _skTemp7: bool;
257    var _skTemp8: bool;
258    var _skTemp9: bool;
259    let _skTemp10 = return_loop_ii(five);
260    if _skTemp10 == 5 {
261      let _skTemp11 = continue_loop_ii(five);
262      _skTemp9 = (_skTemp11 == 35);
263    } else {
264      _skTemp9 = false;
265    }
266    if _skTemp9 {
267      let _skTemp12 = break_loop_ii(5);
268      _skTemp8 = (_skTemp12 == 15);
269    } else {
270      _skTemp8 = false;
271    }
272    if _skTemp8 {
273      let _skTemp13 = loop_operator_le_b();
274      _skTemp7 = _skTemp13;
275    } else {
276      _skTemp7 = false;
277    }
278    if _skTemp7 {
279      let _skTemp14 = loop_operator_lt_b();
280      _skTemp6 = _skTemp14;
281    } else {
282      _skTemp6 = false;
283    }
284    if _skTemp6 {
285      let _skTemp15 = loop_operator_ge_b();
286      _skTemp5 = _skTemp15;
287    } else {
288      _skTemp5 = false;
289    }
290    if _skTemp5 {
291      let _skTemp16 = loop_operator_gt_b();
292      _skTemp4 = _skTemp16;
293    } else {
294      _skTemp4 = false;
295    }
296    if _skTemp4 {
297      let _skTemp17 = loop_operator_eq_b();
298      _skTemp3 = _skTemp17;
299    } else {
300      _skTemp3 = false;
301    }
302    if _skTemp3 {
303      let _skTemp18 = loop_operator_ne_b();
304      _skTemp2 = _skTemp18;
305    } else {
306      _skTemp2 = false;
307    }
308    if _skTemp2 {
309      _skTemp1 = _globalUniforms.colorGreen;
310    } else {
311      _skTemp1 = _globalUniforms.colorRed;
312    }
313    return _skTemp1;
314  }
315}
316@fragment fn main(@location(0) _coords: vec2<f32>) -> @location(0) vec4<f32> {
317  return _skslMain(_coords);
318}
319