feat(build): DLSS and FSR 4 switch on whatever the GPU, for OptiScaler, and a PC that can't run one says so in red #111

Merged
HumanBean merged 1 commit from llun/LongshotLauncher:feat/upscalers-on-unsupported into main 2026-11-15 19:26:50 +00:00
Member

Players who use OptiScaler need DLSS's and FSR 4's files even on a card that doesn't run them officially, but the build settings lock both switches off on such a PC. This lets either switch turn on whatever the GPU and shows the "This PC has no …" line in red, so it's clear the card itself doesn't support it.

Closes #100 (#100).

What changed

  • The switches turn on on any PC. NVIDIA DLSS has no GPU lock any more. AMD FSR 4 is locked only where this version's tools can't build it (Linux tools without AMD's FSR API headers), as before. The licence (or the Linux FSR 4 notice) is still shown first.
  • The build does what it does on a supported card. BuildStepViewModel dropped a switched-on upscaler when no card ran it. It now passes the settings as they are, through Upscalers.Chosen, so make_game.py gets the same --fetch-ngx-sdk --accept-nvidia-license / --fsr --fetch-fsr-runtime --accept-amd-license and SDK environment as on an RTX or RX 6000+ card. Nothing else about the build changes. The build log's settings line says DLSS (no card here runs it) in that case, for bug reports.
  • The line is red while no card here runs it. It's the same text and translations as before, in the theme's Bad colour (a TextBlock.rdesc.bad style beside rdesc). With the switch on, the licence tick shows and the red line stays under it. No card found (unknown) is not called unsupported, as before.
  • Saved and remembered. The switch's state no longer depends on the GPU, so a choice to turn it on sticks after a restart. LauncherSettings never looked at the GPU, and nothing else turns it off.
  • Core/Upscalers.cs holds the two rules (Unsupported, Chosen) so the core tests can reach them. SystemInfo.Offers's comment now says what it decides. There's a new screenshot scene, settings-windows-unsupported (a GeForce GTX 1660 SUPER on Windows, DLSS on), and the README mentions it.
  • No new text: translations.py reports the same missing texts as on main.

A supported row looks exactly as before. On an RTX-only PC the DLSS row is pixel-identical to main. The FSR 4 row, which that PC can't run, is the one that turns red.

Overlap: #110 (Intel XeSS) adds a third switch with the same GPU lock, and touches the same lines. Whichever lands second gets rebased. If XeSS lands first, I'll give it the same treatment here.

Screenshots

Drawn by tools/screenshots (a launcher in a temporary folder, a made-up GPU, no game files), cropped to the Upscaling card. The launcher has one theme (dark).

A GeForce GTX 1660 SUPER, with DLSS remembered as on:

Before: main @ e5c3675 After: this PR @ 06bb115
Before: both switches locked off, grey line After: DLSS on with its licence tick, both lines red

An RTX 4070 (settings-windows): the supported DLSS row is unchanged, and the FSR 4 row this PC can't run is now red and can be switched on:

Before: main @ e5c3675 After: this PR @ 06bb115
Before After

Tested

On Windows 11, .NET SDK 10.0.404:

  • dotnet build LongshotLauncher.slnx (Debug, and Release with -p:RestoreLockedMode=true): 0 warnings, 0 errors.
  • python -I tests/test_launcher_core.py: 1278 checks passed (main: 1275). The new check in ScreenChecks.cs does three things. It checks Unsupported for a GTX, Intel and RTX mix and for no card found. It runs MakeGameCommand.For on a request from Upscalers.Chosen and checks for the DLSS and FSR 4 fetch arguments and SDK environment. And it checks that Linux's FSR 4 notice stands for the licence there only. On main the check fails: Upscalers doesn't exist there, because the build step dropped the upscaler in the App, where the core tests can't reach. The translation warnings are the same as main's.
  • python -I tests/test_release.py: 31 tests OK.
  • In the headless launcher (the screenshot tool's temporary home, Intel graphics only, licences accepted), switching Dlss and Fsr on through the settings view model left both on, both lines red, and both saved: LauncherSettings.Load read them back as on.
  • Not run: a full game build from this branch. The arguments it passes are the ones checked above. No GTX or pre-RX 6000 card here to try OptiScaler with.

Note for Windows checkouts with core.autocrlf=true: tests/fixtures/release/SHA256SUMS comes out with CRLF and the core tests stop at ReleaseChecks ("not signed by a key this launcher trusts") on main too. I ran them with core.autocrlf=false in the clone. That's a separate matter from this PR.

🤖 Generated with Claude Code

Players who use OptiScaler need DLSS's and FSR 4's files even on a card that doesn't run them officially, but the build settings lock both switches off on such a PC. This lets either switch turn on whatever the GPU and shows the "This PC has no …" line in red, so it's clear the card itself doesn't support it. Closes #100 (https://git.magicbean.dev/MagicBeanDev/LongshotLauncher/issues/100). ## What changed - **The switches turn on on any PC.** NVIDIA DLSS has no GPU lock any more. AMD FSR 4 is locked only where this version's tools can't build it (Linux tools without AMD's FSR API headers), as before. The licence (or the Linux FSR 4 notice) is still shown first. - **The build does what it does on a supported card.** `BuildStepViewModel` dropped a switched-on upscaler when no card ran it. It now passes the settings as they are, through `Upscalers.Chosen`, so `make_game.py` gets the same `--fetch-ngx-sdk --accept-nvidia-license` / `--fsr --fetch-fsr-runtime --accept-amd-license` and SDK environment as on an RTX or RX 6000+ card. Nothing else about the build changes. The build log's settings line says `DLSS (no card here runs it)` in that case, for bug reports. - **The line is red while no card here runs it.** It's the same text and translations as before, in the theme's `Bad` colour (a `TextBlock.rdesc.bad` style beside `rdesc`). With the switch on, the licence tick shows and the red line stays under it. No card found (unknown) is not called unsupported, as before. - **Saved and remembered.** The switch's state no longer depends on the GPU, so a choice to turn it on sticks after a restart. `LauncherSettings` never looked at the GPU, and nothing else turns it off. - `Core/Upscalers.cs` holds the two rules (`Unsupported`, `Chosen`) so the core tests can reach them. `SystemInfo.Offers`'s comment now says what it decides. There's a new screenshot scene, `settings-windows-unsupported` (a GeForce GTX 1660 SUPER on Windows, DLSS on), and the README mentions it. - No new text: `translations.py` reports the same missing texts as on `main`. A supported row looks exactly as before. On an RTX-only PC the DLSS row is pixel-identical to `main`. The FSR 4 row, which that PC can't run, is the one that turns red. **Overlap:** https://git.magicbean.dev/MagicBeanDev/LongshotLauncher/pulls/110 (Intel XeSS) adds a third switch with the same GPU lock, and touches the same lines. Whichever lands second gets rebased. If XeSS lands first, I'll give it the same treatment here. ## Screenshots Drawn by `tools/screenshots` (a launcher in a temporary folder, a made-up GPU, no game files), cropped to the Upscaling card. The launcher has one theme (dark). A GeForce GTX 1660 SUPER, with DLSS remembered as on: | Before: main @ e5c3675 | After: this PR @ 06bb115 | |---|---| | ![Before: both switches locked off, grey line](https://git.magicbean.dev/attachments/b7aa6ba3-ce49-4dcb-b06a-165ee1df3909) | ![After: DLSS on with its licence tick, both lines red](https://git.magicbean.dev/attachments/f654247b-8ed5-420c-ac37-3f0d7d73ce81) | An RTX 4070 (`settings-windows`): the supported DLSS row is unchanged, and the FSR 4 row this PC can't run is now red and can be switched on: | Before: main @ e5c3675 | After: this PR @ 06bb115 | |---|---| | ![Before](https://git.magicbean.dev/attachments/547ff36e-5c29-4232-b751-80ced21b75cc) | ![After](https://git.magicbean.dev/attachments/78100435-2138-4fee-a8df-0a1deba20635) | ## Tested On Windows 11, .NET SDK 10.0.404: - `dotnet build LongshotLauncher.slnx` (Debug, and Release with `-p:RestoreLockedMode=true`): 0 warnings, 0 errors. - `python -I tests/test_launcher_core.py`: **1278 checks passed** (`main`: 1275). The new check in `ScreenChecks.cs` does three things. It checks `Unsupported` for a GTX, Intel and RTX mix and for no card found. It runs `MakeGameCommand.For` on a request from `Upscalers.Chosen` and checks for the DLSS and FSR 4 fetch arguments and SDK environment. And it checks that Linux's FSR 4 notice stands for the licence there only. On `main` the check fails: `Upscalers` doesn't exist there, because the build step dropped the upscaler in the App, where the core tests can't reach. The translation warnings are the same as `main`'s. - `python -I tests/test_release.py`: 31 tests OK. - In the headless launcher (the screenshot tool's temporary home, Intel graphics only, licences accepted), switching `Dlss` and `Fsr` on through the settings view model left both on, both lines red, and both saved: `LauncherSettings.Load` read them back as on. - Not run: a full game build from this branch. The arguments it passes are the ones checked above. No GTX or pre-RX 6000 card here to try OptiScaler with. Note for Windows checkouts with `core.autocrlf=true`: `tests/fixtures/release/SHA256SUMS` comes out with CRLF and the core tests stop at `ReleaseChecks` ("not signed by a key this launcher trusts") on `main` too. I ran them with `core.autocrlf=false` in the clone. That's a separate matter from this PR. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
feat(build): DLSS and FSR 4 switch on whatever the GPU, for OptiScaler, and a PC that can't run one says so in red
All checks were successful
CI / Compile and test (pull_request) Has been skipped
CI / Conventional Commit title (pull_request) Successful in 3s
06bb11505e
Players who swap upscalers in with OptiScaler need DLSS's and FSR 4's files on cards that
don't run them officially. The switches no longer lock on such a PC: the build fetches the
files as it does on a card that runs them, and the switch's "This PC has no ..." line is
shown in the theme's red (Bad) while no card here runs it.

- Core/Upscalers.cs: Unsupported (the red line) and Chosen (the build request's upscalers
  from the settings, the GPU not asked), checked in ScreenChecks.
- The settings step and the build step no longer drop a switched-on upscaler by GPU.
- A screenshot scene for a GeForce GTX on Windows; the README says so.

Closes #100

Co-Authored-By: Claude Opus 5.5 <[email protected]>
HumanBean deleted branch feat/upscalers-on-unsupported 2026-11-15 19:26:50 +00:00
Sign in to join this conversation.
No reviewers
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
MagicBeanDev/LongshotLauncher!111
No description provided.