NVIDIA DLSS, Output resolution and a full-size 3D at 4K #818

Closed
BlueHeisenberg wants to merge 2 commits from dlss into main
BlueHeisenberg commented 2026-11-08 22:26:09 +00:00 (Migrated from github.com)

Output resolution

The game's whole frame can be 2048x1152 (the game's default), 2560x1440 or 3840x2160. The game lays out its HUD and its render targets for that size. Docked only; applies after a restart.

Full-size 3D at 3840x2160. The game keeps its render targets in one 305 MB GPU pool sized for 2560x1440, so a 3840x2160 3D (Resolution 100% or DLAA at the 4K output) would run out of it and the game would crash as gameplay begins. The pool grows with the output's pixels (687 MB at 4K). The "Graphics" module heap that holds the pool grows with it, its budget check counts the shipped use, and the leftover heap carved from it keeps its shipped size. At 2048x1152 and 2560x1440 nothing changes.

Resolution row. It shows the 3D's size for the chosen output, in the twelfths the game really draws at, and a fixed Resolution reaches the 3D (the fixed path used to keep the dynamic path's last scale).

NVIDIA DLSS

Optional, for RTX GPUs. DLSS takes over the game's gameplay upscale. The 3D is drawn at the DLSS mode's size, and DLSS scales it up to the game's output using the game's depth and its camera's motion. Movies, menus and the HUD are unchanged. This is ported from zortos293/Lichii (its Streamline loader, camera motion and their shaders), which credits Duck912's Eglantine work.

Menu rows (Graphics tab)

Row Choices
DLSS Off, On (restart); says "no NVIDIA DLSS found" when the DLLs are missing
DLSS mode Ultra Performance, Performance, Balanced, Quality, DLAA, each shown with its size for the chosen output
DLSS preset J, K, L, M (changed at once)

While DLSS is on, the DLSS mode sets the Resolution.

NVIDIA files: not included

third_party/streamline/ holds NVIDIA Streamline v2.14.16's headers only (MIT, license.txt; noted in gpu/PROVENANCE.md). No NVIDIA binaries are in the repo. At run time sl.interposer.dll, sl.common.dll and sl.dlss.dll (from the Streamline SDK) and nvngx_dlss.dll are loaded from a streamline folder beside the game exe. With the launcher layout, that's beside bin\hookshot.exe. If nvngx_dlss.dll is missing, the NVIDIA app's copy is used, but only if it is signed by NVIDIA. The interposer and the model are checked for NVIDIA's signature. Without these files, DLSS stays off and the game runs as before.

Overrides: RX_DLSS=0/1, RX_DLSS_PRESET=J..M, RX_DLSS_DIR=<folder>; tests: RX_DLSS_DEBUG=<n>.

Menu rows (Graphics tab)

Row Choices
Output resolution 2048x1152, 2560x1440, 3840x2160 (restart)
Resolution Auto, 100/75/67/50% of the output, each shown with its size

The Resolution and DLSS mode labels, and the DLSS mode's help text, follow the Output resolution row as soon as it changes.

Overrides: HOS_OUTPUT_RES=0/1/2, HOS_RT_POOL_MB=<MB>; tests: HOS_RES_LOG=1, RX_VK_MENU_SCRIPT, RX_VK_MENU_DUMP.

Tested

On an RTX 5090 (Windows 11): the same 140-second gameplay route at every setting below. No crash and no device lost in any run.

Without DLSS (the game renders the 3D at the Resolution's size)

Output Resolution 100% Resolution 75%
2048x1152 3D at 2048x1152 3D at 1536x864
2560x1440 3D at 2560x1440 3D at 1920x1080
3840x2160 3D at 3840x2160 3D at 2880x1620

With DLSS (3D size -> upscaled to the output)

Output DLSS Quality DLAA
2048x1152 1366x768 -> 2048x1152 2048x1152 -> 2048x1152
2560x1440 1707x960 -> 2560x1440 2560x1440 -> 2560x1440
3840x2160 2560x1440 -> 3840x2160 3840x2160 -> 3840x2160

Also tested at the 4K output: Ultra Performance (1280x720 -> 3840x2160, 4 runs) and DLAA with frame generation 2x. DLSS itself costs about 1.7 ms of GPU time per frame at 4K.

## Output resolution The game's whole frame can be 2048x1152 (the game's default), 2560x1440 or 3840x2160. The game lays out its HUD and its render targets for that size. Docked only; applies after a restart. **Full-size 3D at 3840x2160.** The game keeps its render targets in one 305 MB GPU pool sized for 2560x1440, so a 3840x2160 3D (Resolution 100% or DLAA at the 4K output) would run out of it and the game would crash as gameplay begins. The pool grows with the output's pixels (687 MB at 4K). The "Graphics" module heap that holds the pool grows with it, its budget check counts the shipped use, and the leftover heap carved from it keeps its shipped size. At 2048x1152 and 2560x1440 nothing changes. **Resolution row.** It shows the 3D's size for the chosen output, in the twelfths the game really draws at, and a fixed Resolution reaches the 3D (the fixed path used to keep the dynamic path's last scale). ## NVIDIA DLSS Optional, for RTX GPUs. DLSS takes over the game's gameplay upscale. The 3D is drawn at the DLSS mode's size, and DLSS scales it up to the game's output using the game's depth and its camera's motion. Movies, menus and the HUD are unchanged. This is ported from zortos293/Lichii (its Streamline loader, camera motion and their shaders), which credits Duck912's Eglantine work. **Menu rows (Graphics tab)** | Row | Choices | |---|---| | DLSS | Off, On (restart); says "no NVIDIA DLSS found" when the DLLs are missing | | DLSS mode | Ultra Performance, Performance, Balanced, Quality, DLAA, each shown with its size for the chosen output | | DLSS preset | J, K, L, M (changed at once) | While DLSS is on, the DLSS mode sets the Resolution. **NVIDIA files: not included** `third_party/streamline/` holds NVIDIA Streamline v2.14.16's headers only (MIT, `license.txt`; noted in `gpu/PROVENANCE.md`). No NVIDIA binaries are in the repo. At run time `sl.interposer.dll`, `sl.common.dll` and `sl.dlss.dll` (from the Streamline SDK) and `nvngx_dlss.dll` are loaded from a `streamline` folder beside the game exe. With the launcher layout, that's beside `bin\hookshot.exe`. If `nvngx_dlss.dll` is missing, the NVIDIA app's copy is used, but only if it is signed by NVIDIA. The interposer and the model are checked for NVIDIA's signature. Without these files, DLSS stays off and the game runs as before. **Overrides:** `RX_DLSS=0/1`, `RX_DLSS_PRESET=J..M`, `RX_DLSS_DIR=<folder>`; tests: `RX_DLSS_DEBUG=<n>`. ## Menu rows (Graphics tab) | Row | Choices | |---|---| | Output resolution | 2048x1152, 2560x1440, 3840x2160 (restart) | | Resolution | Auto, 100/75/67/50% of the output, each shown with its size | The Resolution and DLSS mode labels, and the DLSS mode's help text, follow the Output resolution row as soon as it changes. **Overrides:** `HOS_OUTPUT_RES=0/1/2`, `HOS_RT_POOL_MB=<MB>`; tests: `HOS_RES_LOG=1`, `RX_VK_MENU_SCRIPT`, `RX_VK_MENU_DUMP`. ## Tested On an RTX 5090 (Windows 11): the same 140-second gameplay route at every setting below. No crash and no device lost in any run. **Without DLSS** (the game renders the 3D at the Resolution's size) | Output | Resolution 100% | Resolution 75% | |---|---|---| | 2048x1152 | 3D at 2048x1152 | 3D at 1536x864 | | 2560x1440 | 3D at 2560x1440 | 3D at 1920x1080 | | 3840x2160 | 3D at 3840x2160 | 3D at 2880x1620 | **With DLSS** (3D size -> upscaled to the output) | Output | DLSS Quality | DLAA | |---|---|---| | 2048x1152 | 1366x768 -> 2048x1152 | 2048x1152 -> 2048x1152 | | 2560x1440 | 1707x960 -> 2560x1440 | 2560x1440 -> 2560x1440 | | 3840x2160 | 2560x1440 -> 3840x2160 | 3840x2160 -> 3840x2160 | Also tested at the 4K output: Ultra Performance (1280x720 -> 3840x2160, 4 runs) and DLAA with frame generation 2x. DLSS itself costs about 1.7 ms of GPU time per frame at 4K.
hckrman101 commented 2026-11-08 22:45:43 +00:00 (Migrated from github.com)

I am working on a solution which doesn't use Streamline so it is compatible with both Windows and Linux

I am working on a solution which doesn't use Streamline so it is compatible with both Windows and Linux
BlueHeisenberg commented 2026-11-08 23:10:47 +00:00 (Migrated from github.com)

Split into two PRs: #849 (Output resolution and the full-size 3D at 4K) and #850 (NVIDIA DLSS, builds on #849).

Split into two PRs: #849 (Output resolution and the full-size 3D at 4K) and #850 (NVIDIA DLSS, builds on #849).
Commenting is not possible because the repository is archived.
No description provided.