Skip to content

Swap tier donor pool, D3D12 pipeline archives, performance overlay and engine fixes - #516

Merged
125hz merged 8 commits into
willfaust:mainfrom
125hz:pr/wave6-swap-d3d12-overlay
Nov 2, 2026
Merged

125hz merged 8 commits into
willfaust:mainfrom
125hz:pr/wave6-swap-d3d12-overlay

Conversation

@125hz

@125hz 125hz commented Nov 1, 2026

Copy link
Copy Markdown
Collaborator

The work from 2026-10-25 to 10-28 on 8 GB and 12 GB iPhones, on top of current main. Every behaviour change has a madeira.cfg or env switch, listed in the settings catalog.

Depends on the component PRs it pins:

Each of those is a short series directly on its current branch tip, so it merges as a fast-forward and these pins stay valid.

What's in it

  • Swap tier. The MadeiraMemoryHost extension's donor pool is the tier's first stage. 32-bit programs take donor RAM, never the file. Churn, browser and whole-reservation rules each have a switch in the catalog.
  • D3D12. pso-async and pso-archive (both default 0) and an opt-in video-budget trim.
  • Engine fixes across memory, exceptions, WoW64, win32u and D3D12, each behind its own switch.
  • App.
    • A performance overlay on the system material, with a frame-time graph and lows.
    • HID mode keeps other pads on XInput.
    • Recommended lists for a publisher launcher and its installer, two titles' editions, and community-tested Steam titles.
    • The Visual C++ runtime step in setup and Settings (MADEIRA_VCREDIST).
  • Big Picture. The code for Valve's client in Big Picture (from its own folder, in the Wine desktop) is included so it can be worked on, but it isn't ready for normal use, so the library button and card are compiled out of every build that doesn't set the Swift condition MADEIRA_BIG_PICTURE_UI. No IPA build sets it (release IPAs use the Debug configuration, so #if DEBUG couldn't gate it), and no madeira.cfg switch brings it back. To work on it, build with SWIFT_ACTIVE_COMPILATION_CONDITIONS='$(inherited) MADEIRA_BIG_PICTURE_UI'.
  • Dock. The game session's service manager when the prefix registers a launcher's own service, and the host's hold while a launcher restarts (MADEIRA_DOCK_GAME_SCM, MADEIRA_DOCK_KEEP_ALIVE). tools/build-ipa.sh builds dockhost.exe.
  • Signing. Madeira's own signing refresh is off by default (env.MADEIRA_SIGNING_REFRESH).

On main's wave 5, some of our changes give way to main's equivalents:

  • the [stp-split] store;
  • the [anon-ldadd] and in-handler [anon-cas] emulation;
  • MADEIRA_TLS_CLEAR_OWN_PROCESS.

The opt-in MADEIRA_ANON_CAS_FLUSH handoff stays, as its own case before main's CAS emulation. kernelbase, d3d12, madeira_d3d12, d3d12core, xtajit64 and xtajit are rebuilt from these pins; d3d9 is main's.

Review notes

Tests

Host tests (tests/host/check-*.py, 180 s each) on Linux, with no Swift, Xcode or plutil and without the submodule sources checked out:

Tree Pass Fail
main (c2c1b03a) 132 of 204 72
this stack (125hz:wave6-integration) 193 of 251 58
  • Every failure left on this stack also fails on main, for the same environment reasons: no swiftc/xcrun/plutil, the wine/FEX/dxmt sources not checked out, or macOS-only C builds. The one exception is the new check-pso-archive, which also needs the dxmt sources.
  • check-config-catalog fails on main the same way ("ConfigCatalog.generated.swift is out of date"). Its generator reads the submodule sources.
  • These pass here and fail on main: check-child-ntdll-alias, check-dock-contract, check-inet-poll-cache, check-lazy-windows, check-lean-diag, check-log-redaction, check-pool-low, check-sc-ipc-split, check-sc-render-loop, check-section-abort, check-small-va-band, check-steam-games, check-steam-library, check-swap-images, check-x18-arith.
  • macOS CI still has to run the Swift checks (--require-swift).

Device: the IPA built from wave6-integration is with testers on 8 GB and 12 GB iPhones now.

🤖 Generated with Claude Code

125hz and others added 8 commits November 1, 2026 16:29
…ig Picture and engine fixes


The work from 2026-10-25 to 10-28 (8 GB and 12 GB iPhones), on wave 5's main. Every behaviour
change has a madeira.cfg or env switch.

- Swap tier: the MadeiraMemoryHost extension's donor pool as the first stage; 32-bit programs
  take donor RAM, never the file; churn, browser and whole-reservation rules (switches in the
  catalog).
- D3D12: pso-async and pso-archive (both default 0), opt-in video-budget trim.
- Generic engine fixes (memory, exceptions, WoW64, win32u, D3D12), each behind its own switch.
- App: performance overlay on the system material with frame-time graph and lows; Big Picture
  beside Desktop from its own folder; HID mode keeps other pads on XInput; recommended lists for
  a publisher's launcher, two titles' editions and community-tested Steam titles;
  the Visual C++ runtime step in setup and Settings (MADEIRA_VCREDIST).
- Dock: the game session's service manager when the prefix registers a launcher's own service, and
  the host's hold while a launcher restarts (MADEIRA_DOCK_GAME_SCM, MADEIRA_DOCK_KEEP_ALIVE).
- Submodules: wine 3c38f40e, FEX 38f34e84, dxmt e0abd4d1, madeira-dock 67780ba9 (main's pins
  plus our commits).

On wave 5 (willfaust#461) the following of ours give way to main's equivalents: the [stp-split] store
(ios_store_split_crossing writes every page-crossing store per page), [anon-ldadd] and the
in-handler [anon-cas] emulation (ios_mach_emulate_rmw covers every LD<OP> and off-pool CAS) and
MADEIRA_TLS_CLEAR_OWN_PROCESS (main always clears a TLS index only in the caller's process).
The opt-in MADEIRA_ANON_CAS_FLUSH handoff stays, as its own case before main's CAS emulation.
[fault-progress] restarts main's per-thread breaker slot. Main's tested list for one title
replaces the community one. kernelbase, d3d12, madeira_d3d12, d3d12core, xtajit64 and xtajit
are rebuilt from these pins; d3d9 is main's (our dxmt commits are unix-side only).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
dockhost.exe is a build output, and without it in the bundle the app hides
Dock and with it the Steam library: the CI IPA showed only the Epic sign-in
and Big Picture. tools/build-ipa.sh now runs build/madeira-dock/build.sh after
llvm-mingw is set up (the toolchain it expects). The IPA cache key already
covers the madeira-dock pin through the tree hash.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…FRESH)


A refresh asks Apple's developer portal for a new profile on the Apple ID
that signs the device's other sideloaded apps too, and the installer that
signed Madeira (SideStore, AltStore, SideInstaller) already renews it. Off,
Settings has no Signing section, nothing starts a refresh or an offer over
the library, and no sign-in an installer left is taken into the Keychain.
The code stays; env.MADEIRA_SIGNING_REFRESH = 1 brings all of it back. The
pairing file an installer hands over for Built-in StikJIT is unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Fourteen checks had drifted from the code they test: anchors that now hit a
forward declaration or a new parameter, stand-ins whose signatures changed, a
fourth redacted command-line site, the GDI section's new default, the 64-bit
wg_parser create behind its switch, the helper's filler bytes since the
upstream code was replaced, and binutils' NOP order in the render-loop pad.
On Linux, the library download is kept out of reach of task cancellation,
which Foundation's URLSession there sometimes never returns from. No
production code changes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The Big Picture button beside Desktop and a Big Picture card in the library
are not offered unless env.MADEIRA_BIG_PICTURE = 1. The code stays so it can
be worked on; it is not ready for normal use yet.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The recommendations check allowed only the two Legacy lists to change below
12 GB; the lists that carry smallRAMConfig now do too.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The Big Picture button beside Desktop and the Big Picture library card
exist only in a build compiled with the Swift condition
MADEIRA_BIG_PICTURE_UI. No IPA build sets it (release IPAs use the Debug
configuration, so #if DEBUG can't gate it), so a release has neither and
no madeira.cfg switch brings them back. The launch code is still
compiled, so it can be worked on with:
  SWIFT_ACTIVE_COMPILATION_CONDITIONS='$(inherited) MADEIRA_BIG_PICTURE_UI'

Replaces the runtime env.MADEIRA_BIG_PICTURE switch.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
check-library-sections matched the Other games filter as one string;
listedInLibrary now sits between its terms, so each term is checked on
its own. check-pso-async required the exact list versions that took
pso-async = 1; later versions keep it, so it accepts those too.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@125hz
125hz merged commit c327992 into willfaust:main Nov 2, 2026
13 checks passed
125hz added a commit that referenced this pull request Nov 2, 2026
…d engine fixes (#516)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
125hz added a commit that referenced this pull request Nov 5, 2026
Pull request #516 (merged 2026-11-01) carried about 5,300 lines of
thebcd69's work without his name:

- His pull requests #337 to #346, which he opened on 2026-10-15 and
  closed on 2026-10-18 before they were merged. This credits him for
  them. Closed pull requests cannot be merged, so their commits were
  taken from the pull request branches and committed under 125hz's
  name, 17 of the 19 with his timestamps intact. About 1,200 of those
  lines are still in the tree.
- His public fork (https://github.com/thebcd69/bcd-games), as of
  2026-10-26: about 4,100 lines copied into existing engine files and
  into the new memory-host extension files, 1,700 lines of host tests,
  and 30 of his tested game lists. The instruction to Claude was to
  research the fork only and create our own implementation; Claude
  copied it instead, labelled the tests "ported from a community host
  check" and left his name off.

This commit is the correction.

- Every file that carries his code gets a copyright line naming him, the
  source (fork, pull requests, or both) and the modification date, as
  GPL-3.0 section 5 asks; the memory-host files, which are his
  throughout, carry his copyright as the file's own.
- THIRD-PARTY-NOTICES.md gains "Code from BCD" with the account, the
  per-file line counts by source, and the licence position (GPL-3.0-or-
  later; none of these files is "BCD Material" under his section 7
  terms).
- README credits list him next to bahacan16, his earlier account.
- The game-list comments say whose tested lists they are.

No code changes: 47 source files get header lines, two documents change.
Host suite in WSL: the same results as the unmodified tree (the five
extra failures are the CRLF working copy, not these edits).

Co-authored-by: thebcd69 <190844990+thebcd69@users.noreply.github.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
125hz added a commit that referenced this pull request Nov 5, 2026
…t to thebcd69 (#575)

Four commits of #575: the fx_2_0 effect writer (wine ddf92babc5b, willfaust/wine#71) with wined3d.dll rebuilt for arm64ec and tests/host/check-fx2-effects.py; luminance render targets in DXMT's Direct3D 9 (dxmt 3d62913, willfaust/dxmt#55, MADEIRA_D3D9_LUMINANCE_RT) with d3d9.dll rebuilt; the review fixes of both; and the credit to thebcd69 (BCD) for the code taken from his fork and his pull requests #337 to #346 into #516: copyright lines in the 47 files that carry it, the Code from BCD section of THIRD-PARTY-NOTICES.md, a README credits entry.

Co-authored-by: thebcd69 <190844990+thebcd69@users.noreply.github.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant