Evil Within 2 has always had an issue with only using 70-90% of your GPU, keeping framerates capped well below what your system is actually capable of.
This guide shows you how to install the Direct3D->Vulkan translation layer, DXVK, which can go a good deal towards stabilizing GPU usage in this game and ultimately prevent a far more consistent framerate.
As a result, the game will be prone to random frametime spikes when it’s getting into this GPU usage % range, as there’s not a hard predictable upper limit. Sometimes it will top out at 85%, in other scenes it will drop frames when your GPU is only 75% used.
No other tools like SpecialK/fast sync/Rivatuner could improve this, until I tried DXVK.
What the heck is DXVK?
DXVK stands for Direct X on Vulkan. It is similar to the earlier WineD3D, but while the Wine implementation was focused more on application compatibility, DXVK was focused more on game performance. Its purpose is straightforward: To allow Direct3D games to run under the Vulkan graphics API, which is a modern graphics API like DirectX12. As you may know, several PC games (like Doom Eternal and Red Dead Redemption 2) use Vulkan directly on the PC already.
DXVK is actually a subset of “Proton”, which is a collection of technologies that Valve has introduced to get as many Windows games running under Linux as possible, and in turn the Steamdeck with its Linux-based SteamOS. Without Proton/DXVK, the Steamdeck doesn’t exist. Hence, years back Valve contracted out the developer of DXVK, which is one of the reasons it has made such huge strides in compatibility and performance recently.
Valve’s Proton is more extensive than DXVK alone, in that it can also allow emulation of DX12 and vendor-specific features like DLSS and RTX to work under Linux (that is done via VKD3D, which despite the naming similarity, is separate from DXVK).
While the full Proton stack is Linux-only, just the DXVK portion of it can run directly on Windows to force Direct3D games to use Vulkan as the rendering API.
For some games with problematic D3D implementations, such as Evil Within 2, this can provide a significant benefit.
Scroll down to the bottom of the page, where you will see a link to dxvk-2.0.tar.gz: Click it to download.
Since this is a compressed file format that is more commonly used in Unix-land, you will need to use an unzip utility like 7-zip, which knows how to handle these formats – Windows 10/11’s bult-in zip utility will not.
As this file is a .tar file embedded within a .gzip, you will actually have to unzip it twice.
- Extract the dxvk-2.0.tar.gz file into a folder.
- This will reveal the .tar compressed file, dxvk-2.0.tar into that target folder. You will need to then unzip this file as well.
- You should then see the resulting dxvk-2.0 folder structure. Within that folder are two sub-folders, x32 and x64. These contain the 32 bit and 64 bit versions of the DXVK dll’s respectively.
- As Evil Within 2 is a 64-bit game, navigate into the x64 folder. From there, select two files – the d3d11.dll and dxgi.dll files.
- Drag these into the *root* of your Evil Within install folder – the one with TEW2.exe main executable. The easiest way to navigate to this folder is just to right-click on the game in your Library and select Manage->Browse Local Files. Otherwise, it will be in \Installation Drive\SteamLibrary\SteamApps\Common\TheEvilWithin 2.
- Your TEW2 install folder should now resemble this:
That’s it. DXVK is installed for Evil Within 2. Just run the game as normal.
There can be a misconception with how DXVK works; that as it has to ‘translate’ these DirectX commands to Vulkan, it will produce more CPU overhead. In fact however, due to the low-level nature of the Vulkan API and how DXVK can more efficiently batch D3D shader code, it can actually result in less CPU overheard the native Direct3D implementation. In fact, one of the most popular uses of DXVK was for getting GTAIV to run significantly better on systems with lower-end CPU’s.
While this isn’t particularly relevant to EW2 as it’s primarily GPU bound, I just want to assuage that potential concern a bit.
As for downsides with EW2 and DXVK specifically:
By default, Rivatuner’s Application detection level of Low will not allow the overlay to show when using DXVK. To remedy this, create an application profile for TEW2.exe, and set the application detection level to High.
If you have a fixed-refresh rate display and are using vsync, you might want to avoid the “Display Based” option in the game, and just choose 60fps instead. I found when choosing Display Based for vsync, the game would use a hard double-buffer vsync implementation, where it would drop to 30fps whenever it couldn’t maintain a locked 60fps. Seeing the vsync option to 60fps allowed it to drop more gracefully to the 50’s if I was pushing my GPU a little bit too hard.
With DXVK in general (and this has still been the case for some games even with DXVK 2.0), I have also found having the Geforce Experience overlay enabled may prevent the game from loading. The process will start but will remain stuck in task manager. Disabling the GFE remedies this.
Note this does not occur for every game and having it enabled doesn’t seem to prevent TEW2 itself from loading with DXVK, it seems to mostly occur for Unreal Engine 4 tiles in my experience. Just something to keep in mind if you try to use DXVK with other titles and they don’t launch.
This can vary per game quite a bit, but in general I have found when using vsync in games with dxvk, there can be a noticeable increase in latency over vsync with D3D. This seems to affect EW2 somewhat less as movement is rather ‘floaty’ with native D3D as well, but you may notice it.
On my system (an RTX 3060, i5-12400f), DXVK will allow the game to top out at 90% GPU usage at 1440p, whereas this is closer to 95% when using 4k. While we always want a proper 99-100%, the difference over running the game in D3D is that it adheres very closely to these upper usage numbers throughout the game. When drops in usage do occur, the fluctuations are more within a far narrower range of a few %, whereas with D3D the usage can veer between 70-85%.
As you can see from the frametime graph, while not as performant as it could be if it was using the GPU to its fullest, this nevertheless results in a far more stable framerate.