feat(vk): enable PsychoV35 upscaler compatibility by default #608

Merged
HumanBean merged 17 commits from futondestroyer/Longshot:codex/psychov35-default into main 2026-11-15 03:10:15 +00:00
Member

Type: feat · Risk: medium · Tested on: Windows, RTX 4070 · Needs: prerequisite merges, Linux build, AMD HDR and broader rollout validation

Why

Selecting Native HDR PsychoV35 should retain a supported upscaler without requiring an environment opt-in. This enables its compatibility routes automatically while keeping Vanilla as the default tone mapper.

Dependent WIP: do not merge before these four support fixes and their required validation:

  • #527 — upscaling Off.
  • #528 — spatial/FXAA TAAU replacement.
  • #536 — shared-chain FSR 3.1 upscaling.
  • #605 — FSR 3.1 frame generation.

Their commits are temporarily stacked here for integration testing. After they land, rebase to leave only the rollout commits. No upstream PR was merged by this work. Formal dependency-link creation returned HTTP 404; the prerequisites remain explicit here.

What changed

Enable the supported PsychoV35 upscaler routes when that tone mapper is selected, without extra environment setup. Keep an explicit disable for troubleshooting and retain the backend's existing safety checks.

  • upscaler_rows::psychov35_compatibility supplies one default policy to the temporal scene gate, FSR 3.1 HDR callback and independent FSR FG gate. Unset/empty or nonzero enables compatibility; explicit 0 disables it. Existing once-per-process caching, Native HDR selection, supported engines, matching formats, camera/depth and multiplier guards remain.
  • Preserve independent Off/TAAU support, Vanilla's packed path, HDR and tone-mapper defaults, and the separate FSR FG opt-in with its midpoint/2x limit. The legacy own-input FSR upscaler remains unsupported.
  • Execute the actual gates, actual FSR HDR callback and real Native HDR tone-selection function with unset/empty/0/1/2 in separate processes. Preserve existing rejection checks. Model Off's actual public caller before testing its private stretch helper.
  • Update player/development/history documentation and include eight measured-run records.

The earlier settings gap was a harness editing the tone mapper after HDR Off correctly hid its row. Set Native HDR before editing that row; skip it in SDR/Expanded. No upscaler-dependent menu restriction was removed. An older control bridge also cannot step directly to numeric Upscaler value 2: DLAA is DLSS Native. Its controls below therefore use separate cold launches with the saved DLAA setting.

Measurements

Verdict: both corrected interleaved pairs retain actual FSR upscaling and AMD generation with the flag unset. Every settled PsychoV35 FSR FG interval is 600/600 AMD-made with zero missing inputs, and the last upscaler status interval also reports 600 actual AMD FSR upscaler draws. DLSS, Off, replacement, Vanilla/SDR and returns complete normally. NGX and cold-DLAA controls pass; explicit 0 restores the expected fallback. All eight processes exited normally (exit 0).

main: 6c9edffe
this PR: codex/psychov35-default @ a9653209 (production code 3fa9b801; results-only commit on top)
Baseline: Before: this PR @ 3fa9b801, RX_VK_PSYCHOV35_DLSS=1, representing the previous manual opt-in behavior, compared with the same code and flag unset. Game runs use the unchanged agreed development base 514591a3 plus the common scene matcher and four prerequisite fixes. Main alone lacks those combined support paths; this isolates automatic compatibility from them instead of making a new full game build.

Hardware: RTX 4070 12 GB, NVIDIA 621.01; Core i7-13700F, 32 GB; Windows kernel 26300 / 26H2.
Scene: daylight Lon Lon Ranch alley, one fresh copied checkpoint per process, stationary camera; 2560x1440 output and 2560x1421 client, Native HDR paper white 200 / peak 1000, sharpness 0, cap 61. Forced TAAU replacement on NVIDIA. NVIDIA FG disabled/Built-in provider in the main matrices; FSR FG explicitly enabled at 2x in PsychoV35 FSR phases and Off otherwise.
Method: explicit 1/unset/explicit 1/unset, runs a3/b3/c3/d3. Seven phases each; FG phases advance 1250+ presents, other phases 650+. Validate actual settings, stable play, engine evaluations and the last complete 600-request generation interval. Last GPU-time report per phase, then median across the two runs per configuration, is shown below. World time/animation and GPU clocks were not frozen.
How to reproduce: run that phase order at the same checkpoint, restarting between environment configurations; read real drawn/generated counts rather than the menu row. Nineteen relevant production functions/helpers match the measured pack and current source byte-for-byte; its existing base pipeline-creation wrappers are retained. The actual current-source Windows renderer is also built independently.

Phase; last logged GPU time in ms, two runs and median Before: this PR @ 3fa9b801, RX_VK_PSYCHOV35_DLSS=1 After: this PR @ 3fa9b801, flag unset (new default)
fsr67 10.9, 10.8; median 10.85 10.7, 10.6; median 10.65
dlss67 9.0, 9.0; median 9.00 9.0, 9.1; median 9.05
off100 9.5, 9.1; median 9.30 9.1, 9.2; median 9.15
taau75 8.3, 8.1; median 8.20 8.2, 8.1; median 8.15
vanilla67 8.7, 8.6; median 8.65 8.6, 8.7; median 8.65
sdr67 8.6, 8.5; median 8.55 8.7, 8.6; median 8.65
return-fsr67 10.9, 10.8; median 10.85 10.8, 10.9; median 10.85

These capped samples are descriptive parity observations, not uncapped FPS gains or statistical performance-equivalence proof. The last per-phase VRAM reports span 6.8–8.0 GB; these are samples, not peaks. The single explicit 0 rollback process is a functional control, not a repeated performance baseline. Adoption cost versus the previous fallback on other hardware remains unmeasured.

Additional controls:

  • Explicit 0: PsychoV35 FSR at 67% yields 0/600 AMD-made and 600 missing inputs; Vanilla FSR still evaluates after the tone switch.
  • Flag unset, DLSS at 67%, Auto NVIDIA FG 2x, AMD FG disabled: last NGX interval 600/600 made with 0 missing inputs.
  • Cold saved DLAA, flag 1 then unset: both report 600 actual DLAA draws; FG Off.
  • Captured stills show visible scenes without all-black output or obvious global colour corruption. They do not establish calibrated HDR brightness, full temporal quality or absence of transfer flicker.
[hos Presentation Thread] vk: PsychoV35 FSR 3.1: RGBA16F linear route; scene format 122, network input 97, output 97
[hos Presentation Thread] vk: status: 600 frames, the slowest 25.2 ms; VRAM 7.5 of 11.0 GB; AMD FSR 3.1: 600 frames drawn, 3 made, jitter +0.219 -0.426 px, actor motion 38541 draws in 600 frames (0.090 ms CPU a frame), its images 64 MB, its own 150 MB
[hos Presentation Thread] vk: fsr3fi: 600 of the last 600 made frames by FSR 3.1, 0 without its inputs (the renderer's own made them)
[hos Presentation Thread] vk: DLSS Frame Gen (NGX): of the last 600 presents 600 made by DLSS-G (0 told to reset, 552 with the camera still, 0 NGX said not to show); the renderer's own made the rest: 0 without new inputs (no DLSS/DLAA this frame), 0 after a gap, 0 asked more than 1 frames, 0 refused

An earlier iteration at bf19a4c3 generated AMD frames but rejected FSR upscaling under unset because its separate HDR callback still required 1. Correction 3fa9b801 and the expanded regression address that omission; all table data above uses the corrected code. Earlier failed/partial harness runs are excluded.

Flags and settings

The existing compatibility switch defaults on; AMD frame generation retains its separate off-by-default opt-in.

Flag What it is Before this PR After this PR Effect Helps / doesn't help / untested Recommendation
RX_VK_PSYCHOV35_DLSS Existing compatibility switch Unset/empty off; 1 on Unset/empty on; 0 off; nonzero on Admit supported Native HDR PsychoV35 routes DLSS/DLAA, FSR4/native AA, shared-chain FSR3 and separately opted-in FSR FG; legacy FSR remains unsupported Automatic after required validation and prerequisites; 0 for rollback
RX_VK_FSR_FG Existing AMD generation opt-in Off Off Request AMD midpoint at FG 2x Existing HUD/camera-motion limitations remain; no 3x+ added Retain opt-in

Restart after editing longshot_env.txt. Off and the spatial/FXAA replacement remain independent of the compatibility switch. No automatic HDR, tone-mapper selection or saved-option default change.

Testing

Tested: corrected current-source Windows renderer 4s / 0 failed and link success (initial clean build 56s); corrected isolated pack 6s compile / 10s total, 0 failed. Fifteen focused combined-source checks pass. New environment regression compiles and fails specifically at the actual HDR callback on the previous implementation, and passes here. The earlier negative control also fails unchanged prerequisite admission. Eight game processes/33 phases and eight run fragments are included; repository fragment validation passes. Relevant measured production functions match current code.

Final full suite: 537 passed, 14 failed, 35 skipped in 119s here; clean main 6c9edffe 531 passed, the same 14 failed, 35 skipped in 117s; unchanged combined control 757ba924 536 passed, the same 14 failed, 35 skipped in 119s. No PR-only failure. Shared failures: tests/test_appimage_player_build.py, tests/test_cpm_discovery.py, tests/test_crash_dialog.py, tests/test_env_on.py, tests/test_lift_cleanup_error.py, tests/test_linux_preflight.py, tests/test_make_game_cache.py, tests/test_oot_state_tap.py, tests/test_readback_late.py, tests/test_release.py, tests/test_tested_configurations.py, tests/test_vk_pgo.py, tests/test_vram_budget_row.py, tests/test_walk_key.py.

Not tested: Linux build/runtime, AMD/Intel hardware, FSR4 runtime on this NVIDIA card, other drivers/resolutions/scenes, dynamic-resolution/Auto and every scale on the rollout head, native game-network gameplay without the replacement override, expanded-HDR runtime, extended play, calibrated HDR luminance, uncapped performance and peak-memory behavior. General Lake Hylia/Field transition fallback/flicker is not claimed fixed.

Must be tested:

  • Linux clang/GCC: documented renderer-only build and focused/default fixtures, expecting compile success and passing policy/format/history checks (by hand: T-FN7L; Test Farm request on current head; maintainer approval required).
  • AMD Native HDR display, Windows/Linux: FSR3 and FSR4/native AA where available; unset vs 1, restart with 0, 67/83/100%, tone/HDR/scale/FG transitions. expecting actual upscaler evaluations and generation counts plus stable visible HDR output (by hand: T-HFTK, awaiting maintainer enablement).
  • Windows RTX4070 after prerequisites merge: rebase the rollout alone, build the merged source/runtime and repeat the known Lake Hylia/Field transfer plus the broader settings/cost matrix, expecting correct backend counts, stable HDR and no new transfer regression, with costs reported (by hand: author/operator on the local PC). Existing support-PR measurements do not replace this final check.

Screenshots

Captured output from the corrected rollout code at 3fa9b801 on the unchanged development base 514591a3, with all four support fixes and the common scene matcher. Fresh copies of the same daylight ranch checkpoint; 2560x1440 output, Native HDR PsychoV35, 200/1000 nits, RTX 4070/NVIDIA 621.01. These unmodified PNGs show visible output, not calibrated HDR luminance or complete temporal-quality proof. World time and animation were not frozen.

Baseline: explicit compatibility opt-in (RX_VK_PSYCHOV35_DLSS=1), FSR3 at 67%

Manual compatibility opt-in, FSR3

Automatic compatibility: same code, flag unset, FSR3 at 67%

Automatic compatibility, FSR3

Automatic compatibility: flag unset, DLSS at 67%

Automatic compatibility, DLSS

Automatic compatibility: flag unset, cold-launch DLAA Native

Automatic compatibility, DLAA

Risks

What could break: configurations previously falling back may now run a temporal backend, exposing its colour/history, memory or GPU-cost limitations. Existing format, context, depth/camera and reset guards still reject unusable frames. Actor/HUD ghosting remains backend dependent; still captures do not establish full temporal quality.

Turning it off: RX_VK_PSYCHOV35_DLSS=0 and restart, or revert the rollout commits. This does not undo independent Off/TAAU support or prerequisite Vanilla PQ metadata corrections. RX_VK_FSR_FG=0 disables AMD generation separately.

Compatibility: Vanilla remains the default tone mapper. No save/option schema, public renderer ABI, SDK binary, shader or cache-format change in the rollout itself. The stacked TAAU shader change belongs to its prerequisite PR; its generated headers and formats pass the focused checks. Third-party source is untouched.

Reviewer notes

For this PR's own change, inspect bf19a4c3 and 3fa9b801 relative to combined prerequisite tree 757ba924. Source base 6c9edffe and final read-only merge-tree check against current main are clean; no upstream merge was performed. The larger main diff temporarily includes prerequisite commits. After their merges, rebuild/rebase the rollout-only diff and retain exact tested-commit qualifications.

Issues

See #226 . No closure claim for #344 . Merged #400 fixes the confirmed ranch shader-permutation cause; broader transfer behavior remains separate.

Checklist

Everyone

  • One topic.
  • The title is a Conventional Commit (type(scope): description) of the status line's type.
  • Why gives the reason plainly and links the issues that fit (the tracker searched).
  • Measurements has a verdict, or one line saying why there is nothing to measure.
  • Testing names what was tested, what wasn't, and what must still be tested, where and how.
  • Rebased on current main. (Validated 6c9edffe; dependency-only rebase still required after prerequisites land.)
  • python -I -B tests/run_all.py passes (any failure that also fails on main is named).
  • No game files, dumps, build output or generated files.
  • third_party/ untouched (a new folder with a PROVENANCE.md instead).
  • The license is OK: GPL-3.0-or-later, nothing incompatible and nothing decompiled.

When it applies

  • AI assistance recorded with Assisted-by: / Co-Authored-By: trailers.
  • Numbers from the same PC, scene and settings, at least 2 interleaved runs each, the median reported.
  • Switches documented (docs/development.md; the README for a menu row) and shipped at their recommended value.
  • Screenshots of the same spot, captioned like the Measurements columns, for a change that shows on screen.
  • A file in docs/tested/ for each new measured run (format in docs/tested-configurations.md).
  • The SPIR-V headers regenerated with glslang (prerequisite TAAU shader; unchanged by rollout).
  • A game-free test added for the fix, failing on the documented unchanged prerequisite control and passing here.
  • A check under tests/ that reads changed source updated in this PR, not weakened.
  • Host code builds on both Windows (llvm-mingw) and Linux, with UTF-8 paths. (Windows passes; Linux pending T-FN7L.)
  • Docs updated.
**Type:** feat · **Risk:** medium · **Tested on:** Windows, RTX 4070 · **Needs:** prerequisite merges, Linux build, AMD HDR and broader rollout validation ## Why Selecting Native HDR PsychoV35 should retain a supported upscaler without requiring an environment opt-in. This enables its compatibility routes automatically while keeping Vanilla as the default tone mapper. **Dependent WIP: do not merge before these four support fixes and their required validation:** - https://git.magicbean.dev/MagicBeanDev/Longshot/pulls/527 — upscaling Off. - https://git.magicbean.dev/MagicBeanDev/Longshot/pulls/528 — spatial/FXAA TAAU replacement. - https://git.magicbean.dev/MagicBeanDev/Longshot/pulls/536 — shared-chain FSR 3.1 upscaling. - https://git.magicbean.dev/MagicBeanDev/Longshot/pulls/605 — FSR 3.1 frame generation. Their commits are temporarily stacked here for integration testing. After they land, rebase to leave only the rollout commits. No upstream PR was merged by this work. Formal dependency-link creation returned HTTP 404; the prerequisites remain explicit here. ## What changed Enable the supported PsychoV35 upscaler routes when that tone mapper is selected, without extra environment setup. Keep an explicit disable for troubleshooting and retain the backend's existing safety checks. - `upscaler_rows::psychov35_compatibility` supplies one default policy to the temporal scene gate, FSR 3.1 HDR callback and independent FSR FG gate. Unset/empty or nonzero enables compatibility; explicit 0 disables it. Existing once-per-process caching, Native HDR selection, supported engines, matching formats, camera/depth and multiplier guards remain. - Preserve independent Off/TAAU support, Vanilla's packed path, HDR and tone-mapper defaults, and the separate FSR FG opt-in with its midpoint/2x limit. The legacy own-input FSR upscaler remains unsupported. - Execute the actual gates, actual FSR HDR callback and real Native HDR tone-selection function with unset/empty/0/1/2 in separate processes. Preserve existing rejection checks. Model Off's actual public caller before testing its private stretch helper. - Update player/development/history documentation and include eight measured-run records. The earlier settings gap was a harness editing the tone mapper after HDR Off correctly hid its row. Set Native HDR before editing that row; skip it in SDR/Expanded. No upscaler-dependent menu restriction was removed. An older control bridge also cannot step directly to numeric Upscaler value 2: DLAA is DLSS Native. Its controls below therefore use separate cold launches with the saved DLAA setting. ## Measurements **Verdict:** both corrected interleaved pairs retain actual FSR upscaling and AMD generation with the flag unset. Every settled PsychoV35 FSR FG interval is 600/600 AMD-made with zero missing inputs, and the last upscaler status interval also reports 600 actual AMD FSR upscaler draws. DLSS, Off, replacement, Vanilla/SDR and returns complete normally. NGX and cold-DLAA controls pass; explicit 0 restores the expected fallback. All eight processes exited normally (exit 0). main: 6c9edffe this PR: codex/psychov35-default @ a9653209 (production code 3fa9b801; results-only commit on top) Baseline: Before: this PR @ 3fa9b801, RX_VK_PSYCHOV35_DLSS=1, representing the previous manual opt-in behavior, compared with the same code and flag unset. Game runs use the unchanged agreed development base 514591a3 plus the common scene matcher and four prerequisite fixes. Main alone lacks those combined support paths; this isolates automatic compatibility from them instead of making a new full game build. Hardware: RTX 4070 12 GB, NVIDIA 621.01; Core i7-13700F, 32 GB; Windows kernel 26300 / 26H2. Scene: daylight Lon Lon Ranch alley, one fresh copied checkpoint per process, stationary camera; 2560x1440 output and 2560x1421 client, Native HDR paper white 200 / peak 1000, sharpness 0, cap 61. Forced TAAU replacement on NVIDIA. NVIDIA FG disabled/Built-in provider in the main matrices; FSR FG explicitly enabled at 2x in PsychoV35 FSR phases and Off otherwise. Method: explicit 1/unset/explicit 1/unset, runs a3/b3/c3/d3. Seven phases each; FG phases advance 1250+ presents, other phases 650+. Validate actual settings, stable play, engine evaluations and the last complete 600-request generation interval. Last GPU-time report per phase, then median across the two runs per configuration, is shown below. World time/animation and GPU clocks were not frozen. How to reproduce: run that phase order at the same checkpoint, restarting between environment configurations; read real drawn/generated counts rather than the menu row. Nineteen relevant production functions/helpers match the measured pack and current source byte-for-byte; its existing base pipeline-creation wrappers are retained. The actual current-source Windows renderer is also built independently. | Phase; last logged GPU time in ms, two runs and median | Before: this PR @ 3fa9b801, RX_VK_PSYCHOV35_DLSS=1 | After: this PR @ 3fa9b801, flag unset (new default) | |---|---|---| | fsr67 | 10.9, 10.8; median **10.85** | 10.7, 10.6; median **10.65** | | dlss67 | 9.0, 9.0; median **9.00** | 9.0, 9.1; median **9.05** | | off100 | 9.5, 9.1; median **9.30** | 9.1, 9.2; median **9.15** | | taau75 | 8.3, 8.1; median **8.20** | 8.2, 8.1; median **8.15** | | vanilla67 | 8.7, 8.6; median **8.65** | 8.6, 8.7; median **8.65** | | sdr67 | 8.6, 8.5; median **8.55** | 8.7, 8.6; median **8.65** | | return-fsr67 | 10.9, 10.8; median **10.85** | 10.8, 10.9; median **10.85** | These capped samples are descriptive parity observations, not uncapped FPS gains or statistical performance-equivalence proof. The last per-phase VRAM reports span 6.8–8.0 GB; these are samples, not peaks. The single explicit 0 rollback process is a functional control, not a repeated performance baseline. Adoption cost versus the previous fallback on other hardware remains unmeasured. Additional controls: - Explicit 0: PsychoV35 FSR at 67% yields 0/600 AMD-made and 600 missing inputs; Vanilla FSR still evaluates after the tone switch. - Flag unset, DLSS at 67%, Auto NVIDIA FG 2x, AMD FG disabled: last NGX interval 600/600 made with 0 missing inputs. - Cold saved DLAA, flag 1 then unset: both report 600 actual DLAA draws; FG Off. - Captured stills show visible scenes without all-black output or obvious global colour corruption. They do not establish calibrated HDR brightness, full temporal quality or absence of transfer flicker. ```text [hos Presentation Thread] vk: PsychoV35 FSR 3.1: RGBA16F linear route; scene format 122, network input 97, output 97 [hos Presentation Thread] vk: status: 600 frames, the slowest 25.2 ms; VRAM 7.5 of 11.0 GB; AMD FSR 3.1: 600 frames drawn, 3 made, jitter +0.219 -0.426 px, actor motion 38541 draws in 600 frames (0.090 ms CPU a frame), its images 64 MB, its own 150 MB [hos Presentation Thread] vk: fsr3fi: 600 of the last 600 made frames by FSR 3.1, 0 without its inputs (the renderer's own made them) [hos Presentation Thread] vk: DLSS Frame Gen (NGX): of the last 600 presents 600 made by DLSS-G (0 told to reset, 552 with the camera still, 0 NGX said not to show); the renderer's own made the rest: 0 without new inputs (no DLSS/DLAA this frame), 0 after a gap, 0 asked more than 1 frames, 0 refused ``` An earlier iteration at bf19a4c3 generated AMD frames but rejected FSR upscaling under unset because its separate HDR callback still required 1. Correction 3fa9b801 and the expanded regression address that omission; all table data above uses the corrected code. Earlier failed/partial harness runs are excluded. ### Flags and settings The existing compatibility switch defaults on; AMD frame generation retains its separate off-by-default opt-in. | Flag | What it is | Before this PR | After this PR | Effect | Helps / doesn't help / untested | Recommendation | |---|---|---|---|---|---|---| | RX_VK_PSYCHOV35_DLSS | Existing compatibility switch | Unset/empty off; 1 on | Unset/empty on; 0 off; nonzero on | Admit supported Native HDR PsychoV35 routes | DLSS/DLAA, FSR4/native AA, shared-chain FSR3 and separately opted-in FSR FG; legacy FSR remains unsupported | Automatic after required validation and prerequisites; 0 for rollback | | RX_VK_FSR_FG | Existing AMD generation opt-in | Off | Off | Request AMD midpoint at FG 2x | Existing HUD/camera-motion limitations remain; no 3x+ added | Retain opt-in | Restart after editing longshot_env.txt. Off and the spatial/FXAA replacement remain independent of the compatibility switch. No automatic HDR, tone-mapper selection or saved-option default change. ## Testing **Tested:** corrected current-source Windows renderer 4s / 0 failed and link success (initial clean build 56s); corrected isolated pack 6s compile / 10s total, 0 failed. Fifteen focused combined-source checks pass. New environment regression compiles and fails specifically at the actual HDR callback on the previous implementation, and passes here. The earlier negative control also fails unchanged prerequisite admission. Eight game processes/33 phases and eight run fragments are included; repository fragment validation passes. Relevant measured production functions match current code. Final full suite: **537 passed, 14 failed, 35 skipped in 119s** here; clean main 6c9edffe **531 passed, the same 14 failed, 35 skipped in 117s**; unchanged combined control 757ba924 **536 passed, the same 14 failed, 35 skipped in 119s**. No PR-only failure. Shared failures: `tests/test_appimage_player_build.py`, `tests/test_cpm_discovery.py`, `tests/test_crash_dialog.py`, `tests/test_env_on.py`, `tests/test_lift_cleanup_error.py`, `tests/test_linux_preflight.py`, `tests/test_make_game_cache.py`, `tests/test_oot_state_tap.py`, `tests/test_readback_late.py`, `tests/test_release.py`, `tests/test_tested_configurations.py`, `tests/test_vk_pgo.py`, `tests/test_vram_budget_row.py`, `tests/test_walk_key.py`. **Not tested:** Linux build/runtime, AMD/Intel hardware, FSR4 runtime on this NVIDIA card, other drivers/resolutions/scenes, dynamic-resolution/Auto and every scale on the rollout head, native game-network gameplay without the replacement override, expanded-HDR runtime, extended play, calibrated HDR luminance, uncapped performance and peak-memory behavior. General Lake Hylia/Field transition fallback/flicker is not claimed fixed. **Must be tested:** - Linux clang/GCC: documented renderer-only build and focused/default fixtures, expecting compile success and passing policy/format/history checks (by hand: T-FN7L; Test Farm request on current head; maintainer approval required). - AMD Native HDR display, Windows/Linux: FSR3 and FSR4/native AA where available; unset vs 1, restart with 0, 67/83/100%, tone/HDR/scale/FG transitions. expecting actual upscaler evaluations and generation counts plus stable visible HDR output (by hand: T-HFTK, awaiting maintainer enablement). - Windows RTX4070 after prerequisites merge: rebase the rollout alone, build the merged source/runtime and repeat the known Lake Hylia/Field transfer plus the broader settings/cost matrix, expecting correct backend counts, stable HDR and no new transfer regression, with costs reported (by hand: author/operator on the local PC). Existing support-PR measurements do not replace this final check. ## Screenshots Captured output from the corrected rollout code at 3fa9b801 on the unchanged development base 514591a3, with all four support fixes and the common scene matcher. Fresh copies of the same daylight ranch checkpoint; 2560x1440 output, Native HDR PsychoV35, 200/1000 nits, RTX 4070/NVIDIA 621.01. These unmodified PNGs show visible output, not calibrated HDR luminance or complete temporal-quality proof. World time and animation were not frozen. **Baseline: explicit compatibility opt-in (`RX_VK_PSYCHOV35_DLSS=1`), FSR3 at 67%** ![Manual compatibility opt-in, FSR3](https://git.magicbean.dev/attachments/5c68d680-9031-46b1-9933-0199b9dc4d32) **Automatic compatibility: same code, flag unset, FSR3 at 67%** ![Automatic compatibility, FSR3](https://git.magicbean.dev/attachments/d6655881-46ef-4430-bfb1-389f822f405e) **Automatic compatibility: flag unset, DLSS at 67%** ![Automatic compatibility, DLSS](https://git.magicbean.dev/attachments/b3279eac-5e9b-40e2-87a5-ec4164843935) **Automatic compatibility: flag unset, cold-launch DLAA Native** ![Automatic compatibility, DLAA](https://git.magicbean.dev/attachments/ef609736-b717-40f5-aed7-501b8081389b) ## Risks **What could break:** configurations previously falling back may now run a temporal backend, exposing its colour/history, memory or GPU-cost limitations. Existing format, context, depth/camera and reset guards still reject unusable frames. Actor/HUD ghosting remains backend dependent; still captures do not establish full temporal quality. **Turning it off:** RX_VK_PSYCHOV35_DLSS=0 and restart, or revert the rollout commits. This does not undo independent Off/TAAU support or prerequisite Vanilla PQ metadata corrections. RX_VK_FSR_FG=0 disables AMD generation separately. **Compatibility:** Vanilla remains the default tone mapper. No save/option schema, public renderer ABI, SDK binary, shader or cache-format change in the rollout itself. The stacked TAAU shader change belongs to its prerequisite PR; its generated headers and formats pass the focused checks. Third-party source is untouched. ## Reviewer notes For this PR's own change, inspect bf19a4c3 and 3fa9b801 relative to combined prerequisite tree 757ba924. Source base 6c9edffe and final read-only merge-tree check against current main are clean; no upstream merge was performed. The larger main diff temporarily includes prerequisite commits. After their merges, rebuild/rebase the rollout-only diff and retain exact tested-commit qualifications. ## Issues See https://git.magicbean.dev/MagicBeanDev/Longshot/issues/226 . No closure claim for https://git.magicbean.dev/MagicBeanDev/Longshot/issues/344 . Merged https://git.magicbean.dev/MagicBeanDev/Longshot/pulls/400 fixes the confirmed ranch shader-permutation cause; broader transfer behavior remains separate. ## Checklist ### Everyone - [x] One topic. - [x] The title is a Conventional Commit (`type(scope): description`) of the status line's type. - [x] Why gives the reason plainly and links the issues that fit (the tracker searched). - [x] Measurements has a verdict, or one line saying why there is nothing to measure. - [x] Testing names what was tested, what wasn't, and what must still be tested, where and how. - [x] Rebased on current `main`. (Validated 6c9edffe; dependency-only rebase still required after prerequisites land.) - [x] `python -I -B tests/run_all.py` passes (any failure that also fails on `main` is named). - [x] No game files, dumps, build output or generated files. - [x] `third_party/` untouched (a new folder with a `PROVENANCE.md` instead). - [x] The license is OK: GPL-3.0-or-later, nothing incompatible and nothing decompiled. ### When it applies - [x] AI assistance recorded with `Assisted-by:` / `Co-Authored-By:` trailers. - [x] Numbers from the same PC, scene and settings, at least 2 interleaved runs each, the median reported. - [x] Switches documented (docs/development.md; the README for a menu row) and shipped at their recommended value. - [x] Screenshots of the same spot, captioned like the Measurements columns, for a change that shows on screen. - [x] A file in `docs/tested/` for each new measured run (format in docs/tested-configurations.md). - [x] The SPIR-V headers regenerated with glslang (prerequisite TAAU shader; unchanged by rollout). - [x] A game-free test added for the fix, failing on the documented unchanged prerequisite control and passing here. - [x] A check under `tests/` that reads changed source updated in this PR, not weakened. - [ ] Host code builds on both Windows (llvm-mingw) and Linux, with UTF-8 paths. (Windows passes; Linux pending T-FN7L.) - [x] Docs updated.
docs: record dependent PsychoV35 compatibility rollout
Some checks failed
PR description / Description follows the template (pull_request_target) Successful in 16s
CI / Conventional Commit title (pull_request) Has been cancelled
CI / Python source checks (ubuntu-24.04, part 1/2) (pull_request) Has been cancelled
CI / Python source checks (ubuntu-24.04, part 2/2) (pull_request) Has been cancelled
CI / SPIR-V fixtures (global narrow load/store, direct surface atomics, F2I immediate) (pull_request) Has been cancelled
CI / Workflow lint (actionlint) (pull_request) Has been cancelled
Third-party parts / As their notes say (pull_request) Has been cancelled
Third-party parts / The same as upstream (pull_request) Has been cancelled
87f735aa3c
Assisted-by: OpenAI Codex

Co-Authored-By: OpenAI Codex <[email protected]>
Assisted-by: OpenAI Codex
docs(tested): record paired PsychoV35 Off checks
Some checks failed
PR description / Description follows the template (pull_request_target) Failing after 3s
Website / Website on Cloudflare (pull_request) Has been cancelled
CI / Conventional Commit title (pull_request) Has been cancelled
CI / Python source checks (ubuntu-24.04, part 1/2) (pull_request) Has been cancelled
CI / Python source checks (ubuntu-24.04, part 2/2) (pull_request) Has been cancelled
CI / SPIR-V fixtures (global narrow load/store, direct surface atomics, F2I immediate) (pull_request) Has been cancelled
CI / Workflow lint (actionlint) (pull_request) Has been cancelled
Third-party parts / As their notes say (pull_request) Has been cancelled
Third-party parts / The same as upstream (pull_request) Has been cancelled
beanstalk/approval not approved yet
3007c3d365
Assisted-by: OpenAI Codex
Assisted-by: OpenAI Codex
Assisted-by: OpenAI Codex
Assisted-by: OpenAI Codex
docs(tested): record PsychoV35 TAAU replacement checks
Some checks failed
PR description / Description follows the template (pull_request_target) Failing after 7s
Website / Website on Cloudflare (pull_request) Has been cancelled
CI / Conventional Commit title (pull_request) Has been cancelled
CI / Python source checks (ubuntu-24.04, part 1/2) (pull_request) Has been cancelled
CI / Python source checks (ubuntu-24.04, part 2/2) (pull_request) Has been cancelled
CI / SPIR-V fixtures (global narrow load/store, direct surface atomics, F2I immediate) (pull_request) Has been cancelled
CI / Workflow lint (actionlint) (pull_request) Has been cancelled
Third-party parts / As their notes say (pull_request) Has been cancelled
Third-party parts / The same as upstream (pull_request) Has been cancelled
beanstalk/approval not approved yet
10dcd83727
Assisted-by: OpenAI Codex
test(vk): keep FSR fixture independent of the Off bypass
Some checks failed
PR description / Description follows the template (pull_request_target) Failing after 10s
CI / Conventional Commit title (pull_request) Has been cancelled
CI / Python source checks (ubuntu-24.04, part 1/2) (pull_request) Has been cancelled
CI / Python source checks (ubuntu-24.04, part 2/2) (pull_request) Has been cancelled
CI / SPIR-V fixtures (global narrow load/store, direct surface atomics, F2I immediate) (pull_request) Has been cancelled
CI / Workflow lint (actionlint) (pull_request) Has been cancelled
Third-party parts / As their notes say (pull_request) Has been cancelled
Third-party parts / The same as upstream (pull_request) Has been cancelled
Website / Website on Cloudflare (pull_request) Has been cancelled
beanstalk/approval not approved yet
3f5ddfe77c
Assisted-by: OpenAI Codex
Assisted-by: OpenAI Codex
test(vk): record FSR frame-generation HDR validation
Some checks failed
PR description / Description follows the template (pull_request_target) Successful in 16s
CI / Conventional Commit title (pull_request) Has been cancelled
CI / Python source checks (ubuntu-24.04, part 1/2) (pull_request) Has been cancelled
CI / Python source checks (ubuntu-24.04, part 2/2) (pull_request) Has been cancelled
CI / SPIR-V fixtures (global narrow load/store, direct surface atomics, F2I immediate) (pull_request) Has been cancelled
CI / Workflow lint (actionlint) (pull_request) Has been cancelled
Third-party parts / As their notes say (pull_request) Has been cancelled
Third-party parts / The same as upstream (pull_request) Has been cancelled
Website / Website on Cloudflare (pull_request) Has been cancelled
beanstalk/approval not approved yet
324e7a6ad9
Assisted-by: OpenAI Codex
# Conflicts:
#	README.md
#	docs/development.md
# Conflicts:
#	README.md
#	docs/temporal-history.md
# Conflicts:
#	README.md
#	docs/development.md
feat(vk): enable PsychoV35 upscaler compatibility by default
Some checks failed
PR description / Description follows the template (pull_request_target) Successful in 16s
CI / Conventional Commit title (pull_request) Has been cancelled
CI / Python source checks (ubuntu-24.04, part 1/2) (pull_request) Has been cancelled
CI / Python source checks (ubuntu-24.04, part 2/2) (pull_request) Has been cancelled
CI / SPIR-V fixtures (global narrow load/store, direct surface atomics, F2I immediate) (pull_request) Has been cancelled
CI / Workflow lint (actionlint) (pull_request) Has been cancelled
Third-party parts / As their notes say (pull_request) Has been cancelled
Third-party parts / The same as upstream (pull_request) Has been cancelled
Website / Website on Cloudflare (pull_request) Has been cancelled
bf19a4c3e3
Share default-on policy between temporal and independent FSR FG admission; retain explicit zero rollback and all HDR/format/backend guards. Model Off's real caller in its fixture and cover separate-process environment defaults.

Assisted-by: OpenAI Codex

Co-Authored-By: OpenAI Codex <[email protected]>
Author
Member

Implementation pushed at bf19a4c3 over combined prerequisite tree757ba924. Both temporal and independent FSR FG admission share the default-on policy; explicit0 remains rollback. Windows renderer compiles/links (56s,0 failures),15 focused fixtures pass, and the new runtime regression fails the unchanged combined control as intended. Full suite comparison and isolated game validation are next. The earlier settings gap is confirmed to be test ordering after HDR Off hid the row, not an upscaler menu restriction. Prerequisite commits are temporarily stacked here; do not merge this WIP before527/528/536/605 and required coverage.

Implementation pushed at bf19a4c3 over combined prerequisite tree757ba924. Both temporal and independent FSR FG admission share the default-on policy; explicit0 remains rollback. Windows renderer compiles/links (56s,0 failures),15 focused fixtures pass, and the new runtime regression fails the unchanged combined control as intended. Full suite comparison and isolated game validation are next. The earlier settings gap is confirmed to be test ordering after HDR Off hid the row, not an upscaler menu restriction. Prerequisite commits are temporarily stacked here; do not merge this WIP before527/528/536/605 and required coverage.
fix(vk): apply default policy to FSR HDR registration
Some checks failed
PR description / Description follows the template (pull_request_target) Successful in 4s
CI / Conventional Commit title (pull_request) Has been cancelled
CI / Python source checks (ubuntu-24.04, part 1/2) (pull_request) Has been cancelled
CI / Python source checks (ubuntu-24.04, part 2/2) (pull_request) Has been cancelled
CI / SPIR-V fixtures (global narrow load/store, direct surface atomics, F2I immediate) (pull_request) Has been cancelled
CI / Workflow lint (actionlint) (pull_request) Has been cancelled
Third-party parts / As their notes say (pull_request) Has been cancelled
Third-party parts / The same as upstream (pull_request) Has been cancelled
Website / Website on Cloudflare (pull_request) Has been cancelled
3fa9b80195
The first runtime matrix showed independent FSR FG working while the shared FSR upscaler rejected HDR with an unset flag. Use the same policy in its real HDR callback and execute that callback in the default regression.

Assisted-by: OpenAI Codex

Co-Authored-By: OpenAI Codex <[email protected]>
Author
Member

Runtime validation caught a third opt-in gate: FSR3 independent FG succeeded with unset, but the shared upscaler HDR callback still required1. Corrected that callback at3fa9b801 and strengthened the environment regression to execute it; the previous implementation now fails the callback assertion. The first matrix is retained as failed FSR-upscaler evidence, not a pass. Other observed DLSS/NGX/DLAA controls passed. Rebuilding and repeating the corrected matrix; this remains a dependent WIP. Formal blocker-link API returned404, so prerequisite links remain explicit in the description.

Runtime validation caught a third opt-in gate: FSR3 independent FG succeeded with unset, but the shared upscaler HDR callback still required1. Corrected that callback at3fa9b801 and strengthened the environment regression to execute it; the previous implementation now fails the callback assertion. The first matrix is retained as failed FSR-upscaler evidence, not a pass. Other observed DLSS/NGX/DLAA controls passed. Rebuilding and repeating the corrected matrix; this remains a dependent WIP. Formal blocker-link API returned404, so prerequisite links remain explicit in the description.
docs(tested): record automatic PsychoV35 compatibility matrix
Some checks failed
CI / Conventional Commit title (pull_request) Blocked by required conditions
CI / Python source checks (ubuntu-24.04, part 1/2) (pull_request) Blocked by required conditions
CI / Python source checks (ubuntu-24.04, part 2/2) (pull_request) Blocked by required conditions
CI / SPIR-V fixtures (global narrow load/store, direct surface atomics, F2I immediate) (pull_request) Blocked by required conditions
CI / Workflow lint (actionlint) (pull_request) Blocked by required conditions
Third-party parts / As their notes say (pull_request) Blocked by required conditions
Third-party parts / The same as upstream (pull_request) Blocked by required conditions
Website / Website on Cloudflare (pull_request) Blocked by required conditions
PR description / Description follows the template (pull_request_target) Failing after 7s
beanstalk/approval not approved yet
a9653209b4
Record two interleaved explicit-opt-in/default pairs plus disabled, NGX and saved-DLAA controls on the corrected three-gate implementation. All eight processes exit normally; actual upscaler and generator counts are checked separately.

Assisted-by: OpenAI Codex

Co-Authored-By: OpenAI Codex <[email protected]>
Author
Member

Captured output from the corrected rollout code at3fa9b801 on the unchanged development base514591a3, with all four support fixes and the common scene matcher. Fresh copies of the same daylight ranch checkpoint;2560x1440 output, Native HDR PsychoV35,200/1000 nits,RTX4070/NVIDIA621.01. These unmodified PNGs show visible output, not calibrated HDR luminance or complete temporal-quality proof. World time and animation were not frozen.

Baseline: explicit compatibility opt-in (RX_VK_PSYCHOV35_DLSS=1), FSR3 at67%

Manual compatibility opt-in, FSR3

Automatic compatibility: same code, flag unset, FSR3 at67%

Automatic compatibility, FSR3

Automatic compatibility: flag unset, DLSS at67%

Automatic compatibility, DLSS

Automatic compatibility: flag unset, cold-launch DLAA Native

Automatic compatibility, DLAA

Captured output from the corrected rollout code at3fa9b801 on the unchanged development base514591a3, with all four support fixes and the common scene matcher. Fresh copies of the same daylight ranch checkpoint;2560x1440 output, Native HDR PsychoV35,200/1000 nits,RTX4070/NVIDIA621.01. These unmodified PNGs show visible output, not calibrated HDR luminance or complete temporal-quality proof. World time and animation were not frozen. **Baseline: explicit compatibility opt-in (`RX_VK_PSYCHOV35_DLSS=1`), FSR3 at67%** ![Manual compatibility opt-in, FSR3](https://git.magicbean.dev/attachments/5c68d680-9031-46b1-9933-0199b9dc4d32) **Automatic compatibility: same code, flag unset, FSR3 at67%** ![Automatic compatibility, FSR3](https://git.magicbean.dev/attachments/d6655881-46ef-4430-bfb1-389f822f405e) **Automatic compatibility: flag unset, DLSS at67%** ![Automatic compatibility, DLSS](https://git.magicbean.dev/attachments/b3279eac-5e9b-40e2-87a5-ec4164843935) **Automatic compatibility: flag unset, cold-launch DLAA Native** ![Automatic compatibility, DLAA](https://git.magicbean.dev/attachments/ef609736-b717-40f5-aed7-501b8081389b)
Author
Member

Completed the corrected eight-process,33-phase matrix at code3fa9b801; results are committed at a9653209 and four screenshots are attached. Both interleaved unset runs retain600 actual FSR upscaler draws and600/600 AMD-made frames with zero missing inputs in each settled Psycho phase. NGX control also reaches600/600; cold-DLAA and explicit0 rollback pass. All processes exit normally and runtime/shared lock are restored. Final suite537pass/14fail/35skip matches the same14 failures on clean main6c9edffe and the unchanged prerequisite stack; Windows renderer builds. Linux T-FN7L and AMD HDR T-HFTK await maintainer testing-wanted enablement. This remains WIP pending prerequisite merges, Linux/AMD coverage and final merged-stack transfer/cost validation. @Beanstalk Please build current head a9653209 on Linux via the documented renderer-only workflow and run psychov35, temporal_history, upscaler_rows, taau, upscale_fallback, fsr_uniform_ownership and present_source_crop fixtures. Publish exact commit,compiler/OS and safe results; no game/build artifacts. No merge.

Completed the corrected eight-process,33-phase matrix at code3fa9b801; results are committed at a9653209 and four screenshots are attached. Both interleaved unset runs retain600 actual FSR upscaler draws and600/600 AMD-made frames with zero missing inputs in each settled Psycho phase. NGX control also reaches600/600; cold-DLAA and explicit0 rollback pass. All processes exit normally and runtime/shared lock are restored. Final suite537pass/14fail/35skip matches the same14 failures on clean main6c9edffe and the unchanged prerequisite stack; Windows renderer builds. Linux T-FN7L and AMD HDR T-HFTK await maintainer testing-wanted enablement. This remains WIP pending prerequisite merges, Linux/AMD coverage and final merged-stack transfer/cost validation. @Beanstalk Please build current head a9653209 on Linux via the documented renderer-only workflow and run psychov35, temporal_history, upscaler_rows, taau, upscale_fallback, fsr_uniform_ownership and present_source_crop fixtures. Publish exact commit,compiler/OS and safe results; no game/build artifacts. No merge.
Member

@futondestroyer only members of BigBeans can start the farm. One of them can approve this request by reacting 👍 to it.

@futondestroyer only members of `BigBeans` can start the farm. One of them can approve this request by reacting 👍 to it.
Author
Member

Clarified the description-check formatting: plain change summary, exact same-build comparison column commits, flag summary, and expected results/owners for external and post-merge checks. Measurements and code are unchanged. The only applicable unchecked requirement should be the real pending Linux build; prerequisite merges, AMD HDR and final merged-runtime validation remain explicit WIP blockers.

Clarified the description-check formatting: plain change summary, exact same-build comparison column commits, flag summary, and expected results/owners for external and post-merge checks. Measurements and code are unchanged. The only applicable unchecked requirement should be the real pending Linux build; prerequisite merges, AMD HDR and final merged-runtime validation remain explicit WIP blockers.
HumanBean changed title from WIP: feat(vk): enable PsychoV35 upscaler compatibility by default to feat(vk): enable PsychoV35 upscaler compatibility by default 2026-11-15 03:10:05 +00:00
HumanBean deleted branch codex/psychov35-default 2026-11-15 03:10:15 +00:00
Some checks failed
CI / Conventional Commit title (pull_request) Blocked by required conditions
CI / Python source checks (ubuntu-24.04, part 1/2) (pull_request) Blocked by required conditions
CI / Python source checks (ubuntu-24.04, part 2/2) (pull_request) Blocked by required conditions
CI / SPIR-V fixtures (global narrow load/store, direct surface atomics, F2I immediate) (pull_request) Blocked by required conditions
CI / Workflow lint (actionlint) (pull_request) Blocked by required conditions
Third-party parts / As their notes say (pull_request) Blocked by required conditions
Third-party parts / The same as upstream (pull_request) Blocked by required conditions
Website / Website on Cloudflare (pull_request) Blocked by required conditions
PR description / Description follows the template (pull_request_target) Failing after 7s
beanstalk/approval not approved yet
Some workflows are waiting to be reviewed.
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
2 participants
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
MagicBeanDev/Longshot!608
No description provided.