| Crates.io | craballoc |
| lib.rs | craballoc |
| version | 0.3.1 |
| created_at | 2025-01-08 03:32:15.227064+00 |
| updated_at | 2025-09-17 21:29:08.773464+00 |
| description | Slab allocator with RAII |
| homepage | |
| repository | https://github.com/schell/crabslab |
| max_upload_size | |
| id | 1508047 |
| size | 105,090 |
craballoc is a slab allocator built on top of crabslab
that provides RAII primitives for synchronizing values across CPU and GPU code.
Opinion: working with shaders is much easier using a slab.
Shader code can be written in Rust with rust-gpu,
which will enable you to use your Rust types in CPU and GPU code, and this library helps
marshal your types to the GPU.
Using a slab makes it pretty easy to marshal data to the GPU, and craballoc does the heavy
lifting, with (almost) automatic synchronization and RAII.
The idea is simple - craballoc provides [SlabAllocator<T>], where T is the runtime of your
choice. Enabling the feature wgpu (on by default) provides a [WgpuRuntime] to fill that T.
Your local types derive the trait [SlabItem] which allows them to be written to and read
from to the slab.
You use [SlabAllocator::new_value] or [SlabAllocator::new_array] on the CPU to allocate
new values and arrays on the slab, receiving a [Hybrid<T>] or [HybridArray<T>], respectively.
To modify values, use [Hybrid::modify].
To forget the CPU side of values, use [Hybrid::into_gpu_only].
Finally, synchronize the slab once per frame (or more, or less) using [SlabAllocator::commit].
On the GPU (using a shader written with spirv-std) use
crabslab to read values in a no_std context.
See the crabslab docs for more info.