DXVK, and finally getting off the Windows 10 train

Regular readers of NAG will know about my doomed-from-the-start forays into running Linux. I’ve done the switch several times in the past. I tried running Manjaro once, but there were issues with my USB 3.0 ports on my older motherboard at the time. I’ve run Fedora 25 and Ubuntu 16.04 successfully for more than two weeks, but there were things that pulled me back in to Windows quite quickly. Most of that was my game library, but a lot of it was also workflow-based. Linux isn’t Windows, and if you’re expecting a clean switch with good alternative software available from the start, you’ve got another thing coming. Having that many failed experiments over the years, in addition to running Ubuntu on my netbook for over a year, gave me an appreciation for Linux that I slowly came to admire. And this week, I dove in again, but this time I’m staying in these warmer waters.

The impetus for this change is, surprisingly, Windows 10 itself. The latest upgrade to version 1803 has been a dumpster fire for many, and it’s only getting worse for anyone who hasn’t installed it on their machines yet. First the upgrade wouldn’t complete on computers running Avast Antivirus, then there were the BSODs and corrupt partitions on Intel and Toshiba solid state drives. There were freezing issues with Chrome and Edge when running GPU-accelerated workloads in the browser, and the black screen blanking and shader cache issues with the latest NVIDIA drivers. Then people started seeing broken installs, DPC latency spikes that would de-sync audio, various keys not working; heck, even Internet Explorer 11 is missing, and that was intentional.

And there’s this whole “You’re a Seeker” thing where apparently if you so much as open Settings > Update and Security, you’ll be fed the install files for the 1803 April update even if your machine is currently incompatible with it. Much as I like Windows 10, and my game library, and Forza 7, I don’t like what we’re being forced into. I don’t like that it’s becoming simpler, and dumber, and losing functionality in applications which should be robust and mature by now (Groove Music can’t import music from CDs…?).

That’s where Vulkan comes into the picture

In the software industry, we have several major competing Application Programming Interfaces (APIs) that vie for attention on their respective platforms for running games. We have Direct3D on Windows, now in its twelfth iteration, which does many, many more things than just run games. We have OpenGL, a standard API that will run on toasters if they have the right hardware. There’s Mantle, an API designed by AMD to be cross-platform, supporting a console-like low-level interface for better performance. There’s the NVIDIA NVAPI, embedded into NVIDIA’s drivers and responsible for a host of black magic that allows them to do incredible things with CUDA. And then there’s Vulkan.

Vulkan is based on the work that AMD did with Mantle, and AMD handed over all their source code to Mantle to spur the development of OpenGL Next, an industry-designed effort that included assistance from Intel and NVIDIA. Vulkan works on as many platforms and devices as OpenGL, and it’s much more powerful. And as a bonus, it can be used to translate software calls that games would make from DirectX 11 and 12 titles, for example, and render them using the Vulkan API for cross-platform compatibility. Vulkan is the key to doing this in a standardised, reliable fashion, and it has driver support from all the major vendors. It makes porting projects much simpler if you’re a game studio looking to move a game from Windows to Linux or MacOS, or Android (as in the case of PUBG).

It can also do this in real-time, on the fly. The key to this is its low-level nature, allowing for much less performance overhead than traditional APIs. It’s the key to me making this whole switch in the first place, and I’ve been preparing for it for more than a month.

DXVK, Lutris, and Wine

I took this screenshot late yesterday evening after spending about two days getting Ubisoft’s Uplay client to install. It’s running under Wine through a program called Lutris, a games client that manages third-party games and game clients installed on your system under Wine. It does this simply by managing the various versions of Wine (Wine prefixes) that an application might be compatible with automatically, using scripts created by the Wine and Lutris community to install and run games properly. Lutris can manage Steam games natively, but it’s also possible to manage games installed with Uplay, the Bethesda Launcher, or EA Origin.

Lutris also manages DXVK prefixes. The DXVK project is barely a year old, but it’s growing so fast that new builds come out each week, and it’s currently sitting at version 0.53. DXVK takes Vulkan libraries and packages them to replace libraries and .dll files used by Windows games that run DirectX 11 or 12. Wine can then fiddle with the output of DXVK to display games properly, allowing for the translation of calls to the GPU and CPU to be done in real-time to the Vulkan API. Suddenly large numbers of games are playable with much higher performance than traditional Wine prefixes would allow. Overwatch, The Witcher 3, Far Cry 4, Crysis 3, ARMA 3, and many others are all playable with DXVK prefixes. Six months ago these games would have partially working menus, run at 12fps, and have artifacts all over the place under the Wine project, whereas DXVK gets around many of these issues, leaving the Wine developers to concentrate on bug fixes and compatibility.

Just a week ago, the release of Wine 3.9 in the staging channel came with the announcement of the first working implementation of vkd3d, a project driven by the Wine team to integrate a DirectX 12 to Vulkan translator straight into the Wine libraries. Fairly soon, DXVK might not be needed. It would just get merged into Wine as new updates get released, and games running on Linux through programs like Lutris will continue to see better support.

The tipping point has come and gone, and it’s finally time for me to move

I kept on using Windows because the alternatives weren’t yet in a place that it would be a good idea for me to switch. I kept an eye on how many games were Linux-compatible in my Steam library, and I didn’t buy new ones that weren’t. I was biding time, and the only thing that I’d really keep Windows around for is the excellent and beautiful Forza Motorsport 7. For everything else, the Wine project and DXVK has matured to the point where I don’t have to stay. One third of my library natively runs in Linux, and the other two-thirds across Steam, Uplay, and Origin will all become compatible in time. Even Forza 7 will one day become playable on Linux, because there’s a movement to port over the Windows Runtime (WinRT) environment into Wine.

Today marks the start of a change in my games and tech coverage from a Windows-only focus into something more mixed. I’m going to be running Linux full-time, and in the coming weeks I’ll have some guides about how to do this yourself, and how to start experimenting with DXVK. I’ll run Windows for testing purposes on other devices, but I’m sticking it out on my desktop. There’s a lot that Windows gets right, but I prefer having the greater amount of control that Linux affords me, and I’m no longer a hapless sap hoping that Microsoft starts to limit what software I can and can’t use on Windows.

The Crew 2 beta didn’t work, by the way. BattlEye Anti-Cheat doesn’t work on Wine by design.

Xbox Body Spray
Xbox body spray smells like citrus with bottom notes of corporate disconnect