- macOS/Metal (lib, icd)
- iOS/Metal (lib, icd)
- Windows/DX12 (lib, icd)
- UWP/DX12 (lib)
For the extension support, see
DEVICE_EXTENSIONS in the code.
Despite the fact it's written in Rust, the produced binaries have standard linking interface compatible with any program (written in the language of your choice). There are multiple ways to link to gfx-portability.
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 https://github.com/gfx-rs/portability && cd portability cargo build --manifest-path libportability/Cargo.toml --features <vulkan|dx12|metal>
gfx-portability can be used with Vulkan loader like any other Vulkan driver. In order to use it this way, you need to build
libportability-icd and point to it from an ICD json file:
For C, you'd need to add
crate-type = ["cdylib"] to
libportability-gfx/Cargo.toml and build it with the backend of your choice. Note: features of this library are fully-qualified crate names, e.g.
features gfx-backend-metal. For rust, just point the cargo dependency to
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>.