FSR-only AA: resolve glow without our TAA, then retire TAA/TAA-U for FSR Native AA #246

Open
opened 2026-10-02 11:35:07 +00:00 by sky_line · 1 comment
Owner

Finding (tested 2026-10-02)

With an FSR mode selected (tested at Native AA, mode 6) and RenderVKTAAGlow off, glow shimmer comes back immediately on glowing faces and their surroundings.

FSR only resolves the HDR scene. The per-face glow target is a separate render-resolution, jittered MRT that bloom and the LDR glow read later. Today, under FSR, our TAA still runs a glow-only dispatch every frame (recordTAA(glowOnly)) to stabilize it. That costs:

  • the p_taa dispatch (~0.5 ms at 4K);
  • a display-sized TAA history kept allocated (~265 MB at 4K).

Goal

Let FSR handle temporal AA on its own, then retire our TAA/TAA-U from the UI and use FSR Native AA as the default AA, keeping our TAA only as the internal fallback for devices without FSR's storage-format support.

Options to evaluate for glow

  1. Glow through FSR's input. Add the glow contribution into the HDR colour before FSR and drop the separate glow resolve. Bloom / glow would then extract from FSR's resolved output.
    • Needs a way to keep LL's glow look, which is the separate blur of glow × colour, not a threshold bloom. One route is to extract glow after FSR by a stored per-pixel glow factor. That factor would also need resolving, so it may just move the problem.
    • Check the reactive / transparency-composition masks so FSR doesn't smear it.
  2. Lightweight glow accumulator. A tiny temporal pass for the glow target only. It would run at reduced resolution (glow is blurred heavily anyway), reuse FSR's dilated motion vectors / our pre-pass motion, and use a small history (RG11B10 at ½ or ¼ res).
    • Replaces the full TAA dispatch and the 265 MB history. Probably cheapest and lowest risk.
  3. Unjittered glow. Render glow without jitter (a separate pass or depth-EQUAL rerun). This adds cost and aliasing, so it's likely worse.
  4. Second FSR context for glow. Expensive and overkill; listed for completeness.

Then

  • Bench FSR Native AA (6) against our native TAA: RenderVKBenchSetting RenderVKUpscaleMode, values 6,<native TAA mode>, subs p_taa,p_fsr. Decide the default AA from cost and quality.
  • Retire TAA-U from the UI and presets. Migrate saved mode 5 to FSR Custom (11) at the same RenderVKRenderScale; RLVa already does this.
  • Stop allocating the TAA history whenever FSR is active.
  • Keep our TAA code as the automatic fallback (FSR's "unsupported" path).

The FSR 3.1 integration (branch fsr31; llcleanfsr3vk.cpp, recordTAA / recordTaaInputBarriers), the glowtaa work, and the earlier emissive-shimmer report.

## Finding (tested 2026-10-02) With an FSR mode selected (tested at **Native AA, mode 6**) and `RenderVKTAAGlow` off, **glow shimmer comes back immediately** on glowing faces and their surroundings. FSR only resolves the HDR scene. The per-face glow target is a separate render-resolution, **jittered** MRT that bloom and the LDR glow read later. Today, under FSR, our TAA still runs a glow-only dispatch every frame (`recordTAA(glowOnly)`) to stabilize it. That costs: - the `p_taa` dispatch (~0.5 ms at 4K); - a display-sized TAA history kept allocated (~265 MB at 4K). ## Goal Let FSR handle temporal AA on its own, then retire our TAA/TAA-U from the UI and use FSR Native AA as the default AA, keeping our TAA only as the internal fallback for devices without FSR's storage-format support. ## Options to evaluate for glow 1. **Glow through FSR's input.** Add the glow contribution into the HDR colour before FSR and drop the separate glow resolve. Bloom / glow would then extract from FSR's resolved output. - Needs a way to keep LL's glow look, which is the separate blur of `glow × colour`, not a threshold bloom. One route is to extract glow after FSR by a stored per-pixel glow factor. That factor would also need resolving, so it may just move the problem. - Check the reactive / transparency-composition masks so FSR doesn't smear it. 2. **Lightweight glow accumulator.** A tiny temporal pass for the glow target only. It would run at reduced resolution (glow is blurred heavily anyway), reuse FSR's dilated motion vectors / our pre-pass motion, and use a small history (RG11B10 at ½ or ¼ res). - Replaces the full TAA dispatch and the 265 MB history. Probably cheapest and lowest risk. 3. **Unjittered glow.** Render glow without jitter (a separate pass or depth-EQUAL rerun). This adds cost and aliasing, so it's likely worse. 4. **Second FSR context for glow.** Expensive and overkill; listed for completeness. ## Then - **Bench FSR Native AA (6) against our native TAA:** `RenderVKBenchSetting RenderVKUpscaleMode`, values `6,<native TAA mode>`, subs `p_taa,p_fsr`. Decide the default AA from cost and quality. - **Retire TAA-U from the UI and presets.** Migrate saved mode 5 to FSR Custom (11) at the same `RenderVKRenderScale`; RLVa already does this. - **Stop allocating the TAA history** whenever FSR is active. - Keep our TAA code as the automatic fallback (FSR's "unsupported" path). ## Related The FSR 3.1 integration (branch fsr31; `llcleanfsr3vk.cpp`, `recordTAA` / `recordTaaInputBarriers`), the glowtaa work, and the earlier emissive-shimmer report.
Author
Owner

Status 2026-10-05: still open. With FSR on, our TAA still runs a glow-only dispatch every frame (RenderVKTAAGlow, ~0.5 ms and ~265 MB of history at 4K; also seen in the #405 VRAM accounting). Retiring that pass is the remaining goal.

Status 2026-10-05: still open. With FSR on, our TAA still runs a glow-only dispatch every frame (`RenderVKTAAGlow`, ~0.5 ms and ~265 MB of history at 4K; also seen in the #405 VRAM accounting). Retiring that pass is the remaining goal.
sky_line added this to the Slipstream project 2026-10-06 15:04:15 +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#246
No description provided.