mattkeeter.com

Testing WebGPU data layouts with Facet

luu · 81 points · 6 comments · ieri · Open original

Comments

5 preview comments · loading full thread
flohofwoe8 ore fa

FWIW, there's a WebGPU extension which 'harmonizes' uniform buffer struct layout with other address spaces, but currently it's only implemented in Chromium-based browsers: Ticket: https://github.com/gpuweb/gpuweb/issues/4973 Caniuse: https://caniuse.com/?search=uniform_buffer_standard_layout The std140-style layout restrictions are basically a leftover when GPUs used vec4 "register tables" for uniform data.

genxy6 ore fa

> facet is a library for Rust which provides run-time reflection. By annotating your struct with #[derive(facet::Facet)], you get a SHAPE associated type which can be inspected at runtime. https://github.com/facet-rs/facet > The core crates give types a SHAPE associated constant with their kind, layout, fields, documentation, attributes, and type-specific operations. facet-reflect builds, reads, and mutates values through those shapes while preserving their invariants. > Serialization and integration crates build on that reflection layer: JSON, TOML, YAML, MessagePack, Postcard, ASN.1, XDR, CSV, XML, URL-encoded forms, SQLite, Axum, schema generation, structural diffing, and more. Side by side comparison with SERDE https://facet.rs/guide/serde/

scoopr5 ore fa

Nice, always good to have some extra checking. While most of the time you want the memcpy semantics, but I wonder if naga could be used to compute a facet SHAPE from the shader. Maybe it could be used to "serialise" the cpu format to gpu format, without them needing to be padding/repr-compatible (or even field-reorder-compatible!). Another option of course would be to parse the struct with naga and just always generate the rust counterpart, then it should always be compatible and up-to-date, but then you have codegen in your build step.

brinepot9 ore fa

Spent too much time debugging alignment issues with Vulkan buffers. WebGPU having good tools like Facet from the start is a huge win.

jauntywundrkind8 ore fa

This is so good. And it's so absurd how programming languages so frequently treat types as a compile time check. Still. After so so long. It's great having tools like Facet around to add runtime type information in. I wish TypeScript was seeing progress but there's seemingly no progress or traction in 5 years+, just some early experiments which died out.