eac7f6b477
201: fixes crash when enumerating on some systems r=kvark a=Hugobros3 Was crashing when calling `vulkaninfo`. I did some digging: In gfxEnumeratePhysicalDevices, there is some logic for dealing with the cases where the slots allocated by the caller aren't enough to fit all the adapters the implementation has available. This logic has a flaw though, because it doesn't account for the cases where `num_output` is greater than the numbers of adapters gfx has to offer, and in that case the output is oversized wrt to the adapters we have to fit inside. This matches both sides for calling copy_from_slice in that function. Not sure why this happens, I have a proper vulkan-ready device in this computer with a "proper" driver too, which may or may not explain it ? I'm not knowledgeable enough on how the loader and everything works to make a definitive statement. This made things work on my pc so ¯\\_(ツ)_/¯ Co-authored-by: Gobrosse <hugo@xol.io> |
||
---|---|---|
bench | ||
conformance | ||
etc | ||
libportability | ||
libportability-gfx | ||
libportability-icd | ||
modules | ||
native | ||
.gitignore | ||
.gitmodules | ||
.travis.yml | ||
appveyor.yml | ||
bors.toml | ||
Cargo.lock | ||
Cargo.toml | ||
CMakeLists.txt | ||
LICENSE | ||
Makefile | ||
README.md | ||
windows.bat |
gfx-portability
This is a prototype library implementing Vulkan Portability Initiative using gfx-hal. See gfx-rs meta issue for backend limitations and further details.
Showcase
Dota2:
Quake
RPCS3:
Dolphin:
Instructions
Despite the fact it's written in Rust, the produced binaries have standard lining 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>
.