craballoc

Crates.iocraballoc
lib.rscraballoc
version0.2.3
created_at2025-01-08 03:32:15.227064+00
updated_at2025-08-24 22:38:56.61618+00
descriptionSlab allocator with RAII
homepage
repositoryhttps://github.com/schell/crabslab
max_upload_size
id1508047
size103,410
Schell Carl Scivally (schell)

documentation

README

slabcraft for crabs

What

craballoc is a slab allocator built on top of crabslab that provides RAII primitives for synchronizing values across CPU and GPU code.

But Why?

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.

And How

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.

Commit count: 76

cargo fmt