Atomics
Demonstrates atomic types and workgroup variables. Atomic types provide thread-safe operations for concurrent access in compute shaders and may only hold i32 or u32. Workgroup variables are shared between all invocations in a workgroup.
Rust Source
#[wgsl] pub mod atomic_example { //! Demonstrates atomic types and workgroup variables. //! //! Atomic types provide thread-safe operations for concurrent access in //! compute shaders. They can only hold `i32` or `u32` values. //! //! Workgroup variables are shared between all invocations in a workgroup //! and can only be used in compute shaders. use wgsl_rs::std::*; // Workgroup variable with atomic counter - shared between all invocations workgroup!(COUNTER: Atomic<u32>); // Workgroup variable with atomic flags workgroup!(FLAGS: Atomic<i32>); #[compute] #[workgroup_size(64)] pub fn main(#[builtin(local_invocation_index)] local_idx: u32) { // Each invocation can access the shared atomic counter // Note: atomicLoad/atomicStore builtins will be added in a future update // For now, this demonstrates the type parsing and code generation let _idx = local_idx; } }
Generated WGSL
var<workgroup> COUNTER: atomic<u32>;
var<workgroup> FLAGS: atomic<i32>;
@compute @workgroup_size(64) fn main(@builtin(local_invocation_index) local_idx: u32) {
let _idx = local_idx;
}
Notes
Atomic<T>maps to WGSLatomic<T>;Tmust bei32oru32.workgroup!(NAME: T)declares avar<workgroup>variable. Workgroup variables are only valid in compute shaders.