RkBlog

Using DXVK on Windows to improve Final Fantasy XIV performance

2021-11-17

DXVK is a Windows DX API implementation using Vulkan API. It's intended for running Windows games on Linux but can also be used on Windows to boost performance of old DX 9 and some DX 11 game. Let's take a look at running Final Fantasy XIV over Vulkan on Windows.

tl;dr: as FF14 already can use multiple CPU cores for many systems using DXVK will not improve performance or even introduce stutter - but in some cases it should slightly improve performance as reported by few users.

DX12 and Vulkan versus DX11 and DX9

When games use GPU they have to do it through system specific API. For Windows it's DirectX or DX for short. Right now we have two old versions - DX11 and DX9 and current DX12. Aside of DX we have OpenGL and Vulkan as cross-platform APIs.

Old versions of said APIs like DX9 and older OpenGL revisions will run on a single CPU core thus having a very limited performance scaling. Early DX11 games will also very likely will be running on a single core but more modern can use multiple cores improving the performance. DX12 and Vulkan take multi-core scaling very seriously allowing games to use multiple CPU cores for scheduling and managing GPU work (draw calls).

It's not as easy as just using newer version of DX to make the game perform much better. DX12 and Vulkan are quite different than previous versions and to get most benefits from them game developers must implement the game engine in a way that fits those APIs.

DXVK on Windows

DXVK main usage is Linux but even on Windows it can be used to improve old games performance. It won't be as efficient as a proper Vulkan version but if it will work it should be noticeably better. The thing is it's mostly effective on older games that use single CPU core - so DX9 games and only some DX11 games.

FF14 over Vulkan

Final Fantasy XIV is a DX11 game, but uses DX11 modern features allowing it to use multiple CPU cores so benefits of DXVK will be small if any and very setup specific - your CPU and then GPU will play a big role how this will perform.

To force FF14 or other game to run over DXVK download latest release (tar.gz archive), extract it and then copy DLL files from x64 folder to your game folder (use x32 if you have an old 32-bit game). For Final Fantasy XIV you want to put the DLL files in FF14 game subfolder:

Program Files / SquareEnix / FINAL FANTASY XIV - A Realm Reboorn / game
DLLs for using DXVK with FF14
DLLs for using DXVK with FF14

Then launch the game. If it crashes/glitches/lags... close it and remove the DLL files - for some reason DXVK is not working properly with your hardware setup (you can possibly report it on DXVK bug tracker).

If you use monitoring/benchmarking app like MSI Afterburner or CapFrameX you should see that instead of DX11 it's reporting Vulkan as the API used.

Currently used API will be shown by apps like MSI Afterburner
Currently used API will be shown by apps like MSI Afterburner

DXVK FF14 Benchmarks

Benchmarks were done on latest Windows 10 and drivers versions. I used DXVK 1.9.2, benchmarks were done with the help of MSI Afterburner. I use Kholusia north (N) and south (S) views from Wright settlement.

On Ryzen 4800U laptop (iGPU Vega 8) the performance slightly decreased:

Lenovo IdeaPad 5 FF14 DXVK
Lenovo IdeaPad 5 FF14 DXVK

Moving to GTX 1070 and Ryzen 5900X at higher resolution (100% GPU usage) DXVK has few FPS less on average but the frametimes seems to be more consistent (better 0.1% lows):

GTX 1070 FF14 DXVK
GTX 1070 FF14 DXVK

Similarly trying old AMD RX 460 4GB with Intel i5-9400F we get nearly identical performance over DX11/DXVK with slightly better 0.1% lows. Gridania has much lower 0.1% lows - from time to time the frametimes had a dip (this could be due to other players activity or typical to DXVK stuttering - more on that in a moment):

RX 460 FF14 DXVK
RX 460 FF14 DXVK
RX 460 FF14 DXVK

And when testing Ryzen 5900X + RTX 3070 I got stuttering that can show up when using DXVK:

Ryzen 5900X + RTX 3070 Kholusia test
Ryzen 5900X + RTX 3070 Kholusia test

The game after loading or after using any teleport needs multiple seconds to stop lagging like crazy (~1 FPS) and even then on static view the frametimes are quite unstable. This stuttering was reported by some FF14 DXVK users - so if you are unlucky you will get the same thing. This is pretty much unplayable.

Even though I didn't got any improvements from using DXVK it's very hardware specific and it may help for your setup - so you can give it a try and share your results.

DXVK and AMD Radeon GPU profiler

AMD has a nice tool for developers to analyze how their code runs on a Radeon GPU - RGP. The profiler can show what was the limiting factor (CPU or GPU) when rendering a frame in a game and what tasks the GPU had to perform (and how well they were organized).

RGP works for DX12 and Vulkan. It does not work for DX11 so it can't be used on FF14 by default. With DXVK it's possible to profile the game (although it will show how DXVK is running the game and not how the game runs natively over DX11).

Radeon GPU Profiler and a FF14 frame rendered with Vulkan
Radeon GPU Profiler and a FF14 frame rendered with Vulkan
Radeon GPU Profiler and a FF14 frame rendered with Vulkan

RGP offers some statics like number of events during frame rendering or how many vertices and pixels were shaded. Comparing to my older World of Warcraft data the comparison looks like so:

FFXIV AMD Radeon GPU Profile - events
FFXIV AMD Radeon GPU Profile- pixel shading
FFXIV AMD Radeon GPU Profile - vertices

WoW and FF14 have somewhat similar performance with WoW cutting down particle effects way more to perform on iGPU systems. Aside of Shaded vertices count the numbers are similar. WoW in lighter instances like De Other Side also has similar low numbers but that's not really that common. Such comparison can be handy when debugging on behavior somewhere in game - if performance drops in specific place and GPU is hard at work RGP can show if for example it's not flooded with excess pixel shading due to a bug in the object (geometry, shaders etc) or game engine.

Comment article