#vulkan #graphics #gpgpu #gpu #api-bindings

voodoo

An intuitive, idiomatic, unopinionated, zero-overhead Vulkan API

8 unstable releases (3 breaking)

Uses old Rust 2015

0.3.1 Mar 12, 2018
0.3.0 Jan 24, 2018
0.2.1 Oct 16, 2017
0.1.2 Oct 14, 2017
0.0.1 Sep 17, 2017

#473 in Graphics APIs


Used in 2 crates (via voodoo_winit)

MIT/Apache

1.5MB
36K SLoC

Voodoo - A high-performance Vulkan® API for Rust

Documentation | Change Log

Supported platforms

Features:

  • An intuitive and idiomatic interface
  • Zero additional overhead
    • No unnecessary allocations
    • No intermediate structs or extra copying
    • Builders compile to direct assignment
  • Thread-safe allocation / destruction
    • Safety escape hatches available everywhere
  • A minimum of boilerplate
  • Non-opinionated and nothing hidden
  • Complete API coverage

Getting Started

Ensure that Vulkan drivers are installed for your device. Add the following to your project's Cargo.toml:

[dependencies]
voodoo = "0.3.1"

And add the following to your crate root (lib.rs or main.rs):

extern crate voodoo;

Example

Create an instance:

extern crate voodoo;

use voodoo::{Result as VdResult, Instance, ApplicationInfo, Loader};
use std::ffi::CString;

/// Initializes and returns a new loader and instance with all available
/// extension function pointers loaded.
fn init_instance() -> VdResult<Instance> {
    let app_name = CString::new("Hello!")?;

    let app_info = ApplicationInfo::builder()
        .application_name(&app_name)
        .application_version((1, 0, 0))
        .api_version((1, 0, 0))
        .build();

    let loader = Loader::new()?;

    Instance::builder()
        .application_info(&app_info)
        .enabled_extensions(&loader.enumerate_instance_extension_properties()?)
        .build(loader)
}

fn main() {
    let _instance = init_instance().unwrap();
}

See hello.rs for a complete, working example adapted from https://vulkan-tutorial.com/.

hello.rs screenshot:

hello_example_screenshot.jpg

Status

  • API coverage:
    • Core: 100%
    • Extensions: 70%
  • Documentation: 30%
  • Stability: 97%

Other Vulkan libraries in Rust

For a higher level, more opinionated, easier to use Vulkan API that does more for you see the Vulkano project.

Other low-ish level Rust libraries include dacite and ash. See vks for a direct ffi interface.


*“Vulkan and the Vulkan logo are registered trademarks of the Khronos Group Inc.”*

Dependencies

~3.5MB
~61K SLoC