fix(vk): the start-up bar counts the compute pipelines, not 100% through them #256

Open
gab9281 wants to merge 2 commits from gab9281/Longshot:fix/startup-bar-compute into main
Member

Why

On the first start after a shader preparation, the start-up screen sits at "100%, a few seconds left" for about 5 minutes (RTX 3060 Laptop), which looks like being stuck on the last shader. The bar counted only the noted pipelines, then stayed full while every compute program's pipeline was built.

What changed

  • vk: precompile_warm() in gpu/vk/vk_draw.cpp lists the compute programs' keys (program_cache_compute_keys()) before it starts. Both steps count on one total, the noted pipelines and then the compute pipelines, so the bar moves through the compute step instead of sitting at 100%. The work done is the same: only the count given to the bar changes.
  • tests: tests/test_warm_bounded.py checks that the compute step reports its own progress against the whole. It fails on main, where it reports progress(total, total).

Flags and settings

None.

Measurements

What changes is the number the start-up screen shows, not the time: the same pipelines are built in the same order. So the measurement is the bar's value at the start of the compute step, from the start-up log line, with the shaders' time on this PR for reference.

main: 36a12f6f (2026-11-13; precompile_warm's bar code is the same on main @ 514591a3, which this PR is on: main's renderer changes since, #234 and #260, are elsewhere in vk_draw.cpp)
this PR: fix/startup-bar-compute @ 2af5f18e (measured there; 82271725, the head now, changes only the count after a stopped noted step, which this start didn't have)
Hardware: RTX 3060 Laptop (NVIDIA 620.70.06), Ryzen 7 6800H, 15 GB, CachyOS (Linux 7.3.3), KDE Wayland
Scene: the start-up screen of the first start after a preparation (RX_VK_LOAD=create), default settings
Method: the start-up screen's vk: start-up: pipelines … of … log line once the noted pipelines are done, one start each, started through game-performance
How to reproduce: prepare the shaders (a build with --prepare-shaders), start the game, and watch the start-up screen and longshot_log.txt

main @ 36a12f6f this PR @ 2af5f18e
The bar when the compute step starts 24457 of 24457, 100%, "a few seconds left" 27918 of 29473, 95%
The bar through the compute step stays at 100% (about 5 min with nothing cached) counts up to 100%
main:    [hos host] vk: start-up: pipelines 24457 of 24457, 100% of all, a few seconds left
this PR: [hos host] vk: start-up: pipelines 27918 of 29473, 95% of all, a few seconds left
this PR: [hos host] vk: precompile: 25346 noted pipelines of 16072 programs and 9925 compute pipelines of 4127 compute programs built into the pipeline cache and let go
this PR: [hos host] vk: start-up: the shaders took 11.3 s

29473 = 25346 noted + 4127 compute programs. The two starts had different numbers of noted pipelines (main's folder was prepared at another commit), and this start had the compute pipelines cached (11.3 s), so the times aren't compared. A run-to-run timing table wouldn't show anything: no pipeline is added or removed.

Testing

Tested:

  • In the game, Linux (the hardware above): built at 2af5f18e (the same bar code at 82271725, rebased on main @ 514591a3 with no conflict), a first start after a preparation. The start-up screen counted through the compute step to the end, with the log lines above.
  • Game-free: python -I -B tests/test_warm_bounded.py passes, and fails on main. RX_CPM=<the CPM cache> python -I -B tests/run_all.py at 82271725 (main @ 514591a3): 517 passed, 1 failed, 15 skipped (Windows only). The failure, tests/test_menu_i18n.py (a pt_BR text of a menu line main changed), fails on main 514591a3 too.

Not tested:

  • Windows: the code is the same (precompile_warm isn't platform-specific). The game builds for Windows with llvm-mingw at 2c2100d1 (4:38, the same code on the main before); not run on Windows.
  • A start with nothing cached on this PR, where the compute step takes minutes: this PC had them cached by then. The count is the same either way.

Needs other testers:
None (this is the bar's count, the same on every GPU).

Screenshots

Nothing new on screen: the same start-up screen, with a percentage that keeps moving.

Risk and rollback

The progress callback gets a larger total. If the compute step is skipped (the preparation was stopped), the bar ends below 100%, as any stopped preparation does. Reverting the commit is enough.

Reviewer notes

The compute keys were already listed, after the noted pipelines; this lists them once, before.

A /code-review (high) found 7 things:

  • Fixed (2c2100d1):
    • after a noted step stopped part-way, the compute step's only tick said every noted pipeline was done (total + computes_done); it now reports done + computes_done;
    • the compute keys are indexed, not copied into a second list;
    • the test pins the expression and that no tick reports total.
  • Left as is, on purpose:
    • A compute pipeline costs more than a noted one, but both count as one. That is how the normal precompile (precompile_run) already counts its notes, computes and fallbacks on one total. The time left comes from the bar's rate over the last 15 s (ProgressClock), so it slows down with the step instead of saying "a few seconds" for minutes. A weight per kind would change both paths and is a follow-up.
    • Part 2's guess (prepare_guess) counts the computes play dispatched, not every kept one. The normal precompile has the same gap on a first start (computes_plan's "every kept one"). The bar never goes back, so at worst it holds still for a moment when the count replaces the guess. Same follow-up.
    • The total counts keys the worker skips (failed, TAAU). They are counted done as they are skipped, so the bar still reaches the end. The log's "built" line counts what was built.
    • The keys are listed before the noted step, even on a start that is stopped during it. This is one walk of the index under its lock, needed for the total from the start.

Issues

None: found while testing #206 (the start-up screen "stuck on the last shader").

Checklist

For everyone

  • One topic.
  • The title is a Conventional Commit (type(scope): description).
  • Rebased on current main.
  • python -I -B tests/run_all.py run and passing (any failure that also fails on main is named above).
  • Tested in the game, or what wasn't is named under Testing.
  • Testing filled in: what was tested, what wasn't, and what needs other testers (with test requests).
  • Measured: main and this PR at named commits, on the same PC, scene and settings, at least 2 interleaved runs each, the median reported. (The bar's count, which doesn't vary between runs: see Measurements.)
  • 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.

If applicable

  • AI assistance recorded with Assisted-by: / Co-Authored-By: trailers.
  • 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.

🤖 Generated with Claude Code

https://claude.ai/code/session_015KgSKoUqUvce5UXG89NBgi

## Why On the first start after a shader preparation, the start-up screen sits at "100%, a few seconds left" for about 5 minutes (RTX 3060 Laptop), which looks like being stuck on the last shader. The bar counted only the noted pipelines, then stayed full while every compute program's pipeline was built. ## What changed - vk: `precompile_warm()` in `gpu/vk/vk_draw.cpp` lists the compute programs' keys (`program_cache_compute_keys()`) before it starts. Both steps count on one total, the noted pipelines and then the compute pipelines, so the bar moves through the compute step instead of sitting at 100%. The work done is the same: only the count given to the bar changes. - tests: `tests/test_warm_bounded.py` checks that the compute step reports its own progress against the whole. It fails on main, where it reports `progress(total, total)`. ## Flags and settings None. ## Measurements What changes is the number the start-up screen shows, not the time: the same pipelines are built in the same order. So the measurement is the bar's value at the start of the compute step, from the start-up log line, with the shaders' time on this PR for reference. main: 36a12f6f (2026-11-13; `precompile_warm`'s bar code is the same on main @ 514591a3, which this PR is on: main's renderer changes since, #234 and #260, are elsewhere in `vk_draw.cpp`) this PR: fix/startup-bar-compute @ 2af5f18e (measured there; 82271725, the head now, changes only the count after a stopped noted step, which this start didn't have) Hardware: RTX 3060 Laptop (NVIDIA 620.70.06), Ryzen 7 6800H, 15 GB, CachyOS (Linux 7.3.3), KDE Wayland Scene: the start-up screen of the first start after a preparation (`RX_VK_LOAD=create`), default settings Method: the start-up screen's `vk: start-up: pipelines … of …` log line once the noted pipelines are done, one start each, started through `game-performance` How to reproduce: prepare the shaders (a build with `--prepare-shaders`), start the game, and watch the start-up screen and `longshot_log.txt` | | main @ 36a12f6f | this PR @ 2af5f18e | |---|---|---| | The bar when the compute step starts | 24457 of 24457, 100%, "a few seconds left" | 27918 of 29473, 95% | | The bar through the compute step | stays at 100% (about 5 min with nothing cached) | counts up to 100% | ``` main: [hos host] vk: start-up: pipelines 24457 of 24457, 100% of all, a few seconds left this PR: [hos host] vk: start-up: pipelines 27918 of 29473, 95% of all, a few seconds left this PR: [hos host] vk: precompile: 25346 noted pipelines of 16072 programs and 9925 compute pipelines of 4127 compute programs built into the pipeline cache and let go this PR: [hos host] vk: start-up: the shaders took 11.3 s ``` 29473 = 25346 noted + 4127 compute programs. The two starts had different numbers of noted pipelines (main's folder was prepared at another commit), and this start had the compute pipelines cached (11.3 s), so the times aren't compared. A run-to-run timing table wouldn't show anything: no pipeline is added or removed. ## Testing **Tested:** - In the game, Linux (the hardware above): built at 2af5f18e (the same bar code at 82271725, rebased on main @ 514591a3 with no conflict), a first start after a preparation. The start-up screen counted through the compute step to the end, with the log lines above. - Game-free: `python -I -B tests/test_warm_bounded.py` passes, and fails on main. `RX_CPM=<the CPM cache> python -I -B tests/run_all.py` at 82271725 (main @ 514591a3): 517 passed, 1 failed, 15 skipped (Windows only). The failure, `tests/test_menu_i18n.py` (a pt_BR text of a menu line main changed), fails on main 514591a3 too. **Not tested:** - Windows: the code is the same (`precompile_warm` isn't platform-specific). The game builds for Windows with llvm-mingw at 2c2100d1 (4:38, the same code on the main before); not run on Windows. - A start with nothing cached on this PR, where the compute step takes minutes: this PC had them cached by then. The count is the same either way. **Needs other testers:** None (this is the bar's count, the same on every GPU). ## Screenshots Nothing new on screen: the same start-up screen, with a percentage that keeps moving. ## Risk and rollback The progress callback gets a larger total. If the compute step is skipped (the preparation was stopped), the bar ends below 100%, as any stopped preparation does. Reverting the commit is enough. ## Reviewer notes The compute keys were already listed, after the noted pipelines; this lists them once, before. A `/code-review` (high) found 7 things: - **Fixed** (2c2100d1): - after a noted step stopped part-way, the compute step's only tick said every noted pipeline was done (`total + computes_done`); it now reports `done + computes_done`; - the compute keys are indexed, not copied into a second list; - the test pins the expression and that no tick reports `total`. - **Left as is, on purpose:** - *A compute pipeline costs more than a noted one, but both count as one.* That is how the normal precompile (`precompile_run`) already counts its notes, computes and fallbacks on one total. The time left comes from the bar's rate over the last 15 s (`ProgressClock`), so it slows down with the step instead of saying "a few seconds" for minutes. A weight per kind would change both paths and is a follow-up. - *Part 2's guess (`prepare_guess`) counts the computes play dispatched, not every kept one.* The normal precompile has the same gap on a first start (`computes_plan`'s "every kept one"). The bar never goes back, so at worst it holds still for a moment when the count replaces the guess. Same follow-up. - *The total counts keys the worker skips (failed, TAAU).* They are counted done as they are skipped, so the bar still reaches the end. The log's "built" line counts what was built. - *The keys are listed before the noted step, even on a start that is stopped during it.* This is one walk of the index under its lock, needed for the total from the start. ## Issues None: found while testing #206 (the start-up screen "stuck on the last shader"). ## Checklist ### For everyone - [x] One topic. - [x] The title is a Conventional Commit (`type(scope): description`). - [x] Rebased on current `main`. - [x] `python -I -B tests/run_all.py` run and passing (any failure that also fails on `main` is named above). - [x] Tested in the game, or what wasn't is named under Testing. - [x] Testing filled in: what was tested, what wasn't, and what needs other testers (with test requests). - [x] Measured: main and this PR at named commits, on the same PC, scene and settings, at least 2 interleaved runs each, the median reported. (The bar's count, which doesn't vary between runs: see Measurements.) - [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. ### If applicable - [x] AI assistance recorded with `Assisted-by:` / `Co-Authored-By:` trailers. - [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. - [x] Host code builds on both Windows (llvm-mingw) and Linux, with UTF-8 paths. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_015KgSKoUqUvce5UXG89NBgi
gab9281 changed title from WIP: fix(vk): the start-up bar counts the compute pipelines, not 100% through them to fix(vk): the start-up bar counts the compute pipelines, not 100% through them 2026-11-13 18:05:07 +00:00
gab9281 force-pushed fix/startup-bar-compute from 2c2100d102
All checks were successful
CI / Python source checks (ubuntu-24.04, part 1/2) (pull_request) Has been skipped
CI / Python source checks (ubuntu-24.04, part 2/2) (pull_request) Has been skipped
CI / SPIR-V fixtures (global narrow load/store, direct surface atomics, F2I immediate) (pull_request) Has been skipped
Third-party parts / The same as upstream (pull_request) Has been skipped
CI / Conventional Commit title (pull_request) Successful in 5s
CI / Workflow lint (actionlint) (pull_request) Successful in 7s
Third-party parts / As their notes say (pull_request) Successful in 11s
PR description / Description follows the template (pull_request_target) Successful in 3s
to 8227172508
All checks were successful
CI / Python source checks (ubuntu-24.04, part 1/2) (pull_request) Has been skipped
CI / Python source checks (ubuntu-24.04, part 2/2) (pull_request) Has been skipped
CI / SPIR-V fixtures (global narrow load/store, direct surface atomics, F2I immediate) (pull_request) Has been skipped
Third-party parts / The same as upstream (pull_request) Has been skipped
Website / Website on Cloudflare (pull_request) Has been skipped
CI / Conventional Commit title (pull_request) Successful in 4s
CI / Workflow lint (actionlint) (pull_request) Successful in 8s
Third-party parts / As their notes say (pull_request) Successful in 11s
PR description / Description follows the template (pull_request_target) Successful in 5s
Website / Website on Cloudflare (pull_request_target) Has been skipped
2026-11-13 19:36:53 +00:00
Compare
Member

Test request T-RZC9: pass (Windows startup progress)

The baseline shows 100% while compute pipelines are still being built. PR 256 includes those compute-program keys in the total and shows unfinished progress until that work completes. Both versions reached the title sequence and all four runs exited normally (code 0).

Hardware: Windows 11 Home, build 26300; Core i7-13700F, 32 GB RAM (31.8 GiB usable); RTX 4070 12 GB, NVIDIA 621.01; llvm-mingw Windows renderer build.

Baseline: main @ 514591a30d707fe9f3ad31eae148c3cc1e750bff (the PR's merge base).
Candidate: PR head @ 822717250837ccebbdcb00d6556f200766c0550a, confirmed unchanged after testing.
Built using scripts/dev_packs.py, renderer-only pack over the existing base. The host was unchanged and matched in all runs; candidate renderer SHA-256 c2bc287de365f76351e73110acb4232e393b101e04ed21ad76769bf674b0787b.

Method: four real-window starts, baseline / PR / baseline / PR. Identical runtime and compatible prepared shader caches, RX_VK_LOAD=create, 1280x720, frame generation and HDR off, audio disabled. Cleared only the disposable runtime's longshot_pipelines.bin.built and .built.warming before each start to repeat the first-play warm pass. Original saves and shared base left untouched. The existing NVIDIA driver cache persisted; this was not a cold-driver-cache or startup-speed comparison.

Observation Baseline PR 256
Progress total, both runs 24,512 28,639 = 24,512 noted entries + 4,127 compute-program keys
Inspected compute-stage window 24,512 / 24,512, 100%, "a few seconds left" 28,492 / 28,639, 99%, "a few seconds left"
Work completed, each run's log 24,537 noted pipelines and 9,925 compute pipelines of 4,127 compute programs Same counts
Startup completed; exit 2/2; both code 0 2/2; both code 0

Representative log lines:

baseline: vk: start-up: pipelines 24512 of 24512, 100% of all, a few seconds left
PR:       vk: start-up: pipelines 21469 of 28639, 75% of all, about 15 s left
PR:       vk: precompile: 24537 noted pipelines of 15594 programs and 9925 compute pipelines of 4127 compute programs built into the pipeline cache and let go (0 and 0 not made, 0 whose program variant is not kept), on 16 threads in 27.0 s (the compute ones 5.4 s)

Screenshots of the actual startup windows were inspected locally. No screenshot is uploaded with this report. The compute stage lasted about 5-6 seconds with these warm caches; no claim of reproducing the reporter's five-minute cold wait, accurate ETA, or faster startup.

Checks: tests/test_warm_bounded.py passes on the candidate. Its added progress assertion, run against the baseline source, fails with precompile_warm does not count its compute pipelines in the bar's total. Renderer compilation: 0 failed.

Full game-free suite with the bundled Python dependencies: 496 passed, 4 failed, 33 skipped. The same four checks were rerun on unchanged baseline and all four also fail there: nx2/test_nup_paths.py (Windows symlink privilege), tests/test_check_third_party.py (baseline provenance/fixture failures), tests/test_menu_i18n.py (stale pt_BR text), tests/test_release.py (Windows command/line-ending fixtures). No new failing check was identified. An earlier system-Python run had 487 passed / 7 failed / 39 skipped; missing project dependencies caused the additional failures/skips, so the bundled-Python run is the final suite result.

Limits: no Linux run, no uncached-driver run, and no interrupted-preparation runtime test. This tests the submitted head on its own base, not today's main.

Tested-configuration rows for the PR author/maintainer to add as distinct docs/tested/ records:

Date Build OS / desktop GPU / driver CPU / RAM Settings Where Result
2026-11-14 main 514591a3, unchanged host and renderer Windows 11 Home 26300, windowed RTX 4070 12 GB, 621.01 i7-13700F, 32 GB 1280x720, RX_VK_LOAD=create, FG/HDR/audio off, prepared caches, built marker cleared First-play startup warm pass; run main-a Total 24512; log shows 24512/24512 and 100% during compute work; completed and exited 0; no speed claim
2026-11-14 PR 256 renderer 82271725 over main 514591a3 host Windows 11 Home 26300, windowed RTX 4070 12 GB, 621.01 i7-13700F, 32 GB 1280x720, RX_VK_LOAD=create, FG/HDR/audio off, prepared caches, built marker cleared First-play startup warm pass; run pr-b Total 28639 includes 4127 compute keys; completed and exited 0; no speed claim
2026-11-14 main 514591a3, unchanged host and renderer Windows 11 Home 26300, windowed RTX 4070 12 GB, 621.01 i7-13700F, 32 GB 1280x720, RX_VK_LOAD=create, FG/HDR/audio off, prepared caches, built marker cleared First-play startup warm pass; run main-c2 Screen shows 24512/24512 and 100% during compute work; completed and exited 0; no speed claim
2026-11-14 PR 256 renderer 82271725 over main 514591a3 host Windows 11 Home 26300, windowed RTX 4070 12 GB, 621.01 i7-13700F, 32 GB 1280x720, RX_VK_LOAD=create, FG/HDR/audio off, prepared caches, built marker cleared First-play startup warm pass; run pr-d Screen shows 28492/28639 and 99% before completion; completed and exited 0; no speed claim
Test request T-RZC9: pass (Windows startup progress) The baseline shows 100% while compute pipelines are still being built. PR 256 includes those compute-program keys in the total and shows unfinished progress until that work completes. Both versions reached the title sequence and all four runs exited normally (code 0). Hardware: Windows 11 Home, build 26300; Core i7-13700F, 32 GB RAM (31.8 GiB usable); RTX 4070 12 GB, NVIDIA 621.01; llvm-mingw Windows renderer build. Baseline: main @ `514591a30d707fe9f3ad31eae148c3cc1e750bff` (the PR's merge base). Candidate: PR head @ `822717250837ccebbdcb00d6556f200766c0550a`, confirmed unchanged after testing. Built using `scripts/dev_packs.py`, renderer-only pack over the existing base. The host was unchanged and matched in all runs; candidate renderer SHA-256 `c2bc287de365f76351e73110acb4232e393b101e04ed21ad76769bf674b0787b`. Method: four real-window starts, baseline / PR / baseline / PR. Identical runtime and compatible prepared shader caches, `RX_VK_LOAD=create`, 1280x720, frame generation and HDR off, audio disabled. Cleared only the disposable runtime's `longshot_pipelines.bin.built` and `.built.warming` before each start to repeat the first-play warm pass. Original saves and shared base left untouched. The existing NVIDIA driver cache persisted; this was not a cold-driver-cache or startup-speed comparison. | Observation | Baseline | PR 256 | |---|---|---| | Progress total, both runs | 24,512 | 28,639 = 24,512 noted entries + 4,127 compute-program keys | | Inspected compute-stage window | 24,512 / 24,512, 100%, "a few seconds left" | 28,492 / 28,639, 99%, "a few seconds left" | | Work completed, each run's log | 24,537 noted pipelines and 9,925 compute pipelines of 4,127 compute programs | Same counts | | Startup completed; exit | 2/2; both code 0 | 2/2; both code 0 | Representative log lines: ```text baseline: vk: start-up: pipelines 24512 of 24512, 100% of all, a few seconds left PR: vk: start-up: pipelines 21469 of 28639, 75% of all, about 15 s left PR: vk: precompile: 24537 noted pipelines of 15594 programs and 9925 compute pipelines of 4127 compute programs built into the pipeline cache and let go (0 and 0 not made, 0 whose program variant is not kept), on 16 threads in 27.0 s (the compute ones 5.4 s) ``` Screenshots of the actual startup windows were inspected locally. No screenshot is uploaded with this report. The compute stage lasted about 5-6 seconds with these warm caches; no claim of reproducing the reporter's five-minute cold wait, accurate ETA, or faster startup. Checks: `tests/test_warm_bounded.py` passes on the candidate. Its added progress assertion, run against the baseline source, fails with `precompile_warm does not count its compute pipelines in the bar's total`. Renderer compilation: 0 failed. Full game-free suite with the bundled Python dependencies: **496 passed, 4 failed, 33 skipped**. The same four checks were rerun on unchanged baseline and all four also fail there: `nx2/test_nup_paths.py` (Windows symlink privilege), `tests/test_check_third_party.py` (baseline provenance/fixture failures), `tests/test_menu_i18n.py` (stale pt_BR text), `tests/test_release.py` (Windows command/line-ending fixtures). No new failing check was identified. An earlier system-Python run had 487 passed / 7 failed / 39 skipped; missing project dependencies caused the additional failures/skips, so the bundled-Python run is the final suite result. Limits: no Linux run, no uncached-driver run, and no interrupted-preparation runtime test. This tests the submitted head on its own base, not today's main. Tested-configuration rows for the PR author/maintainer to add as distinct `docs/tested/` records: | Date | Build | OS / desktop | GPU / driver | CPU / RAM | Settings | Where | Result | |---|---|---|---|---|---|---|---| | 2026-11-14 | main 514591a3, unchanged host and renderer | Windows 11 Home 26300, windowed | RTX 4070 12 GB, 621.01 | i7-13700F, 32 GB | 1280x720, RX_VK_LOAD=create, FG/HDR/audio off, prepared caches, built marker cleared | First-play startup warm pass; run main-a | Total 24512; log shows 24512/24512 and 100% during compute work; completed and exited 0; no speed claim | | 2026-11-14 | PR 256 renderer 82271725 over main 514591a3 host | Windows 11 Home 26300, windowed | RTX 4070 12 GB, 621.01 | i7-13700F, 32 GB | 1280x720, RX_VK_LOAD=create, FG/HDR/audio off, prepared caches, built marker cleared | First-play startup warm pass; run pr-b | Total 28639 includes 4127 compute keys; completed and exited 0; no speed claim | | 2026-11-14 | main 514591a3, unchanged host and renderer | Windows 11 Home 26300, windowed | RTX 4070 12 GB, 621.01 | i7-13700F, 32 GB | 1280x720, RX_VK_LOAD=create, FG/HDR/audio off, prepared caches, built marker cleared | First-play startup warm pass; run main-c2 | Screen shows 24512/24512 and 100% during compute work; completed and exited 0; no speed claim | | 2026-11-14 | PR 256 renderer 82271725 over main 514591a3 host | Windows 11 Home 26300, windowed | RTX 4070 12 GB, 621.01 | i7-13700F, 32 GB | 1280x720, RX_VK_LOAD=create, FG/HDR/audio off, prepared caches, built marker cleared | First-play startup warm pass; run pr-d | Screen shows 28492/28639 and 99% before completion; completed and exited 0; no speed claim |
Contributor

Cold-cache result on Windows, RX 9070 XT, AMD driver 26.10.2: this fixes a real false timeout. With the old progress callback, All preparation stopped at the default 300-second stall watchdog while compute work was still advancing (866 to 887 programs between progress reports).

With this PR's progress change backported over main 82886e89 plus the separate pipeline-input cache fix, the recovered preparation completed with the default watchdog unchanged: 24,458 graphics and 9,687 compute pipelines, zero not made and zero missing compute variants. Compute preparation took 546 seconds across 4,058 programs. The completed prediction stage was retained from the interrupted run; this was a recovery, not one uninterrupted preparation pass.

The source-cut regression also checks that a genuinely stalled compute phase still times out. This result covers preparation; it does not claim gameplay performance or testing the untouched PR head.

Cold-cache result on Windows, RX 9070 XT, AMD driver 26.10.2: this fixes a real false timeout. With the old progress callback, All preparation stopped at the default 300-second stall watchdog while compute work was still advancing (866 to 887 programs between progress reports). With this PR's progress change backported over main 82886e89 plus the separate pipeline-input cache fix, the recovered preparation completed with the default watchdog unchanged: 24,458 graphics and 9,687 compute pipelines, zero not made and zero missing compute variants. Compute preparation took 546 seconds across 4,058 programs. The completed prediction stage was retained from the interrupted run; this was a recovery, not one uninterrupted preparation pass. The source-cut regression also checks that a genuinely stalled compute phase still times out. This result covers preparation; it does not claim gameplay performance or testing the untouched PR head.
All checks were successful
CI / Python source checks (ubuntu-24.04, part 1/2) (pull_request) Has been skipped
CI / Python source checks (ubuntu-24.04, part 2/2) (pull_request) Has been skipped
CI / SPIR-V fixtures (global narrow load/store, direct surface atomics, F2I immediate) (pull_request) Has been skipped
Third-party parts / The same as upstream (pull_request) Has been skipped
Website / Website on Cloudflare (pull_request) Has been skipped
CI / Conventional Commit title (pull_request) Successful in 4s
CI / Workflow lint (actionlint) (pull_request) Successful in 8s
Third-party parts / As their notes say (pull_request) Successful in 11s
PR description / Description follows the template (pull_request_target) Successful in 5s
Website / Website on Cloudflare (pull_request_target) Has been skipped
This pull request has changes conflicting with the target branch.
  • gpu/vk/vk_draw.cpp
View command line instructions

Manual merge helper

Use this merge commit message when completing the merge manually.

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u 'fix/startup-bar-compute:gab9281-fix/startup-bar-compute'
git switch 'gab9281-fix/startup-bar-compute'
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!256
No description provided.