From 515019770f8a07a484e206816bff486db49e62d2 Mon Sep 17 00:00:00 2001 From: rickpeters Date: Tue, 13 Oct 2026 18:19:21 +0200 Subject: [PATCH] fix: on NVIDIA the SteamOS conversion is a choice, Gaming on NVIDIA stays preselected; supported cards are GTX 16 / RTX 20 and newer Co-Authored-By: Claude Sonnet 5.5 Claude-Session: https://claude.ai/code/session_01KkpbsMw4rQyBsxDG6ebHK2 --- CHANGELOG.md | 2 +- TECHNICAL.md | 2 +- lib/gamescope-nvidia.sh | 3 ++- lib/menu.sh | 4 ++++ lib/nvidia.sh | 2 +- 5 files changed, 9 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cbb8b2e..e11692a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,7 +7,7 @@ one per merged pull request. ## 2.11.2 - 2026-10-13 -- **feat: the SteamOS conversion is offered on NVIDIA PCs again (RTX 20 series or newer): it builds and installs a patched gamescope from [steamify-gamescope-nvidia](https://github.com/theupriser/steamify-gamescope-nvidia) (GBM-allocated scan-out buffers, NVIDIA's corrupted gaming-mode picture, gamescope#2309; a few minutes to build) and sets `gamescope_drm_gbm_scanout=1` for the session (`lib/gamescope-nvidia.sh`). It and "Gaming on NVIDIA" exclude each other; single user mode works with either. Tested on an RTX 5080 (driver 615.78.08): Steam's gaming UI is clean with it and shows artifacts without. The package is pinned to one gamescope release: updating it is not automatic yet** +- **feat: the SteamOS conversion is offered on NVIDIA PCs again (GTX 16 / RTX 20 series or newer: Turing and later, the cards NVIDIA's open kernel driver supports): it builds and installs a patched gamescope from [steamify-gamescope-nvidia](https://github.com/theupriser/steamify-gamescope-nvidia) (GBM-allocated scan-out buffers, NVIDIA's corrupted gaming-mode picture, gamescope#2309; a few minutes to build) and sets `gamescope_drm_gbm_scanout=1` for the session (`lib/gamescope-nvidia.sh`). It and "Gaming on NVIDIA" exclude each other; single user mode works with either. Tested on an RTX 5080 (driver 615.78.08): Steam's gaming UI is clean with it and shows artifacts without. The package is pinned to one gamescope release: updating it is not automatic yet** - **feat: "Gaming on NVIDIA" also keeps video memory over suspend (`NVreg_PreserveVideoMemoryAllocations=1` in `/etc/modprobe.d/90-steamify-nvidia.conf`, the initramfs is rebuilt), enables `nvidia-suspend`/`nvidia-resume`/`nvidia-hibernate`, and installs `lib32-nvidia-utils` and `lib32-libxkbcommon` (32-bit games, the 32-bit MangoHud preload) on a supported card; off removes only what Steamify added. Untested on hardware yet** diff --git a/TECHNICAL.md b/TECHNICAL.md index 03c1469..8d3094b 100644 --- a/TECHNICAL.md +++ b/TECHNICAL.md @@ -251,7 +251,7 @@ conversion off removes the setting and keeps the package. The package is pinned (`UPSTREAM_VERSION` in that repository): pacman does not update it, and Steamify does not rebuild it yet. So with an NVIDIA GPU (PCI vendor 0x10de, display class, its driver providing `nvidia_drm`: `nvidia_present`) the SteamOS -conversion (`gaming`, and its options `boot`, `single`, `glyphs`) is only offered on a supported card (RTX 20 series or newer, +conversion (`gaming`, and its options `boot`, `single`, `glyphs`) is only offered on a supported card (GTX 16 / RTX 20 series or newer, Turing and later, `nvidia_supported`) with the patched gamescope described below, or when it is already on (so it can be turned off). `nvidia` ("Gaming on NVIDIA", `lib/nvidia.sh`) is the alternative, and excludes the conversion (both would start Steam at login): it installs `steam` when missing (recorded in state `nvidia`, removed again only then) and enables the user diff --git a/lib/gamescope-nvidia.sh b/lib/gamescope-nvidia.sh index 8819e31..6904112 100644 --- a/lib/gamescope-nvidia.sh +++ b/lib/gamescope-nvidia.sh @@ -4,7 +4,8 @@ # https://github.com/theupriser/steamify-gamescope-nvidia; the package `steamify-gamescope-nvidia` is built here, on the PC, # and replaces `gamescope` (it provides it). The patch is opt-in: gamescope reads `gamescope_drm_gbm_scanout=1` from its # environment, which is set for the gaming session (gamescope-session's environment file, and environment.d). -# Used by the SteamOS conversion (`gaming_enable`/`gaming_disable`) on a supported NVIDIA card (`nvidia_supported`). +# Used by the SteamOS conversion (`gaming_enable`/`gaming_disable`) on a supported NVIDIA card (`nvidia_supported`): +# GTX 16 / RTX 20 series or newer (Turing and later, what NVIDIA's open kernel driver supports). # Sourced by steamify.sh; not meant to be run on its own. GSN_PKG=steamify-gamescope-nvidia diff --git a/lib/menu.sh b/lib/menu.sh index 2d9103e..dc5e2b9 100644 --- a/lib/menu.sh +++ b/lib/menu.sh @@ -206,6 +206,8 @@ detect_components() { component_available "$c" && component_selectable "$c" && ! is_action "$c" && [[ " ${NO_PRESELECT[*]} " != *" $c "* ]] && WANTED[$c]=1 done + # On NVIDIA "Gaming on NVIDIA" is the default; the conversion (a patched gamescope, built here) is a choice. + nvidia_present && WANTED[gaming]=0 WANTED[glyphs]=0 machine_available && WANTED[cec]=1 fi } @@ -284,6 +286,8 @@ defaults_list() { sel=false; component_selectable "$c" && sel=true on=false [[ "$sel" == true && " ${NO_PRESELECT[*]} " != *" $c "* ]] && on=true + # (On NVIDIA the conversion is a choice: "Gaming on NVIDIA" is preselected, see show_menu's first run.) + [[ "$c" == gaming || "$c" == glyphs ]] && nvidia_present && on=false [[ "$c" == cec ]] && machine_available && on=true items+="${items:+,}{\"id\":$(json_str "$c"),\"label\":$(json_str "${LABEL[$c]%%:*}")" items+=",\"hint\":$(json_str "$( [[ "${LABEL[$c]}" == *:* ]] && echo "${LABEL[$c]#*: }")")" diff --git a/lib/nvidia.sh b/lib/nvidia.sh index a09f792..348ee4c 100644 --- a/lib/nvidia.sh +++ b/lib/nvidia.sh @@ -125,7 +125,7 @@ nvsilent_disable() { nvidia_supported() { # A supported NVIDIA GPU: PCI vendor 0x10de, display class, its kernel - # driver installed, and not older than the RTX 20 series, decided like the + # driver installed, and not older than Turing (GTX 16 / RTX 20 series: the cards NVIDIA's open kernel driver supports), decided like the # VRAM booster does (vram_nvidia_legacy_id: chwd's legacy card lists, every # other card runs NVIDIA's open modules). Older cards are left alone. local d