A Vulkan Portability implementation enabling Vulkan applications to run on non-Vulkan platforms like macOS/Metal, iOS/Metal, and Windows/DX12.
gfx-portability is an open-source implementation of the Vulkan Portability Initiative that allows Vulkan applications to run on platforms lacking native Vulkan support. It translates Vulkan calls to other graphics APIs like Metal on macOS/iOS and DirectX 12 on Windows, solving the problem of Vulkan's limited platform availability.
Graphics developers and engineers working on Vulkan applications who need to deploy them on macOS, iOS, or Windows systems without native Vulkan drivers.
Developers choose gfx-portability because it provides a practical, performance-tested solution for Vulkan portability without requiring major application changes, leveraging the gfx-hal abstraction layer for reliable cross-platform graphics support.
Vulkan Portability Implementation
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Enables Vulkan applications to run on macOS, iOS, and Windows via Metal and DirectX 12 backends, solving Vulkan's limited platform availability as outlined in the platform support list.
Benchmarked with real applications like Dota2 and Dolphin Emulator, with results published on the gfx-rs blog, demonstrating practical usability and performance.
Supports dynamic linking, ICD provider usage with Vulkan loader, and static linking, providing multiple ways to integrate as detailed in the instructions section.
Produces binaries with a standard linking interface compatible with any programming language, allowing use in diverse projects without language restrictions.
Admitted as a prototype library in the README, meaning it may have bugs, incomplete features, and lack the polish and reliability expected for production use.
Requires manual steps like creating symbolic links, building with specific features (e.g., --features <vulkan|dx12|metal>), and setting environment variables, which can be error-prone and time-consuming.
Extension support is defined in code constants (INSTANCE_EXTENSIONS and DEVICE_EXTENSIONS), indicating not all Vulkan extensions are implemented, potentially breaking compatibility with some applications.