Vulkan Portability Implementation
Clone or download
bors[bot] and kvark Merge #173
173: Dependencies update, all-around unsafe qualifiers r=grovesNL a=kvark

The big update to hal-0.1 and beyond.
I'm not sure that trying to minimize the `unsafe` spots was the right decision... perhaps it's easier to just mark all of gfxXxx methods unsafe, but I'm too tired now to rewrite it again.

Co-authored-by: Dzmitry Malyshau <>
Latest commit f1e1924 Jan 12, 2019


Build Status Gitter

This is a prototype library implementing Vulkan Portability Initiative using gfx-hal. See gfx-rs meta issue for backend limitations and further details.







RPCS3-cube RPCS3-scogger


Dolphin-sb Dolphin-pm Dolphin-mk Dolphin-md


Despite the fact it's written in Rust, the produced binary is a standard dynamic library that can be linked to from any program (written in the language of your choice). Typically, you'd need to create a symbolic link with a name that a target application expects, e.g. libvulkan.dylib -> libportability.dylib.

Check out and build:

git clone --recursive && cd portability
cargo build --manifest-path libportability/Cargo.toml --features <vulkan|dx12|metal>

Running Samples

LunarG (API-Samples)

After building portability as shown above, grab a copy from Manually override the VULKAN_LOADER variable and set it to the portability library.

set (VULKAN_LOADER "path/to/portability/library")

Then proceed with the normal build instructions.

Vulkan CTS coverage

Please visit our wiki for CTS hookup instructions. Once everything is set, you can generate the new results by calling make cts on Unix systems. When investigating a particular failure, it's handy to do make cts debug=<test_name>, which runs a single test under system debugger (gdb/lldb). For simply inspecting the log output, one can also do make cts pick=<test_name>.