FSR 1/4: render resolution separate from display resolution #181

Closed
opened 2026-09-29 21:31:11 +00:00 by sky_line · 1 comment
Owner

Part of #6 (FSR), epic #84. Needed by every upscaler (ours, FSR 3.1, a plain resolution divisor from #39).

Today one width, height runs through the whole VK frame. Split it:

Render size (scaled): depth pre-pass, motion vectors, HDR scene + depth, AO, SSR and its previous-frame copy, water / refraction copies, reactive reference, particles, occlusion Hi-Z, the main-view cluster grid.
Display size: the upscaler output and everything after it (DoF, bloom / glow / flare, exposure, eyedropper, tonemap, grading, SMAA/FXAA, final), selection outline, HUD, UI, snapshots.

Also:

  • Jitter is a fraction of a render pixel; TAA mip bias becomes log2(render / display) - 0.5 style.
  • Window resize or scale change resets history.
  • Mirror / probe captures and custom-size snapshots unaffected (or explicitly native).
  • Setting RenderVKRenderScale (1.0 = today, exact same path). Until the upscaler lands, the TAA resolve does the upscale with a simple filter so the path is testable end to end.

Done when: scale 1.0 is pixel-identical to today, and 0.5-0.77 renders and composites correctly with UI, HUD, selection, snapshots, mirrors and DoF all at display size.

Part of #6 (FSR), epic #84. Needed by every upscaler (ours, FSR 3.1, a plain resolution divisor from #39). Today one `width, height` runs through the whole VK frame. Split it: **Render size** (scaled): depth pre-pass, motion vectors, HDR scene + depth, AO, SSR and its previous-frame copy, water / refraction copies, reactive reference, particles, occlusion Hi-Z, the main-view cluster grid. **Display size**: the upscaler output and everything after it (DoF, bloom / glow / flare, exposure, eyedropper, tonemap, grading, SMAA/FXAA, final), selection outline, HUD, UI, snapshots. Also: - Jitter is a fraction of a *render* pixel; TAA mip bias becomes `log2(render / display) - 0.5` style. - Window resize or scale change resets history. - Mirror / probe captures and custom-size snapshots unaffected (or explicitly native). - Setting `RenderVKRenderScale` (1.0 = today, exact same path). Until the upscaler lands, the TAA resolve does the upscale with a simple filter so the path is testable end to end. Done when: scale 1.0 is pixel-identical to today, and 0.5-0.77 renders and composites correctly with UI, HUD, selection, snapshots, mirrors and DoF all at display size.
Author
Owner

Done and tested in-world (pushed up to 33a645cd0d): RenderVKRenderScale / RenderVKUpscaleMode, render-size scene targets with native-scale aliasing, unjittered display depth for overlays/selection/HUD, descriptor re-writes on target re-creation (mTargetGen), AO radius in render pixels. Measured on the 5090: native ~105-110 FPS -> Performance ~135 FPS.

Done and tested in-world (pushed up to 33a645cd0d): RenderVKRenderScale / RenderVKUpscaleMode, render-size scene targets with native-scale aliasing, unjittered display depth for overlays/selection/HUD, descriptor re-writes on target re-creation (mTargetGen), AO radius in render pixels. Measured on the 5090: native ~105-110 FPS -> Performance ~135 FPS.
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#181
No description provided.