WIP: fix(vk): support PsychoV35 with FSR 3.1 frame generation #605

Closed
futondestroyer wants to merge 2 commits from futondestroyer/Longshot:codex/psychov35-fsr3-fg into main
Member

Type: fix · Risk: medium · Tested on: Windows, RTX 4070 · Needs: Linux renderer build; AMD Native HDR gameplay

Why

Native HDR PsychoV35 can leave FSR 3.1 frame generation without scene inputs, silently using the renderer's own interpolation. Where AMD generation already runs, its constant blocks still treat the captured native-PQ picture as sRGB.

Related compatibility context: #226 . This is separate from the general camera/transition flicker investigation at #344 and does not close it.

How to reproduce

Seen on: Windows kernel 26300 / 26H2, RTX 4070 12 GB, NVIDIA 621.01.
Settings and switches: Native HDR, PsychoV35, FSR 3.1 at 67%, Frame generation 2x; RX_VK_FSR_FG=1 and RX_VK_PSYCHOV35_DLSS=1. Disable NVIDIA FG to isolate AMD generation.
Steps: At the daylight Lon Lon Ranch alley, start cold, change render resolution 67/83/100%, switch Vanilla HDR/SDR and back, then FG Off/on. Compare actual fsr3fi counts, not the selected menu row.
Expected: Valid matching PsychoV35 buffers supply AMD depth/motion; both AMD backends decode the actual present encoding, resetting history when it changes.
Actual: At 67% and on returning to it the original records 0/600 AMD-made frames and 600 missing-input fallbacks. At 83/100% it already generates frames, but native HDR still receives sRGB transfer metadata.

What changed

Accept the independent frame-generation inputs with matching PsychoV35 views and describe the captured present's colour correctly. Preserve the existing midpoint-only, opt-in behavior and fallback on reset/unusable frames.

  • vk_fsr3_inputs: narrow RGBA16F admission to Native PsychoV35, the existing compatibility opt-in, FSR generation requested and the 2x row. Reject mixed/unsupported network pairs, retain camera/size/depth guards, and reset input history on format or tone changes. The new RGBA preparation is not enabled for Off, Auto or 3x+.
  • vk_draw / vk_fsr3: bind matching sampled/storage views in translated and rejected-network routes. Preparing FG inputs still leaves the selected upscaler to perform the upscale; this does not enable the legacy FSR upscaler.
  • vk_replay / vk_framegen: snapshot the actual native-PQ flag into both presentation paths and pass the HDR peak with the captured colour. UNORM storage alone does not imply sRGB encoding.
  • vk_fsr3fi: set both interpolation and optical-flow transfer/luminance fields together; native PQ uses transfer 1 and the selected peak in nits, SDR retains transfer 0 and its unused 0..1 range. Validate HDR luminance and reset colour history on encoding/peak changes. This also corrects Vanilla Native HDR metadata.
  • Tests execute production camera admission, both real constant-block types/assignments and reset decisions, check their SDK field offsets, and retain the existing source-reading history/crop/uniform tests. No shader, vendored file or public renderer API change.

Measurements

Verdict: Both interleaved pairs fix the 67% PsychoV35 input fallback, including tone/FG returns. Every fixed settled FG-on interval is 600/600 AMD-made with 0 missing-input fallbacks. Existing 83/100% and Vanilla generation stays active; PQ/sRGB and 800/1000-nit metadata changes are logged correctly. No performance or calibrated HDR gain is claimed.

main: 82886e89 (2026-11-14)
this PR: codex/psychov35-fsr3-fg @ 324e7a6a (code f072407f, measured records and test tightening on top)
Baseline: Before: development base @ 514591a3, PR400 matcher + FSR upscaling fix e7efc7c8, original FG. This isolates FG over the agreed unchanged base rather than building a new full game.

Hardware: Windows kernel 26300 / 26H2; RTX 4070 12 GB, NVIDIA 621.01; i7-13700F, 32 GB RAM.
Scene: Lon Lon Ranch daylight alley, fresh copied checkpoint per process. 2560x1440 output, 2560x1421 client; Native HDR paper white 200, peak 1000 nits (800 at 83%); Vanilla SDR control; FSR upscaling, FG 2x/Off/on, provider Built-in with NVIDIA FG disabled, sharpness 0, cap 61.
Method: original/fixed/original/fixed, runs a3/b3/a4/b4. Eight phases each advance at least 1250 presents; report the last complete 600-request AMD generation interval in each phase. Actual options, stable play, native PQ/SDR presentation and errors are checked. These are normal deferred-presentation runs without made-frame capture overhead. World time/animation were not frozen.
How to reproduce: use the settings above, compare the same checkpoint with/without this isolated FG patch, and repeat the eight phases below. To exercise FSR upscaling plus FG, include the separate upscaling fix #536 in both arms, as these runs do. This PR alone does not supply that upscaler fix.

AMD-made frames per last 600 requests, two runs and median Before: development base @ 514591a3, PR400 + FSR upscaling e7efc7c8, original FG After: this PR @ f072407f, same development base and common fixes
PsychoV35 67%, Native HDR 0, 0; median 0 600, 600; median 600
PsychoV35 83%, Native HDR, peak 800 600, 600; median 600 600, 600; median 600
PsychoV35 100%, Native HDR 600, 600; median 600 600, 600; median 600
Vanilla 67%, Native HDR 600, 600; median 600 600, 600; median 600
Vanilla 67%, SDR 600, 600; median 600 600, 600; median 600
Return to PsychoV35 67%, Native HDR 0, 0; median 0 600, 600; median 600
FG Off No AMD generation interval, both No AMD generation interval, both
FG back to 2x, PsychoV35 67% 0, 0; median 0 600, 600; median 600

Both original 67% failure intervals report 600 missing inputs; all fixed settled FG-on intervals report 0. All four processes exit normally. Eleven changed production functions and both presentation-call arguments match the measured pack byte-for-byte; its unchanged pipeline creation wrappers remain those of the shared base. The same host, common matcher/upscaler and identical private diagnostics are used in both arms. No shared base or normal installation was changed.

vk: fsr3fi: 0 of the last 600 made frames by FSR 3.1, 600 without its inputs (the renderer's own made them)
vk: fsr3fi: 600 of the last 600 made frames by FSR 3.1, 0 without its inputs (the renderer's own made them)
vk: fsr3fi: captured present PQ, SDK luminance maximum 800; colour history reset
vk: fsr3fi: captured present sRGB, SDK luminance maximum 1; colour history reset

Two additional original/fixed capture processes use the existing RX_VK_SHOT_MADE=1 inline path, one PNG pair every 120 presents, with 12 seconds settling, right-stick +0.25 for 120 frames, -0.25 for 120 frames, and a 12-second return hold. Each produces 23 made-frame PNGs and exits normally. Capture/readback adds hitches/reset fallbacks: the fixed capture's last interval is 595/600 with 0 missing inputs, separate from the normal-path 600/600 measurements. Selected still/moving generated frames show a visible scene without all-black output or obvious global colour corruption; they are not full temporal-quality or HDR-calibration proof. An earlier incomplete harness attempt stopped because HDR Off hides tone-map controls; it was corrected, retained locally and excluded from the four measured runs.

Flags and settings

No new switch or menu default; existing FSR generation and PsychoV35 compatibility opt-ins remain off.

Flag What it is Before this PR After this PR Effect Helps / doesn't help / untested Recommendation
RX_VK_PSYCHOV35_DLSS Existing PsychoV35 compatibility opt-in 0; independent FSR FG path rejects RGBA 0; setting 1 also admits matching RGBA for FSR FG at 2x Supplies independent scene depth/motion Native HDR PsychoV35; not legacy FSR upscaling; AMD/Intel/Linux runtime untested Off: retain opt-in pending broader HDR validation
RX_VK_FSR_FG Existing AMD generation opt-in 0 0 Setting 1 asks for AMD's midpoint when FG is 2x Does not add 3x+ or HUD-less colour; existing ghosting can remain Off: known HUD/actor limitations remain
RX_VK_DLSS_FG=0 Existing NVIDIA FG disable, used for isolation Unset Unset Prevents NVIDIA generation taking priority on RTX Test setup only; alternatively choose Built-in FG provider No default change

Put opt-ins in longshot_env.txt beside longshot.exe and restart. A menu selection alone does not confirm AMD generation; inspect the log counts.

Testing

Tested: actual current-source Windows renderer compiles/links, including the final 2x guard; isolated pack builds and all measured functions match. Six original/fixed game processes cover normal and inline capture paths, settings transitions and camera motion as above. New regression fails unchanged main at actual RGBA camera admission and passes here; it also checks both SDK constant blocks and their offsets, invalid HDR peaks, encoding/peak/sequence resets, flag-off and unsupported multipliers. Existing history, crop/flag forwarding and uniform-ownership checks pass. Six measured-run records are included.

Final full game-free suite (same optional-SDK environment in both arms): 532 passed, 12 failed, 34 skipped in 119 s (windows, 24 at once) here versus 531 passed, 12 failed, 34 skipped in 122 s (windows, 24 at once) on clean main82886e89. The same failures occur on both: tests/test_appimage_player_build.py, tests/test_cpm_discovery.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_vram_budget_row.py, tests/test_walk_key.py. No PR-only failure. The six run fragments pass the repository-format check. Renderer builds use the locally installed NGX SDK separately; that optional runtime is not required for AMD FG.

Not tested: Linux compiler/runtime, AMD/Intel hardware, other drivers/scenes, calibrated HDR luminance, extended play or a complete temporal-quality assessment. The moving captures retain the pre-existing limitations of camera-only motion and no HUD-less colour; no general flicker, HUD-smear, actor-ghosting or performance fix is claimed. The separate FSR upscaler fix is common to the game comparison, not part of this PR.

Must be tested:

  • Linux, clang or GCC: documented renderer-only build and psychov35_fsr3_fg, temporal_history, present_source_crop, fsr_uniform_ownership, upscaler_rows and FSR math fixtures, expecting compile success and relevant checks passing (Test Farm: @Beanstalk Linux renderer build and focused FSR FG fixtures; manual request T-QSGE, awaiting maintainer enablement).
  • AMD GPU with a Native HDR monitor, Windows or Linux: PsychoV35, FG 2x, both opt-ins; repeat 67/83/100%, tone/HDR/peak and Off/on changes, expecting AMD-generated intervals without sustained missing-input fallback or colour/history corruption (by hand: T-2X6G, awaiting maintainer enablement; include the separate upscaler PR when testing the full FSR+FG combination).

Screenshots

Generated-frame captures from the same copied ranch checkpoint and scripted camera sweep, Native HDR PsychoV35 at67%, FG2x. Both arms use development base514591a3, the common PR400 matcher and FSR upscaling fix e7efc7c8. These are unmodified PNGs, not frame-locked or calibrated HDR comparisons. Normal-path generation counts are reported separately in the description; inline capture can add reset/hitch fallbacks. Existing HUD/actor artifacts can remain.

Before: development base @514591a3, common fixes, original FG — built-in fallback

Original generated frame, stationary

Original generated frame, camera movement

After: this PR @f072407f, same base/common fixes — fixed run with AMD generation active

Fixed-run generated frame, stationary

Fixed-run generated frame, camera movement

Risks

What could break: incorrect view typing or colour metadata could corrupt interpolation, and stale history could flash after a switch. Matching views/pairs, luminance checks and explicit history resets guard those cases. Native HDR metadata changes for Vanilla too; wider GPU/OS/HDR validation is still needed.

Turning it off: RX_VK_FSR_FG=0 restores the renderer's existing generation path. RX_VK_PSYCHOV35_DLSS=0 disables new PsychoV35 input admission; it does not undo the Vanilla native-PQ metadata correction. Reverting the commit restores all prior behavior.

Compatibility: no save/option schema, public MkwVkHost/MkwVkRenderer ABI, SDK binary, shader source/SPIR-V or cache-format change. Only internal FG interfaces and constants change; no MKWVK_API_VERSION bump is required. Both environment defaults and menu defaults are unchanged.

Reviewer notes

Validated base82886e89; latest main advanced to2b1d38c6 during testing, and a final read-only merge-tree check is clean. The measurements remain on their named development base; no runtime result on the newer main is claimed.

Start with fsr3_inputs::scene_format and the matching-view callers, then inspect both presentation paths and colour_constants. The latter writes the runtime fields documented in AMD's frame-interpolation guide; the vendored GLSL decodes PQ for transfer 1 and uses the maximum in nits. Storage precision does not determine encoding. No vendored code was changed.

This is independent of the shared upscaler's HDR engine registration. It may be reviewed separately; the intended FSR-upscaling-plus-FG combination needs the separate upscaler fix too. Keep the measured-base qualification and the normal-path versus capture-path results distinct.

Issues

See #344 (separate general flicker remains open).
Related upscaling: #536 . Other independent paths: #527 and #528 . Common matcher: #400 .

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.
  • 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).
  • A game-free test added for the fix, failing on main 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-QSGE).
  • Docs updated.
**Type:** fix · **Risk:** medium · **Tested on:** Windows, RTX 4070 · **Needs:** Linux renderer build; AMD Native HDR gameplay ## Why Native HDR PsychoV35 can leave FSR 3.1 frame generation without scene inputs, silently using the renderer's own interpolation. Where AMD generation already runs, its constant blocks still treat the captured native-PQ picture as sRGB. Related compatibility context: https://git.magicbean.dev/MagicBeanDev/Longshot/issues/226 . This is separate from the general camera/transition flicker investigation at https://git.magicbean.dev/MagicBeanDev/Longshot/issues/344 and does not close it. ## How to reproduce **Seen on:** Windows kernel 26300 / 26H2, RTX 4070 12 GB, NVIDIA 621.01. **Settings and switches:** Native HDR, PsychoV35, FSR 3.1 at 67%, Frame generation 2x; `RX_VK_FSR_FG=1` and `RX_VK_PSYCHOV35_DLSS=1`. Disable NVIDIA FG to isolate AMD generation. **Steps:** At the daylight Lon Lon Ranch alley, start cold, change render resolution 67/83/100%, switch Vanilla HDR/SDR and back, then FG Off/on. Compare actual `fsr3fi` counts, not the selected menu row. **Expected:** Valid matching PsychoV35 buffers supply AMD depth/motion; both AMD backends decode the actual present encoding, resetting history when it changes. **Actual:** At 67% and on returning to it the original records 0/600 AMD-made frames and 600 missing-input fallbacks. At 83/100% it already generates frames, but native HDR still receives sRGB transfer metadata. ## What changed Accept the independent frame-generation inputs with matching PsychoV35 views and describe the captured present's colour correctly. Preserve the existing midpoint-only, opt-in behavior and fallback on reset/unusable frames. - `vk_fsr3_inputs`: narrow RGBA16F admission to Native PsychoV35, the existing compatibility opt-in, FSR generation requested and the 2x row. Reject mixed/unsupported network pairs, retain camera/size/depth guards, and reset input history on format or tone changes. The new RGBA preparation is not enabled for Off, Auto or 3x+. - `vk_draw` / `vk_fsr3`: bind matching sampled/storage views in translated and rejected-network routes. Preparing FG inputs still leaves the selected upscaler to perform the upscale; this does not enable the legacy FSR upscaler. - `vk_replay` / `vk_framegen`: snapshot the actual native-PQ flag into both presentation paths and pass the HDR peak with the captured colour. UNORM storage alone does not imply sRGB encoding. - `vk_fsr3fi`: set both interpolation and optical-flow transfer/luminance fields together; native PQ uses transfer 1 and the selected peak in nits, SDR retains transfer 0 and its unused 0..1 range. Validate HDR luminance and reset colour history on encoding/peak changes. This also corrects Vanilla Native HDR metadata. - Tests execute production camera admission, both real constant-block types/assignments and reset decisions, check their SDK field offsets, and retain the existing source-reading history/crop/uniform tests. No shader, vendored file or public renderer API change. ## Measurements **Verdict:** Both interleaved pairs fix the 67% PsychoV35 input fallback, including tone/FG returns. Every fixed settled FG-on interval is 600/600 AMD-made with 0 missing-input fallbacks. Existing 83/100% and Vanilla generation stays active; PQ/sRGB and 800/1000-nit metadata changes are logged correctly. No performance or calibrated HDR gain is claimed. main: 82886e89 (2026-11-14) this PR: codex/psychov35-fsr3-fg @ 324e7a6a (code f072407f, measured records and test tightening on top) Baseline: Before: development base @ 514591a3, PR400 matcher + FSR upscaling fix e7efc7c8, original FG. This isolates FG over the agreed unchanged base rather than building a new full game. Hardware: Windows kernel 26300 / 26H2; RTX 4070 12 GB, NVIDIA 621.01; i7-13700F, 32 GB RAM. Scene: Lon Lon Ranch daylight alley, fresh copied checkpoint per process. 2560x1440 output, 2560x1421 client; Native HDR paper white 200, peak 1000 nits (800 at 83%); Vanilla SDR control; FSR upscaling, FG 2x/Off/on, provider Built-in with NVIDIA FG disabled, sharpness 0, cap 61. Method: original/fixed/original/fixed, runs a3/b3/a4/b4. Eight phases each advance at least 1250 presents; report the last complete 600-request AMD generation interval in each phase. Actual options, stable play, native PQ/SDR presentation and errors are checked. These are normal deferred-presentation runs without made-frame capture overhead. World time/animation were not frozen. How to reproduce: use the settings above, compare the same checkpoint with/without this isolated FG patch, and repeat the eight phases below. To exercise **FSR upscaling plus FG**, include the separate upscaling fix https://git.magicbean.dev/MagicBeanDev/Longshot/pulls/536 in both arms, as these runs do. This PR alone does not supply that upscaler fix. | AMD-made frames per last 600 requests, two runs and median | Before: development base @ 514591a3, PR400 + FSR upscaling e7efc7c8, original FG | After: this PR @ f072407f, same development base and common fixes | |---|---|---| | PsychoV35 67%, Native HDR | 0, 0; median **0** | 600, 600; median **600** | | PsychoV35 83%, Native HDR, peak 800 | 600, 600; median **600** | 600, 600; median **600** | | PsychoV35 100%, Native HDR | 600, 600; median **600** | 600, 600; median **600** | | Vanilla 67%, Native HDR | 600, 600; median **600** | 600, 600; median **600** | | Vanilla 67%, SDR | 600, 600; median **600** | 600, 600; median **600** | | Return to PsychoV35 67%, Native HDR | 0, 0; median **0** | 600, 600; median **600** | | FG Off | No AMD generation interval, both | No AMD generation interval, both | | FG back to 2x, PsychoV35 67% | 0, 0; median **0** | 600, 600; median **600** | Both original 67% failure intervals report 600 missing inputs; all fixed settled FG-on intervals report 0. All four processes exit normally. Eleven changed production functions and both presentation-call arguments match the measured pack byte-for-byte; its unchanged pipeline creation wrappers remain those of the shared base. The same host, common matcher/upscaler and identical private diagnostics are used in both arms. No shared base or normal installation was changed. ```text vk: fsr3fi: 0 of the last 600 made frames by FSR 3.1, 600 without its inputs (the renderer's own made them) vk: fsr3fi: 600 of the last 600 made frames by FSR 3.1, 0 without its inputs (the renderer's own made them) vk: fsr3fi: captured present PQ, SDK luminance maximum 800; colour history reset vk: fsr3fi: captured present sRGB, SDK luminance maximum 1; colour history reset ``` Two additional original/fixed capture processes use the existing `RX_VK_SHOT_MADE=1` inline path, one PNG pair every 120 presents, with 12 seconds settling, right-stick +0.25 for 120 frames, -0.25 for 120 frames, and a 12-second return hold. Each produces 23 made-frame PNGs and exits normally. Capture/readback adds hitches/reset fallbacks: the fixed capture's last interval is 595/600 with 0 missing inputs, separate from the normal-path 600/600 measurements. Selected still/moving generated frames show a visible scene without all-black output or obvious global colour corruption; they are not full temporal-quality or HDR-calibration proof. An earlier incomplete harness attempt stopped because HDR Off hides tone-map controls; it was corrected, retained locally and excluded from the four measured runs. ### Flags and settings No new switch or menu default; existing FSR generation and PsychoV35 compatibility opt-ins remain off. | Flag | What it is | Before this PR | After this PR | Effect | Helps / doesn't help / untested | Recommendation | |---|---|---|---|---|---|---| | `RX_VK_PSYCHOV35_DLSS` | Existing PsychoV35 compatibility opt-in | 0; independent FSR FG path rejects RGBA | 0; setting 1 also admits matching RGBA for FSR FG at 2x | Supplies independent scene depth/motion | Native HDR PsychoV35; not legacy FSR upscaling; AMD/Intel/Linux runtime untested | Off: retain opt-in pending broader HDR validation | | `RX_VK_FSR_FG` | Existing AMD generation opt-in | 0 | 0 | Setting 1 asks for AMD's midpoint when FG is 2x | Does not add 3x+ or HUD-less colour; existing ghosting can remain | Off: known HUD/actor limitations remain | | `RX_VK_DLSS_FG=0` | Existing NVIDIA FG disable, used for isolation | Unset | Unset | Prevents NVIDIA generation taking priority on RTX | Test setup only; alternatively choose Built-in FG provider | No default change | Put opt-ins in `longshot_env.txt` beside `longshot.exe` and restart. A menu selection alone does not confirm AMD generation; inspect the log counts. ## Testing **Tested:** actual current-source Windows renderer compiles/links, including the final 2x guard; isolated pack builds and all measured functions match. Six original/fixed game processes cover normal and inline capture paths, settings transitions and camera motion as above. New regression fails unchanged main at actual RGBA camera admission and passes here; it also checks both SDK constant blocks and their offsets, invalid HDR peaks, encoding/peak/sequence resets, flag-off and unsupported multipliers. Existing history, crop/flag forwarding and uniform-ownership checks pass. Six measured-run records are included. Final full game-free suite (same optional-SDK environment in both arms): **532 passed, 12 failed, 34 skipped in 119 s (windows, 24 at once)** here versus **531 passed, 12 failed, 34 skipped in 122 s (windows, 24 at once)** on clean main82886e89. The same failures occur on both: `tests/test_appimage_player_build.py`, `tests/test_cpm_discovery.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_vram_budget_row.py`, `tests/test_walk_key.py`. No PR-only failure. The six run fragments pass the repository-format check. Renderer builds use the locally installed NGX SDK separately; that optional runtime is not required for AMD FG. **Not tested:** Linux compiler/runtime, AMD/Intel hardware, other drivers/scenes, calibrated HDR luminance, extended play or a complete temporal-quality assessment. The moving captures retain the pre-existing limitations of camera-only motion and no HUD-less colour; no general flicker, HUD-smear, actor-ghosting or performance fix is claimed. The separate FSR upscaler fix is common to the game comparison, not part of this PR. **Must be tested:** - Linux, clang or GCC: documented renderer-only build and `psychov35_fsr3_fg`, `temporal_history`, `present_source_crop`, `fsr_uniform_ownership`, `upscaler_rows` and FSR math fixtures, expecting compile success and relevant checks passing (Test Farm: @Beanstalk Linux renderer build and focused FSR FG fixtures; manual request **T-QSGE**, awaiting maintainer enablement). - AMD GPU with a Native HDR monitor, Windows or Linux: PsychoV35, FG 2x, both opt-ins; repeat 67/83/100%, tone/HDR/peak and Off/on changes, expecting AMD-generated intervals without sustained missing-input fallback or colour/history corruption (by hand: **T-2X6G**, awaiting maintainer enablement; include the separate upscaler PR when testing the full FSR+FG combination). ## Screenshots Generated-frame captures from the same copied ranch checkpoint and scripted camera sweep, Native HDR PsychoV35 at67%, FG2x. Both arms use development base514591a3, the common PR400 matcher and FSR upscaling fix e7efc7c8. These are unmodified PNGs, not frame-locked or calibrated HDR comparisons. Normal-path generation counts are reported separately in the description; inline capture can add reset/hitch fallbacks. Existing HUD/actor artifacts can remain. **Before: development base @514591a3, common fixes, original FG — built-in fallback** ![Original generated frame, stationary](https://git.magicbean.dev/attachments/15532bf8-a635-4dca-bf16-3badb669a8ad) ![Original generated frame, camera movement](https://git.magicbean.dev/attachments/ef1806fb-cd29-4787-870b-151dc409c3a9) **After: this PR @f072407f, same base/common fixes — fixed run with AMD generation active** ![Fixed-run generated frame, stationary](https://git.magicbean.dev/attachments/10a462c7-d4ba-49f8-8d06-9903e8556aaa) ![Fixed-run generated frame, camera movement](https://git.magicbean.dev/attachments/df4d0bc3-acc6-4868-b328-f9f72b18f5f7) ## Risks **What could break:** incorrect view typing or colour metadata could corrupt interpolation, and stale history could flash after a switch. Matching views/pairs, luminance checks and explicit history resets guard those cases. Native HDR metadata changes for Vanilla too; wider GPU/OS/HDR validation is still needed. **Turning it off:** `RX_VK_FSR_FG=0` restores the renderer's existing generation path. `RX_VK_PSYCHOV35_DLSS=0` disables new PsychoV35 input admission; it does not undo the Vanilla native-PQ metadata correction. Reverting the commit restores all prior behavior. **Compatibility:** no save/option schema, public `MkwVkHost`/`MkwVkRenderer` ABI, SDK binary, shader source/SPIR-V or cache-format change. Only internal FG interfaces and constants change; no `MKWVK_API_VERSION` bump is required. Both environment defaults and menu defaults are unchanged. ## Reviewer notes Validated base82886e89; latest main advanced to2b1d38c6 during testing, and a final read-only merge-tree check is clean. The measurements remain on their named development base; no runtime result on the newer main is claimed. Start with `fsr3_inputs::scene_format` and the matching-view callers, then inspect both presentation paths and `colour_constants`. The latter writes the runtime fields documented in [AMD's frame-interpolation guide](https://gpuopen.com/manuals/fidelityfx_sdk/techniques/frame-interpolation/); the vendored GLSL decodes PQ for transfer 1 and uses the maximum in nits. Storage precision does not determine encoding. No vendored code was changed. This is independent of the shared upscaler's HDR engine registration. It may be reviewed separately; the intended FSR-upscaling-plus-FG combination needs the separate upscaler fix too. Keep the measured-base qualification and the normal-path versus capture-path results distinct. ## Issues See https://git.magicbean.dev/MagicBeanDev/Longshot/issues/344 (separate general flicker remains open). Related upscaling: https://git.magicbean.dev/MagicBeanDev/Longshot/pulls/536 . Other independent paths: https://git.magicbean.dev/MagicBeanDev/Longshot/pulls/527 and https://git.magicbean.dev/MagicBeanDev/Longshot/pulls/528 . Common matcher: https://git.magicbean.dev/MagicBeanDev/Longshot/pulls/400 . ## 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`. - [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] A game-free test added for the fix, failing on `main` 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-QSGE). - [x] Docs updated.
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
Author
Member

Generated-frame captures from the same copied ranch checkpoint and scripted camera sweep, Native HDR PsychoV35 at67%, FG2x. Both arms use development base514591a3, the common PR400 matcher and FSR upscaling fix e7efc7c8. These are unmodified PNGs, not frame-locked or calibrated HDR comparisons. Normal-path generation counts are reported separately in the description; inline capture can add reset/hitch fallbacks. Existing HUD/actor artifacts can remain.

Before: development base @514591a3, common fixes, original FG — built-in fallback

Original generated frame, stationary

Original generated frame, camera movement

After: this PR @f072407f, same base/common fixes — fixed run with AMD generation active

Fixed-run generated frame, stationary

Fixed-run generated frame, camera movement

Generated-frame captures from the same copied ranch checkpoint and scripted camera sweep, Native HDR PsychoV35 at67%, FG2x. Both arms use development base514591a3, the common PR400 matcher and FSR upscaling fix e7efc7c8. These are unmodified PNGs, not frame-locked or calibrated HDR comparisons. Normal-path generation counts are reported separately in the description; inline capture can add reset/hitch fallbacks. Existing HUD/actor artifacts can remain. **Before: development base @514591a3, common fixes, original FG — built-in fallback** ![Original generated frame, stationary](https://git.magicbean.dev/attachments/15532bf8-a635-4dca-bf16-3badb669a8ad) ![Original generated frame, camera movement](https://git.magicbean.dev/attachments/ef1806fb-cd29-4787-870b-151dc409c3a9) **After: this PR @f072407f, same base/common fixes — fixed run with AMD generation active** ![Fixed-run generated frame, stationary](https://git.magicbean.dev/attachments/10a462c7-d4ba-49f8-8d06-9903e8556aaa) ![Fixed-run generated frame, camera movement](https://git.magicbean.dev/attachments/df4d0bc3-acc6-4868-b328-f9f72b18f5f7)
Author
Member

Completed two interleaved original/fixed game pairs, all eight setting phases and two separate camera-motion/generated-frame capture runs; four screenshots and six run records are included. Every fixed settled FG-on interval is 600/600 AMD-made with zero missing inputs. Original 83/100 percent already generated frames; the description preserves that result and distinguishes the native-PQ metadata correction. Final suite: 532 passed, the same12 failures as clean main,34 skipped; actual Windows renderer builds. Linux T-QSGE and AMD HDR T-2X6G await maintainer testing-wanted enablement. @Beanstalk Please build current head324e7a6a on Linux using the documented renderer-only workflow and run psychov35_fsr3_fg, temporal_history, present_source_crop, fsr_uniform_ownership, upscaler_rows and fsr3_math; expect successful compilation and all relevant fixtures passing. Publish exact tested commit, compiler/OS and safe results; no game/build artifacts. No default rollout or PR merge.

Completed two interleaved original/fixed game pairs, all eight setting phases and two separate camera-motion/generated-frame capture runs; four screenshots and six run records are included. Every fixed settled FG-on interval is 600/600 AMD-made with zero missing inputs. Original 83/100 percent already generated frames; the description preserves that result and distinguishes the native-PQ metadata correction. Final suite: 532 passed, the same12 failures as clean main,34 skipped; actual Windows renderer builds. Linux T-QSGE and AMD HDR T-2X6G await maintainer testing-wanted enablement. @Beanstalk Please build current head324e7a6a on Linux using the documented renderer-only workflow and run psychov35_fsr3_fg, temporal_history, present_source_crop, fsr_uniform_ownership, upscaler_rows and fsr3_math; expect successful compilation and all relevant fixtures passing. Publish exact tested commit, compiler/OS and safe results; no game/build artifacts. No default rollout or PR 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.
Owner

Closing: this change is already on main through #608, which took it together with the other PsychoV35 changes and turned the compatibility path on by default. Rebased onto main, what is left of this branch is its earlier opt-in form (RX_VK_PSYCHOV35_DLSS=1), which would undo 608's default, so there is nothing more to merge. Thanks!

Closing: this change is already on main through https://git.magicbean.dev/MagicBeanDev/Longshot/pulls/608, which took it together with the other PsychoV35 changes and turned the compatibility path on by default. Rebased onto main, what is left of this branch is its earlier opt-in form (`RX_VK_PSYCHOV35_DLSS=1`), which would undo 608's default, so there is nothing more to merge. Thanks!
HumanBean closed this pull request 2026-11-15 03:37:36 +00:00
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

Pull request closed

Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
3 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!605
No description provided.