When working on GPU compute shaders, it's common to want to share snippets of configuration data between the host and the shader. Here's a toy example, adapted from fidget-wgpu : // WGSL struct Config { /// Screen-to-model transform matrix mat: mat3x3f, /// Image size, in pixels image_size: vec2u, /// Z position at which to render the image z: f32, } // Rust #[derive( zerocopy::IntoBytes, zerocopy::Immutable, zerocopy::FromBytes, zerocopy::KnownLayout )] #[repr(C)] struct Config { mat: [[f32; 3]; 3], image_size: [u32; 2], z: f32, } Thanks to the zerocopy annotations, we can call as_bytes() and write the configuration data directly into a WebGPU buffer, which is very convenient! Unfortunately, there are often subtle difference between Rust and WebGPU's layout rules. Do you know what's wrong with the above example?…