Log in to h4cker, then connect Hacker News to publish comments.
FLflohofwoeil y a 9 heures
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.
GEgenxyil y a 7 heures
> 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/
SCscoopril y a 6 heures
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.
BRbrinepotil y a 9 heures
Spent too much time debugging alignment issues with Vulkan buffers. WebGPU having good tools like Facet from the start is a huge win.
JAjauntywundrkindil y a 9 heures
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.
Comments
5 preview comments · loading full threadLog in to h4cker, then connect Hacker News to publish comments.
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.
> 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/
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.
Spent too much time debugging alignment issues with Vulkan buffers. WebGPU having good tools like Facet from the start is a huge win.
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.