encase 0.7.0

Provides a mechanism to lay out data into GPU buffers ensuring WGSL's memory layout requirements are met
Documentation
use encase::ShaderType;

#[derive(ShaderType)]
struct S {
    x: f32,
}

#[derive(ShaderType)]
struct WrappedF32 {
    #[size(16)]
    elem: f32,
}

#[test]
#[should_panic]
fn test_struct() {
    #[derive(ShaderType)]
    struct TestStruct {
        a: u32,
        b: S,
    }

    TestStruct::assert_uniform_compat()
}

#[test]
#[should_panic]
fn test_array() {
    #[derive(ShaderType)]
    struct TestArray {
        a: u32,
        b: [WrappedF32; 1],
    }

    TestArray::assert_uniform_compat()
}

#[test]
#[should_panic]
fn test_struct_first() {
    #[derive(ShaderType)]
    struct TestStructFirst {
        a: S,
        b: f32,
    }

    TestStructFirst::assert_uniform_compat()
}

#[test]
#[should_panic]
fn test_array_stride() {
    #[derive(ShaderType)]
    struct TestArrayStride {
        a: [u32; 8],
    }

    TestArrayStride::assert_uniform_compat()
}

#[test]
#[should_panic]
fn test_rts_array() {
    #[derive(ShaderType)]
    struct TestRTSArray {
        #[size(runtime)]
        a: Vec<f32>,
    }

    TestRTSArray::assert_uniform_compat()
}