Zink: OpenGL to Vulkan

Since Mesa 19.3 Zink is available which offers an OpenGL to Vulkan translation. Mesa 20.2 will support OpenGL 3.0. The actual features of Zink are documented at MesaMatrix https://mesamatrix.net.

You can test games and apps simply by running them from a terminal when using Mesa-git. Just replace “command” with the application or game name:


The following applications worked:

  • glxgears (minor shadow glitches)
  • Firefox in OpenGL mode, Webrender didn’t work, Wayland didn’t work as well due to missing EGL support
  • LibreOffice (but 6.5 will support Vulkan natively with Skia anyway)
  • openarena (crashes from time to time)
  • Supertux (worked in fallback mode to GLVideoSystem-20)

As there is currently no HUD like in DXVK it is quite hard to verify which driver actually runs, but I noticed that the GALLIUM HUD shows less lines in Zink then usual when using a parameter like this:

VK_INSTANCE_LAYERS=VK_LAYER_MESA_overlay VK_LAYER_MESA_OVERLAY_CONFIG=position=top-right GALLIUM_HUD=simple,cpu,GPU-load,temperature,fps mangohud command

Somehow the Vulkan layer doesn’t work at the moment either, but mangohud is a great replacement.

What didn’t work:

  • Half Life
  • Extreme Tux Racer (etr)
  • openttd
  • Supertuxkart
  • lincity-ng
  • KDE Plasma Wayland
  • KDE Plasma
  • Blender (requires OpenGL 3.3)
  • weston?

MPV + FFmpeg

MPV 0.32

MPV (license GPLv2, https://github.com/mpv-player) is the first video player with Vulkan support since 0.28. Wayland is supported by default since 0.29.

pacman -Sy mpv

To use Vulkan, you need to run MPV with or modify the start menu entry:

mpv --gpu-api=vulkan --player-operation-mode=pseudo-gui -- %U

At least on Plasma Wayland mpv 0.30 works fine with Vulkan in a Wayland window.


The AV1(BSD Clause 2, https://aomedia.googlesource.com) media codec has been officially released royalty-free by the Open Media Alliance (https://aomedia.org) on 2018-03-28 with broad support from all the major internet companies, read https://www.phoronix.com/scan.php?page=news_item&px=AV1-Released. On 2018-06-26 the version 1.0 has been released. AV1 claims to offer 30% better compression at 4K then the other media codec’s like VP9.

AV1 Decoding

  • DAV1D 0.1 (license BSD, https://code.videolan.org/videolan/dav1d) is a AV1 decoder from the VLC and ffmpeg communities. The decoding speed has been improved drastically in the last time.
  • FFmpeg 4.2 supports AV1 via DAV1D. FFmpeg added in August 2019 the AMD advanced media framework (AMF) which is based on Vulkan initialization. With 4.3 Vulkan support should be in good shape.

Games – Vulkan OpenSource

Free and open source efforts for games without Wayland support running through XWayland on Vulkan are documented here. For more information about toolkit’s with proper Wayland support and how to remove legacy ones running on XWayland only, read Wayland.

XWayland (X11)


GZDoom (license GPLv3, https://zdoom.org, https://github.com/coelckers/gzdoom/tree/vulkan2) is based on the open source release of the Doom 1 engine and it has been enhanced with Linux and Vulkan support (since Version 4.0). Another engine for Doom is Doomsday (withouth Vulkan). It supports as well all the other idTech 1 game engine games like:

  • Doom 1 + 2
  • Heretic
  • Hexen
  • Strife
  • Chex Quest
  • and fan-created games like Harmony and Hacx.
yay gzdoom

Luxtorpeda can use GZDoom automatically in Steam Play, only Vulkan doesn’t work yet automatically.

To manually setup GZDoom and play with Vulkan enabled, run:

gzdoom +vid_backend 0

Doom 1 + 2

You can buy DRM free copies:

If after the installation GZDoom doesn’t find you game .wad files automatically, you can add the path to the file like this:

$ nano .config/gzdoom/gzdoom.ini
...Path=/home/USERNAME/.wine/drive_c/GOG Games/DOOM/

If you add multiple folders, GZDoom will automatically create a game selection menu.



Chex Quest 1 + 2 + 3

Chex Quest is available to downlaod from the official website https://www.chexmix.com/chexquest.

Helium Rain

Helium Rain (64bit) is an Early Access game on Steam (https://store.steampowered.com/app/681330/Helium_Rain). The developers released the source code of Helium Rain (license BSD, https://github.com/arbonagw/HeliumRain) of their own engine,it requires the Unreal Engine and the content to build.

Helium Rain supports Vulkan (2018-01-26). To run the game on Vulkan you need to add -vulkan to the launch options in Steam. The beta channel is not available anymore.

The game doesn’t work on Wayland (bug) only through XWayland.

Command & Conqueror: Generals – openSAGE

OpenSAGE (license LGPLv3, https://github.com/OpenSAGE) is a free and open source re-implementation of the SAGE game engine. This will allow you to play Command & Conquer: Generals and Zero Hour, but support could be extended to other RTS titles from EA Pacific. Linux support has been added and Vulkan support is already work in progress (https://github.com/OpenSAGE/OpenSAGE/releases/tag/v0.2.0). If it works natively on Wayland or only through XWayland has to be seen.


vkOpenArena (license GPLv2+, https://github.com/suijingfeng/vkOpenArena) provides Vulkan support since March 2019.


vkQuake (https://github.com/Novum/vkQuake) is a Vulkan port of the Quake game licensed under GPLv2. Installation on Arch Linux:

yay vkquake

So far I had no luck in running vkQuake directly via Wayland, even with the start parameter -platform wayland or with the prefix SDL_VIDEODRIVER=wayland. vkQuake runs only through XWayland.

Luxtorpeda can use vkQuake automatically in Steam Play.


If you want to do the setup manually, do the following:

  • Extract the following files into the folder .vkquake/id1/
  • pak0.pak: contains episode 1 (shareware, gratis). Episode 1 is available as a shareware version for testing, if you don’t own the game. You can download it from https://bit.ly/2aDMSiz.
  • pak1.pak: contains episodes 2-4 (you can buy it e.g. on GOG https://www.gog.com/game/quake_the_offering, the version on GOG is provided with the original soundtrack files, not like the steam version)

If you have downloaded the shareware version extract the archive. Now you need a tool like 7-zip to extract the file resource.1, in the terminal you can do this with this command:

7z e resource.1

If you have copied the file PAK0.PAK to the .vkquake/id1/ folder, rename it on Linux to pak0.pak as Linux is case-sensitive and otherwise it won’t find the file. If you have the PAK1.PAK file, do the same for this one.

If you have Quake version with the soundtrack copy them to the folder .vkquake/id1/music/.

Now you should be able to run the game, if it doesn’t try to run it from the terminal to see the error messages.


Quake 2

vkQuake2 (license GPLv2, https://github.com/kondrak/vkQuake2) added Vulkan support for the Quake 2 engine. The Linux version is available since mid January 2019.

Installation on Arch Linux:

yay vkquake2

Before running the game you need to copy some files to the game directory (you may need to install the GOG version first with Wine):

sudo mv Quake\ II/* /opt/vkquake2/baseq2/

Then the game did run on Vulkan, at least in multiplayer mode. The normal game did freeze.


Quake 3

vkQuake3 (license GPLv2, https://github.com/suijingfeng/vkQuake3) added a Vulkan backend based on the Qauke III Arena Kenny Edition.

Quake III Arena Kenny Edition

In the Quake III Arena Kenny Edition Vulkan support has been added as well, read https://github.com/kennyalive/Quake-III-Arena-Kenny-Edition/releases/tag/v1.1. But it is not available for Linux at the moment.


Doom 3

The source code of vkDoom3 (GPLv3), a Doom 3 Vulkan port, has been released and you can follow the  project here https://github.com/DustinHLand/vkDOOM3. The RBDOOM-3-BFG project can be followed here https://github.com/RobertBeckebans/RBDOOM-3-BFG and they plan to pull the Vulkan code as well and by this it will support Linux (64 bit). The bug for Vulkan is open since some time without any response https://github.com/RobertBeckebans/RBDOOM-3-BFG/issues/398, but beginning of October 2018 some merge activity started. RBDoom3-BFG doesn’t support Wayland (bug) and it runs through XWayland.

To install RBDoom3-BFG run the following command (use the git version so that as soon as there is Vulkan support you can start testing):

yay rbdoom3-bfg-git

To play the game you need to do the following:

  1. Create a link to the install folder with the name .rbdoom3bfg in your home directory (you can install Doom 3:BFG Edition e.g. via Wine)
  2. If you use a copy of GOG, open the default.cfg file in the base directory of the game and add at the end the line “seta sys_lang "english". Otherwise the game starts in Japanese.

Warzone 2100

Some independent developers are porting the game Warzone 2100 game (released 1999, open sourced later, https://wz2100.net, https://github.com/Warzone2100/warzone2100) to Vulkan, read https://www.phoronix.com/scan.php?page=news_item&px=Warzone-2100-Vulkan. The OpenGL version of Warzone 2100 is available for Linux, the Vulkan port is currently not provided for Linux but it will be developed soon, read http://forums.wz2100.net/viewtopic.php?f=32&t=13651. The video files are available here https://sourceforge.net/projects/warzone2100/files/warzone2100/Videos/.

X-Men: The Ravages of Apocalypse

X-Men: The Ravages of Apocalypse can be downloaded from the official website http://www.zerogravity.com.au/xmen (without original soundtrack) and it runs with vkQuake on Vulkan.

Unreal Engine (98)

Vulkan-drv (license ???, https://github.com/kosumosu/vulkan-drv) is a Vulkan renderer in an early stage for the original Unreal Engine (98).

Vulkan Games Proprietary

The non open source games can be found here Vulkan Proprietary Games.

Games – Vulkan Proprietary

Proprietary games without Wayland support running through XWayland on Vulkan are listed below this point.

Vulkan Only Games


Artifact is a card game from Valve with Linux and Vulkan only support.

Dota Undergrounds

Dota Undergrounds (basic game free of charge) has been released by Valve with Linux and Vulkan only support.


X4 was released end of 2018 and supports Vulkan only. On Linux the beta version is available sinde 26th February 2019.

Vulkan Linux Only Games

AI War 2

AI War 2 got released on 2019-10-22 with Vulkan support only on Linux.

DiRT Rally

Feral seems to offer an experimental Vulkan build only on Linux for DiRT Rally. You can enable it on Linux in the Feral Lauchner. Enter in Advanced / Advanced Options the following “-showdebugpanel -showtestpanel”, now you can click on the tab testing and enable “Use Vulkan”. I couldn’t get this to work though, it always launched with OpenGL.

DiRT 4

Feral did release DiRT 4 for Linux with Vulkan only support only on Linux and it works great. It doesn’t support Wayland (bug) and it runs through XWayland.

F1 2017

Feral did release F1 2017 for Linux with Vulkan only support only on Linux. It doesn’t support Wayland (bug) and it runs through XWayland.

Forsaken Remastered

The Linux version of Forsaken Remastered ported by Ryan “Icculus” Gordon supports Vulkan only on Linux. It can be enabled in the game in the video setting menu. Vulkan should be enabled by default.


Feral added an experimental Vulkan build only on Linux for Hitman. You can enable it on Linux in the Feral Lauchner. Enter in Advanced / Advanced Options the following “-showdebugpanel -showtestpanel”, now you can click on the tab testing and enable “Use Vulkan”. Water rendering is partially broken and the benchmark crashed as well, but other than this it worked quite well.

Life is Strange 2

Life is Strange 2 has been released by Feral on 2019-12-19 with Vulkan support only on Linux.

Mad Max

Feral added to Mad Max a Vulkan build only on Linux. To enable Vulkan read the following blog post: https://www.feralinteractive.com/en/news/753. Basically you enter in the game properties in the Beta tab of Steam the code “livelongandprosper” and then the vulkan_beta will be available. After downloading the beta you can lunch the game and it will run on Vulkan. What is strange is that Vulkan is not yet shipped by default!

Mad Max doesn’t support Wayland and it runs through XWayland (Bug). For benchmarking you can add in the Steam lunch options the command “–feral-benchmark”.

Middle-earth: Shadow of Mordor

Feral added on 2019-10-17 to Shadow of Mordor a Vulkan port only on Linux . It is available in the beta tab of the game settings on Steam.

Rise of the Tomb Raider

Rise of the Tomb Raider was released by Feral with Vulkan only support only on Linux. The game doesn’t work on Wayland (bug) only through XWayland.

Shadow of the Tomb Raider

Shadow of the Tomb Raider has been released by Feral with Vulkan only support on Linux.

Steel Rats

Steel Rats added Linux and Vulkan only support. The game uses the Unreal Engine. It is available on Steam.


Supraland supports Vulkan on Linux.

Total War Saga: Thrones of Britannia

Total War Saga: Thrones of Britannia has been ported by Feral and it offers Vulkan only support only on Linux. The performance is great on Linux and the Vulkan port is near the performance of DX11. It doesn’t support Wayland even though it is providing SDL 2.0.7.

Total War: Three Kingdoms

Total War: Three Kingdoms has been ported by Feral with Vulkan only support only on Linux. Wayland is not supported.

Total War: Warhammer II

Total War: Warhammer II has been ported by Feral to Linux and Vulkan and it works great. Wayland is not supported.

Warhammer 40.000: Dawn of War III

Feral did release Warhammer 40.000: Dawn of War III with Vulkan only support only on Linux . Vulkan can be activated in the game launcher in the Advanced tab. It doesn’t support Wayland (bug) so far and it runs through XWayland.

What Never Was

What Never Was (game free of charge) is available unofficially for Linux on Steam. The game is based on the Unreal Engine and Vulkan support is available only on Linux, it requires the parameter “-vulkan”.

Wolrd of Guns – Guns Disassembly

Wolrd of Guns is a Unreal Engine game and supports Vulkan when adding the parameter “-force-vulkan”.


ZED works with Vulkan on Linux. It is not yet the default, but it works well.

Vulkan Games

7 Days To Die

7 Days To Die offers native experimental Vulkan support (available in game launcher). Before version 0.18 the in-game graphics just rendered a pink flat screen, this is fixed now and Vulkan works fine on Linux native and Proton. The game comes with the Easy Anti Cheat DRM, but it can at least be disabled.

Aerofly FS 2 Flight Simulator

Aerofly FS2 is available with Vulkan and Linux support and it works quite well.

Among the Sleep

Among the Sleep is based on the Unity Engine and Vulkan can be enabled with the “-force-vulkan” parameter. It works on Linux, but there are some grahphical glitches.


AntVentor doesn’t support officially Vulkan, but it runs fine if you run it on Steam with the following parameter:

%command% -force-vulkan


ASTROKILL is based on the Unreal Engine and they added a Vulkan option into their launcher in Steam, but sadly isn’t the default yet. The game works well with Vulkan. The game doesn’t work on Wayland (bug) only through XWayland.

Ballistic Overkill

Ballistic Overkill is a good FPS game with Vulkan and 64 bit support. From my point of view the 32 bit build should be removed and Vulkan should be default, for now the game requires for Vulkan a start-up parameters. Ballistic Overkill doesn’t support Wayland and it runs through XWayland (Bug) even if you try to enforce it, probably Unity engine needs a update.

Launch Options:

%command% -force-wayland -force-vulkan

If you use Vulkan or OpenGL can be seen in the main menu when you start the game on the left bottom. The game runs great on Vulkan even in 4K.


Blacksmith is based on the Unity Engine and Vulkan support is available on Linux with the parameter “-force-vulkan”.

Darkside Detective

The Darkside Detective works fine on Linux with Vulkan, you have to use in Steam the following launch option:

%command% -force-vulkan

Dota 2

Dota 2 (basic game free of charge) offers optionally Vulkan support on Linux and runs very well with RADV. Dota 2 doesn’t support Wayland (bug) and it runs through XWayland. Sadly Vulkan is not the default yet. Dota 2 offers Vulkan support as well for the proprietary Metal driver on MacOSX via the free software MoltenVK.

How to enable Vulkan is described in this post: https://www.facebook.com/notes/wykrhm-reddy/setting-up-dota-2-with-vulkan/1097489820273895

These are the steps (copied from the post):

  1. Go to your Steam Library > Dota 2.
  2. Under the DLC section, tick the newly available “Dota 2 Vulkan Support” DLC. This should download the required files. Download size is around 312 MB.
  3. Once the download is completed, add the following to your launch options: -vconsole -vulkan

Check if Vulkan is running (copied from the post):

  1. Open the console (` key by default).
  2. Because you enabled the vconsole, that should open up. You might have to alt tab as it pops up as a new dialog box.
  3. Scroll to the top and find the lines the talk about the RenderSystem. If you’re running the Vulkan build, they should read something like this. If not, they’ll refer to whichever render system they are using such as DirectX or OpenGL.

Dungeon Escape

Dugeon Escape is based on the Unity Engine and Vulkan support is available on Linux with the parameter “-force-vulkan”.


Geocore has been released with Linux, 64 bit and optionally Vulkan support. The game is created with the Unity game engine, but as of this, the game still has some input bugs and the Vulkan port is really slow on a AMDGPU.

Geocore doesn’t support Wayland (bug) and it runs through XWayland (Bug) even if you try to enforce it with -force-wayland, probably Unity engine needs an update. Launch Options:


Helium Rain

See Games – Vulkan OpenSource

Jotun: Valhalla Edition

Jotun is based on the Unity Engine and Vulkan works on Linux with the parameter “-force-vulkan”.

Jupiter Hell

Jupiter Hell offers Vulkan support on Linux and Proton.

Project R.I.P.

Project R.I.P. offers Vulkan support.

Serious Sam Fusion 2017

Serious Sam Fusion 2017 fully supports by default Vulkan on Linux since release. OpenGL and 32bit support has been removed in an 2018 update. Serious Sam Fusion 2017 doesn’t support Wayland (bug) and it runs through XWayland. Serious Sam Fusion 2017 includes the following games:

  • Serious Sam: The First Encounter
  • Serious Sam: The Second Encounter
  • Serious Sam: The Last Hope
  • Serious Sam: BFE
  • Serious Sam: Jewel of the Nile

The Talos Principle

The new publicbeta defaults now to the 64 bit build (2019-02-23) and Vulkan. It removed OpenGL support, but strangely they still kept 32bit support available. The Talos Principle doesn’t support Wayland (bug) and it runs through XWayland.

Throne of Lies

Throne of Lies offers an optionally Vulkan version with the Unity Engine. Vulkan can be selected in the game launcher. Bug: But the game doesn’t connect on Linux to the game servers as there seems to be a DRM login.

Tower of Time

Tower of Times supports optionally Vulkan on Linux. The game is based on the Unity engine. To use Vulkan, you need to add the launch option “-force-wayland -force-vulkan” in Steam. The game runs stable on Vulkan. The game doesn’t support Wayland yet and runs through XWayland.


Trüberbrook works optionally on Vulkan on Linux. The game is based on the Unity Engine and you need to add-force-vulkan” to run it on Vulkan. It doesn’t work on Wayland only through XWayland.


Unturned is based on the Unity Engine and Vulkan can be enabled as well on Linux with the parameter “-force-vulkan

War Thunder

War Thunder (basic game free of charge) offers optionally Vulkan support, which is much more powerful than OpenGL. But sadly it is not the default yet, even not available as an option in the the game launcher. To enable Vulkan, do the following:

  1. Navigate to the installation directory and then the content subdirectory and create an empty file named pkw_vulkan.rq2
  2. Run the War Thunder launcher and let it update
  3. Close the launcher and open the config.blk file in the main installation directory with a text editor
  4. Change the lines renderer2:t=”auto” and driver:t=”auto” to renderer2:t=”vulkan” and driver:t=”vulkan”
  5. Launch the game from the binary named “aces” in the linux64 directory as using the launcher will overwrite config.blk with default settings. Alternatively you can set the config file in e.g. Dolphin to “View Only” for the owner of the file.

Warhammer 40000: Gladius – Relics of War

Warhammer 40000: Gladius – Relics of War is Vulkan only on Linux and Proton.

X-Plane 11

x-Plane 11 added with the public beta 11.50 Vulkan support for Linux and Wine. You can select Vulkan in the graphics options of the game. Some GPU drivers may need a work around if the game crashes during start, just add the following launch parameters:

export DISABLE_VK_LAYER_VALVE_steam_fossilize_1=1
export DISABLE_VK_LAYER_VALVE_steam_overlay_1=1

Vulkan Only Proton Games

Proton (Steam Play or Wine) can run several native Vulkan games on Linux. This is only required because some game companies like Bethesda decided not to provide a Linux build even if it would be fairly simple to do as Vulkan is already cross platform.

Doom Eternal

Doom Eternal is by default Vulkan only and with the latest Mesa drivers it is starting to work in some Proton systems.

Rage 2

Rage 2 supports by default Vulkan only.

The Surge 2

The Surge 2 is a Vulkan only game and works well in Proton.

Wolfenstein II: The new Colossous + Wolfenstein: Youngblood + Wolfenstein: Cyberpilot

They all run by default on Vulkan only and work great in Proton.

Vulkan Proton Games

Ashes of Singularity

Ashes of Singularity offers optionally native Vulkan support (available in the video settings in the game menu). Bug: Actually it works on Proton only in Direct3D 11 mode with DXVK, the game complains about outdated AMD drivers which is definitly not true as it was tested with Mesa-git.

Blood: Fresh Supply

Blood: Fresh Supply offers optionally native Vulkan support (available in the video settings in the game menu) and it runs fine in Proton.

Doom 2016

Doom 2016 offers optionally native Vulkan, to enable it you must set the launch paramter in Steam “+r_renderAPI 1”. Then the game works great on Vulkan, it is strange that Vulkan is not the default anyway.

No Man’s Sky

No Man’s Sky offers optionally native Vulkan suppport and it works in Proton.

Orville – Interactive Fan Experience

The Orville – Interactive Fan Experience (free of charge game) provides experimental Vulkan support on Proton.

Path of Exile

Path of Exile (basic game free of charge) added Vulkan support in May 2019 and it works in Proton.

Strange Brigade

Strange Brigade supports optionally Vulkan. Rename the StrangeBrigade_Vulkan.exe to StrangeBrigade.exe then the game works on Proton. Sadly Vulkan is not enabled by default.

DXVK +VKD3D – DirectX to Vulkan

DXVK 1.7 – D3D 9/10/11

DXVK (license zlib, https://github.com/doitsujin/dxvk) translates DirectX 11, DirectX 10 and DirectX 9 (since 1.5) into Vulkan 1.1 (minimum requirement since 1.5.2) and it’s main purpose is to be combined with Wine, but technically it can be used on Windows as well to confirm if the games in Wine work correctly. Instead of OpenGL the Vulkan API offers many advantages, but the most important one is the very fast development time of DXVK compared to the often buggy  and slow DirectX to OpenGL translation of WineD3D.

Install DXVK from AUR (stable: dxvk-bin, experimental dxvk-git):

yay dxvk-bin

D9VK translated DirextX 9 (DX9) to Vulkan. It was developed based on DXVK from an independent developer and as it was almost feature complete it got merged back to DXVK on 2019-12-16.

DXWrapper – D3D8/DDraw 1-7 to D3D9

DXWrapper includes d3d8to9 (see Vulkan’ize Graphic and Compute API’s) and therefore it allows you to convert DirectX 8 to DirectX 9. Additionally DXWrapper integrates Dd7to9 to translate Direct Draw 1-7 to DirectX9. If you combine this with DXVK, many D3D8 and DD1-7 games are translated to D3D9 and will run on Vulkan too.

Install DXVK in Wine

If you you need to install it to a wine prefix, first run:

export WINEPREFIX=/path/to/.wine-prefix

Or in this example a Steam Proton (Wine) prefix is used (replace USERAME and the GAMEID with the one from the Steam shop url):

export WINEPREFIX=/home/USERNAME/.local/share/Steam/steamapps/compatdata/GAMEID/pfx/

Then run the DXVK setup, on Arch Linux (it is possible to use it with Wine prefixes as well). In this case only a symlink is created that allows you to easily update DXVK:

$ setup_dxvk install --symlink

To remove DXVK , run:

$ setup_dxvk uninstall

Display HUD in Wine or Proton

MangoHud is a beatiful Hud that supports Vulkan, OpenGL and DXVK and as the preferred solution nowadays, read Gaming.

DXVK Hud is the intergrated Hud that can show you additional details. It can be combined with MangoHud where it shows additionally the devinfo and api in a Hud, everything else can be shown already by MangoHud.

To verify that your application uses DXVK instead of wined3d by checking for the presence of the log files d3d11.log and dxgi.log in the application’s / game directory once you have started the game for the first time, or by enabling the HUD via the environment variable DXVK_HUD=1. Example for Wine:

DXVK_HUD=version,devinfo,fps,api,gpu ./Steam.exe


DXVK_HUD=1 wine ./Steam.exe

All DirectX 10 and 11 games run on Steam via Proton and DXVK (a Wine distribution of Valve). Just open Steam and play any Windows only game. To get the HUD, add the launch parameter to the game (to see all contents you can use “all” in DXVK >=0.95):

DXVK_HUD=version,devinfo,fps,api,gpu %command%


DXVK_HUD=1 %command%

Since DXVK 0.65 you can use a configuration file that contains additional parameters for special cases where the default doesn’t work, read the Wiki page https://github.com/doitsujin/dxvk/wiki/Configuration.

DXVK Native

There is now a pull request to compile DXVK as a native Linux library, read https://github.com/doitsujin/dxvk/pull/926 and replaced by https://github.com/doitsujin/dxvk/pull/1264. This should improve the integration with Wine, but this would need patches as well.

VKD3D-Proton – D3D12

VKD3D (https://github.com/HansKristian-Work/vkd3d-proton) is integrated to Proton since 4.11-8 to translate DirectX 12 to Vulkan. To use it with Wine, install the following packages.

pacman -Sy vkd3d lib32-vkd3d

As the VKD3D performance was not the best and usually Direct 3D 11 is running faster on top of DXVK and Vulkan, Valve forked VKD3D into VKD3D-Proton to support full D3D12 and to optimize it for newer GPU’s.

Gaming +MangoHud +GameMode

Linux gaming is growing steadily with a lot of high quality titles. With more games the need for tools and helpers is increasing, luckily there are great applications already.

MangoHud + FPS limiter

MangoHud (license MIT, https://github.com/flightlessmango/MangoHud) is a HUD for Vulkan and OpenGL. On Vulkan it will show as well if the game runs on DXVK.

Since MangoHud 0.3.5 it will show the GPU and driver name. Plus it shows if the application is 64bit or still legacy 32bit.


  • Wayland support missing
  • Doesn’t work yet if the game uses a launch script

Config file example:

--COPY FROM /usr/share/doc/mangohud/MangoHud.conf.example
MangoHud configuration file
Uncomment any options you wish to enable. Default options are left uncommented
Use some_parameter=0 to disable a parameter (only works with on/off parameters)
Everything below can be used / overridden with the environment variable MANGOHUD_CONFIG instead
########## PERFORMANCE
Limit the application FPS
VSYNC [0-3] 0 = adaptive; 1 = off; 2 = mailbox; 3 = on
OpenGL VSYNC [0-N] 0 = off; >=1 = wait for N v-blanks, N > 1 acts as a fps limiter (fps = display refresh rate / N)
############# VISUAL
Display the current CPU information
Display the current GPU information
Display loaded MangoHud architecture
Display the frametime line graph
Display the current system time
Time formatting examples
time_format = %H:%M
time_format = [ %T %F ]
time_format = %X # locally formatted time, because of limited glyph range, missing characters may show as '?' (e.g. japanese)
Change the hud font size (default is 24)
Change the hud position (default is top-left)
+rf left
Display the current CPU load & frequency for each core
IO read and write for the app (not system)
Display system ram / vram usage
Disable / hide the hud by deafult
Hud position offset
Hud dimensions
Hud transparency / alpha
+rf 0.5
Color customization
Change default font (set location to .TTF/.OTF file )
Crosshair overlay (default size is 30)
Show Spotify metadata
Specify gpu with pci bus id for amdgpu and NVML stats.
Set to 'domain:bus:slot.function'
pci_dev = 0:0a:0.0
############ INTERACTION
Change toggle keybinds for the hud & logging
############ LOG
Set amount of time in second that the logging will run for
Define name and location of the output file (Required for logging)

GameMode 1.2

Gamemode (license BSD, https://github.com/FeralInteractive/gamemode) has been released by Feral as a library and daemon (based on systemd) to enable game optimizations automatically like the CPU governor “performance” when a game is started and to deactivate them as soon as the game stops. You can install it from AUR

yay gamemode
yay lib32-gamemode

Once you’ve installed gamemode, you can then tell any game to use it by doing this command:


You can also add it as a Steam launch option for each of your games like this

gamemoderun %command%

If you wish to know what current CPU governor is in use, you can run this command in terminal:

cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor

You probably need to enable and start the gamemoded daemon:

systemctl --user enable gamemoded systemctl --user start gamemoded

Global Environment Variables

sudo nano /etc/environment

## Wayland
# Firefox Wayland
# SDL Wayland
#export SDL_VIDEODRIVER=wayland

### Firefox
# Plasma integration 
export GTK_USE_PORTAL=1 
# Firefox Touchscreen support
export MOZ_USE_XINPUT2=1

### Vulkan (default RADV for AMD if nothing is set) ###
# Enable ACO instead of LLVM compiler in RADV
export RADV_PERFTEST=aco
#export VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/radeon_icd.x86_64.json
#export VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/amd_icd64.json
# AMDVLK-Pro (thanks, TK-Glitch)
#export VK_ICD_FILENAMES=/opt/amdgpu-pro/etc/vulkan/icd.d/amd_icd64.json
# AMDVLK Experimental Features

### OpenGL
# Prefer new Intel Iris Gallium driver instead of classic one
### AMDGPU/MESA Tuning ###
# AMD Debug options
export radeonsi_enable_nir=true

### Wine Variables ###
# Wine Esync
#export WINEESYNC=1
# Wine PBA
#export PBA_ENABLE=1
# DXVK Async
#export DXVK_ASYNC=1

# GALLIUM (AMD, Iris) *Only for testing, do not use if your desktop is using OpenGL acceleration*
# export GALLIUM_HUD=simple,cpu,GPU-load,temperature,fps
# Vulkan Overlay doesn't work as an environment variable
#export VK_LAYER_MESA_OVERLAY_CONFIG=submit,draw,pipeline_graphics,position=top-right
# MangHud Vulkan only
# Wine/Proton DXVK
export DXVK_HUD=devinfo,api

Game Manager


GameHub (license GPLv3, https://tkashkin.tk/projects/gamehub, https://github.com/tkashkin/GameHub) is a new Game Manager that allows you to sync Steam (including multiple Steam accounts if Family sharing is active), GOG and even HumbleBundle library. It works great on Wayland. Install it from AUR:

yay gamehub

GameHub scales nicely even on 4k screen and if offers many functions that are missing in Lutris.


With Lutris (license GPLv3, https://lutris.net, https://github.com/lutris/lutris) you can manage your game library of locally installed Linux games, Steam and Wine in one overview. Lutris runs natively on Wayland, it is based on Gtk 3.

sudo pacman -Sy lutris python-pyinotify

On the website of Lutris you can create an account and link this to your steam account to automate library sync with Steam.

So far lutris is far away from providing an easy overview about all games. It doesn’t manage multiple Steam accounts, it doesn’t even show all installed games of your Steam account and it doesn’t show all not installed games. Bug https://github.com/lutris/lutris/issues/757.

GOG support has been added in 5.0, but no HumbleBundle support so far. But the new version doesn’t work anymore in any window manager except Gnome (bug). Lutris doesn’t scale well on 4k screens in Plasma Wayland.

Vulkan’ize Graphic and Compute API’s

Vulkan is a low-level cross-platform graphic API broadly supported. There are several projects to implement all other the existing graphic and compute API’s like OpenGL, OpenGL ES, OpenCL, WebGL, DirectX and even Glide on top of Vulkan. Some projects translate Vulkan to other API’s in case there is no native support available due to restrictions of the operating system or not yet available drivers.

The implementation of all the other graphic and compute API’s on top of Vulkan greatly improves compatibility and reduces development efforts of hardware drivers that got more and more complex with the legacy API’s. This unification on one hardware driver reduces development efforts and bugs. The perfect example is RADV for AMD GPU’s, basically just 2 developers implemented a new driver in one year. Vulkan is the right approach to unify the other API’s for the first time successfully. One improvement in the Vulkan stack will benefit all the implementations on top of it.

Vulkan target

  • DirectDraw -> Vulkan
    • DD1..DD7 -> D3D9
      • see DXWrapper, it is wrapping DirectDraw 1 to 6 calls into DirectDraw 7 and then to Direct3D 9 (using Dd7to9)
      • Info: DD8 or greater doesn’t exist, this separate 2D graphic library has been integrated into Direct3D 8
  • Direct3D -> Vulkan
    • D3D1,D3D2a,D3D3b,D3D5.2,D3D6.1a -> D3D7
    • D3D7
      • dgVoodoo2 see D3D8. Besides dgVoodoo2 there is no other project to translate D3D7 e.g. to D3D8, D3D9 or D3D10.
      • no open source Vulkan translation available
    • D3D8
      • DXWrapper includes D3D8to9 (license BSD, https://github.com/crosire/d3d8to9) which is converting Direct3D 8 to Direct3D 9. It can be used together with D9VK. Additionally DXWrapper can convert DirectInput 1-7 to 8 (requires no further translation as it is input only).
      • dgVoodoo2 (license proprietary but free of charge, http://www.dege.freeweb.hu) translates Direct3D 1-7 plus Direct3D 8.1 to DirextX 10.1. This allows the  combination with DXVK. Would be nice if GOG would support to release this as open source!
      • See GalliumNine, it has a D3D8 to D3D9 codepath
    • D3D9
      • DXVK (see below, previously DXVK)
      • GalliumNine+Zink (refer to OpenGL below). Zink (see below) is available in Mesa for testing and it can be used together with GalliumNine to provide D3D9 support via Gallium3D on Vulkan. NIR was enabled in Mesa 19.1. GalliumNine is based on Gallium3D and provides for Direct3D 9 native API’s for Wine directly.
    • D3D9+D3D10+D3D11
      • DXVK (license zlib, https://github.com/doitsujin/dxvk) translates DX9, DX10 and DX11 to Vulkan and it works extremly well on Proton (Steam Play) and Wine in Linux. DXVK is almost feature complete. Follow this guide to get DXVK up and running in Wine or just use Steam Play (Proton).
    • D3D12
      • VKD3D (license LGPL, https://source.winehq.org/git/vkd3d.git) is a Wine project and maps Direct3D 12 directly to Vulkan. There are only a few real D3D12 exclusive titles and usually D3D11 is faster and better supported if available in a game. Though as Direct3D 12 borrowed a lot of concepts from Vulkan and its predecessor Mantle, it’s much less complex compared to Direct3D 11. VKD3D is kept separately so that other developers can use it and the DXVK main developer supports now the development. On proprietary Apple platforms VKD3D supports the use of MoltenVK (see below) to translate from Vulkan further to proprietary Metal.
  • OpenGL -> Vulkan
  • OpenGL ES/WebGL -> Vulkan
    • ZINK (refer to OpenGL above)
    • ANGLE (license BSD, https://github.com/google/angle) is a cross platform project developed by Google. The project describes itself as “ANGLE currently provides translation from OpenGL ES 2.0/3.0 to desktop OpenGL, OpenGL ES, Direct3D 9, Direct3D 11 and Vulkan. Support to translate OpenGL ES 2.0 to Vulkan is available in Android Q, OpenGL ES 3.0 and 3.1 is in development, 3.2 is planned. This project is interesting as it allows at least Android, Linux and Windows to translate OpenGL ES to Vulkan. With this the GPU hardware vendor for Android would only need to supply a Vulkan driver and not anymore the more complex OpenGL ES driver. Another user of ANGLE is hardware acceleration in Chromium and Firefox (with the Webrender engine written in Rust to translate OpenGL ES if not available directly to D3D11) on Windows, so even here Vulkan could be great to unify all drivers.
  • OpenCL -> Vulkan
  • Glide -> Vulkan

Vulkan base

  • Vulkan -> CPU fallback (without GPU)
    • Vallium is a new driver based to run Vulkan on a CPU. It is not yet merged to Mesa. It works similar to Gallium3D based on LLVM for OpenGL on a CPU.
    • Kazan (formerly Vulkan-CPU, license LGPLv2.1, https://salsa.debian.org/Kazan-team/kazan) is a Vulkan driver for Linux that runs on top of a regular CPU in case a GPU Vulkan driver is missing like for nouveau where no open source driver is available or in a virtual machine. Instead of C++ the new Kazan is rewritten in Rust. Use cases are computing tasks, Vulkan desktops where no open source Vulkan driver is available, testing a vendor neutral implementation and virtual machines/clouds without a real GPU.
    • SwiftShader (license Apache 2.0, https://github.com/google/swiftshader) offers a cross platform Vulkan 1.1 on CPU backend (previously based on OpenGL ES and Direct3D 9) similiar to LLVM for OpenGL. Combined with ANGLE it could allow other API’s like OpenGL ES to run as well on the CPU. SwiftShader can be seen as well like a fallback driver in case the GPU driver doesn’t work or for testing, it is used by Android, Chrome and Firefox (not yet enabled).
  • Vulkan -> Vulkan/DX12/Metal/OpenGL ES
  • Vulkan -> Metal
  • Vulkan -> DX12
    • See gfx-rs
  • Vulkan -> WebVK/WebGPU -> Vulkan, DX12, Metal



SPIR-V is a platform independent intermediate language layer for OpenCL and GLSL that is supported by Vulkan. It will be extended to NIR by the nouveau developers.


The intermediate representation NIR is becoming the common foundation of the Mesa Gallium3D drivers and it allows the Vulkan developments to share more code (paths) with OpenGL and OpenCL. Originally NIR was developed by Intel for their OpenGL mesa driver, later support for the Intel ANV Vulkan driver was added. NIR provided as well the groundwork for the community Vulkan driver RADV for AMD GPU’s.

NIR Status


Glslang could convert HLSL as well to SPIR-V, but not at the same time with the output to DXIL and SPIR-V. Microsoft open sourced in 2017 the Direct X shader compiler DXC for HLSL (high level shading compiler) based on LLVM/Clang. Orginally it did output only DXIL for Windows 10, but Google added in June 2018 a SPIR-V output, which in turn can be used by Vulkan, OpenGL 4.6 and OpenCL (https://github.com/google/DirectXShaderCompiler/tree/linux).

Shader Conductor

Shader Conductor (license MIT, https://github.com/Microsoft/ShaderConductor) is a new project from Microsoft. Besides the DXIL output the Direct X shader compiler can provide as well SPIR-V. SPIR-V could then output to Vulkan or to OpenGL via SPIRV-Cross. Besides this SPIRV-Cross allows as well to go again OpenGL (via GLSL), OpenGL ES (via ESSL), D3d 9/10/11 (via MSL) or to Metal (via MSL), for more details read https://www.phoronix.com/scan.php?page=news_item&px=Microsoft-Shader-Conductor.

Legacy Projects

Game Emulator’s – Vulkan OpenSource



Retroarch (http://retroarch.com) is a frontend for emulators, game engines and media players. It runs on natively on Wayland. RetroArch added Vulkan support, read https://www.phoronix.com/scan.php?page=news_item&px=Libretro-N64-Vulkan. You can enable Vulkan in the driver configuration.


pacman -Sy mupen64plus libretro-mupen64plus retroarch retroarch-assets-xmb retroarch-autoconfig-udev



XWayland (X11)


Doplhin-Emu (license GPLv2, Qt, https://dolphin-emu.org) is a game emulator for Gamecube, Wii and Triforce. So if you have e.g. some Wii games around from an old console you can run them on Linux.

The Dolphin game emulator developers developed quite early a Vulkan back-end and they even dropped DirectX 12 (DX12) in favor for it, read https://www.phoronix.com/scan.php?page=news_item&px=Dolphin-May-2017-Recap. The Vulkan backend works and performs really well compared to the mature OpenGL back-end.

To try it you need to install a development snapshot of version 5.x. Dolphin switched to Qt5 with this release as well:

pacman -Sy dolphin-emu

Dolphin-Emu doesn’t support Wayland yet and it runs through XWayland (Bug). If you try to run it via Plasma-Wayland, it will crash, so run:

dolphin-emu -platform xcb

The normal interface of dolphin-emu offers now the possibility in Options -> Graphic Configuration to change to Vulkan (not default yet). Interesting status reports can be found on the Dolphin-Emu blog https://dolphin-emu.org/blog.


Flycast is a Nintendo Dreamcast emulator and added support for Vulkan in Dezember 2019.


The PPSSPP (license GPLv2+, C++ and Qt, https://github.com/hrydgard/ppsspp) game emulator for PlayStation portable games supports and is using Vulkan by default on Linux with version 1.6 https://www.phoronix.com/scan.php?page=news_item&px=PPSSPP-Vulkan-Linux.

pacman -Sy ppsspp-qt

Currently it doesn’t work on Plasma-Wayland and it only runs through XWayland:

ppsspp-qt -platform xcb


RPCS3 (license GPLv2, https://rpcs3.net, https://github.com/RPCS3/rpcs3) is a PlayStadion 3 emulator with Vulkan support, it is still in early stages but it is able to run already several games. You can install it from AUR. You may need for one of the dependencies a key, if required use gpg –recv-keys XXX to trust this key).

yay rpcs3-bin

I had to add a link for libGLEW to run RPCS3.

ln -s /usr/lib/libGLEW.so.2.1 /usr/lib/libGLEW.so.2.0

RPCS3 runs Wayland on Plasma. You can switch to Vulkan in the graphic settings.


Yuzu (license GPLv2, https://yuzu-emu.org, https://github.com/yuzu-emu/yuzu) added a Vulkan backend to this Nintendo Switch emulator.

Video, Media & Music


VLC 3.0

VLC is a really good multi-platform media player. The actual release 3.0 offers initial Wayland support. You can compile VLC-git from AUR in Arch Linux.

sudo pacman -Sy vlc

If VLC is still playing videos via X11 unless you launch VLC with the following command or modify your entry in the start menu/desktop symbol:

vlc --no-embedded-video --started-from-file %U

This will run the video in a separate window and the VLC window are together with the controls in another one. With this Wayland is supported natively, only the keyboard shortcuts do not work (bug). But this is acceptable as long as you can run it in Wayland. VLC on Wayland is not yet stable like the X11 version and you might see some crashes from time to time. VLC 4.0 should finally close the last Wayland issues.


Kdenlive (https://kdenlive.org) is a video editor and it can convert and encode videos into other or compressed formats. It works well on Wayland.

sudo pacman -Sy kdenlive frei0r-plugins



AV1 Decoding

AV1 Encoding

Music Player

There are many music player’s out there, but most of them are neither nice looking nor simple to use and have limited functionalities. If you focus on KDE/Qt music player’s, then the selection is quite limited.

Elisa 0.4

Elisa is music player and it can be installed in Arch Linux directly:

sudo pacman -Sy elisa

Elisa works well on Wayland. Elisa still is in an experimental stage as of issues with missing covers and cover icons cannot be resized.

vvave (Babe)

My actual favorite is babe (https://vvave.kde.org). This player looks nice and clean, very promising, unfortunately the development slowed down in the last months and the library is quite bad designed. In Arch Linux you can install it with (the old version is still available as babe or babe-git):

yay vvave-git

Babe works well on Wayland, except for some crashes as of library scans.

Youtube Download

ClipGrab allows you to download YouTube videos and music. It works well on Wayland and is based on Qt5.

sudo pacman -Sy clipgrab

Wine + Proton standalone

Wine and Proton do not support Wayland yet. At least SDL2 and Dosbox are available with Wayland support, so they are used below (dosbox is replaced with dosbox-sdl2 and sdl1 is replaced with sdl2-compat12).

Bug: Wayland

Wine misses any Wayland support at the moment, so playing games means you play e.g. DirectX trough OpenGL/Vulkan trough XWayland to the Wayland layer. Sounds not too good, even if XWayland should affect the performance only slightly. The status can be seen in the bug report https://bugs.winehq.org/show_bug.cgi?id=42284, sadly there is no activity at all at the moment.


Wine-Wayland (https://github.com/varmd/wine-wayland) is developed by a Wine independent developer with a focus on Vulkan. There is no OpenGL support.

Proton standalone

Proton (license BSD, https://github.com/ValveSoftware/Proton/) is an improved Wine version developed by Valve with additional patches from Wine-Staging, DXVK, FAudio, esync, … integrated to Steam named Steam Play so that all Windows only games can be played usually with one click on the play button. But you can install Proton standalone (wine-valve) as a replacement for Wine (replaced by wine-valve), just run:

yay vkd3d-git
yay lib32-vkd3d-git
yay proton-git
pacman -Sy wine_gecko wine-mono faudio lib32-faudio lib32-libpulse lib32-mpg123 lib32-gnutls lib32-libldap opencl-icd-loader lib32-v4l-utils lib32-opencl-icd-loader lib32-libxslt lib32-gst-plugins-base-libs lib32-libcanberra-pulse lib32-openal lib32-giflib lib32-libva samba
yay -aS sdl2_compat12-git
yay -aS --noconfirm lib32-sdl2_compat12-git
yay dosbox-sdl2


Wine 5.6 (https://www.winehq.org) maps the Windows API to Linux so that you are able to run Windows applications and especially games on Linux (this doesn’t require a Windows license). To install Wine and it’s recommended base dependencies (see Arch Linux wiki https://wiki.archlinux.org/index.php/Wine) or just run the following command (minimum [green], recommended [blue] and optional [grey] packages of wine):

pacman -Sy wine wine_gecko wine-mono vkd3d faudio lib32-faudio lib32-vkd3d lib32-libpulse lib32-mpg123 lib32-gnutls lib32-libldap opencl-icd-loader lib32-v4l-utils lib32-opencl-icd-loader lib32-libxslt lib32-gst-plugins-base-libs lib32-libcanberra-pulse lib32-openal lib32-giflib lib32-libva samba
yay -aS sdl2_compat12-git
yay -aS --noconfirm lib32-sdl2_compat12-git
yay dosbox-sdl2

Several applications will run out of the box with the minimum dependencies. Wine has a 64bit run time, but a lot of Windows applications still requires 32Bit. It’s crazy how slow the Windows world switches to 64bit! As of this Wine pulls a lot of lib32* dependencies (make sure that Multilib is activated, if you need to activate it, read https://wiki.archlinux.org/index.php/Multilib).

If one application doesn’t start, open a terminal and run it like this to get additional output:

wine /path/to/application.exe

This is especially recommended if you install a new application and you want to check for error messages and missing dependencies without wondering why certain things don’t work.


Wine-Staging contains a lot of additional patches and fixes.

To install wine-staging and to be able to use the new Gtk3 backend (it needs to be activated in winecfg manually), run:

pacman -Sy wine-staging lib32-gtk3


Wine has been developed mostly around OpenGL. If a game has been released with OpenGL support for Windows only, then Wine can run the game natively on Linux by providing only the Windows API’s with the OpenGL stack.

Legacy WineD3D: DirextX -> OpenGL

The Wine project translates DirectX up until version 11 to OpenGL. The road to provide this support up until DX11 was extremely hard and took many years.

Nowadays in terms of performance and stability it is recommended to use Vulkan.


Since Wine 1.9.6 Vulkan applications/games run in Wine on Linux. Wine 3.4 reworked Vulkan support completely and offers since Wine 3.5 an integrated Vulkan loader. Kronos updated the Vulkan license and this allowed Wine to move from Vulkan 1.0.51 to 1.1 and newer (since 4.5). Basically the Windows surfaces are mapped by Wine to X11/XCB to provide direct Vulkan support.

Direct 3D 8/9/10/11/12 -> Vulkan

Similar to Wine’s translation layer of Direct 3D (DirectX) to OpenGL there are several projects to translate Direct 3D to Vulkan, which avoids certain bottlenecks of Wine’s legacy WineD3D OpenGL implementation. DXVK (which includes now D9VK) works great for all DirectX 9, 10 and 11 games. DirectX 12 is translated via the Vulkan based VKD3D. Direct 3D 8 and DirectDraw 1-7 and can be translated to DirectX9 via DXWrapper. For more details read DXVK + VKD3D and Vulkan-ize graphic and compute API’s.

Wine Prefix

With Wine prefix you can create multiple instances of the .wine folder including own settings and adjustments. In the example below a second prefix is created to run just the default wine without any modifications, this is useful if the default one has too many modifications. Or you can use it to test different software and settings. To create a new prefix, run after replacing CUSTOMPREFIX:

env WINEPREFIX=~/.wine-CUSTOMPREFIX wineboot -u

To run a application with this, run:

env WINEPREFIX=~/.wine-CUSTOMPREFIX winefile

Supporting Wine

If you want to support the Wine development, you can buy CrossOver. It is a commercial version of Wine and a lot of work is done by Codeweavers, you can buy it here https://www.codeweavers.com/products/crossover-linux. Another way is just to buy games on Steam as Valve is funding directly Proton, DXVK, VKD3D, ACO, RADV, FAudio, FSync…