Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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.