build(release): two contributed pipeline lists from #2034 (RTX 5090, Kokiri Forest) #2143

Merged
Brett-D merged 1 commit from contrib/pipeline-states-2034 into main 2026-11-12 03:04:11 +00:00
Brett-D commented 2026-11-11 04:50:16 +00:00 (Migrated from github.com)

Adds two contributed pipeline lists for #2034, recorded on an NVIDIA GeForce RTX 5090 (driver 621.14, Windows 11 Pro) in Kokiri Forest.

List Build Settings Pipelines
contrib/brett-d-rtx-5090-fork-fg-2x local fork of main (source 3ecec3ea, 9 Nov), version 1 game's output size, no DLSS/FSR, Lanczos, frame generation 2x, HDR off, no mods 227 (159 new to the merge)
contrib/brett-d-rtx-5090-main-1152p-fg main at 51d468f (v2.1.0-rc.3-5-g51d468f), version 2 2048x1152, no DLSS/FSR, Lanczos, frame generation Auto, HDR off, no mods 15 (15 new)

Written with nx2/pipeline_states.py add. nx2/pipeline_states.py check passes. The merge grows to 25,425 pipelines. No other files changed.

Refs #2034

Adds two contributed pipeline lists for #2034, recorded on an NVIDIA GeForce RTX 5090 (driver 621.14, Windows 11 Pro) in Kokiri Forest. | List | Build | Settings | Pipelines | |---|---|---|---| | `contrib/brett-d-rtx-5090-fork-fg-2x` | local fork of main (source 3ecec3ea, 9 Nov), version 1 | game's output size, no DLSS/FSR, Lanczos, frame generation 2x, HDR off, no mods | 227 (159 new to the merge) | | `contrib/brett-d-rtx-5090-main-1152p-fg` | main at 51d468f (v2.1.0-rc.3-5-g51d468f), version 2 | 2048x1152, no DLSS/FSR, Lanczos, frame generation Auto, HDR off, no mods | 15 (15 new) | Written with `nx2/pipeline_states.py add`. `nx2/pipeline_states.py check` passes. The merge grows to 25,425 pipelines. No other files changed. Refs #2034
mooki000 commented 2026-11-11 15:52:35 +00:00 (Migrated from github.com)

Checked against a Kokiri Forest route on Linux with an RTX 4090: this adds 12-13 of the pipelines that route still had to build in play. Head e6ced4f merged onto main 364d199; NVIDIA 615.78.08, i9-13900K, Arch Linux, headless at the game's own output size (2048x1152), defaults, no mods.

How: two runs of main with the precompile off (RX_VK_PRECOMPILE=0), the driver's caches deleted and no state list of its own in the folder, so every pipeline the run draws is built in play and goes into its hookshot_pipeline_states.bin: the title, a child save in Kokiri Forest by Link's house, 45 s of camera turns. Then the recorded records were compared with the merged shipped list of each tree (pipeline_states.merged, records converted to version 2 as the merge does). No game needed for that step.

shipped list pipelines of run 1's 828 recorded of run 2's 826 recorded
main 364d199 25251 738 (89.1%) 734 (88.9%)
main + this PR 25425 750 (90.6%) 747 (90.4%)
  • So of the 90-92 pipelines this route used that no list named, your two lists name 12-13. nx2/pipeline_states.py check passes on the merge and the merged list is 25,425 pipelines, as you wrote; tests/run_all.py pipeline_state passes (4 checks).
  • Not measured: the stutter itself (frame times with and without the 12-13 pipelines prepared), the first start's preparation time with 174 more pipelines, other areas, frame generation or a window (your recordings used both; my run had neither).
**Checked against a Kokiri Forest route on Linux with an RTX 4090: this adds 12-13 of the pipelines that route still had to build in play.** Head e6ced4f merged onto main 364d199; NVIDIA 615.78.08, i9-13900K, Arch Linux, headless at the game's own output size (2048x1152), defaults, no mods. How: two runs of main with the precompile off (`RX_VK_PRECOMPILE=0`), the driver's caches deleted and no state list of its own in the folder, so every pipeline the run draws is built in play and goes into its `hookshot_pipeline_states.bin`: the title, a child save in Kokiri Forest by Link's house, 45 s of camera turns. Then the recorded records were compared with the merged shipped list of each tree (`pipeline_states.merged`, records converted to version 2 as the merge does). No game needed for that step. | shipped list | pipelines | of run 1's 828 recorded | of run 2's 826 recorded | |---|---|---|---| | main 364d199 | 25251 | 738 (89.1%) | 734 (88.9%) | | main + this PR | 25425 | 750 (90.6%) | 747 (90.4%) | - So of the 90-92 pipelines this route used that no list named, your two lists name 12-13. `nx2/pipeline_states.py check` passes on the merge and the merged list is 25,425 pipelines, as you wrote; `tests/run_all.py pipeline_state` passes (4 checks). - Not measured: the stutter itself (frame times with and without the 12-13 pipelines prepared), the first start's preparation time with 174 more pipelines, other areas, frame generation or a window (your recordings used both; my run had neither).
Joey-Magnus (Migrated from github.com) reviewed 2026-11-11 20:06:51 +00:00
Joey-Magnus (Migrated from github.com) left a comment

Thanks for recording these. The PR has the shape assets/pipeline_states/README.md asks for: two contrib/ lists, each with its note, no other files touched, and CI is green. mooki000's comparison on a Kokiri Forest route (12-13 of the ~90 pipelines no list named, now covered) shows they help. The 1152p list recorded on main at 51d468f is fine as it is.

question assets/pipeline_states/contrib/brett-d-rtx-5090-fork-fg-2x.md:7: this list (227 pipelines, 159 of them new to the merge) was recorded on "a local fork of main (source 3ecec3ea)". That commit isn't on main or anywhere I can fetch, and step 1 of the contrib README asks for lists from current main, because a different build can ask for pipelines main never does. What does the fork change? If it touches anything that ends up in a record (shaders, the program variants, target formats, draw state, for example a frame generation or present change), some of those 159 are pipelines no player's build will ever ask for, and every player's first start pays to prepare them. If the fork only changes host-side code (the builder, menus, logging), say so in the note and this is fine. Otherwise the simplest fix is to record the same route again on main with frame generation at 2x, under a new name, and drop this list.

minor: since the measured gain comes from both lists together, it would help to know how much the fork list adds on its own. mooki000's comparison could be repeated with only the main list merged. It isn't needed to merge, but it would settle the question above.

Thanks for recording these. The PR has the shape `assets/pipeline_states/README.md` asks for: two `contrib/` lists, each with its note, no other files touched, and CI is green. mooki000's comparison on a Kokiri Forest route (12-13 of the ~90 pipelines no list named, now covered) shows they help. The 1152p list recorded on main at 51d468f is fine as it is. **question** `assets/pipeline_states/contrib/brett-d-rtx-5090-fork-fg-2x.md:7`: this list (227 pipelines, 159 of them new to the merge) was recorded on "a local fork of main (source 3ecec3ea)". That commit isn't on main or anywhere I can fetch, and step 1 of the contrib README asks for lists from current `main`, because a different build can ask for pipelines main never does. What does the fork change? If it touches anything that ends up in a record (shaders, the program variants, target formats, draw state, for example a frame generation or present change), some of those 159 are pipelines no player's build will ever ask for, and every player's first start pays to prepare them. If the fork only changes host-side code (the builder, menus, logging), say so in the note and this is fine. Otherwise the simplest fix is to record the same route again on main with frame generation at 2x, under a new name, and drop this list. **minor**: since the measured gain comes from both lists together, it would help to know how much the fork list adds on its own. mooki000's comparison could be repeated with only the main list merged. It isn't needed to merge, but it would settle the question above.
Joey-Magnus (Migrated from github.com) reviewed 2026-11-11 21:25:51 +00:00
Joey-Magnus (Migrated from github.com) left a comment

The format is fine (pipeline_states.py check passes, hashes and draw state only), and the 15-pipeline main-1152p-fg list is good. The 227-pipeline list in contrib/brett-d-rtx-5090-fork-fg-2x.md:7 was recorded on "a local fork of main (source 3ecec3ea)", which isn't fetchable, and the contrib README asks for lists from main. Could you confirm the fork only changed host-side code, or drop that list and keep the main one?

The format is fine (`pipeline_states.py check` passes, hashes and draw state only), and the 15-pipeline `main-1152p-fg` list is good. The 227-pipeline list in `contrib/brett-d-rtx-5090-fork-fg-2x.md:7` was recorded on "a local fork of main (source 3ecec3ea)", which isn't fetchable, and the contrib README asks for lists from main. Could you confirm the fork only changed host-side code, or drop that list and keep the main one?
hckrman101 (Migrated from github.com) reviewed 2026-11-11 22:18:28 +00:00
hckrman101 (Migrated from github.com) left a comment

Thanks for the recordings. Checked against CONTRIBUTING.md and the pipeline_states README: only the two contrib/ lists and their notes change, nothing else. I unpacked both lists to look at them: they are HKSTATE1 and HKSTATE2 files of fixed-size records (hashes, formats, draw state), no shader code, no game files or saves. The notes carry who, GPU and driver, build, settings, route and count, as the README asks. CI is green.

  • brett-d-rtx-5090-main-1152p-fg (15 pipelines, main at 51d468f, version 2) is fine as it is. I agree with Joey-Magnus here.
  • brett-d-rtx-5090-fork-fg-2x is still open: Joey-Magnus's question about the unfetchable fork (source 3ecec3ea) has no answer yet. The README asks for lists built from current main. If the fork only changed host-side code, say so in the note and it is fine. If it touched shaders, program variants, target formats or the frame generation/present path, some of the 159 new records may never be asked for by a player's build, and every first start pays to prepare them. The fix is then to record the route again on main with frame generation 2x under a new name and drop this list. mooki000's measurement (12-13 of ~90 missing pipelines covered, both lists together) shows the pair helps, but not how much comes from the fork list, and his run had no frame generation, so it can't tell either.

The decision on the fork list stays with NotRexed. I would not merge it until the fork question is answered; the main list could go in on its own.

Thanks for the recordings. Checked against CONTRIBUTING.md and the pipeline_states README: only the two `contrib/` lists and their notes change, nothing else. I unpacked both lists to look at them: they are `HKSTATE1` and `HKSTATE2` files of fixed-size records (hashes, formats, draw state), no shader code, no game files or saves. The notes carry who, GPU and driver, build, settings, route and count, as the README asks. CI is green. - `brett-d-rtx-5090-main-1152p-fg` (15 pipelines, main at 51d468f, version 2) is fine as it is. I agree with Joey-Magnus here. - `brett-d-rtx-5090-fork-fg-2x` is still open: Joey-Magnus's question about the unfetchable fork (source 3ecec3ea) has no answer yet. The README asks for lists built from current `main`. If the fork only changed host-side code, say so in the note and it is fine. If it touched shaders, program variants, target formats or the frame generation/present path, some of the 159 new records may never be asked for by a player's build, and every first start pays to prepare them. The fix is then to record the route again on main with frame generation 2x under a new name and drop this list. mooki000's measurement (12-13 of ~90 missing pipelines covered, both lists together) shows the pair helps, but not how much comes from the fork list, and his run had no frame generation, so it can't tell either. The decision on the fork list stays with NotRexed. I would not merge it until the fork question is answered; the main list could go in on its own.
Owner

@Brett-D commented on GitHub · 2026-11-12 07:27 UTC · original

Thanks for checking these. On the question about brett-d-rtx-5090-fork-fg-2x: the "fork" was local builds of main at 0828863 (9 Nov) plus my own changes, none of which touch what goes into a record:

  • DLSS-NR (NGX) and an FXAA option in the window-scaling pass, after the game's draws
  • a per-slot sampler cache and its descriptor-reuse check
  • a texture budget and retirement pacing
  • menu rows and an optional voice feature (host side)

There are no changes to shader translation, program variants, target formats or draw state. Earlier sessions in that folder (from 7 Nov) ran the same changes on older main. #2143 had already merged, so the note change is in #2703; pipeline_states.py check still passes. If you'd rather only take lists recorded on main, I can drop that list in a follow-up.

> [@Brett-D](https://github.com/Brett-D) commented on GitHub · 2026-11-12 07:27 UTC · [original](https://github.com/NotRexed/Hookshot/pull/2143#issuecomment-6817517054) Thanks for checking these. On the question about `brett-d-rtx-5090-fork-fg-2x`: the "fork" was local builds of main at 0828863 (9 Nov) plus my own changes, none of which touch what goes into a record: - DLSS-NR (NGX) and an FXAA option in the window-scaling pass, after the game's draws - a per-slot sampler cache and its descriptor-reuse check - a texture budget and retirement pacing - menu rows and an optional voice feature (host side) There are no changes to shader translation, program variants, target formats or draw state. Earlier sessions in that folder (from 7 Nov) ran the same changes on older main. #2143 had already merged, so the note change is in #2703; `pipeline_states.py check` still passes. If you'd rather only take lists recorded on main, I can drop that list in a follow-up. <!-- github-sync:c:6817517054 -->
Commenting is not possible because the repository is archived.
No description provided.