Just as a pre disclaimer MacOS is not a officially supported platform.
MoltenVK, which is probably what you are using for Vulkan, does not support Vulkan 1.3 yet which is what is needed for dxvk 2.0 and above. The latest version that supports Vulkan versions below that is 1.10.3
thank you
@Blisto91 MoltenVK currently supports Vulkan 1.4. Would it be possible to use this to run DirectX 9 software on macos?
@g-30 Last time I tried it, MoltenVK crashed because of the way we set up descriptor sets in the shader.
Maybe it does work now using the argument buffer option in MoltenVK but you'd still have to patch out the geometry shader usage.
I have a super cursed forked version that makes it work but it's pretty much a waste of time. Rosetta is too slow at dealing with x87 instructions.
Anyway, here's the cursed branch: https://github.com/K0bin/dxvk/tree/moltenvk-version
it's pretty much a waste of time. Rosetta is too slow at dealing with x87 instructions.
Hi, x87 performance issues are fixed now thanks to jit recompiler for x87 instructions, which emits native arm code instead. So, performance is native alike.
Old 32bit D3D9 games work flawlessly now with excellent performance: 100+ fps.
Anyway, here's the cursed branch: https://github.com/K0bin/dxvk/tree/moltenvk-version
Any plans to update it taking in account recent x87 performance fixes and MVK updates which bring VK 1.4?
Thanks!
Any plans to update it taking in account recent x87 performance fixes and MVK updates which bring VK 1.4?
x87 has nothing to do with DXVK. Maybe I'll make a new branch at some point based on DXVK 2.x.
x87 has nothing to do with DXVK. Maybe I'll make a new branch at some point based on DXVK 2.x.
Yes, I mean because of x87 performance being fixed and recent updates to MVK it’s time to bring DXVK 2.x+ to macOS to have full range D3D support: D3D8-D3D11 :D
iirc DXVK 2.x+ has a lot of changes to eliminate/minimize stuttering during shader compilation, so it can be useful for macOS users.
iirc DXVK 2.x+ has a lot of changes to eliminate/minimize stuttering during shader compilation, so it can be useful for macOS users.
Yes, but those require VK_EXT_graphics_pipeline_libraries and Metal has no feature like that. Maybe something similar could be implemented in Metal by compiling the entire shader into a dynamic library but nobody has implemented that.
Anyway, here's the cursed branch: https://github.com/K0bin/dxvk/tree/moltenvk-version
Does it have async shader compilation?
I use a fork for macOS from Gcenx https://github.com/Gcenx/DXVK-macOS/tree/macOS and see some race? condition in it: video output hangs when Vsync is off. Log output is constantly spammed with addPresentedHandler cannot be called after drawable has been presented:
2026-04-23 19:22:08.252 wineloader[58670:531407] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:08.252 wineloader[58670:531407] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:08.254 wineloader[58670:531407] Each CAMetalLayerDrawable can only be presented once!
2026-04-23 19:22:08.255 wineloader[58670:531590] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:08.255 wineloader[58670:531590] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:08.364 wineloader[58670:531409] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:08.364 wineloader[58670:531409] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:08.396 wineloader[58670:531591] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:08.396 wineloader[58670:531591] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:08.397 wineloader[58670:531591] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:08.397 wineloader[58670:531591] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:08.538 wineloader[58670:531591] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:08.538 wineloader[58670:531591] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:08.594 wineloader[58670:531407] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:08.594 wineloader[58670:531407] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:08.595 wineloader[58670:531596] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:08.595 wineloader[58670:531596] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:08.595 wineloader[58670:531590] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:08.595 wineloader[58670:531590] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:08.608 wineloader[58670:531578] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:08.608 wineloader[58670:531578] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:08.672 wineloader[58670:531409] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:08.672 wineloader[58670:531409] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:08.674 wineloader[58670:531407] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:08.674 wineloader[58670:531407] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:08.744 wineloader[58670:531578] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:08.744 wineloader[58670:531578] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:08.820 wineloader[58670:531591] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:08.820 wineloader[58670:531591] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:08.835 wineloader[58670:531596] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:08.835 wineloader[58670:531596] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:08.836 wineloader[58670:531591] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:08.837 wineloader[58670:531591] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:08.996 wineloader[58670:531407] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:08.996 wineloader[58670:531407] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:09.099 wineloader[58670:531591] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:09.099 wineloader[58670:531591] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:09.099 wineloader[58670:531591] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:09.099 wineloader[58670:531591] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:09.116 wineloader[58670:531409] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:09.116 wineloader[58670:531409] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:09.117 wineloader[58670:531590] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:09.117 wineloader[58670:531590] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:09.180 wineloader[58670:531578] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:09.180 wineloader[58670:531578] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:09.272 wineloader[58670:531596] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:09.272 wineloader[58670:531596] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:09.273 wineloader[58670:531596] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:09.273 wineloader[58670:531596] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:09.421 wineloader[58670:531407] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:09.421 wineloader[58670:531407] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:09.456 wineloader[58670:531407] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:09.456 wineloader[58670:531407] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:09.457 wineloader[58670:531591] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:09.457 wineloader[58670:531591] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:09.564 wineloader[58670:531409] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:09.564 wineloader[58670:531409] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:09.725 wineloader[58670:531596] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:09.725 wineloader[58670:531596] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:09.762 wineloader[58670:531578] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:09.762 wineloader[58670:531578] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:09.762 wineloader[58670:531578] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:09.762 wineloader[58670:531578] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:09.924 wineloader[58670:531409] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:09.924 wineloader[58670:531409] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:09.925 wineloader[58670:531409] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:09.925 wineloader[58670:531409] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:09.958 wineloader[58670:531578] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:09.958 wineloader[58670:531578] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:10.051 wineloader[58670:531590] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:10.051 wineloader[58670:531590] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:10.209 wineloader[58670:531591] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:10.209 wineloader[58670:531591] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:10.209 wineloader[58670:531591] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:10.209 wineloader[58670:531591] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:10.272 wineloader[58670:531596] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:10.272 wineloader[58670:531596] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:10.331 wineloader[58670:531596] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:10.331 wineloader[58670:531596] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:10.332 wineloader[58670:531409] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:10.332 wineloader[58670:531409] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:10.413 wineloader[58670:531409] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:10.413 wineloader[58670:531409] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:10.446 wineloader[58670:531578] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:10.446 wineloader[58670:531578] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:10.621 wineloader[58670:531591] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:10.621 wineloader[58670:531591] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:10.622 wineloader[58670:531409] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:10.622 wineloader[58670:531409] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:10.661 wineloader[58670:531591] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:10.661 wineloader[58670:531591] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:10.764 wineloader[58670:531409] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:10.764 wineloader[58670:531409] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:10.777 wineloader[58670:531407] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:10.777 wineloader[58670:531407] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:10.850 wineloader[58670:531409] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:10.850 wineloader[58670:531409] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:10.851 wineloader[58670:531407] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:10.851 wineloader[58670:531407] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:10.915 wineloader[58670:531578] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:10.915 wineloader[58670:531578] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:11.012 wineloader[58670:531596] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:11.012 wineloader[58670:531596] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:11.187 wineloader[58670:531597] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:11.187 wineloader[58670:531597] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:11.288 wineloader[58670:531409] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:11.289 wineloader[58670:531409] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:11.497 wineloader[58670:531591] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:11.497 wineloader[58670:531591] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:11.564 wineloader[58670:531596] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:11.564 wineloader[58670:531596] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:11.565 wineloader[58670:531597] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:11.565 wineloader[58670:531597] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:11.604 wineloader[58670:531591] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:11.604 wineloader[58670:531591] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:11.684 wineloader[58670:531590] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:11.684 wineloader[58670:531590] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:11.685 wineloader[58670:531590] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:11.685 wineloader[58670:531590] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:11.685 wineloader[58670:531591] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:11.685 wineloader[58670:531591] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:11.757 wineloader[58670:531596] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:11.757 wineloader[58670:531596] addPresentedHandler cannot be called after drawable has been presented
2026-04-23 19:22:11.758 wineloader[58670:531596] addPresentedHandler cannot be called after drawable has been presented
When Vsync is ON I occasionally see addPresentedHandler cannot be called after drawable has been presented in the log, but a game (SEGA Rally Revo) may still hang, but it happens not often.
Additionally I enabled these 2 settings in dxvk.conf:
dxgi.deferSurfaceCreation = True
d3d9.deferSurfaceCreation = True
and it almost eliminated addPresentedHandler cannot be called after drawable has been presented just to a few times per session, the game is much more stable, but once or twice video hanged while the game itself and audio where working - I was able to control the car according to the audio feedback.
Nothing extracted yet.
I'm using a Mac with an M2 Pro chip, which is fairly recent. However, I'm getting this error:
Software information
Name of the game: Zero Escape The Nonary Games
System information
Apitrace file(s)
For instructions on how to use apitrace, see: https://github.com/doitsujin/dxvk/wiki/Using-Apitrace
Log files
game.log