DLSS frame generation through Streamline (#1114 Phase 3, ahead of FSR 3) #1517

Open
opened 2026-11-09 21:04:02 +00:00 by TheSlowly · 0 comments
Collaborator

Part of #1114 (Phase 3: DLSS frame generation), done ahead of the epic's FSR 3-first order because I have an RTX 50 to test on. Sky decides whether and when any of it lands; nothing here blocks FSR 3, and the Phase 1 pieces are meant to serve both generators.

What: DLSS Frame Generation (2x-4x, up to 6x on RTX 50) through NVIDIA Streamline with Reflex, on Windows. Built on #1451 (HDR output), which already has the world without UI and a separate UI layer.

How (licensing as DLSS RR, option B): a second MIT add-on, contrib/slshim -> slipstream_sl.dll, built and installed by the user next to the Streamline DLLs. Nothing NVIDIA ships with the viewer. In a frame generation session the same add-on also runs DLSS SR / RR through Streamline, so the NVIDIA runtime loads once.

Decided:

  • Setting RenderVKFrameGen (0 off, 2 / 3 / 4). On / off takes a restart; the multiplier changes live.
  • Needs DLSS upscaling and HDR10 output for now (SDR needs the UI-layer work later). Main window only; never VR, floaters, snapshots or offscreen renders.
  • Linux unchanged. Every failure path leaves the viewer exactly as without the setting, with the reason in the log.

Done (branch framegen-sl, on top of #1451):

  • The add-on: Streamline with manual hooking. Smoke-tested on an RTX 5070 Ti: frame generation up to 6x, Reflex, DLSS and DLSS-D, production binaries (no watermark). DLSS SR / RR evaluate on the GPU through it.
  • Viewer startup: Streamline before the Vulkan instance; its queues, extensions and features join device creation, with a retry without them.
  • The main swapchain and surface go through Streamline's proxies (a native-by-default function table in VkSwapchain). Floater windows and VR stay native. Frame generation pauses around swapchain rebuilds and while minimised.
  • Tested in world: starts and runs normally with the setting on. The first run froze; the fix was that Streamline's present never signals swapchain-maintenance1 present fences.

Next:

  • Per-frame inputs: depth, motion, the world without UI in PQ, the UI layer, camera, and a reset on teleports.
  • Reflex sleep and latency markers in place of our own frame limiter.
  • A Preferences choice, then an in-world check: watermark, DLSS-D parity, latency, artefacts.

Phase 1 overlap with FSR 3:

  • the swapchain function table, the pause / resume around swapchain changes, the device hook for extra queues;
  • the availability rules with tests (llvkframegenpolicy.h: VR, background, needs DLSS / HDR, main window only).

The epic's "off when already capped at the display rate" rule is not in yet.

Part of #1114 (Phase 3: DLSS frame generation), done ahead of the epic's FSR 3-first order because I have an RTX 50 to test on. Sky decides whether and when any of it lands; nothing here blocks FSR 3, and the Phase 1 pieces are meant to serve both generators. **What:** DLSS Frame Generation (2x-4x, up to 6x on RTX 50) through NVIDIA Streamline with Reflex, on Windows. Built on #1451 (HDR output), which already has the world without UI and a separate UI layer. **How (licensing as DLSS RR, option B):** a second MIT add-on, `contrib/slshim` -> `slipstream_sl.dll`, built and installed by the user next to the Streamline DLLs. Nothing NVIDIA ships with the viewer. In a frame generation session the same add-on also runs DLSS SR / RR through Streamline, so the NVIDIA runtime loads once. **Decided:** - Setting `RenderVKFrameGen` (0 off, 2 / 3 / 4). On / off takes a restart; the multiplier changes live. - Needs DLSS upscaling and HDR10 output for now (SDR needs the UI-layer work later). Main window only; never VR, floaters, snapshots or offscreen renders. - Linux unchanged. Every failure path leaves the viewer exactly as without the setting, with the reason in the log. **Done (branch `framegen-sl`, on top of #1451):** - The add-on: Streamline with manual hooking. Smoke-tested on an RTX 5070 Ti: frame generation up to 6x, Reflex, DLSS and DLSS-D, production binaries (no watermark). DLSS SR / RR evaluate on the GPU through it. - Viewer startup: Streamline before the Vulkan instance; its queues, extensions and features join device creation, with a retry without them. - The main swapchain and surface go through Streamline's proxies (a native-by-default function table in `VkSwapchain`). Floater windows and VR stay native. Frame generation pauses around swapchain rebuilds and while minimised. - Tested in world: starts and runs normally with the setting on. The first run froze; the fix was that Streamline's present never signals swapchain-maintenance1 present fences. **Next:** - Per-frame inputs: depth, motion, the world without UI in PQ, the UI layer, camera, and a reset on teleports. - Reflex sleep and latency markers in place of our own frame limiter. - A Preferences choice, then an in-world check: watermark, DLSS-D parity, latency, artefacts. **Phase 1 overlap with FSR 3:** - the swapchain function table, the pause / resume around swapchain changes, the device hook for extra queues; - the availability rules with tests (`llvkframegenpolicy.h`: VR, background, needs DLSS / HDR, main window only). The epic's "off when already capped at the display rate" rule is not in yet.
TheSlowly added this to the Slipstream project 2026-11-09 21:04:02 +00:00
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#1517
No description provided.