VKD3D-Proton
D3D12 on Metal.
A reproducible D3D12-on-Metal runtime for Apple silicon. VKD3D-Proton translates D3D12 into Vulkan, and MetalSharp's MoltenVK turns it into Metal, with Apple's Metal Shader Converter compiling shaders straight to Metal libraries. MetalSharp 1.0.0 uses it on both builds.
- D3D12 application
- VKD3D-Proton
- Vulkan
- MetalSharp MoltenVK
- Metal
D3D12, through Vulkan, onto Metal.
VKD3D-Proton macOS is a reproducible D3D12-on-Metal runtime for Apple silicon. VKD3D-Proton translates D3D12 into Vulkan, and MetalSharp's own build of MoltenVK turns that Vulkan into Metal. The project's changes to VKD3D-Proton, MoltenVK, SPIRV-Cross, and DXVK live as patches on the upstream projects.
Each release has a package for x86_64 Wine, one for arm64 Wine with FEX, and a universal MoltenVK, with install scripts for both kinds of Wine.
Capabilities
Measured on an Apple M4 (macOS 27.2) through VKD3D-Proton and this MoltenVK:
- SM 6.8Shader Model 6.8.
- FL 12_1Feature levels 12_1, 12_0, 11_1, and 11_0 by default.
- FL 12_2With MoltenVK's ray tracing pipelines turned on.
- DXR 1.1Ray tracing tier 1.1, with that same setting.
- Variable-rate shading tier 2 (16-pixel shading-rate tiles)
- Mesh shader tier 1, sampler feedback tier 0.9
- Tiled resources tier 4, conservative rasterization tier 3, resource binding tier 3
- ROVs, depth bounds, barycentrics, fully typed format casting, copy-queue timestamps, and output-merger logic operations
On both builds.
x86_64 build
The VKD3D route: D3D12 through VKD3D-Proton, and D3D11, D3D10, and D3D9 through DXVK, then MoltenVK to Metal.
Arm64 FEX build
The VKD3D-Proton lane for D3D12, built as ARM64X inside MetalSharp Wine. Games that use D3DMetal on the x86_64 build run here.
Settings has a ray tracing switch (DXR 1.1, feature level 12_2), and each game has a Metal HUD and a frame rate limit. The lane's caches show their size and clear on their own.
Compiled straight to Metal.
MoltenVK loads Apple's Metal Shader Converter at run time and uses it to turn the DXIL shaders VKD3D-Proton hands it into Metal libraries directly: compute shaders, and the vertex and pixel shaders of graphics pipelines.
- 1–4 msPer large shader through the converter.
- 0.4–1.7 sPer large shader the old way: DXIL → SPIR-V → MSL text, compiled by Metal at run time.
If the library is missing or a conversion fails, VKD3D-Proton builds that pipeline from SPIR-V as before. METALSHARP_MSC=0 turns the converter off. The library ships unmodified with Apple's license in the MoltenVK package; the README explains the terms.
Install it into any prefix.
MetalSharp installs VKD3D-Proton for you. To add it to another Wine prefix, download a VKD3D-Proton package and the MoltenVK package from the latest release, extract them side by side, and run the package's installer on the prefix:
tar -xf vkd3d-proton-<tag>-x86_64.tar.zst # or -arm64 for an arm64 Wine with FEX
tar -xf moltenvk-<tag>-universal.tar.zst
./vkd3d-proton-<tag>-x86_64/install-x86_64-wine.sh --prefix ~/my-prefix --wine /path/to/wine
~/my-prefix/vkd3d-proton-macos/wine game.exeInstalling into a Wine prefix covers both packages, the options, running programs, and uninstalling. Don't mix d3d12.dll and d3d12core.dll from different builds.
Source and docs.
- Release 4.5: the x86_64 and arm64 VKD3D-Proton packages and the universal MoltenVK.
- Feature-level matrix and validation and regression.
- Tracing a problem with
METALSHARP_TRACE. - Requirements and development and Make targets, to build from source.
- License: this repository is AGPL-3.0. VKD3D-Proton is LGPL-2.1, DXVK is zlib, and MoltenVK and SPIRV-Cross are Apache-2.0.