Skip to content

Donkey Kong Bananza's iPhone launcher starts on the settings it was tested with: the game's upscaler drawn by MetalFX, Metal 4 pipelines on - #1217

Closed
oliverames wants to merge 1 commit into
seedds:mainfrom
oliverames:dkb-launcher-defaults
Closed

oliverames wants to merge 1 commit into
seedds:mainfrom
oliverames:dkb-launcher-defaults

Conversation

@oliverames

@oliverames oliverames commented Nov 4, 2026 •

Copy link
Copy Markdown
Contributor

What and why

On an iPhone the launcher shows Donkey Kong Bananza with the game's own upscaler and Metal 4 pipelines off, while every iPhone run of mine used docked, DM_UPSCALER=metalfx and DM_PSO_MTL4=1; main's note also records a community run on the defaults (issue #1183, 7ffa63cca). This changes the launcher's defaults for this game to match, and nothing else.

@seedds: this is a default for a Switch 2 game running on iPhone, and whether a game ships a non-default launcher setting is your call. It changes what the launcher shows first and what Reset to tested defaults sets. It does not remove the choice: a saved choice, DM_UPSCALER and Documents/env.txt still win, and a start without the launcher keeps the host's own default. It is not a fix for anything: sustained warm performance and the fur's shimmer are not established (below). If you would rather keep the game's upscaler as the default, pso_mtl4 on and upscaler_default are independent lines in game.tsv and either can be dropped.

Before and after (the iOS launcher, no saved choice)

Read with dm/games/settings.py for 040074A01BF12000, GFXAPI=nvn, SETTINGS_PLATFORM=ios, before and after the change:

Setting Variable Before After From
Console mode DM_OPMODE Docked 1 Docked 1 op_mode, console is the default of every game (unchanged)
Game's upscaler DM_UPSCALER game metalfx new upscaler_default metalfx
Upscaling DM_PRESENT_UPSCALE off (Standard) off (Standard) settings.tsv (unchanged)
Metal 4 pipelines DM_PSO_MTL4 0 1 pso_mtl4 on
Frame buffering DM_PRESENT_SNAP 0 0 present_snap, off is the default (unchanged)

So two values change. On the Mac settings window nothing changes: Metal 4 pipelines are already on for every game there, and its Game's upscaler default stays game (output of the same script for SETTINGS_PLATFORM=mac: DM_UPSCALER=game, DM_PSO_MTL4=1).

The profile key

DM_UPSCALER had no profile key: its default was the literal game in dm/games/settings.tsv. The smallest generic key is upscaler_default (game, the default, or metalfx): game.py validates it and writes DM_GAME_UPSCALER_DEFAULT into the profile header, and the DM_UPSCALER row's default becomes DM_GAME_UPSCALER_DEFAULT|game (the existing <ios>|<mac> form, as DM_GAME_PSO_MTL4|1 does), so only the iOS launcher follows it. No host code changed: the macro is read by settings.py only. The other four settings needed no key (see the table). The key is a row in dm/games/README.md.

One consequence of pso_mtl4 on, from dm/ios/tools/build_ipa.sh and scripts/build_ipa_from_nsp.py: an IPA built for this game now builds the pipeline archive made offline for g18p (A19 / A19 Pro, the pso_gpu default), as for any profile with pso_mtl4 on. The pulling libraries (_bp) are in every iOS build since #1758, whatever the key says, so they're no longer part of this change. I did not build an IPA.

Checked

Python 3.14 venv outside the repo (lz4, capstone>=5,<6, fonttools, and .github/requirements/lint.txt), DM_GAME=040074A01BF12000, on macOS, at head 984af1e4 on origin/main 777a5f6c. On Nov 9 I rebased onto main 6d9edb07 (head d739252a, one commit) and ran the five tests named below again; what changed is marked "After the rebase":

Tests:

  • python3 dm/games/settings.py equivalent (settings.build) before and after: the table above.
  • New and changed tests pass: dm/tools/tests/test_settings.py (3 tests; the new one asserts all five defaults on iOS and Mac), test_game_profile.py (8; the new one checks the key's header macro, its default and its rejection), test_launcher_settings.py (16), test_docs.py (11, links and anchors), test_env_switches.py (1).
  • After the rebase: the same five pass. Run directly they now report test_settings.py 4, test_game_profile.py 4, test_launcher_settings.py 17, test_docs.py 6 and test_env_switches.py 1, since main's own tests have changed. The 145-file loop below was not run again.
  • The repository's tool, iOS and CPU-only gfx tests, the same loop as the tests workflow's "Run the test files" step: all 145 files under dm/tools/tests, dm/ios/tests, dm/gfx/tests ran, none failed. Ten of them report skips (test_astral_fps, test_image_atomic_bounds, test_txq_type, test_dmsh_ampere_alu, test_dmsh_ampere_mem, test_dmsh_border, test_dmsh_control_flow, test_dmsh_geometry, test_pso_archive, test_transform_feedback): tests that need dotnet or spirv-val, which this Mac run lacked. Skipped is not passed.
  • python3 dm/tools/docs_symptoms.py, docs_patches.py, docs_gallery.py: no diff.
  • python3 dm/tools/lint_python.py --against origin/main: 389 findings, 389 in the baseline, 0 new. After the rebase: 339 findings, 336 in the baseline, 3 new, all three in dm/gfx/tools/dmsh_build.py on main and none from this change. Main has since fixed those three (3ade2f2ef).
  • game.py header 040074A01BF12000 writes DM_GAME_PSO_MTL4 1 and DM_GAME_UPSCALER_DEFAULT "metalfx", and the header compiles (clang -fsyntax-only) with both.

Games run, with title ID and version: Donkey Kong Bananza, title ID 040074A01BF12000, version not stated. The phone runs are listed below and are from earlier local builds, not from this head.

Devices and OS: iPhone 17 Pro Max and iPhone Duo as listed below; iOS version not stated; macOS version not stated (Python checks ran on macOS).

scripts/regress.py check --games: not run, because no host, shader or tool code changed (see Not verified).

Measurements and runs behind the defaults:

All local, kept by the author, under anygame/logs/dkb-sharpness-2026-11-03/ and anygame/WORKLOG.md (not in this repository). The measurements come from local builds that carried changes not on main.

Claim Source
iPhone 17 Pro Max, docked + DM_UPSCALER=metalfx + DM_PSO_MTL4=1: MetalFX 1676x943 -> 2304x1296 border-summary.json (upscaler: size at frame 4847 ... 1676x943 -> 2304x1296), current-metalfx-log.txt
Same phone, chain 215a6d278114 build: six complete 300-frame windows (frames 9600-11400) at 33.34 ms on-screen p99, 0 dropped, thermal 0, footprint 5119-5129 MiB border-summary.json, border-final-memstat.tsv
Same phone, other docked runs at thermal 1: some windows at 50 ms (three of five in one rerun, one drop) border-restored-summary.json, PR #1204's text
Same phone, handheld: 1397x786 -> 1920x1080 (a smaller scene), six windows at 33.34 ms border-handheld-summary.json
iPhone Duo, same save: the game's own upscaler shimmers the same as MetalFX, per the player. Game's own: GPU p50 about 29.6 ms (30 fps cadence, thermal 2, frame 3900). MetalFX: GPU p50 about 16.4 ms (frames 1800-3600, thermal 2, 33.34 ms p99, 11 to 42 dropped frames per 300, cause not established). Not the same scene: no performance verdict camera-constants/ab/ (logA-final.txt, logB-final.txt), WORKLOG "upscaler A/B on the Duo"
The player found docked MetalFX sharper than the game's own upscaler (subjective), and still saw jagged edges WORKLOG, PR #1204's text

The game note (dm/games/040074A01BF12000/README.md, new "iPhone launcher defaults" section) states the same before/after and limits. It does not link PR #1204's section, so the two PRs merge in any order; both touch that README in different places.

Not verified:

Front ends

None: no front end has to act on this.

Docs

  • The finding is in its game note or its docs/reference/<subsystem>.md entry, and python3 dm/tools/docs_symptoms.py was run (the symptom index)
  • A chain tool changed: dmsh_chain.py --header was run and dm/gfx/nvn/dmsh_chain.h is part of the change. Not applicable: no chain tool changed
  • No game files, keys or data extracted from a game in the change or the attachments

@github-actions github-actions Bot added tools Tools and scripts (dm/tools, scripts) docs Documentation game: 040074A01BF12000 Donkey Kong Bananza labels Nov 4, 2026
@oliverames
oliverames force-pushed the dkb-launcher-defaults branch 3 times, most recently from 0300f9b to d739252 Compare November 10, 2026 03:15
…ested with: the game's upscaler drawn by MetalFX and Metal 4 pipelines on

The launcher showed the game's own upscaler and Metal 4 pipelines off for Donkey Kong
Bananza on iOS (Docked, Standard upscaling and no frame buffering were already the
defaults), while every iPhone run of mine used docked, DM_UPSCALER=metalfx and
DM_PSO_MTL4=1. The profile now sets pso_mtl4 on, which also makes an IPA pack the
pipeline archive made offline, as for any profile with it (the pulling libraries are in
every iOS build since PR seedds#1758, whatever the key says).

DM_UPSCALER had no profile key: its default was fixed at game in settings.tsv. A new
upscaler_default key (game or metalfx, game without it) sets the iOS launcher's default
through DM_GAME_UPSCALER_DEFAULT|game; the Mac's default stays game, as no Mac run chose
MetalFX, and the host without the launcher, a saved choice, DM_UPSCALER and env.txt are
unchanged. Donkey Kong Bananza sets metalfx.

Checked: test_settings (the iOS and Mac defaults of all five settings), test_game_profile
(the key and its rejection), the launcher settings, docs and env switch tests, and the 145
tool, iOS and CPU-only gfx test files, none failing (skips are tests without dotnet or
spirv-val). Not run: the game, an IPA build, an iPhone. The note lists what the phone logs
show and what they do not: sustained 30 fps and the fur's shimmer are open.

Rebased onto main 6d9edb0 on Nov 9: test_settings (4), test_game_profile (4),
test_launcher_settings (17), test_env_switches and test_docs (6) pass again; the
145-file loop was not rerun.
@oliverames
oliverames force-pushed the dkb-launcher-defaults branch from d739252 to 38aa971 Compare November 10, 2026 14:04
@oliverames

Copy link
Copy Markdown
Contributor Author

Closing this. Which launcher settings a game starts on is your call, and the evidence here is one subjective comparison on two iPhones. It also conflicts with main again now that render_cond and gpu_timestamps are gone from the profile. The measurements are still in the description if they're ever useful. Thanks!

@oliverames oliverames closed this Nov 12, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

docs Documentation game: 040074A01BF12000 Donkey Kong Bananza tools Tools and scripts (dm/tools, scripts)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant