HDR

Related articles
Steam
Gaming
Gamescope
High-dynamic range
(HDR) is supported by
Wayland
's
Color management and HDR protocol
, and some compositors have implemented it.
X.org
has
no plans
to support HDR.
Requirements
HDR-capable display
While many displays advertise HDR support, many may provide a suboptimal experience if they lack any form of local dimming. More information is available at
RTINGS: Local Dimming on TVs
.
HDR-capable GPU and driver
AMDGPU
and
NVIDIA
are both supported
Intel graphics
has experimental HDR support with
Gen 9 and newer
The implementation is
reportedly incomplete
.
Supported compositor
Supported application
Vulkan WSI with HDR support
Vulkan HDR WSI
VK_EXT_swapchain_colorspace
and
VK_EXT_hdr_metadata
extensions are required for HDR support when using the Vulkan API.
mesa
25.1 and later includes these extensions by default.
nvidia-open
595.58.03 and later also
includes
these extensions by default.
NVIDIA
users on drivers
before
595.58.03 must install
vk-hdr-layer-kwin6-git
AUR
and set
ENABLE_HDR_WSI=1
in each game or application that will be used with HDR. Enabling this globally is
not
recommended.
Compositor configuration
KDE Plasma
See
KDE#HDR
.
Hyprland
Monitor v1
Append
, bitdepth, 10, cm, hdr
to the monitor's config line in your Hyprland config file.
Note
Monitorv2s are declared as such, whereas monitorv1s are declared simply as "monitor"
Monitor v2
Add a new line to the monitor's config and add
monitorv2 {
   # ...
   bitdepth = 10
   cm = hdr
}
Additional settings can be found on the
Hyprland wiki
.
More information can be found in the
Hyprland experimental docs
and the
Hyprland monitor docs
.
GNOME
Ensure
mutter
is >= 48.0.
Enable HDR in GNOME's display settings. The HDR toggle is per-monitor and is located next to the resolution and refresh rate setting.
Note
Gamescope HDR appears "washed out" with GNOME as GNOME lacks scRGB or support for the
frog-color-management-v1
protocol
[1]
[2]
. See
#With Gamescope
Gamescope with Steam session
Valve's Steam compositor
gamescope
offers experimental HDR support. Following these steps will allow you to try out Valve's Steam client running through the HDR capable gamescope.
Tip
An
AMDGPU
is recommended for use with gamescope -
NVIDIA
is known to have critical issues.
Install
gamescope
and
gamescope-session-steam-git
AUR
You may create the optional config file
~/.config/environment.d/gamescope-session.conf
with the following content:
if [ "$XDG_SESSION_DESKTOP" = "gamescope" ] ; then
    SCREEN_WIDTH=1920
    SCREEN_HEIGHT=1080
    CONNECTOR=*,eDP-1
    CLIENTCMD="steam -gamepadui -pipewire-dmabuf"
    GAMESCOPECMD="/usr/bin/gamescope --hdr-enabled --hdr-itm-enable \
    --hide-cursor-delay 3000 --fade-out-duration 200 --xwayland-count 2 \
    -W $SCREEN_WIDTH -H $SCREEN_HEIGHT -O $CONNECTOR"
fi
Update the resolution values above to the correct ones. You can list your displays by running
xrandr --query
.
You may need to set the Display
CONNECTOR
if it does not pick the right one by default.
You can now start
gamescope
from your login manager or a terminal using one of the following steps:
Via a login manager
Log out and select the
Steam Big Picture
in your login manager and log in.
Via the command line
Go to a new TTY by pressing
Ctrl+Alt+F2
Log in and run
gamescope-session-plus steam
to start the
standalone steam session
in HDR.
If networking does not work you can fix it by installing and enabling
NetworkManager
.
Configure Steam
In the general settings, under Display, you should now see HDR settings. Enable HDR and Experimental HDR Support.
Select an HDR compatible game and click on the cog next to it.
Set Compatibility to Force Proton 8.0 or Proton Experimental.
Set Game Resolution to match your monitor otherwise it will launch at Steam Deck native resolution.
Click Play to start the game.  Check the in-game settings to see if the HDR setting is available and enable it.
To switch back to your normal session, select
Power
and
Switch to desktop mode
from the Steam menu.
COSMIC
The
COSMIC
developers have
promised HDR support
in the initial stable release.
sway
Add
render_bit_depth 10
and
hdr off
to the outputs's config in your sway config file, and start sway with
WLR_RENDERER=vulkan
environment variable set.
Setup a binding to toggle hdr or toggle manually i.e.:
swaymsg output DP-1 hdr toggle
.
Note
Needs commit
94c819cc1f9
, so
sway-git
AUR
is needed (or sway 1.12 released)
Application configuration
Wine/Proton
HDR through
Wine
or
Steam Proton
requires
DXVK
(2.1+) or
VKD3D-Proton
(2.8+), depending on DirectX version used by the game.
Tip
Use either Proton 8.0+ or Proton GE 44+. All come packaged with sufficient DXVK and VKD3D versions.
Without Gamescope
To use HDR without gamescope run a build of Wine which includes the Wayland driver.
Note
Wines native
Wayland
driver is experimental and may perform better or worse than Xwayland depending on the game.
proton-ge-custom
: install
proton-ge-custom-bin
AUR
and set
PROTON_ENABLE_WAYLAND=1
and
PROTON_ENABLE_HDR=1
[3]
.
Note
PROTON_ENABLE_HDR
sets
DXVK_HDR=1
[4]
.
wine-tkg
: install wine-tkg, set
DXVK_HDR=1
, and unset
DISPLAY
.
proton-cachyos
or
wine-cachyos
: install your choice of
proton-cachyos
AUR
,
wine-cachyos-opt
AUR
, or
wine-cachyos
AUR
and set
PROTON_ENABLE_WAYLAND=1
and
DXVK_HDR=1
[5]
.
Tip
You can also easily install the aforementioned wine builds to Lutris, Bottles, or Steam using
protonup-qt
AUR
or
protonplus
AUR
.
With Gamescope
Gamescope with proper HDR requires scRGB and
xx-color-management-v4
protocol support or
frog-color-management-v1
protocol support in your compositor.
Because of this gamescope will not work with the
vk-hdr-layer-kwin6-git
AUR
layer. Ensure
ENABLE_HDR_WSI
is not
1
.
You have many options for using gamescope depending on your desired configuration:
Launch Steam with HDR enabled. All games will then have HDR enabled, but Steam and all games will be launched inside a gamescope window.
$ gamescope --hdr-enabled --steam -- env DXVK_HDR=1 steam
Enable HDR for a single game in Steam. Set the following
Launch options
:
DXVK_HDR=1 gamescope -f --hdr-enabled -- %command%
To launch a non-Steam game within gamescope:
$ DXVK_HDR=1 gamescope -f --hdr-enabled --
executable
Note
By default
gamescope
will launch with 1280x720 resolution. To override the default resolution, use the
-W
and
-H
parameters to a desired resolution.
RetroArch
HDR in RetroArch is supported from version
1.10.0
with Vulkan video driver. First, select video driver Vulkan. Then, enable HDR in RetroArch video settings via Settings tab > Video > HDR > Enable HDR.
$ retroarch
Native SDL
To run native games that use SDL with HDR set
SDL_VIDEODRIVER=wayland
.
For example for Quake II RTX:
$ SDL_VIDEODRIVER=wayland quake2rtx
mpv
For best image quality mpv maintainers recommend using the
gpu-next
[6]
video output driver, which is the default.
gpu-next
supports HDR with
--gpu-context=waylandvk
, which is selected by default on Wayland.
Note
This requires a Vulkan WSI with HDR support, see
#Vulkan HDR WSI
$ mpv "path/to/video"
Other ways of enabling
Wayland HDR support
include using the
dmabuf-wayland
video output and the
drm
GPU context.
$ mpv --vo=dmabuf-wayland "path/to/video"
From the tty terminal, one could do (
--gpu-context=drm
is selected by default)
$ mpv "path/to/video"
Firefox
firefox
introduces working experimental HDR in 138.0 under the hidden preference
gfx.wayland.hdr
. You can enable it at
about:config
.
Stable HDR is still in progress
[7]
[8]
.
Chromium
chromium
has work-in-progress HDR support
[9]
. Support has been merged as of version 141.0.7370.0.
Troubleshooting
HDR video samples
Kodi
wiki
maintains the list of fair use HDR video samples
. These can be used to test the HDR output using video players that support HDR such as
#mpv
.
Broken screen sharing with HDR10
Pipewire attempts to stream what it sees as BGRA, which WebRTC cannot interpret, due to its current lack of capacity to interpret it. As such, a "ParamId:EnumFormat: 0:0 Invalid argument" exception is thrown and the WebRTC socket crashes for that application
[10]
.
See also
X.Org Developers' Conference 2022 | Harry Wentland: "Is HDR Harder?"
wlroots/wlroots | HDR10 support
Xaver Hugl's blog | An update on HDR and color management in KWin