Supporting DirectX 12 On Mac Is Proving Tougher Than Linux But Work Is Underway

macbook pro hero
If you're a long-time Mac or Linux user, you've almost certainly benefited from the work of CodeWeavers even if you've never heard of them. Founded in 1996, the company has been working for a long time now on making Windows applications run on first Linux, then Mac, and most recently, ChromeOS. CodeWeavers is the primary sponsor of the Wine project (a translation layer to run Windows programs on Linux), and Valve contracted the company to help with its Proton project that powers the Steam Deck and much of modern Linux gaming.

CodeWeavers sells a product called CrossOver, which is its primary consumer-facing product. CrossOver is a commercial piece of software that performs the same task Proton does, except with a more holistic approach rather than being purely gaming-focused. CrossOver is available for Linux and Mac, and currently it works well—as long as your application doesn't use DirectX 12.

inline crossover logo

If you do need DirectX 12, well, you're gonna have to sit tight for a bit. CodeWeavers just posted a blog entry that says implementing DX12 in CrossOver is the company's top priority next year. More specifically, CodeWeavers says it'll have DX12 working in Linux in the next full-number release version thanks to the maturity of Vulkan as an API and improvements in its own VKD3D library (not be confused with the open-source dxvk).

Unsurprisingly, getting DX12 working on Mac is going to be more of a problem. According to CodeWeavers, the problem comes down to Apple's poor API support in its own graphics drivers and operating system. They can't use Vulkan natively on Mac, and the ancient version of OpenGL that MacOS supports is unsuited to being used for a DirectX 12 translator.

metal api logo
The logo for Apple's proprietary Metal API. Image: Apple

The only option is Apple's Metal API. Metal is so-called because it allows developers to get closer to the metal than the popular APIs which preceded it (primarily DirectX 11 and OpenGL.) Unfortunately, Metal is apparently slightly lacking compared to more recent low-level graphics APIs, such as Vulkan and, of course, DirectX 12.

The specific issues that CodeWeavers describe are primarily ones of missing features. Metal doesn't support geometry shaders or transform feedback. It also handles tessellation in a radically different way from Vulkan or DX12, but most challenging seems to be an issue where DirectX 12 uses virtual addresses to refer to resources. Vulkan can apparently use its "buffer device address" extension to emulate this feature, but Metal has no such support.

CodeWeavers says that Apple is unwilling to add support for either virtual addresses or a feature similar to Vulkan's extension because it believes that Metal's existing feature support is "sufficient for what games want to do." The company goes on to note that this is probably true, technically, but that the approach required is sufficiently-different from how it's done on Windows that it fouls up the efforts of translation layers.

That also means that game developers would have to spend a lot of time specifically targeting Apple hardware to make their games work well. If you've been wondering why your favorite recent graphically-intense game isn't the App Store or Apple Arcade, that's probably it, right there. Still, there's hope: after CrossOver 22 adds DX12 support on Linux, CodeWeavers says the next full-number release version, CrossOver 23, will support DX12 on Mac, too. No word on when that'll be, though.