# HBM
HBM is a hardware buffer allocator.
`hbm` crate provides a Rust library to allocate, export/import, and access
hardware buffers.
`hbm-minigbm` crate provides an unstable C API for
[minigbm](https://chromium.googlesource.com/chromiumos/platform/minigbm/)'s
internal use.
`hbm-gralloc` crate will (it is currently empty) provide a HAL service for
[Graphics
Allocator](https://android.googlesource.com/platform/hardware/interfaces/+/refs/heads/main/graphics/allocator/aidl/)
interface and an SP-HAL for [Graphics
Mapper](https://android.googlesource.com/platform/hardware/interfaces/+/refs/heads/main/graphics/mapper/stable-c)
interface on Android. It is mainly built via the Android build system rather
than via cargo.
## TODOs
- multi-backend
- e.g., drm-kms adds alignment and modifier constraints, vulkan decides
the layout, dma-heap allocates dma-buf, and vulkan again maps/copies
- more backends, such as vaapi, v4l2, libcamera, etc.
- policy backend
- collect constraints and generate a policy offline
- load constraints from the policy at runtime
- this is useful when sandboxed or for non-queryable constraints
- require modifiers
- `no_std`
- `hbm-gralloc`
- aidl codegen
- implement allocator and mapper