1.0.0
Initial release.
Two display fixes for the Lenovo Legion Go 2 OLED under gamescope, both measured on the device rather than inferred from source.
The Steam brightness slider works again in HDR/PQ
The panel is driven over eDP AUX luminance control and ignores the backlight while in PQ, so Steam's writes to /sys/class/backlight/amdgpu_bl0 went nowhere — the slider moved and nothing happened.
The requested level is forwarded to gamescope's GAMESCOPE_SDR_ON_HDR_CONTENT_BRIGHTNESS instead. Both are expressed in nits, so the mapping is a plain divide by 1000 and Steam's own perceptual step spacing carries over untouched. There is no second slider to learn: the one you already use starts working.
It stands down whenever HDR content is on screen, where Steam already drives its own gain atoms, and whenever the panel is not in PQ, where the backlight works by itself.
Games read the panel's real HDR metadata
DXVK vendors libdisplay-info from March 2023, whose parse_ext() ignores errno and therefore discards an entire EDID when it meets a DisplayID 2.0 block it does not support. Games were handed DXVK's placeholders instead.
Measured with DXVK_HDR=1, so DXVK is in the same HDR10 colour space a game would be:
| What a game is told | Without the fix | With the fix | The panel's EDID |
|---|---|---|---|
| Peak luminance | 1499.000 nits | 1107.128 nits | 1107.128 |
| Full-frame luminance | 799.000 nits | 475.683 nits | 475.683 |
| Black level | 0.0100 nits | 0.0007 nits | 0.0007 |
| Red primary | 0.6800, 0.3200 | 0.6836, 0.3154 | 0.6836, 0.3154 |
| Green primary | 0.2650, 0.6900 | 0.2402, 0.7139 | 0.2402, 0.7139 |
| Blue primary | 0.1500, 0.0600 | 0.1396, 0.0439 | 0.1396, 0.0439 |
Peak overstated by 35%, full-field by 68%, black level by 14x, and a gamut that is simply a different one. Cross-check: with the fix on, Marvel's Spider-Man Remastered reports 1107 nits in its own HDR calibration screen after a reset to defaults.
The proper fix belongs in DXVK. This is a stopgap for as long as that copy is stale.
Setup
The plugin installs the gamescope display script it needs and keeps any existing one alongside as .backup. Until that is done the panel shows only the setup button, and the background work stays off with it. Uninstalling puts the previous script back.
Cost
No polling. The backlight class raises sysfs_notify() on every level change, so the plugin blocks on that and the kernel wakes it exactly when the slider moves. One xprop call every two seconds is the only recurring work — about 0.1% of one core.
Install
Download the zip below, then in Decky: gear icon → Developer → Install Plugin from ZIP File.
Requires a Legion Go 2 with the Samsung AMS881KB01-0 panel for the brightness half; the EDID half works on any affected display.