Steam Ubuntu

How to Enable Vulkan Rendering in Wine Games using DXVK

DXVK is a free and open source project that translates Direct3D calls to Vulkan in Linux. Integrating with the Wine compatibility layer, DXVK allows you to use a Vulkan renderer in Direct3D (D3D9, D3D10 and D3D11) applications and games in Linux.

DXVK works by replacing existing Direct3D “dll” files in Wine with custom files that convert Direct3D API calls to Vulkan. As a result, you may see improved graphics, increased performance, and better compatibility in 3D apps and games. The performance impact of DXVK can be drastic, improving overall frame rates in most 3D apps and games. Though you may see varied results on a case by case basis.

Installing DXVK in Linux

You can download the latest DXVK build from its GitHub page. To correctly set up DXVK, you have to install some packages first and configure a Wine prefix.

To begin with, enable Vulkan drivers in Ubuntu by running the command below:

$ sudo apt install mesa-vulkan-drivers mesa-vulkan-drivers:i386
 libvulkan1 libvulkan1:i386

Reboot your system to finish the installation.

Next, you will need to install wine packages. I would recommend you to install stable builds of wine, but DXVK will work with development builds as well. To install wine stable builds in Ubuntu, run the command below:

$ sudo apt install wine

Note that Ubuntu may not have the latest builds of wine included in its repositories. To check and install the latest build of wine, follow instructions available here.

Now that necessary packages have been installed, you can proceed to configuring a new Wine prefix. Wine prefixes are nothing but isolated containers for installing Windows apps in Linux. It is a good idea to create a new prefix for every app or game you install in Wine. Since one prefix has nothing to with another, things are kept clean and crash free, resulting in fewer compatibility issues.

Run the command below to create a new prefix named “Game” in your home directory:

$ WINEPREFIX=”$HOME/Game” winecfg

You can pass any path to the WINEPREFIX variable, just make sure that it is full path, not relative.

DXVK is available for both 32-bit and 64-bit architectures and it is important that you install DXVK files for the correct architecture. By default, Wine will create a 64-bit prefix. However, you can manually specify an architecture by running any one of the commands below:

$ WINEARCH=win64 WINEPREFIX=”$HOME/Game” winecfg
$ WINEARCH=win32 WINEPREFIX=”$HOME/Game” winecfg

If you have followed the steps correctly so far, you can now proceed to actual installation of DXVK in a Wine prefix. Extract the downloaded DXVK archive and run the command below from the extracted folder to make setup script executable:

$ chmod +x setup_dxvk.sh

With the WINEPREFIX variable specified, run a command in the following format:

$ WINEPREFIX=”$HOME/Game” ./setup_dxvk.sh install

You can replace WINEPREFIX value with your own path. Wait a few seconds for the installation to finish.

To uninstall DXVK, run the command below:

$ WINEPREFIX=”$HOME/Game” ./setup_dxvk.sh uninstall

How to Confirm If DXVK is Working in an App or a Game?

After installation of DXVK, you may want to check if DXVK libraries and Vulkan are being used correctly in the game. To do so, prefix your wine command with “DXVK_HUD=1” environment variable.

$ WINEPREFIX=”$HOME/Game” DXVK_HUD=1 wine launcher.exe

If DXVK is correctly installed and being used in your Direct3D game, you will see an FPS HUD in top left corner of the screen:

You can customize the HUD display using various comma separated values explained here.

In case you don’t want to use DXVK HUD, you can confirm from terminal output if DXVK is being invoked or not. The following output shows DXVK being used in a game after you run an “exe” launcher in a Wine prefix:

info: DXVK: v1.7.1
info: Built-in extension providers:
info: Win32 WSI
info: OpenVR
warn: OpenVR: Failed to locate module
info: Enabled instance extensions:
info: VK_KHR_surface
info: VK_KHR_win32_surface
warn: D3D9: VK_FORMAT_D24_UNORM_S8_UINT -> VK_FORMAT_D32_SFLOAT_S8_UINT
warn: D3D9: VK_FORMAT_A4R4G4B4_UNORM_PACK16_EXT -> VK_FORMAT_B4G4R4A4_UNORM_PAC

Conclusion

The DXVK project has given a huge boost to non-native gaming in Linux. Its deep integration with wine has resulted in massive performance improvements in many games. DXVK has been fully integrated into Steam’s Proton compatibility layer, which itself is based on Wine. If you are using Steam to download and play Windows compatible games, you will automatically get support for DXVK through Proton.

About the author

Nitesh Kumar

Nitesh Kumar

I am a freelancer software developer and content writer who loves Linux, open source software and the free software community.