DXVK does not run on Mac OS. There's a modified version based on an ancient release of DXVK that kinda works on MoltenVK but the D3D9 side never worked.
The D3D9 implementation in DXVK uses a Vulkan binding model trick to improve performance that MoltenVK can't handle.
Besides that, DXVK simply requires modern Vulkan features that MoltenVK doesn't support.
It actually works really well. Rosetta is fast enough (together with the incredible single thread performance of Apple CPUs).
There are some pain points that Apple could easily fix:
- Add a barrier API that more closely resembles that of Vulkan, which is easier to use and more flexible than both Metal and D3D12. Microsoft also basically copied the Vulkan barrier API in a D3D12 update but no games use that yet. The regular D3D12 barrier API can be implemented very well on top of the Vulkan barrier model but maps poorly to Metal.
- Open source MetalD3D and/or the Metal shader converter.
- Document the Metal shader bytecode format. It has been reverse engineered and it's mostly just LLVM bitcode anyway. Right now some tools like MoltenVK compile to Metal Shading Language (modified C++) which then gets compiled to Apple Intermediate Representation which then gets compiled to something the GPU can work with.
- Add a bunch of other Metal features like strict robustness guarantees (return 0 for out of bounds reads).
- Support optionally making specific folders in the file system case insensitive. The Linux kernel got support for that for Wine.
- Support the weird Windows NT sync edge cases in the kernel. The Linux kernel also recently got support for that for Wine.
- Add an API to Metal to allow mapping Metal buffers at a specific address in memory to help running 32 bit games.
- Add an optional reduced precision mode for x87 in Rosetta. (Turn the software emulated 80 bit floats into proper 64 bit floats).
One problem for that is that most 32bit games use x87. x87 optionally supports 80 bit floats so Rosetta runs software emulation for x87 math code. That's extremely slow to the point of making even some ancient games unplayable. For example the FMod audio library, which was extremely widespread, uses x87.
Linux x86 emulators work around this by offering an optional reduced precision mode that turns those into either 64 bit or even 32 bit floats. Some even do it by default.
Microsoft also does that with their Prism x86 emulator. They can be somewhat confident in doing that as Microsofts compiler stack has defaulted to configuring the x87 hardware to use 64 bit floats.
Apple should really add that as an option to Rosetta but I doubt that's gonna happen simply because it only impacts 32 bit code.