perf(pipelines): 22,987 more pipelines prepared before the title, from a tour of every map, actor and cutscene #563
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!563
Loading…
Reference in a new issue
No description provided.
Delete branch "GummiNaomi/Longshot:contrib/gumminaomi-pipeline-tour"
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
New areas, enemies and cutscenes still stutter the first time they appear, because their pipelines aren't in the shipped list and compile in play. This adds 22,987 pipelines recorded by a scripted tour of every map, actor type and cutscene, so a new install builds them before the title.
What changed
pipelines:
assets/pipeline_states/contrib/gumminaomi-tour-every-map-actor-cutscene.bin.xz+.md. A contributed list added withnx2/pipeline_states.py add: 22,987 pipelines no other contributed list holds (19,533 graphics, 1,488 mesh, 1,966 compute programs). 21,848 of them are in no shipped list at all, the tour's included (+52% on the merged 42,072). Recorded cold (RX_VK_PRECOMPILE=0) on an RTX 4070 SUPER at this PC's default settings, over these runs:StartPos), child and adult, a camera turn each, the overworld at noon and at midnightActorInfo), made 16 at a time beside LinkThe script that drove it isn't in this PR: #111 is the pipeline tour, and the host change it needed is offered there (comment on #111). This list doesn't touch
tour.bin.xz, so a new tour replaces nothing of it.nx2:
COMPUTE_MOST1024 → 2560 (nx2/pipeline_states.py, and the README's number). The merged list now names 2,199 compute programs (233 before), half of the game's 4,127, socheckstopped at 1024. The measurement below is the "measure again" its comment asks for, and the comment now records it.Flags and settings
None.
Measurements
main:
7ff5256e(2026-11-14)this PR: contrib/gumminaomi-pipeline-tour @
9230a64eBaseline: main @ 7ff5256e's shipped list, made by
pipeline_states.py mergeon mainBoth columns run the same game build: test/play at af15c4a5 (main at
f3fe1763with opt-in branches that change no shaders), the only difference beinglongshot_pipeline_states_shipped.bin, merged on main and on this PR. This PR changes only that file's sources, so swapping it is the comparison. main's lists haven't changed sincef3fe1763.Hardware: RTX 4070 SUPER (driver 617.42), Ryzen 9 9950X3D (SMT off), 32 GB, Windows 11
Scene: the save "Hyrule Field, night", headless, the game's default options on this PC (Auto preset: DLSS, 2048x1152, 60 fps);
RX_VK_LOAD=create, the default on GPUs with mesh shadersMethod: two rounds interleaved (main, PR, main, PR). Each round: no notes and no pipeline cache, then the build's step (
longshot --prepare-shaders --compile-shaders most), then a first start and a later start to play, each measured 30 s into play. Times by wall clock; precompile lines from the logs; memory is the process's private bytes and working set (Get-Process) 30 s into play. The driver's own shader cache was warm in both arms (this PC had already compiled these pipelines in the tour), so the compile times are the warm case.How to reproduce:
pipeline_states.py merge --outon main and on this branch, each copied over a game folder'slongshot_pipeline_states_shipped.bin, withlongshot_pipelines.bin*,mkw_vk_pipelines*.bin,longshot_computes.binandlongshot_compute_variants.binremoved first.7ff5256e9230a64eThe cost is memory: the 1,965 extra compute programs are kept ready at every start, about 0.6 MB each, as the 12 Nov measurement in
COMPUTE_MOST's comment predicted (0.6 to 1 MB). Start-up time grows by about a second. Pruning the list's compute programs to those play dispatches is the alternative, and this list would then lose the cutscenes' and actors' compute work.Testing
Tested:
nx2/pipeline_states.py check: passes. Merged: 63,920 pipelines (compute 2,199, graphics 57,687, mesh 4,034) of 22,785 programs, version 2.python -I -B tests/run_all.pyon Windows 11, interleaved with main, once each:1be60eae: 191 passed, 59 failed, 321 skipped;g++/cxxsetup for those checks.test_cpm_discoveryfailed on main only.tests/test_pipeline_state_sources.pypasses.test_pipeline_state_computes,test_pipeline_state_sourcesandtest_pipeline_states): all pass but 6 (nx2/test_dll.py,test_driver_cache_folder,test_oot_state_tap,test_tested_configurations,test_utf8_paths,test_walk_key), which fail the same way on main here.Not tested:
Needs other testers:
Screenshots
Nothing on screen.
Risk and rollback
More memory at every start (+1.3 GB here) and about a second more before the title. Reverting the commit is enough. If the memory matters on small PCs, the list's compute programs can be pruned without touching its graphics pipelines.
Reviewer notes
f3fe1763with opt-in branches (late pages' fix on, the rest off), as its note says, not on current main.--prepare-shadersbuilt every pipeline of it on this build ("0 not made"). A pipeline a newer main no longer asks for costs only its build time.Issues
None. Related: #111 (the pipeline tour).
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
docs/tested/for each new measured run (format indocs/tested-configurations.md; no appended row or assembled view).Assisted-by:/Co-Authored-By:trailers.WIP: perf(pipelines): 22,987 more pipelines prepared before the title, from a tour of every map, actor and cutsceneto perf(pipelines): 22,987 more pipelines prepared before the title, from a tour of every map, actor and cutsceneRX_VK_LOAD=createmeasured on a second such card (RX 5600 XT): same fps or better, loads of 50 ms at worst #805