Go to file
2023-10-20 11:00:48 +11:00
.github/workflows Update gfx, implement support for ImageView Info struct 2021-05-09 00:43:12 -04:00
bench Add new benchmarks, fix benching command line 2018-07-27 11:48:32 -04:00
conformance Conformance testing makefile command 2018-04-02 21:58:48 -04:00
etc vkQuake3 screenshot 2019-03-26 23:59:36 -04:00
headers/vulkan Remove vulkan HPP 2020-09-28 23:13:38 -04:00
libportability Update gfx and unlock GL backend on *nix 2020-12-01 01:18:27 -05:00
libportability-gfx deps from crates.io 2023-10-20 11:00:48 +11:00
libportability-icd Update gfx and unlock GL backend on *nix 2020-12-01 01:18:27 -05:00
native Update gfx with swapchain readback support 2020-10-28 23:32:39 -04:00
.gitignore Gfx dependency update 2020-09-28 23:13:38 -04:00
.monocodus Add monocodus config to disable clang-tidy 2020-09-19 20:54:28 -04:00
bors.toml Allow UWP build fail on CI, temporarily 2020-10-28 23:36:42 -04:00
Cargo.lock deps from crates.io 2023-10-20 11:00:48 +11:00
Cargo.toml deps from crates.io 2023-10-20 11:00:48 +11:00
CMakeLists.txt Update to latest gfx master 2018-01-02 00:47:47 +01:00
LICENSE Initial commit 2017-09-06 21:53:52 -04:00
Makefile Update gfx with swapchain readback support 2020-10-28 23:32:39 -04:00
README.md Update README.md 2021-06-27 15:41:10 +08:00
windows.bat gfx-hal update with swapchain ranges 2019-08-02 22:23:34 -04:00

gfx-portability

Build Status Matrix

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

Platform support:

  • macOS/Metal (lib, icd)
  • iOS/Metal (lib, icd)
  • Windows/DX12 (lib, icd)
  • UWP/DX12 (lib)

For those interested in performance, we did a comprehensive benchmarks of Dota2 and Dolphin Emulator on macOS. Results were published to gfx-rs blog here and there.

For the extension support, see INSTANCE_EXTENSIONS and DEVICE_EXTENSIONS in the code.

Showcase

Dota2:

Dota2

Quake

VkQuake VkQuake3

RPCS3:

RPCS3-cube RPCS3-scogger

Dolphin:

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

Instructions

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.

Dynamic linking

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>

ICD provider

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:

VK_ICD_FILENAMES=portability/libportability-icd/portability-macos-debug.json <some_vulkan_app>

Static linking

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 libportability-gfx.

Running Samples

LunarG (API-Samples)

After building portability as shown above, grab a copy from https://github.com/LunarG/VulkanSamples. 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>.