How I Enable HDR Gaming on Linux with Gamescope on an AMD GPU

AI-generated

HDR gaming on Linux works quite well now, but the setup still depends on every part doing the right thing. The display, Wayland session, AMD driver, Gamescope and Proton all need to support HDR.

I use AMD GPUs on my Arch and Gentoo machines, and Gamescope is currently the most practical way I found to run HDR capable Steam games. It creates its own compositor for the game and can pass HDR output to a compatible Wayland desktop.

Hardware and desktop requirements

First, HDR needs an actual HDR capable display. This sounds obvious, but the display needs HDR enabled in its own on-screen menu too. Some monitors disable it for specific inputs, refresh rates or picture modes.

A decent DisplayPort cable is usually the easiest option. HDMI can work as well, but I had fewer strange limitations with DisplayPort on Linux desktops.

On the Linux side I use:

  • An AMD GPU using the in-kernel amdgpu driver
  • Mesa with the RADV Vulkan driver
  • A Wayland session
  • A compositor with HDR support
  • Gamescope and a recent Steam client
  • Proton Experimental or a recent Proton version for Windows games

KDE Plasma on Wayland is currently the easiest desktop choice for this. It has a visible HDR switch in the display settings and handles Gamescope HDR output well. GNOME Wayland HDR support has improved a lot too, but I still prefer Plasma for this use case.

Sway is my usual lightweight Wayland compositor, but it is not my HDR gaming desktop. For HDR games I log into Plasma Wayland instead.

Check that the session is really Wayland

Before trying any Steam launch option, I check the active session:

$ echo $XDG_SESSION_TYPE
wayland

You can also check this through systemd-logind:

$ loginctl show-session "$XDG_SESSION_ID" -p Type
Type=wayland

Gamescope can run under X11 too, but HDR is a Wayland setup. Starting Steam from an Xorg session is one of the easy mistakes to make.

Enable HDR on the desktop first

In KDE Plasma I open System Settings, go to Display & Monitor, select the HDR display and enable HDR there. I also set the wanted refresh rate before starting Steam.

When HDR is enabled, the normal desktop can look slightly washed out. That is not always a broken color profile. SDR applications need tone mapping while the display is in HDR mode, and this can look different depending on the monitor.

I also check that the kernel sees the expected AMD driver:

$ lspci -k | grep -A 3 -E 'VGA|Display'
0b:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] ...
        Kernel driver in use: amdgpu
        Kernel modules: amdgpu

For Vulkan, RADV should be available:

$ vulkaninfo --summary
GPU0:
        apiVersion         = 1.4.x
        driverName         = radv
        driverInfo         = Mesa ...

On Arch, these are the packages I normally need:

# pacman -S gamescope vulkan-radeon vulkan-tools

Mesa updates matter here. An older distribution release can have all HDR settings visible while still missing important Vulkan, KMS or Gamescope fixes.

Do not install AMDVLK just because it sounds like the official AMD driver. For gaming on my Linux systems, Mesa RADV is normally the better default and is what Steam, Proton and Gamescope setups are commonly tested with.

Check the connector HDR properties

The display driver needs to expose HDR related DRM properties. drm_info is useful for a quick check:

$ drm_info | grep -E 'HDR_OUTPUT_METADATA|Colorspace'
        HDR_OUTPUT_METADATA:
        Colorspace:

The properties alone do not prove that HDR will work. They just tell me that the connector and driver expose the needed DRM interface.

If nothing HDR related is shown, I check the cable, the active monitor input and the monitor firmware settings before changing random Linux configuration files.

Install and test Gamescope

Gamescope is in the regular repositories on Arch and Gentoo. I first verify that the installed binary supports the HDR option:

$ gamescope --help | grep hdr
  --hdr-enabled                 Enable HDR output
  --hdr-itm-enable              Enable SDR to HDR inverse tone mapping

--hdr-itm-enable is optional. It tries to map SDR content into an HDR range. I generally leave it disabled for real HDR games because I want the game to control its own HDR output.

For a Steam game, I set the launch option in Steam under Properties, General, Launch Options:

DXVK_HDR=1 gamescope --hdr-enabled -- %command%

This is the minimal setup I use first. DXVK_HDR=1 enables the HDR path in DXVK and VKD3D-Proton for compatible DirectX games. --hdr-enabled tells Gamescope to create an HDR capable output.

For games where I want a fixed output mode, I use the display resolution and refresh rate explicitly:

DXVK_HDR=1 gamescope --hdr-enabled -W 2560 -H 1440 -r 144 -- %command%

-W and -H describe the Gamescope output resolution. The -r option sets the target refresh rate. I only add these when automatic mode selection does not pick the correct mode.

The spaces around -- %command% matter. -- ends Gamescope options and everything after it is the game command Steam provides.

Proton and game specific HDR switches

Gamescope does not turn an SDR-only game into a native HDR game. The game itself must support HDR, and Proton must support its rendering path.

For Windows games I start with Proton Experimental. If a title needs a newer Wine or graphics patch, Proton-GE can also be worth testing. I change only one thing at a time though. Otherwise it gets hard to tell if the problem is Gamescope, Proton or the game.

Many games have a separate HDR toggle in their video settings. I enable HDR there after the game has started inside Gamescope. Some titles only show this setting after a restart.

Native Vulkan games are a bit different. They do not use DXVK, so DXVK_HDR=1 is not relevant for them. They still need Gamescope HDR support and an actual HDR capable game renderer.

Common problems I ran into

The most common issue is Steam launching Gamescope, but the game still only offers SDR. In my case this was usually one of these things:

  • I was logged into an X11 session instead of Wayland.
  • HDR was disabled in Plasma before starting the game.
  • The monitor was connected through a port or cable which did not expose HDR.
  • The game was using an old Proton version.
  • The game simply did not support HDR on its DirectX renderer.

I also avoid nesting Gamescope inside another Gamescope session unless I have a specific reason. It can work, but it makes display mode and input debugging more annoying.

For my normal Arch boot setup I also use a signed Unified Kernel Image, as described in my Arch Linux Secure Boot setup with systemd-boot, sbctl and a UKI. Secure Boot itself does not affect HDR, but keeping the graphics stack current is much easier when the normal boot path is predictable.

HDR gaming is also one reason why I generally prefer native Linux gaming over routing everything through a Windows VM. I still use GPU pass-through for a few special cases in my homelab, similar to my KVM setup with identical graphic cards, but Gamescope is much less work for supported Steam games.

If your game starts in HDR but the image looks wrong, disable inverse tone mapping, reset the monitor HDR mode and test the minimal launch option again. If you know a better Gamescope HDR setup, let me know.