Repository navigation
Mario Kart World: a prewarm seed list recorded on an iPhone Duo (9,342 rows) - #2097
Open
oliverames wants to merge 2 commits into
Open
oliverames wants to merge 2 commits into
oliverames wants to merge 2 commits into
Conversation
…profile shipped none, so every pipeline of a first race was built at its first draw, and with the list the same race builds 6 The profile's pso_manifest.tsv was the two-line placeholder. On an iPhone 19,4 (a Duo foldable, applegpu_g19p, iOS 27.3 beta) with update 1.8.0, the first Grand Prix race on Mario Bros. Circuit from an empty list had 115 frames of 50 ms or more in 7,800 (the worst 3.9 s), with 381 pipelines or shader libraries built inside them. The list is the device's own pso_user.tsv after about 15 launches of that route on 2026-11-09: 9,342 rows (5,689 S, 3,492 R, 150 C, 11 M), in first-use order. With it at 9,418 lines the same race had 23 such frames in 28,700 (the worst 378 ms), 3 of them with a pipeline built (6 pipelines). 3,316 of the R rows were written by a host from before the high attributes and are padded with zeros to the current key size, which is how pso_skey_parse reads them; rows that were the same after padding are there once. Every S and C key and both shader keys of every R and M row are in the shader map of the 1.8.0 build. 21 of the shader keys are not in the base game's map and are dropped at load there. Not run as the bundled file (the host reads pso_user.tsv the same way), not run on a Mac or on the base game. The game note has the numbers and says what the list covers.
oliverames
force-pushed
the
mkw-prewarm-duo-20261109
branch
from
November 10, 2026 14:04
b4483dc to
1a4fd59
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What and why
Mario Kart World's profile ships no prewarm list (
pso_manifest.tsvis the two-line placeholder), and its note lists "first-use pipeline compiles" under Open. On an iPhone that means every pipeline of a first race is built at its first draw. On my iPhone Duo, the first Grand Prix race from an empty list had 115 frames of 50 ms or more in 7,800, the worst 3.9 s, with 381 pipelines or shader libraries built inside them.This PR fills the file with the phone's own
pso_user.tsvafter about 15 launches of one route: the boot, the title, the menus into a Grand Prix, then Mario Bros. Circuit with 24 racers and 5 to 8 minutes of driving. It's 9,342 rows in first-use order.With the list at 9,418 lines on the phone, the same race had 23 frames of 50 ms or more in 28,700 (the worst 378 ms), and 3 of them built a pipeline (6 pipelines in all).
Two things about the rows:
attr_hi, so they were 880 hex digits long. I padded them with zeros to the current 1,008, which is whatpso_skey_parsedoes when it reads a short row, and dropped the 98 rows that were then the same as a newer one.shader_map.tsv, so a base-game build drops them at load, as the docs describe for a list from another version.The game note gets the numbers in its Shaders section, and its Open line now says what the list covers. Its mesh draws line is rewritten too: main has native task and mesh pipelines since
bf420fdae, and update 1.8.0 on the Duo built 11 of them, the list's M rows. That line also says the profile leavespso_mtl4off, so on an iPhone a draw whose pipeline isn't built waits for it. I'm testing that separately and will send it as its own PR if it holds up.Checked
test_pso_offline.py,test_game_profile.py,test_nsp_incremental.py,test_nsp_mac_app.py,test_docs.pyandtest_env_switches.pypass. I also checked the rows with a script: every S and C key, and both shader keys inside every R and M row, are in the shader map of the 1.8.0 build. No row is unreadable and none is there twice.0400C3F00006E000), update 1.8.0 (v917504), about 15 scripted races on 2026-11-09. The host's control file pressed A through the menus and held it for the drive. I compared the[longframe]lines of the first race with a later one, sorted by the cause each line gives.applegpu_g19p), iOS 27.3 beta.Documents/pso_user.tsv, which goes through the same reader. It hasn't been run on a Mac or on the base game. Noregress.pyrun, since the change is one profile's data.[longframe]fields.Docs
dm/games/0400C3F00006E000/README.md, Shaders and Open).docs_symptoms.pywasn't run: the change adds no reference entry.dmsh_chain.py --headerwas run anddm/gfx/nvn/dmsh_chain.his part of the change. Not applicable.main.