Structs
Demonstrates user-defined structs used as fragment shader inputs and outputs, mixing #[location] and #[builtin] attributes, plus #[interpolate].
Rust Source
#![allow(unused)] fn main() { #[wgsl] pub mod structs { use wgsl_rs::std::*; // Mixed builtins and user-defined inputs. pub struct MyInputs { #[location(0)] pub x: Vec4<f32>, #[builtin(front_facing)] pub y: bool, #[location(1)] #[interpolate(flat)] pub z: u32, #[location(2)] pub other: f32, } pub struct MyOutputs { #[location(0)] pub x: f32, #[location(1)] pub y: Vec4<f32>, } #[fragment] pub fn frag_shader(in1: MyInputs) -> MyOutputs { MyOutputs { x: 0.0, y: in1.x } } } }
Generated WGSL
struct MyInputs {
@location(0) x: vec4f,
@builtin(front_facing) y: bool,
@location(1) @interpolate(flat) z: u32,
@location(2) other: f32
}
struct MyOutputs {
@location(0) x: f32,
@location(1) y: vec4f
}
@fragment fn frag_shader(in1: MyInputs) -> MyOutputs {
return MyOutputs(0.0, in1.x);
}
Notes
- Struct fields may carry
#[location(...)],#[builtin(...)], and#[interpolate(...)]attributes that map directly to WGSL decorations. - Struct literals in Rust (
MyOutputs { x: 0.0, y: in1.x }) become positional constructor calls in WGSL.