Wine 6.3 Built-in vs DXVK 1.8: A Comparison Of Two Very Different DirectX Implementations
Wine is not an emulator, it is a re-implementation of the Windows APIs. Wine implements DirectX 9-11 by translating the DirectX APIs to OpenGL API calls. There is an alternative DirectX implementation called DXVK that can be used with Wine. It translates DirectX API calls to Vulkan. Most Linux users who play Windows games on Linux think DXVK is faster than Wines built-in translation layer. Is it, and if so, how much faster is DXVK?
The Final Fantasy XIV Stormblood Benchmark running in Wine with DXVK 1.8.
All the following benchmarks were done on a box with a AMD Ryzen 2600 processor and a trusty old MSI RX 470 8 GiB graphics card. It would be great if we could run these kinds of tests on newer AMD hardware but they are not about to let us have access to that technology, Nvidia doesn't even have a free open source driver for their overpriced door-stops and the upcoming Intel Xe HPG graphics card does not yet exist. That just one somewhat older and weaker graphics card is used in the following benchmarks is not a huge deal since this is primarily a test highlighting the differences differnet software implementations of the DirectX APIs.
The UNIGINE Superposition benchmark is a good place to start investigating the performance-differences between Wines built-in DirectX to OpenGL translation and the DXVK DirectX to Vulkan alternative. UNIGINE Superposition is available for both Linux and Windows. The Windows version uses DirectX 11, the Linux version uses OpenGL. Scores are therefore not directly comparable, but a comparison is interesting even so.
The UNIGINE Superposition DX11 benchmark clearly shows that DXVK 1.8 performs a whole lot better than the built-in Wine DirectX to OpenGL translation. For not really fair comparison, the results are a score of 5596 with an average FPS of 41.95 when UNIGINE Superposition is ran natively using the OpenGL on the native Linux version. That is slower than the Windows version in Wine 6.3+DXVK 1.8.
The UNIGINE Heaven benchmark results show big performance-difference between the competing DirectX translation layers that is quite similar to the UNIGINE Superposition results.
Wines built-in translation layer offers less than three thirds of the performance DXVK offers in the UNIGINE Heaven benchmark.
"Try Playing On A More Powerful PC"
The Capcom Street Figher V Benchmark running in Wine 6.3.
The Street Figher V Benchmark from the Japanese video game developer Capcom Co illustrates just how much of a practical difference DXVK can make if you want to run a Windows-game using DirectX 11 on a GNU/Linux-powered machine.
The average 59.26 average frame rate result the Street Figher V Benchmark reports when it is executed using DXVK 1.8 is suspiciously close to 60 FPS. It is probably capped to 60 FPS. There is one aspect of this particular benchmark that is a bit more interesting than the difference between the numbers: The benchmark will tell you, to your face, that "Your PC is unable to run STREET FIGHER V" and encourage you to "try playing on a more powerful PC" when Wines built-in DirectX 11 implementation is used.
The Street Figher V Benchmark will happily report that "Your PC can run STREET FIGHTER V" if you use Wine with DXVK 1.8. The performance-difference between Wines own DirectX implementation and DXVK is, in other words, so large that game benchmarks will tell you to go buy a new computer if you use Wines and brag about how capable your computer is if you use DXVK.
There Are Bugs In The System
The FINAL FANTASY XIV: Stormblood benchmark illustrated a rather unfortunate difference between the DirectX 11 solidity in Wine and DXVK. The benchmark ran through with both, and scores were produced. However, a close-up inspection of the benchmark when it was running using Wines built-in DirectX 11 implementation revealed a rather unsettling strobe-light like display and big parts of the various scenes rendered during the benchmark would blink or randomly appear and disappear. The game did, in contrast, render just fine using DXVK 1.8.
DXVK is a clear winner in the FINAL FANTASY XIV: Stormblood benchmark because it both rendered correctly and got the much higher score.
The Sniper Elite 2 benchmark, using DirectX 11, in Wine 6.3 with and without DXVK.
Sniper Elite 2, a game using DirectX 11, is another example of how much of difference the right DirectX implementation can make.
DXVK does not only offer twice the number of frames per second in Sniper Elite 2, it is also vastly superior when it comes to accuracy. The built-in DirectX 11 implementation in Wine 6.3 appears to have some slight problems with color accuracy when it is rendering this particular game.
Everything Does Not "Just Work"
While lots of software runs just fine in Wine 6.3, with or without DXVK, there's still too many programs do not.
The Windows version of GFXBench 5.0 will not run in Wine 6.3. It installs fine, but all you get when you start it is a message about some network error. This could be a problem with Wine or their servers. It is useless regardless of the root cause.
All the 3DMark benchmarks from UL refuse to run in Wine 6.3 for a variety of reasons. UL offers a ton of older benchmarks with keys at benchmarks.ul.com/legacy-benchmarks. A common problem appears to be related to some hardware information gathering tool all of them come with and depend on. 3DMark 11, 3DMark Vantage, 3DMark06 and 3DMark05 all fail with one error or another. 3DMark05 starts and fails with a "System Info error:" message with no further explanation and a button.
The Final Fantasy XIV Shadowbringers Benchmark refuses to run in Wine 6.3, with or without DXVK, even though the FINAL FANTASY XIV: Stormblood benchmark runs fine - apart from a ton of graphical glitches unless DXVK is used.
The Aliens vs. Predator DirectX 11 Benchmark Tool is another example of something that simply does not work with Wine no matter what you do.
The Catzilla benchmark v1.4 starts up and presents a graphical interface, but it won't run the actual benchmark.
The Resident Evil 6 Benchmark, using DirectX 9, will present a fine "LOADING.." screen and die horribly with a
Segmentation fault (core dumped) when pure Wine is used. DXVK brings a slight improvement. The game will then say it is "LOADING..", present a fine CAPCOM screen and stall forever with a very fine black screen.
The S.T.A.L.K.E.R Call of Pripyat benchmark from 2009 fails to proceed beyond the configuration dialog no matter what you do there or Wine is configured.
Knights of the Sea DX10 Benchmark says something about a "missing effects file" with both DX10 implementations.
The DXVK DirectX to Vulkan translation layer for Direct3D 9 to 11 is, as the numbers show, a by far superior choice compared to the built-in DirectX to OpenGL implementation that comes with Wine 6.3.
DXVK is written using C++, not beautiful C like Wine, and development temporarily stalled back in December 2019 when its lead developer Philip "doitsujin" Rebohle called it:
"a fragile, unreliable and frustrating maintenance nightmare"
doitsujin went on to describe DXVK as a "broken mess of a code base". That may be true, but the practical result is a really fast and very usable DirectX 9-11 to Vulkan translation layer that is more accurate and a whole lot faster than what Wine comes with. As the benchmark results clearly demonstrate: It is absolutely worth installing DXVK if you use Wine to play Windows games on Linux.
For any of you who are playing Windows games from Steam using Proton who wonder how it compares to DXVK: Proton is just a bundle with Wine, DXVK and FAudio with some additional patches for those on top. There is between very little and no practical graphical performance-difference between Proton and Wine+DXVK
DXVK development takes place at GitHub at github.com/doitsujin/dxvk. It is released as a general distribution-independent
.tar.gz archive with a
setup_dxvk.sh script and source code on its GitHub releases page. DXVK can also be installed using
winetricks. You can try running a Windows game or application using DirectX 9, 10 or 11 with
DXVK_HUD=1 wine game.exe to see if DXVK is installed and working, a small frame-counter and your Vulkan version will appear in the upper right corner if, and only if, DXVK is being used.