Vulkan

Vulkan 1.2 (license Apache 2.0 and CCA 4.0+, https://github.com/KhronosGroup/Vulkan-Docs) is the new cross platform graphic API which saw a fast adoption. Vulkan is broadly supported from all GPU vendors and it runs on all major platforms.

Stuttering

To avoid stuttering in games Vulkan offers a new extension VK_GOOGLE_display_timing. This will allow the game engine to calculate the time until a frame is displayed on screen.

Vulkan Games

The Vulkan games available for Linux can be found in the sub menu of Vulkan. For reference you can get a list including other operating systems like Android here https://en.wikipedia.org/wiki/Vulkan_(API)#Software_that_supports_Vulkan

Software Development Environements

  • Qt5: Vulkan support has been added with Qt 5.10 by providing Vulkan platform independent helpers, it can be used by applications to render with Vulkan instead of OpenGL or DirectX. For more information read https://blog.qt.io/blog/2017/06/06/vulkan-support-qt-5-10-part-1. Qt5 itself is not yet using Vulkan to render directly, quote from the blog post above: “Vulkan support does not currently cover modules like Qt Quick, Qt 3D, Qt Canvas 3D, the OpenGL backend of QPainter, the GL composition-based QOpenGLWidget/QQuickWidget, etc. “. Additionally the Vulkan support in QT5 is limited at the moment to X11 (XCB) and Wayland support will be added later. With Qt 5.12 Vulkan can be used on the proprietary Metal on the proprietary MacOS via the open source MoltenVK.
  • GTK4: With the future GTK4 release the developers want to add besides the OpenGL backend a new Vulkan one. For more details read https://www.phoronix.com/scan.php?page=news_item&px=GTK4-Vulkan-Maturing.

Basic Game Helper Library

SDL2 2.12 (https://www.libsdl.org) is a cross platform basic game development library that can/should be used as a helper for games/applications to access and use video and input devices. It supports Wayland since version 2.0.4, since 2.0.6 it offers Vulkan helpers, since 2.0.8 it supports XDG shell v6 (with this SDL applications can use Wayland instead of XWayland) and 2.0.9 provided support for XDG decorations that will bring back a consistent window decorations on compositors supporting it like Kwin (but Mutter doesn’t support this, open Gtk bug).

SDL12-compat can be used to translate SDL1 to SDL2. This allows you to move away from the legacy project that is out of maintenance. Available in the AUR:

yay sdl2_compat12-git
yay lib32-sdl2_compat12-git

If you want to know which of the installed games is using SDL you can use find e.g. in your home directory:

find /home/USERNAME -name “*SDL2-2*”

FLOSS game examples based on SDL:

Game Development Engines

This is a overview of some free and open source software (FLOSS) game engines, if you want a almost complete overview read https://en.wikipedia.org/wiki/List_of_game_engines.

Legacy

  • Intrinsic (license Apache 2.0, https://github.com/begla/Intrinsic) is a Vulkan based cross-platform 3D game engine in development. It looks promising and the graphic quality is very high. The main website is not available anymore and there seems to be no development.
  • Lugdunum (license MIT, https://github.com/Lugdunum3D/Lugdunum) is a cross platform game engine in development written in C++14 with Vulkan support only. The development seems to be stopped.

Game Development Engines – Proprietary

  • Unity offers Vulkan support on Linux and Android since version 5.6 released in November 2016. Since Unity 2017.3 (September 2017) there is initial Wayland support as the internal/statically linked SDL has been upgraded to version 2.0.5, read https://blogs.unity3d.com/2017/09/30/unity-2017-3-beta-is-out. As of Unity 2018.2 SDL has been upgraded to 2.0.7, the Unity Editor finally works on Vulkan directly and it supports HiDPI on 4K displays as well. As of Unity 2019.1 support for 32 bit on Linux will be deprecated, only 64 bit is then fully supported. Games with a Vulkan build and/or Wayland SDL support require often start parameters (e.g. in the launch options of Steam):
    • -force-vulkan
    • -force-wayland
  • Unreal Engine 4 (since February 2017, source code is available under a read license, but not as free/open source), Epic even want to make Vulkan the primary graphic API on Linux, this sounds great! With Unreal Engine 4.20 the Editor works on Vulkan. Since the release of Unreal Engine 4.21 Vulkan is the default target on Linux, OpenGL is now only the fallback. Games with a Vulkan build require often the start parameter (e.g. in the launch options of Steam):
    • -vulkan
  • CRYENGINE 5.4 (https://github.com/CRYTEK/CRYENGINE) offers Vulkan support since July 2017. The source code is available to read only, but it is not a free and open source software license.
  • Unigine (https://unigine.com) is a visually astonishing multi platform engine with Linux support, read https://www.phoronix.com/scan.php?page=news_item&px=Unigine-Engine-2.6.1. You can follow the development here https://developer.unigine.com/en/devlog. They are working on Vulkan support, read https://twitter.com/Unigine/status/852441631106248704.
  • Valve Source 2 with great Vulkan and Linux support
  • id Tech 7 is Vulkan only including the development studio and works on Linux (requirement for Google Stadia), id Tech 6 supported Vulkan only on Windows and Linux only on Servers
  • Serious Engine with great Vulkan and Linux support
  • Flax Engine (https://flaxengine.com/home) supports Vulkan and Linux.

Software Development Kits (SDK)

Debugger

Tools & Libraries

  • OpenCV (license BSD, https://github.com/opencv/opencv) is a machine learning library that supports Vulkan as a compute backend (instead of OpenCL) since release 4.0.
  • VKVG (license MIT, https://github.com/jpbruyere/vkvg) is a multiplatform 2D library to draw Vector graphics via Vulkan. It shares similarities with Cairo and the OpenGL acceleration, that is used by Firefox and Gtk.
  • SPIRV-LLVM-Translator (license LLVM, https://github.com/KhronosGroup/SPIRV-LLVM-Translator) created Khronos to translate SPIR-V to LLVM IR and the other way around.
  • Volk (license MIT, https://github.com/zeux/volk) is a meta loader for Vulkan that avoid to use the generic Vulkan loader library supporting multiple Vulkan-ICD drivers.
  • vRt (license LGPLv3, https://github.com/world8th/vRt) is a cross platform ray tracing library based on Vulkan with support for AMD Vega.
  • Primu-vk (license , https://github.com/felixdoerre/primus_vk) is a Vulkan layer that allows GPU offloading. With this, you can forward the output of an external GPU to the internal one, similar to Primus for OpenGL but implemented only as a Vulkan layer.

Window Manager

  • Kwin is the Wayland (and X11) window manager of KDE and some initial work has been done to add a Vulkan back-end, read KDE.
  • ChamferWM (license BSD, https://github.com/jaelpark/chamferwm) is a tiling window manager with a Vulkan back-end, but it only supports X11 and not Wayland.

Test Suite