Skip to main content

Master of DXVK Usage on Windows

DXVK is not officially supported for Windows, but if used properly, it should work in most circumstances. This article provides comprehensive guide of how to use DXVK correctly on Windows.

Last Update: 12 Jan 2025

1 Get DXVK

1.1 Get official release

You can always get latest official release from GitHub Release. Download "dxvk-x.x.x.tar.gz" file and extract with compatible decompression software like NanaZip.

1.2 Get CI build for specific commit

Sometimes the official release cannot meet your need, such as you need the latest fix that has not become a new release, or you need to test a pull request, or even do a bisect to find out which commit breaks your game. In these circumstances, you can get CI build for specific commit.
You can view all CI builds in Action Tab. If you need to select commits from mainline, you can grep with Branch drop down and select "master". 
Finding a specific commit in such long list may be difficult. You can also click the green tick in Commits to quickly jump to the build of this commit.
For Pull Requests, you can click "All checks have passed" to find the build.
Download the built binary in Artifacts. You need to login to GitHub to download.

All CI builds come with two version: MinGW and MSVC version. They should have the same behavior, but may have some performance difference in extreme comditions. It's hard to say which is faster so you can choose either. In very rare condition only one build behaves correctly, if you face such issue, raise a new issue.

1.3 Build your own

Sometimes you need to modify DXVK by your own to optimize or fix for your specific usage. It's also easy to do.
You should Fork the repo to your own account and create another branch.
If you are not familiar with Windows development environment, you can use GitHub Actions. Click Action Tab in your forked repo and enable workflows. Then do some modification to the code and commit, you can see new action runners. Wait it to complete after approx 10-20 minutes and download artifacts.
For someone who is experienced with Windows devenv, I would recommend building in your own device. It's siginificantly faster than GitHub Actions which only needs approx 2 minutes on my i9-13980HK laptop for the first time and only less than 10 sec for incremental build later.
To setup the environment for compiling, you should install Visual Studio 2022 with C++ workload selected. You also need Meson installed. Then right click cloned DXVK folder and open PowerShell (or Windows Terminal on Windows 11), execute these lines:
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/HansKristian-Work/vkd3d-proton-ci/main/glslangValidator.exe" -OutFile "glslangValidator.exe"
Invoke-WebRequest -URI https://raw.githubusercontent.com/NovaRain/DXSDK_Collection/master/DXSDK_Aug2007/Include/d3d8.h -OutFile include/d3d8.hInvoke-WebRequest -URI https://raw.githubusercontent.com/NovaRain/DXSDK_Collection/master/DXSDK_Aug2007/Include/d3d8types.h -OutFile include/d3d8types.hInvoke-WebRequest -URI https://raw.githubusercontent.com/NovaRain/DXSDK_Collection/master/DXSDK_Aug2007/Include/d3d8caps.h -OutFile include/d3d8caps.h

These lines may change in future, you can find them in .github\workflows\test-build-windows.yml. This config file is used for MSVC CI builds so actually we are following this to setup like the CI runners do.
Then if you need 32-bit build, open "x86 Native Tools Command Prompt for VS 2022" in Start Menu, for 64-bit build, open "x64 Native Tools Command Prompt for VS 2022". You can refer to Microsoft C++ toolset document about this.
Use cd command to change working dir to DXVK folder, execute these code to build:
meson --buildtype release --backend vs2022 build-some-namemsbuild -m build-some-name/dxvk.sln
You can customize the build name if you want. If you modified some code later, you only need to execute the second msbuild command again.
You can collect artifacts in build-some-name\src\. I would recommend Everything to quickly find the built dll you need.

1.4 Some useful modified DXVK versions

dxvk-Sarek for GPU without Vulkan 1.3 support
dxvk-gplasync for async shader compiling

If you are facing issues on modified versions, you should test official version before reporting to official repo.

2 Install DXVK to game

2.1 Locate the install directory

The install directory is where the executable file which loads d3d dlls locates. Some games or software come with a launcher executable in a different directory (such as UE4 games or games using Squirrel Installer), DO NOT put DXVK in that directory. You can always locate the directory by "Open file location" in right clicking the process in Task Manager.

2.2 Confirm the process architecture

A Windows process only loads dlls in the same architecture of main executable (Except for ARM64EC process X64 dlls are also acceptable and reversible). So it is important to know which architecture the process is. 
The easiest way to check is using Task Manager. Right click form bar in Details page and click "Select columns", ensure Architecture is ticked.

Now you can see the architecture of each process.
DO NOT confuse process architecture with CPU architecture. X64 CPU can execute X86 code, so do ARM64 CPU with emulation.

2.3 Determine the API used by the process

Although in some cases simply put all dlls into directory works, but some games may crash with this. It's better to put the only needed ones.
You can use Afterburner & RTSS to check the API.

Or use SpecialK.
Sometimes it's hard to determine API, you may also open the executable with CFF Explorer to see dll imports.

2.4 Copy dll to directory

Copy the right dlls as official document.
  • d3d8: d3d8.dll and d3d9.dll
  • d3d9: d3d9.dll
  • d3d10: d3d10core.dlld3d11.dll and dxgi.dll
  • d3d11: d3d11.dll and dxgi.dll

2.5 Ensure the game is using DXVK

DXVK generated logs doesn't always mean the game is using DXVK. In some cases the game may fallback to another API or even soft rasterizer. It's also important to verify whether DXVK is working as expected to avoid placebo effect.
The only 100% accurate way to verify whether the game is using DXVK is checking DXVK hud.
I would suggest you to edit global variable through system properties, add a new variable called DXVK_HUD and enable some hud values based on DXVK readme as you want.
After the variable takes effect (restart your application from explorer, or just reboot), all applications with DXVK working will show DXVK hud. Once you see this hud, DXVK is working as expected.



Till now, DXVK should work. If it doesn't work, continue reading.

3 Troubleshoot for game not launching

Windows is too open for variety of software. Software conflicts may makes game crash. If DXVK is not working for some game, please do a troubleshoot to find out what's the possible reason.

Tip: DXVK won't work for UWP games since UWP games use a different mechanism to present frames on RuntimeBroker.

3.0 Ensure the game works without DXVK

If the game cannot start without DXVK, it's impossible to make it work with DXVK.
You may search on PCGW to find fix for game not launch.

3.1 Ensure your environment integrity

Sometimes you may follow some "optimization guide" and modify your system which accidentally breaks some system components. You should ensure your Windows installation is not corrupted.
Run these commands in elevated terminal may help you fix your corrupted system:
DISM /Online /Cleanup-Image /RestoreHealth
SFC /scannow
Sometimes your system cannot be easily repaired, you may also use a full Windows ISO to perform an updating which can fix all system files.

You should also ensure all redists required are installed. If you build DXVK with MSVC locally, you need to install MSVC redists.

You should ensure you have a Vulkan 1.3 Compatible GPU with latest driver. But if you are already on the latest driver, sometimes try one previous version may help as sometimes new driver also contains bugs.

3.2 Completely disable overlays

Although DXVK should work with most overlays, sometimes overlays may break compatibility.
You should completly disable all overlays once you cannot launch game. This including GeForce Experience, Steam or other platform overlays, RTSS, MangoHud and do not forget the hidden OBS overlay.
For some overlays, the dll may load even when you have disabled it. You can check Process Explorer to find out what overlays are loaded.

Some overlays can be disabled completely through environment variable. If the overlay is vulkan layer type, and you can find the layer json file, open it and find "disable_environment". Set the environment variable as it requires, the overlay can be completely disabled. (You need to restart game platform to make new environment variables take effect, or just restart your device.)

For overlays cannot be easily disabled, you should try to uninstall them.

Epic overlay can be disabled with group policy. Just add path to "EOSOverlayRenderer-Win64-Shipping.exe" and "EOSOverlayRenderer-Win32-Shipping.exe" to forbidden list.
Sometimes the platform overlays are very difficult to disable completely. You may use tools like Steamless to run the game without platform.

3.3 Ensure the game loads correct dlls

If the game loads DXVK d3d11.dll with system dxgi.dll, of course it will crash. Some games hardcoded the dll path, which may result this.
You can use x64dbg to debug the game to confirm whether the game only loads DXVK dlls.
Another common behavior of wrong dll loaded is the d3d11.log is contentful while dxgi.log is empty.
If the game loads system dlls before DXVK dlls, you may need to fix the game with DLL redirection or reverse engineering.
But DO NOT replace dlls in system32 or systemWOW64 as it will BRICK your device.

3.4 [D3D9 only] Try d3d9.deferSurfaceCreation

Some d3d9 games may first initialize a d3d devide to just check the capability. For these games, you should add d3d9.deferSurfaceCreation=True into dxvk.conf.

3.5 Check whether it works on other vendor GPU or under Linux

If you have a Linux device, test the same game on it. Or you can search ProtonDB and DXVK issues
If there are already reports of the crash, you may follow the discussion and provide more information to help developers. 
If game only works on specific vendor's GPU, you should consider fake your GPU model in dxvk.conf. See dxvk.conf for customized vendor.
If all other reports are fine, I would suggest a clean installation of Windows, and make a report if still doesn't work.

4 Troubleshoot for game crash after some time

Sometimes the game can start with DXVK, but crash after some time or some actions. 

4.1 Ensure memory address is enough

DXVK uses more memory than native d3d. If the memory address is used up, the game will crash. This is very common for some 32-bit games.
Open Task Manager and ensure the Commited memory is not nearly used up. Close background programs can release more free memory address.

If the game is 32-bit, you should ensure the game is Large Address Aware to use up to 4GB memory. You can use CFF Explorer to enable it. You may need to use Steamless to remove protections first.
Lower graphics and resolution also saves memory. You can test with low resolution to see whether it works.

4.2 Check whether the game crash at same location

If the game always crash at same location or same action, such as open the door crashes the game, the game may have undefined behavior or other compatibility issues. You may search on PCGW to find fix.
You may also need to test with native d3d, if it works with native d3d, report it to DXVK.

5 Troubleshoot for rendering issues

If the game logic works fine, but the rendering seems weird, such as black texture, missing objects, abnormal color or flickering which doesn't exist with native d3d, there should be rendering issues.
Rendering issues may come from DXVK or driver issues. You should try to upgrade or downgrade driver first. If it doesn't work, try another vendor GPU, such as try Intel if you are on NVIDIA or AMD.
If it's a vendor-specific or driver-specific issue, you should report to vendor first. Otherwise if the issue appears cross vendors, report to DXVK.

6 Troubleshoot for performance issues

Performance issues are the most complex type of issues. It may result from various reasons.
In most normal circumstances, DXVK should reach similar or slightly lower performance comparing to native d3d, or even better performance than native. If the game stutters heavily or reach significantly lower (<75%) fps comparing to native, there is a performance issue.

6.1 Cleanup shader cache

Sometimes outdated shader cache may makes the game stutter. 
Cleanup shader cache won't lose anything, but your next game time may need longer time to load.
You should exit all applications before cleanup.
You can cleanup shader cache in these locations:
  • PATH_TO_SteamLibrary\steamapps\shadercache
  • C:\Users\USERNAME\AppData\Local\NVIDIA
  • C:\Users\USERNAME\AppData\LocalLow\NVIDIA\PerDriverVersion
  • C:\Users\USERNAME\AppData\LocalLow\Intel\ShaderCache

6.2 Ensure your hardware is not throttled

DXVK may require more CPU to compile shaders for the first time start. This may let your device enter throttled status quicker.
You may use tools such as ThrottleStop to see whether your device is throttled.
If your device is throttled, try to unlock these limits or use external fans to help device stay cool.

6.3 Ensure physical memory and VRAM is enough

DXVK uses more memory than native d3d. If your physical memory is not enough, Windows may rely on memory compression or page file exchange, which both can result poor performance.
Open Task Manager to see physical memory usage. The deep purple should not reach nearly full of the bar.
If the deep purple is nearly full of the bar, close background applications or add more memory to your device. For most circumstances, 16GB is the minimum requirement for DXVK to run well.


If you have a large mount of memory, disable memory compression may also improve some performance. Execute "Disable-MMAgent -mc" in elevated PowerShell and reboot.

Unsufficient VRAM also brings stutters. You should ensure Dedicated GPU memory is not used up during game. Check it with Task Manager or Afterburner & RTSS.
Modern applications with GPU accelerated GUI, such as QtQuick, Chromium, WPF based applications can eat large amount of VRAM. Disable GPU acceleration of these applications or allocate them to iGPU if exist can extract more VRAM for games, which may significantly boost fps on GPU with small VRAM.

6.4 Close other applications using GPU

Other applications using GPU may result less resource allocated to game. Many users love those animated wallpaper, however these animated wallpaper can eat a lot of GPU resources. Exit them before gaming.
If you are streaming or recording during game, use CPU or iGPU for encoding may also helps.

6.5 Fix laggy input or VRR/HDR doen't work properly

Vulkan WSI on Windows is totally rubbish. There is no VRR support, no independent flip without dxgi, and no modern swapchain features. This means all frames need to be copied with DWM GDI to composite, which brings more latency, makes input laggy.
Latest DXVK has added exclusive fullscreen back. You can add dxvk.allowFse=True to dxvk.conf to enable it. (DO NOT enable if the game has a GDI menu bar or other non-d3d controls.)
Or if you are on NVIDIA you may also follow this guide to layer DXVK on dxgi swapchain, which also makes AutoHDR available.

To visualize your latency, you can use PresentMon, see its document for more detailed guide. For a 60 Hz display, <30 ms would be acceptable in most cases.

6.6 Disable GSYNC for windowed applications

GSYNC for windowed applications will limit DWM GDI rate to force sync. Sometimes it may also limit the framerate to refresh rate. 
Disable it in NVIDIA Control Panel -> Set up GSYNC -> Select "Enable for full screen mode".

6.7 Select the target GPU for DXVK

If you are on multi-GPU system (there're two or more GPU in Task Manager), you should ensure DXVK is running on the one with highest performance. Although in most cases DXVK can choose the best one available, but for some systems such as two different dGPU devices, DXVK may select the wrong GPU.
You have two ways to select GPU. You can either set dxvk.deviceFilter in dxvk.conf or set DXVK_FILTER_DEVICE_NAME variable. The filter string is a unique string in your target GPU name. For example, a system with RTX 4090 and GT 1030 can be configured to "4090" which is enough to select RTX 4090 for DXVK.
You can find these lines about which GPU is used by DXVK in logs:
info:  Device properties:
info:    Device : NVIDIA GeForce RTX 4080 Laptop GPU
info:    Driver : NVIDIA 565.90.0


7 Create helpful reports for issues

DXVK of course has many issues unreported. If you find one, you should report in correct format to help developers reproduce your issue quickly.

7.0 Try latest commit version first

The issue may already be fixed in latest commit. Get it from Actions build and test it.

7.1 Collect logs

You should collect these logs and attach to issue:
  • DXVK logs in game path (not always in executable directory) named as executablename_d3d*.log and executablename_dxgi.log
  • Game logs if the game has
  • Steam overlay log if Steam used: C:\Program Files (x86)\Steam\GameOverlayRenderer.log
  • Other overlay logs if you can collect
  • .dmp dump file if the game crashed and generated
If you have seen something abnormal in logs such as error lines, mark them out.

7.2 Environment Info

Fill DXVK issue template of your environment information.
You should provide detailed system version, GPU model with driver version, game version and anything else related. The more you provided, the quicker the issue can be located.

7.3 Reproducable steps

Write reproducable steps in detail, such as how to trigger the crash or abnormal color, in which condition the game slows down, or even whether it works with other wrappers like WineD3D or dgVoodoo2.
Also write what issue you faced in detail. If the issue is hard to describe, you may attach screenshots or videos.

7.4 Apitrace

Issues can be easily located with Apitrace files. 
It's easy to use apitrace on Windows, so you really should perform apitrace before submit a Windows issue.

7.5 Other useful links

You may add other useful links to save time from searching engines for developers. If you can summary from these links that would be better.
These links may be helpful:
  • Game download page if the game has multiple versions or hard to find
  • Links to existing discussions about the issue on various forums
  • Links to PCGW page about the issue or fix
  • ProtonDB page of this game

7.6 Bisect

If some old DXVK version can work while latest version can't, it's a regression issue and you can do a bisect to find out which commit breaks this.
To do a bisect, you should have a start version which works as late as possible and a end version which doesn't work as early as possible.
For example, if commit 1 works, but commit 24 fails, you start with the middle of 1 and 24, which is commit 13. If commit 13 works, then you can assume 13-24 has some breaking changes, so you do bisect again in 13 to 24, in which 19 is selected next. Repeat this until you can find the commit with issue.






This guide is copyleft. Feel free to distribute it to any place you want.
















Comments