While & Loop
Demonstrates while loops and WGSL loop (infinite loop) statements. Includes continue, compound conditions, and nested loops.
while_loop_example
Rust Source
#![allow(unused)]
fn main() {
#[wgsl]
#[allow(dead_code, unused_assignments)]
pub mod while_loop_example {
use wgsl_rs::std::*;
#[fragment]
pub fn test_simple_while() -> Vec4f {
let mut i = 0;
let mut sum = 0.0;
while i < 10 {
i += 1;
// Skip even numbers using continue
if i % 2 == 0 {
continue;
}
sum += f32(i);
}
vec4f(sum / 10.0, 0.0, 0.0, 1.0)
}
#[fragment]
pub fn test_while_with_condition() -> Vec4f {
let mut value = 1.0;
let mut iterations = 0;
while value < 100.0 && iterations < 20 {
value *= 1.5;
iterations += 1;
}
vec4f(value / 100.0, f32(iterations) / 20.0, 0.0, 1.0)
}
#[fragment]
pub fn test_nested_while() -> Vec4f {
let mut i = 0;
let mut j = 0;
let mut count = 0;
while i < 5 {
j = 0;
while j < 5 {
count += 1;
j += 1;
}
i += 1;
}
vec4f(f32(count) / 25.0, 0.0, 0.0, 1.0)
}
}
}
Generated WGSL
@fragment fn test_simple_while() -> @location(0) vec4f {
var i = 0;
var sum = 0.0;
while i < 10 {
i += 1;
if i % 2 == 0 {
continue;
}
sum += f32(i);
}
return vec4f(sum / 10.0, 0.0, 0.0, 1.0);
}
@fragment fn test_while_with_condition() -> @location(0) vec4f {
var value = 1.0;
var iterations = 0;
while value < 100.0 && iterations < 20 {
value *= 1.5;
iterations += 1;
}
return vec4f(value / 100.0, f32(iterations) / 20.0, 0.0, 1.0);
}
@fragment fn test_nested_while() -> @location(0) vec4f {
var i = 0;
var j = 0;
var count = 0;
while i < 5 {
j = 0;
while j < 5 {
count += 1;
j += 1;
}
i += 1;
}
return vec4f(f32(count) / 25.0, 0.0, 0.0, 1.0);
}
loop_example
Rust Source
#![allow(unused)]
fn main() {
#[wgsl]
#[allow(dead_code, unused_assignments)]
pub mod loop_example {
//! Demonstrates WGSL loop statements (infinite loops).
//! Note: These are demonstration examples only.
use wgsl_rs::std::*;
#[fragment]
pub fn test_simple_loop() -> Vec4f {
let mut counter: u32 = 0;
let mut sum: f32 = 0.0;
loop {
sum += f32(counter);
counter += 1;
if counter >= 10 {
break;
}
}
vec4f(sum / 10.0, 0.0, 0.0, 1.0)
}
#[fragment]
pub fn test_nested_loop() -> Vec4f {
let mut i: u32 = 0;
let mut j: u32 = 0;
let mut result: f32 = 0.0;
loop {
j = 0;
loop {
result += 1.0;
j += 1;
if j >= 5 {
break;
}
}
i += 1;
if i >= 5 {
break;
}
}
vec4f(result / 25.0, 0.0, 0.0, 1.0)
}
#[fragment]
pub fn test_loop_with_operations() -> Vec4f {
let mut value: f32 = 1.0;
let mut iterations: u32 = 0;
loop {
value *= 1.5;
iterations += 1;
if value >= 100.0 || iterations >= 20 {
break;
}
}
vec4f(value / 100.0, f32(iterations) / 20.0, 0.0, 1.0)
}
}
}
Generated WGSL
@fragment fn test_simple_loop() -> @location(0) vec4f {
var counter: u32 = 0;
var sum: f32 = 0.0;
loop {
sum += f32(counter);
counter += 1;
if counter >= 10 {
break;
}
}
return vec4f(sum / 10.0, 0.0, 0.0, 1.0);
}
@fragment fn test_nested_loop() -> @location(0) vec4f {
var i: u32 = 0;
var j: u32 = 0;
var result: f32 = 0.0;
loop {
j = 0;
loop {
result += 1.0;
j += 1;
if j >= 5 {
break;
}
}
i += 1;
if i >= 5 {
break;
}
}
return vec4f(result / 25.0, 0.0, 0.0, 1.0);
}
@fragment fn test_loop_with_operations() -> @location(0) vec4f {
var value: f32 = 1.0;
var iterations: u32 = 0;
loop {
value *= 1.5;
iterations += 1;
if value >= 100.0 || iterations >= 20 {
break;
}
}
return vec4f(value / 100.0, f32(iterations) / 20.0, 0.0, 1.0);
}
Notes
- Rust
whilemaps directly to WGSLwhile. - Rust
loop { ... }maps to WGSLloop { ... }(infinite loop with explicitbreak). - Compound conditions and nested loops are supported.