fix(builder): Windows keeps NVIDIA's license accepted in its settings, so an update keeps DLSS without the SDK's files #2528

Merged
LNDF merged 1 commit from windows-dlss-license into main 2026-11-11 22:49:08 +00:00
LNDF commented 2026-11-11 22:16:54 +00:00 (Migrated from github.com)

On Windows, an update can drop DLSS from a game built with it: both builders use the DLSS SDK's LICENSE.txt as the record that you accepted NVIDIA's license, so if the SDK's files are gone (deleted, a new builder folder) and DLSS isn't ticked in the saved settings, the update builds without DLSS and its runtime is removed. This is the Windows side of #2485, which fixed the same for the Linux builder (pointed out in its review).

What changed

  • builder-settings.json gets DlssLicense, set when the DLSS tick's license is accepted. Both builders read and keep it (the file is shared between the WPF builder and builder/py).
  • An update keeps a folder's DLSS when its runtime is there and DlssLicense is set, or, for a license accepted before this change, when the SDK's LICENSE.txt is there (as before, so nobody loses DLSS on the switch).

Testing

  • tests/builder_dlss_update_test.cs: new cases, the record without the SDK keeps DLSS. Run here on .NET 10 (the PC has no .NET 8 packs; the fixture targets 8): 63 assertions pass, and the new case fails on main's UpdateBuild.
  • tests/test_builder_py_dlss_update.py (new): the Python builder's update decision, taken from its source and run with stand-ins. Passes, and fails on main's update_build.
  • python -I -B tests/run_all.py on Linux: nothing new fails (the three failures there also fail on main).
  • Not run in either builder's UI.

🤖 Generated with Claude Code

On Windows, an update can drop DLSS from a game built with it: both builders use the DLSS SDK's `LICENSE.txt` as the record that you accepted NVIDIA's license, so if the SDK's files are gone (deleted, a new builder folder) and DLSS isn't ticked in the saved settings, the update builds without DLSS and its runtime is removed. This is the Windows side of #2485, which fixed the same for the Linux builder (pointed out in its review). ## What changed - `builder-settings.json` gets `DlssLicense`, set when the DLSS tick's license is accepted. Both builders read and keep it (the file is shared between the WPF builder and `builder/py`). - An update keeps a folder's DLSS when its runtime is there and `DlssLicense` is set, or, for a license accepted before this change, when the SDK's `LICENSE.txt` is there (as before, so nobody loses DLSS on the switch). ## Testing - `tests/builder_dlss_update_test.cs`: new cases, the record without the SDK keeps DLSS. Run here on .NET 10 (the PC has no .NET 8 packs; the fixture targets 8): 63 assertions pass, and the new case fails on `main`'s `UpdateBuild`. - `tests/test_builder_py_dlss_update.py` (new): the Python builder's update decision, taken from its source and run with stand-ins. Passes, and fails on `main`'s `update_build`. - `python -I -B tests/run_all.py` on Linux: nothing new fails (the three failures there also fail on `main`). - Not run in either builder's UI. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
hckrman101 (Migrated from github.com) approved these changes 2026-11-11 22:41:17 +00:00
hckrman101 (Migrated from github.com) left a comment

Looks good. The fix does what the description says: both update paths keep DLSS when the runtime is in the folder and either DlssLicense is set or the old LICENSE.txt is there, so nobody loses DLSS on the switch. The record is set only when the license dialog is accepted, and the Python builder keeps it when it rewrites the shared settings file (its save_settings writes only the keys it is given, so that or core.load_settings() fallback is needed, good). The new tests cover the no-SDK case in both builders.

CI: the only red job is test_psychov35.py on windows part 2/2 (scanf deprecated under -Werror in its fixture), unrelated to this PR's files. The ubuntu part 2/2 and the title check were still pending when I looked.

Nits only, see the inline one. Also dlssLicense (the field) sits next to the existing DlssLicense string constant (the dialog text) in the same class; it compiles, but the names are easy to confuse.

Looks good. The fix does what the description says: both update paths keep DLSS when the runtime is in the folder and either `DlssLicense` is set or the old `LICENSE.txt` is there, so nobody loses DLSS on the switch. The record is set only when the license dialog is accepted, and the Python builder keeps it when it rewrites the shared settings file (its `save_settings` writes only the keys it is given, so that `or core.load_settings()` fallback is needed, good). The new tests cover the no-SDK case in both builders. CI: the only red job is `test_psychov35.py` on windows part 2/2 (`scanf` deprecated under -Werror in its fixture), unrelated to this PR's files. The ubuntu part 2/2 and the title check were still pending when I looked. Nits only, see the inline one. Also `dlssLicense` (the field) sits next to the existing `DlssLicense` string constant (the dialog text) in the same class; it compiles, but the names are easy to confuse.
hckrman101 (Migrated from github.com) commented 2026-11-11 22:41:17 +00:00

Nit: this comment stops mid-sentence ("...and its runtime went"), the end of it is missing.

Nit: this comment stops mid-sentence ("...and its runtime went"), the end of it is missing.
Commenting is not possible because the repository is archived.
No description provided.