lgpu 0.1.2

Lightweight, bindless-first Vulkan 1.3 wrapper for Rust
Documentation

lgpu

A lightweight, bindless-first Vulkan 1.3 wrapper for Rust, built on ash.

Designed for desktop experiments where you want dynamic rendering and global bindless descriptor indexing without the verbosity of raw Vulkan boilerplate or the overhead of large multi-backend frameworks.

Key Features

  • Vulkan 1.3 Dynamic Rendering: Uses dynamic rendering directly—no VkRenderPass or VkFramebuffer state boilerplate.
  • Bindless Descriptor Heaps: Unbounded descriptor indexing (update_after_bind) for storage buffers, sampled textures, storage images, and samplers.
  • Fast Clean Builds: Minimal dependency footprint (ash, bitflags, thiserror, raw-window-handle), compiling in 1–2 seconds.
  • C99 FFI: Universal C API included via lgpu-c.

Quick Example

use lgpu::{BufferDesc, BufferUsage, Instance, MemoryLocation};

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let instance = Instance::new()?;
    let adapters = instance.enumerate_adapters()?;
    let (device, queue) = adapters[0].request_device(&instance)?;

    let desc = BufferDesc {
        label: Some("ComputeBuffer"),
        size: 256,
        usage: BufferUsage::STORAGE | BufferUsage::TRANSFER_SRC | BufferUsage::TRANSFER_DST,
        memory_location: MemoryLocation::CpuToGpu,
    };

    let buffer = device.create_buffer_init_slice(&desc, &[1.0f32, 2.0, 3.0, 4.0])?;
    println!("Buffer allocated with bindless ID: {:?}", buffer.id());

    Ok(())
}

For full documentation and examples, visit the GitHub Repository.