Packing
Demonstrates WGSL data packing and unpacking builtin functions, which convert between vector types and packed u32 representations. Useful for vertex attribute compression and storage optimization.
Rust Source
#![allow(unused)]
fn main() {
#[wgsl]
pub mod packing_example {
//! Demonstrates WGSL data packing and unpacking builtin functions.
//!
//! These functions convert between vector types and packed `u32`
//! representations, useful for vertex attribute compression and storage
//! optimization.
use wgsl_rs::std::*;
pub fn demo_pack4x8snorm(v: Vec4f) -> u32 {
pack4x8snorm(v)
}
pub fn demo_unpack4x8snorm(e: u32) -> Vec4f {
unpack4x8snorm(e)
}
pub fn demo_pack4x8unorm(v: Vec4f) -> u32 {
pack4x8unorm(v)
}
pub fn demo_unpack4x8unorm(e: u32) -> Vec4f {
unpack4x8unorm(e)
}
pub fn demo_pack2x16snorm(v: Vec2f) -> u32 {
pack2x16snorm(v)
}
pub fn demo_unpack2x16snorm(e: u32) -> Vec2f {
unpack2x16snorm(e)
}
pub fn demo_pack2x16unorm(v: Vec2f) -> u32 {
pack2x16unorm(v)
}
pub fn demo_unpack2x16unorm(e: u32) -> Vec2f {
unpack2x16unorm(e)
}
pub fn demo_pack2x16float(v: Vec2f) -> u32 {
pack2x16float(v)
}
pub fn demo_unpack2x16float(e: u32) -> Vec2f {
unpack2x16float(e)
}
}
}
Generated WGSL
fn demo_pack4x8snorm(v: vec4f) -> u32 {
return pack4x8snorm(v);
}
fn demo_unpack4x8snorm(e: u32) -> vec4f {
return unpack4x8snorm(e);
}
fn demo_pack4x8unorm(v: vec4f) -> u32 {
return pack4x8unorm(v);
}
fn demo_unpack4x8unorm(e: u32) -> vec4f {
return unpack4x8unorm(e);
}
fn demo_pack2x16snorm(v: vec2f) -> u32 {
return pack2x16snorm(v);
}
fn demo_unpack2x16snorm(e: u32) -> vec2f {
return unpack2x16snorm(e);
}
fn demo_pack2x16unorm(v: vec2f) -> u32 {
return pack2x16unorm(v);
}
fn demo_unpack2x16unorm(e: u32) -> vec2f {
return unpack2x16unorm(e);
}
fn demo_pack2x16float(v: vec2f) -> u32 {
return pack2x16float(v);
}
fn demo_unpack2x16float(e: u32) -> vec2f {
return unpack2x16float(e);
}
Notes
- The Rust snake_case names (
pack4x8snorm, etc.) map directly to the WGSL builtin names.