Login screen + Preferences: GPU selector (force iGPU / choose a specific graphics card) #277

Closed
opened 2026-10-04 01:20:20 +00:00 by sky_line · 2 comments
Owner

Let users pick which GPU Slipstream uses, from the login screen, without editing debug settings or launching with environment variables. Use cases:

  • force the integrated GPU (battery life, or a broken or noisy dGPU);
  • force the discrete GPU on laptops where Windows or Optimus hands us the iGPU;
  • choose between two discrete cards;
  • work around a misbehaving driver.

UI

  • Login screen: a small "Graphics card" dropdown, e.g. next to the grid selector or under a gear/advanced section. Also in Preferences > Graphics (> Hardware or Advanced).
  • Entries list every Vulkan physical device that meets our requirements (Vulkan 1.3 + required features), with name, type (discrete / integrated / virtual / CPU), VRAM and driver version, plus "Automatic (recommended)".
  • Unsupported devices are shown greyed out with the reason (e.g. "needs Vulkan 1.3", "missing descriptor indexing"), so users understand why their iGPU isn't selectable.

Behaviour

  • Setting: RenderVKDeviceSelect (string). Store a stable identifier: deviceUUID from VkPhysicalDeviceIDProperties, falling back to vendorID:deviceID plus index. Not just an index, because the enumeration order can change.
  • Automatic: today's selection logic (prefer discrete, most VRAM, RT-capable).
  • If the saved device is missing (unplugged eGPU, driver change), fall back to Automatic and tell the user with a notification. Follow the auto-settings rule: say what changed and why; don't silently switch.
  • Applying:
    • Changing the GPU needs the Vulkan device re-created. Simplest and safe: on the login screen, apply by restarting the renderer before login, or restart the viewer with a clear prompt ("Slipstream will restart to switch to ").
    • Live switching mid-session is out of scope unless device re-creation is already robust (pipeline cache, all GPU resources). Note it as a stretch.
  • On change:
    • Re-run the GPU-tier / recommended-settings logic for the new card. It already exists for GPU changes, with the DisplaySetToRecommendedGPUChange notice.
    • Re-apply the VRAM-based defaults, e.g. the texture compression default (≤16 GB → High quality).
  • The pipeline cache is per device: key it by device UUID + driver version, and make sure switching doesn't load the wrong cache (vk_pipecache already validates the header; verify).

Platform notes

  • Linux:
    • Multiple Vulkan ICDs (NVIDIA + Mesa) enumerate together. MESA_VK_DEVICE_SELECT and DRI_PRIME exist as env overrides; our selector should work without them.
    • On hybrid laptops, presenting from the dGPU to an iGPU-driven display is handled by PRIME; check that the swapchain still presents on all paths (or document the limits).
  • Windows:
    • The OS GPU preference (Settings > Display > Graphics) can override us. Explain this in the tooltip.
    • NVIDIA Optimus / AMD switchable graphics may hide the dGPU unless the app requests high performance.
  • Logging: log the full device list at startup (it may already be logged) and which one was chosen and why. That helps bug reports.

Test

  • A laptop with iGPU + dGPU: pick each one and verify it really renders on the chosen device (nvidia-smi / radeontop / intel_gpu_top).
  • Unplug the chosen eGPU, or rename a device: falls back to Automatic with a notice.
  • A desktop with two dGPUs.
  • An iGPU below the minimum spec shows as greyed out with the reason.
Let users pick which GPU Slipstream uses, from the **login screen**, without editing debug settings or launching with environment variables. Use cases: - force the integrated GPU (battery life, or a broken or noisy dGPU); - force the discrete GPU on laptops where Windows or Optimus hands us the iGPU; - choose between two discrete cards; - work around a misbehaving driver. ## UI - Login screen: a small "Graphics card" dropdown, e.g. next to the grid selector or under a gear/advanced section. Also in Preferences > Graphics (> Hardware or Advanced). - Entries list every Vulkan physical device that meets our requirements (Vulkan 1.3 + required features), with name, type (discrete / integrated / virtual / CPU), VRAM and driver version, plus **"Automatic (recommended)"**. - Unsupported devices are shown greyed out with the reason (e.g. "needs Vulkan 1.3", "missing descriptor indexing"), so users understand why their iGPU isn't selectable. ## Behaviour - Setting: `RenderVKDeviceSelect` (string). Store a stable identifier: `deviceUUID` from `VkPhysicalDeviceIDProperties`, falling back to vendorID:deviceID plus index. Not just an index, because the enumeration order can change. - **Automatic:** today's selection logic (prefer discrete, most VRAM, RT-capable). - If the saved device is missing (unplugged eGPU, driver change), fall back to Automatic and tell the user with a notification. Follow the auto-settings rule: say what changed and why; don't silently switch. - **Applying:** - Changing the GPU needs the Vulkan device re-created. Simplest and safe: on the login screen, apply by restarting the renderer before login, or restart the viewer with a clear prompt ("Slipstream will restart to switch to <GPU>"). - Live switching mid-session is out of scope unless device re-creation is already robust (pipeline cache, all GPU resources). Note it as a stretch. - **On change:** - Re-run the GPU-tier / recommended-settings logic for the new card. It already exists for GPU changes, with the DisplaySetToRecommendedGPUChange notice. - Re-apply the VRAM-based defaults, e.g. the texture compression default (≤16 GB → High quality). - The pipeline cache is per device: key it by device UUID + driver version, and make sure switching doesn't load the wrong cache (vk_pipecache already validates the header; verify). ## Platform notes - **Linux:** - Multiple Vulkan ICDs (NVIDIA + Mesa) enumerate together. `MESA_VK_DEVICE_SELECT` and `DRI_PRIME` exist as env overrides; our selector should work without them. - On hybrid laptops, presenting from the dGPU to an iGPU-driven display is handled by PRIME; check that the swapchain still presents on all paths (or document the limits). - **Windows:** - The OS GPU preference (Settings > Display > Graphics) can override us. Explain this in the tooltip. - NVIDIA Optimus / AMD switchable graphics may hide the dGPU unless the app requests high performance. - **Logging:** log the full device list at startup (it may already be logged) and which one was chosen and why. That helps bug reports. ## Test - A laptop with iGPU + dGPU: pick each one and verify it really renders on the chosen device (nvidia-smi / radeontop / intel_gpu_top). - Unplug the chosen eGPU, or rename a device: falls back to Automatic with a notice. - A desktop with two dGPUs. - An iGPU below the minimum spec shows as greyed out with the reason.
sky_line added this to the Slipstream project 2026-10-06 15:04:13 +00:00
Author
Owner

Shipped in 1.3.0 Beta 1 (commits d27e249f75 and 05a67e8122). There is a Graphics card list in Preferences > Graphics > Advanced (setting RenderVKDeviceSelect, default auto). It is honoured at startup, and if the saved card is missing or unsupported it falls back to Automatic with a notice. Still open: the login-screen version of the selector. Testing needs a two-GPU machine: pick each card and confirm rendering moves (nvidia-smi or intel_gpu_top).

Shipped in 1.3.0 Beta 1 (commits d27e249f75 and 05a67e8122). There is a Graphics card list in Preferences > Graphics > Advanced (setting RenderVKDeviceSelect, default auto). It is honoured at startup, and if the saved card is missing or unsupported it falls back to Automatic with a notice. Still open: the login-screen version of the selector. Testing needs a two-GPU machine: pick each card and confirm rendering moves (nvidia-smi or intel_gpu_top).
Author
Owner

Fixed in Slipstream 1.3.0 (stable): https://git.slipstreamviewer.org/sky_line/Slipstream/releases/tag/v1.3.0

If you still see this on 1.3.0, reply here and we'll reopen it.

Fixed in **Slipstream 1.3.0** (stable): https://git.slipstreamviewer.org/sky_line/Slipstream/releases/tag/v1.3.0 If you still see this on 1.3.0, reply here and we'll reopen it.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
sky_line/Slipstream#277
No description provided.