549 Commits
Author SHA1 Message Date
Erick Sanchez 543fe18301 Update library presence immediately after installs and dismiss finished activity 2026-10-27 17:51:26 -06:00
Erick Sanchez cca4cd61ff Unify guided installation and Apple account screens with shared design system 2026-10-27 17:42:59 -06:00
Erick Sanchez 05f5ba8b47 Fill app icon silhouette with handheld controls 2026-10-27 16:49:37 -06:00
Erick Sanchez 26a25773a8 Identify internal game versions and updates before preparation 2026-10-27 16:48:18 -06:00
Erick Sanchez 7c6c83f56d Make preparation milestones visual with file inspection and direct key selection 2026-10-27 16:35:01 -06:00
Erick Sanchez 34492fdb4d Restore remembered Apple sessions automatically without discarding saved access 2026-10-27 15:48:01 -06:00
Erick Sanchez 69f95a1679 Route compatibility catalog into the main workspace 2026-10-27 15:30:29 -06:00
Erick Sanchez b163562247 Organize global settings and move controller testing out of game preparation 2026-10-27 15:26:11 -06:00
Erick Sanchez d8511da8a9 Review device slots and require explicit consent for new Apple registrations 2026-10-27 15:17:00 -06:00
Erick Sanchez 5f116da478 Show clear verification activity without returning to the password form 2026-10-27 14:59:31 -06:00
Erick Sanchez 9e3e2ff335 Keep cancellation available during Apple verification 2026-10-27 14:58:27 -06:00
Erick Sanchez bf77e3967e Clarify Apple verification with a focused code entry card 2026-10-27 14:57:49 -06:00
Erick Sanchez fa8e1d471b Guide game preparation with device presence, rebuild advice and diagnostics 2026-10-27 14:53:47 -06:00
Erick Sanchez 0741a07def Move Apple account to app navigation and add selected-game library detail 2026-10-27 14:27:29 -06:00
Erick Sanchez b09028c0c9 Show a global Apple account above connected devices 2026-10-27 14:17:51 -06:00
Erick Sanchez 159c960b44 Add safe manual save export and separate device game-data updates 2026-10-27 14:04:50 -06:00
Erick Sanchez 71304491d3 Show Devices inline and restrict discovery to known game identities 2026-10-27 12:18:53 -06:00
Erick Sanchez 08f1d5665a Add personal game library and structured build activity workspace 2026-10-27 11:15:32 -06:00
Erick Sanchez 7e3fc97a18 Guide device installation with app discovery, account inventory, logs and full IPA mode 2026-10-27 10:51:18 -06:00
Erick Sanchez b861784375 Document portable save hosting and add consistent database backups 2026-10-27 09:09:21 -06:00
Erick Sanchez d93640bb78 Add iPhone and iPad installation library and manual signature renewal 2026-10-27 08:16:30 -06:00
Erick Sanchez 1d68110b87 Add experimental native ARM64 sideloading, refresh and save guides 2026-10-27 00:42:10 -06:00
Erick Sanchez fef55363b9 Explain game updates, stream persistent build logs and add optional REA analysis 2026-10-26 23:07:38 -06:00
Erick Sanchez 07749fa96a Record validated Metal update and preserve profile/cloud maintenance rules 2026-10-26 20:40:24 -06:00
Erick Sanchez 1cd6280d0a Merge commit '8334fdfb50a9900d8a5fc950d099fde46d85135f' into HEAD 2026-10-26 20:35:58 -06:00
Erick Sanchez 61642c251d Add four named touch-control profiles and portable save API foundation 2026-10-26 20:35:34 -06:00
seedds 8334fdfb50 Compile translated shaders with the Metal front end at -O1
At -O2, CorrelatedValuePropagation and SimplifyCFG fold a translated
shader's repeated tests of one value into switches whose cases jump past
their own join. Apple's GPU backend then runs out of control-flow IDs
("Max Unstruct ID 758 ... exceeds supported limit", a note: metal-tt
still exits 0) and lowers the function a far slower way. Odyssey's
alRenderMaterialUber took 24.6 minutes and 17.3 MB of applegpu_g13s code;
at -O1 it takes 31 s and 1.3 MB.

Sampled archive bases from seven games compile to code within a few
percent of -O2. Odyssey's full g13s archive builds in 15.6 minutes
(exit 0), its Cap Kingdom frames match -O2 within 3/255 on scattered
pixels, and GPU time per frame is within run-to-run noise.

Document the mechanism, and correct the Odyssey note: the 758 line never
failed the build; the reporter's exit 1 came from the BAHS link errors
fixed in ff44c59.

Refs #276
2026-10-27 10:16:49 +08:00
Erick Sanchez 106d1ebf47 Remove outdated catalog-count screenshot after the profile expansion 2026-10-26 20:09:43 -06:00
Erick Sanchez 427474d98c Keep full upstream updates and every game surface synchronized 2026-10-26 20:06:32 -06:00
Erick Sanchez cc2efc6da5 Merge upstream main at 40e6bae while preserving nxnative Easy features 2026-10-26 19:58:55 -06:00
seeddsandv0lumehi 40e6baede5 Preserve unaligned NVN vertex streams on Metal (#319)
Copy byte-aligned NVN streams into aligned submission-owned storage.
Use CPU snapshots only when host visibility is proven safe; otherwise
encode ordered GPU copies before regular, feedback and geometry draws.
Invalidate copies after overlapping writes and pool remaps while keeping
them reusable across unrelated uniform updates. Restore the encoder after
deferred replay when a stream copy split the pass.

Extend t_vbuf to cover all nonzero address residues, copy reuse, queued
copies, deferred updates, fills, shader writes, previous submissions and
pool replacement. Record the general mechanism and Arkham Knight finding.
The per-stream copy limit remains 64 MiB.

Validated on Apple M4 Pro: 84 GPU checks in each of normal, cache-disabled
and encoder-thread modes with Metal validation; full graphics and host
suites; 70 graphics Python tests; 298 tool tests; documentation tests;
iOS compile check (178 files). Full cross-game validation is incomplete:
the harness reported unsupported OpenGL chain checking and its first NVN
shader rebuild did not finish alongside other active builds. No local
Arkham Knight gameplay run.

Co-authored-by: v0lumehi <aljic.zijad@gmail.com>
2026-10-27 09:46:11 +08:00
Erick Sanchez f23448d216 Add isolated upstream maintenance flow and document network and modding limits 2026-10-26 19:44:16 -06:00
seedds 54647b08ea Make repeated IPA and Mac app builds incremental (#279)
Reuse unchanged IPA entries through the packing index and APFS clones,
and keep Mac app and derived-profile shader outputs while their inputs
match. Preserve main's shader regression checks and .NET discovery.

Count uncompressed bytes in streamed files so a size change aborts the
pack without replacing the previous IPA or index. Cover both deflated
and stored streams with growth and shrinkage regression tests, and
record the cause and fix in the packing reference.

Co-authored-by: Suraj Mandal <surajmandalcell@gmail.com>
(cherry picked from commit 09f3778c36)
2026-10-26 19:35:18 -06:00
seedds f171b23289 Discover Homebrew .NET runtimes for standalone build tools
Derive DOTNET_ROOT from dotnet's Microsoft.NETCore.App runtime listing and
export it to both explicit and inherited build environments. Preserve caller
overrides, use the build environment for discovery, and leave discovery
unchanged on probe failures instead of treating Homebrew's wrapper directory
as a runtime root.

Add regression coverage and document the packing failure and its resolution.
Based on PR #284.

Co-authored-by: Jose Rosendo <josemrb99@gmail.com>
(cherry picked from commit 89744da753)
2026-10-26 19:35:11 -06:00
seedds 901aed28d7 Check translation chain changes on games their author does not own (#272)
One translation chain serves every game, so a translator or host change was checked
only on its author's games; on another game the first sign was a crash at run time
(c3a0880 broke the image atomics of SHIN MEGAMI TENSEI V, Yoshi's Crafted World and
FINAL FANTASY RESONANCE).

- CI: the tool-tests job installs .NET 10, spirv-cross and spirv-tools and points
  DMSH_TEST_XLATE at the committed translator, so the translator's synthetic-shader
  tests (test_image_atomic_bounds, test_dmsh_geometry) run on every change.
  test_dmsh_geometry imports its sibling module when run from the repository root.
- dm/gfx/tools/shader_regressions.py: lists the shaders that translated in the
  game's previous b-*/ and fail in the current chain's, from dmsh_build.py's build
  reports (not part of the chain). The NSP script runs it after its shader step and
  stops on a regression unless ALLOW_SHADER_REGRESSIONS / --allow-shader-regressions;
  docs/development.md describes it.
- FINAL FANTASY RESONANCE: the c3a0880 regression is resolved since 2e655b7 (image
  atomics with a used result): chain 39e4d9585b1d builds 73,488 of 73,496 shaders
  (the 8 3D image atomics as before), shader_regressions.py finds 0 against the
  earlier build, and a new game from an empty save plays the opening cutscene on
  the Mac with no red line; the two shaders that failed and aborted run their
  atomics on their buffer textures.

Checked: every CI test file as the job runs it (DMSH_TEST_XLATE set), the docs tests.
(cherry picked from commit b117c91317)
2026-10-26 19:35:11 -06:00
seedds 96d27b8d9e Pack shader pairs and the offline pipeline archive into Mac apps (#241, #260)
The Mac app packer left out shader_pairs.tsv and pso_pairs.tsv, which the
host's pipeline prebuild reads beside the shader map and build_ipa.sh already
copies into the IPA. Every NVN game's Mac app therefore built no pulling
bases, had no hybrid stand-ins, and compiled first-seen pipelines on the
submit thread. Copy both tables, and the shader split's pso_pairs.tsv for a
profile without one.

An NVN game's Mac app also carries its pipeline archive made offline for this
Mac's GPU (pso_offline.py --platform macos), handed to the host as
DM_PSO_BUNDLE as on iOS; --gpu none leaves it out. Integrated with three
fixes: the archive is validated and counted in the free-space check before
anything is copied; a plan whose pairs all need function constants packs the
app without an archive instead of aborting; and a PSO_GPUS value that does
not name this Mac's GPU is reported.

Validation: test_nsp_mac_app 22 (pair tables, split copy, bad archive, free
space, GPU note, no-archive plan; the table and space tests fail without the
fixes), the tool suite, iOS packaging tests and test_docs. A Breath of the
Wild Mac app on an M4 Pro (applegpu_g16s, 629.4 MB archive): 16 of 16 probed
bases found, no pair base built, no red line; the run stayed in the title.

Co-authored-by: v0lumehi <aljic.zijad@gmail.com>
Co-authored-by: blindlight86 <25404088+blindlight86@users.noreply.github.com>
(cherry picked from commit 4639c5114c)
2026-10-26 19:34:35 -06:00
seeddsandaldomrodriguez 15805ef525 Defer audio layout detection until a valid command list (#331)
An incomplete startup command list consumed both layout detection and the
one-time DeviceSink scan, leaving valid SDK 4 audio frames permanently
silent. Keep both decisions pending until a supported layout walks the
whole list, as proposed in PR #331.

Extend the reproducer with valid-first and incomplete-startup stereo PCM
checks for SDK 4, 6, 16 and 21, and document the finding.

Co-authored-by: aldomrodriguez <rodriguez.aldo.91@hotmail.com>
2026-10-27 08:56:25 +08:00
Erick Sanchez 4bc1fba541 Fix game preparation launched from Foundation process groups 2026-10-26 18:55:44 -06:00
seedds f388c0bfb7 test_usage: pass Path roots (pyright: changed_functions / host_graph take a Path) 2026-10-27 08:53:35 +08:00
seeddsandv0lumehi b3f97efe22 regress.py usage / impact: which games a change can reach (#329)
From PR #329 (stacked on #328): a game's usage manifest, dm/games/<id>/usage.tsv,
written by its owner with regress.py usage (shader features of its chain build,
and the NVN / HLE functions, SVCs and present path of one smoke-route run;
names and counts only), and regress.py impact <base>..<head>, which maps the
functions around the changed lines through the host's callers and the rules of
dm/tools/impact_map.tsv to manifest rows. Manifests for Breath of the Wild,
Tears of the Kingdom and Hades.

Fixed on top of the PR:
- impact checked the head out as a git worktree under the harness root, so it
  stopped (PermissionError on /Volumes/NX) for exactly the contributors it is
  for, who have no games and no harness root. The call graph is now read from
  the git object store at the head revision, and the report is printed and
  written only to --out or an existing harness root.
- A hunk mapped only to the function at its first line: a hunk spanning two
  functions named one. Every added line is mapped now, and a pure deletion maps
  to the function around it (it was moved one line up).
- Functions defined in headers were not in the call graph: the frame step
  (nvn_fstep.h, static inline, called from nvnQueuePresentTexture) reached no
  entry point, so 4acde72 named no game. Headers are scanned, and their
  functions are visible to every file. 4acde72 now names both Zeldas through
  nvnQueuePresentTexture.

Co-authored-by: v0lumehi <aljic.zijad@gmail.com>
2026-10-27 08:50:52 +08:00
seeddsandv0lumehi 583ae42c59 Separate scripted input from controller state (#326)
Give DM_KEYS and DM_CTL their own buttons, press latch and stick axes,
merged with player 1's keyboard/touch and physical controller state.
Controller updates no longer replace scripted holds, and script release
preserves physical input. Include the scripted path in shake detection.

Exercise the real scripted publisher with controller updates during its
hold, including repeated reads after the press latch is consumed. Cover
release, short presses, handheld axes and player isolation, and update the
input documentation.

Co-authored-by: v0lumehi <aljic.zijad@gmail.com>
2026-10-27 08:36:37 +08:00
seedds d3bbb3a6e5 Fix audio-device test host-work fixture
AudioUnit setup now joins its helper through dm_host_thread_join, which references the graphics host's thread-local counter. Define that counter in the standalone device test, matching the other audio fixtures.

Validated the audio-device test, full host suite, audio/HID/memory ThreadSanitizer checks, display-link tests, OpenGL imports and documentation tests.
2026-10-27 08:23:06 +08:00
seedds 9bdef355ab Port Xenoblade Chronicles 3 2.2.1
Add Monolith archive and shader extraction, a build-gated compact memory layout, vertex storage writes under rasterizer discard, primitive ordering and interleaved geometry feedback. Correct native decoder/audio wait accounting and the oe calls used after movies.

Validated opening combat and movement on Mac with real audio, the full Mac/iOS shader build, GPU regressions, and the unsigned IPA archive. iOS runtime, later areas and DLC gameplay remain untested.
2026-10-27 07:58:05 +08:00
seeddsandv0lumehi 6f58a7d4f6 Add cross-game regression harness and prevent false passes (#328)
Compare revision shader builds and pipeline interfaces across local games,
and run available smoke routes with crash, hang, timing and image checks.
Add the developer loop and share the measuring lock with bench.py.

Keep all local games in static checks and honor --no-smoke. Include shader
bytes and fallback pairs in cache keys, recheck interfaces on reuse, and
reuse smoke baselines only for matching inputs and run settings. Detect
failed prebuilds, missing or intermittently bad screenshots, and Vulkan
build failures even when no MSL was emitted. Keep game-derived files and
writable profile copies inside each game's NSP work folder.

Validation: tool tests and the lint ratchet pass. Full shader rebuilds and
gameplay comparisons remain unverified; the 26 discovered Mac builds have
no smoke routes in this checkout.

Co-authored-by: v0lumehi <aljic.zijad@gmail.com>
2026-10-27 07:18:30 +08:00
seedds 5708054153 Port Mario + Rabbids Sparks of Hope 2026-10-27 07:13:46 +08:00
Erick Sanchez 8a6838d6b8 Document clean-download installation and real release update validation 2026-10-26 14:21:06 -06:00
Erick Sanchez d151d54fd1 Preserve installed launchers during setup and show clear setup stages 2026-10-26 14:16:47 -06:00
Erick Sanchez a5ed1e8068 Refresh app screenshots and document validated in-app updates 2026-10-26 14:12:22 -06:00
Erick Sanchez 86793e23d6 Add staged in-app updates and use repository artwork for all game profiles 2026-10-26 14:04:54 -06:00
Erick Sanchez 8be22c449c Add live Mac controller tester and refresh bilingual app screenshots 2026-10-26 13:46:33 -06:00