fix(vk): apply PsychoV35 to the adapted scene permutation #400
No reviewers
Labels
No labels
area/accessibility
area/audio
area/input
area/install
area/menu
area/renderer
area/saves
area/upscaling
beanstalk: approved @ 1697603
beanstalk: approved @ 2c5a62e
beanstalk: approved @ 4fd82b7
beanstalk: approved @ 64d6d09
beanstalk: approved @ 6f91fae
beanstalk: approved @ 70a78f9
beanstalk: approved @ 8d361dc
beanstalk: approved @ 9d8356e
beanstalk: approved @ abf2227
beanstalk: approved @ d82f202
beanstalk: approved @ e5f1e40
beanstalk: approved @ ee8ab5f
ci: approved
good first issue
gpu/amd
gpu/igpu
gpu/intel
gpu/nvidia
help wanted
kind
bug
kind
chore
kind
docs
kind
feature
kind
performance
kind
question
needs measurements
platform/linux
platform/macos
platform/steam-deck
platform/windows
preview
priority
critical
priority
high
priority
low
regression
status
blocked
status
confirmed
status
duplicate
status
invalid
status
needs-info
status
wontfix
testing wanted
ci: approved
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
MagicBeanDev/Longshot!400
Loading…
Reference in a new issue
No description provided.
Delete branch "futondestroyer/Longshot:codex/psychov35-scene-variants"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Why
Camera movement can switch between two scene-mapping permutations while PsychoV35 is selected. One was left on the vanilla curve, producing the repeated warm/cool flashes recorded in Lon Lon Ranch.
What changed
scene_tonemap_pass.hrecognizes the adapted permutation's extra sharedexp2exposure multiplier and includes it in the complete PsychoV35 gain.docs/tested/.Flags and settings
None added. Reproduce with Native HDR and PsychoV35; DLSS/DLAA continues to use the existing opt-in
RX_VK_PSYCHOV35_DLSS=1.Measurements
main:
0caf0618(2026-11-14)this PR: codex/psychov35-scene-variants @
4b3729ffBaseline: development base @
514591a3(original matcher)The agreed shared development base was retained to keep the host and all other renderer code identical. Its original matcher and PsychoV35 math are identical to main
0caf0618.dev_packs.pybuilt renderer-only packs containing the original/fixed matcher and the same diagnostic logging. The measured fix header is b20f94fdf355a01d; afterward only its introductory comment was reflowed and the run records added. No new full game build or base movement was needed.Hardware: RTX 4070, NVIDIA 621.01, Core i7-13700F, 32 GB RAM, Windows build 26300 / 26H2.
Scene: Lon Lon Ranch daylight alley; 2560x1440, 16:9, Native HDR 200/1000 nits, PsychoV35, DLAA K, FG Off, game cap 61.
Method: fresh copies of one saved checkpoint, two-pitch left/right camera sweeps, interleaved original/fixed/original/fixed. Recordings start before camera input. Each run has complete records; startup/menu transitions are excluded. No FPS/performance result is claimed.
514591a3(original matcher)514591a3+ this PR @4b3729ffThe metric is the median block change in R-minus-B over 98 blocks of 20x20 pixels, taking the largest absolute step within five frames of each logged shader switch. Counts are detections at transitions, not independent flash episodes. The diagnostic control also matched all 45 stable switches to the expected warmer/cooler direction at the fixed one-frame capture offset. Raw PQ samples support relative colour comparison, not calibrated brightness.
How to reproduce: load child Link in the ranch alley facing the entrance, tilt toward the ground, pan left/right, then raise the view toward the sky and repeat. On main, the image alternates curves; here both permutations retain PsychoV35. For the game-free regression, run
python -I -B tests/test_scene_tonemap_pass.pywith the new synthetic fixture: it fails unchanged current main at the adapted-exposure assertion and passes here.Testing
Tested: two paired in-game runs above; original recorded reproduction; renderer pack built and linked with zero compiler failures; synthetic interpreted outputs agree with PsychoV35 at the complete adapted gain; unsupported graphs remain unchanged. Full
python -I -B tests/run_all.py: 521 passed / 6 failed / 34 skipped here and the same results and failures on clean main0caf0618. Shared failures:test_framegen_resources,test_module_ids,test_oot_state_tap,test_pad_layout,test_release,test_tested_configurations. No PR-only failure. Final focused matcher test passes. New run files validate throughscripts/tested_configurations.py; the catalogue unit retains main's Windows ASCII-pipe CRLF failure.Not tested: Linux, AMD/Intel, a fresh full current-main game build, or long gameplay beyond the captured views. The reported Lake Hylia/Field transition symptom needs a retest; the newer log's occasional format fallback is a separate lead. This PR addresses the recorded shader-permutation flashes.
Needs other testers: Linux C++20 game-free matcher build/regression: T-S724. Run the development guide's game-free check selection
python -I -B tests/run_all.py scene_tonemapon this branch and report compiler/OS/result. No GPU or game dump is needed. A maintainer must addtesting wantedbefore the request can be claimed. Linux gameplay remains untested.Screenshots
A local before/after comparison is prepared. Awaiting explicit permission to attach it; keeping this PR WIP until it is attached.
Risk and rollback
The matcher now accepts one additional, narrowly constrained exposure shape. Incorrectly accepting a different shape could change its colour; shared RGB exposure/adaptation checks, the existing scene/luminance/peak guards and negative fixtures limit that risk. Select Vanilla to bypass PsychoV35, or revert this commit. Translator changes invalidate the shader cache normally.
Reviewer notes
Read the matcher and
tests/scene_tonemap_ir.cppfirst. No host runtime, platform interface or shipped GLSL/SPIR-V file changes. The earlier hue-continuity experiment is not included: it did not eliminate the reported flashes. No merge or auto-merge requested.Issues
See #344
Checklist
For everyone
type(scope): description).main.python -I -B tests/run_all.pyrun and passing (any failure that also fails onmainis named above).third_party/untouched (a new folder with aPROVENANCE.mdinstead).If applicable
Assisted-by:/Co-Authored-By:trailers.docs/tested/for each new measured run (format indocs/tested-configurations.md; no appended row or assembled view).mainand passing here.tests/that reads changed source updated in this PR, not weakened.Local validation is complete: original/fixed/original/fixed yielded 45 and 37 large chroma-step detections versus zero in both fixed runs; full suite has the same six failures on the PR and clean main. The fixed renderer applies PsychoV35 to both scene permutations. Description/checklist now explicitly retain Linux build coverage as pending T-S724; could a maintainer add testing wanted so the game-free Linux check can be claimed? The prepared comparison image is awaiting explicit attachment permission. Keeping WIP until both applicable boxes are settled.
WIP: fix(vk): apply PsychoV35 to the adapted scene permutationto fix(vk): apply PsychoV35 to the adapted scene permutation