Skip to content

Experiment: shared-runtime external-display routing - #2

Closed
oliverames wants to merge 4 commits into
codex/experiment-basefrom
codex/experiment-external-display
Closed

oliverames wants to merge 4 commits into
codex/experiment-basefrom
codex/experiment-external-display

Conversation

@oliverames

@oliverames oliverames commented Oct 29, 2026 •

Copy link
Copy Markdown
Owner

This is a fork-only experiment targeting codex/experiment-base. Keep it isolated from main and the existing upstream PR heads. The switch is off by default.

What and why

The current iOS front end has one global runtime and render layer. Adding another ordinary scene would duplicate or rebind that state, and forwarding each scene's focus independently could suspend the game.

Building with DM_EXTERNAL_DISPLAY=1 opts into a dedicated external role and iOS 27 scene accessory. The same view/layer moves behind a graphics fence while the phone retains controls. Aggregate foreground/focus state handles disconnect and reconnection. Default builds retain their original scene configuration. The experiment includes the verified prepare-gate prerequisite from upstream seedds#574.

Checked

  • Production compile check covers 179 files; full native frontend fixture links for the iOS 26 baseline.

  • Newt, iOS 27.2: 30 programmatic checks use production frontend/scene code, actual UIKit views/accessory registration, injected scene identities and graphics/display-link stubs. They verify ownership, one startup request, focus and handover ordering.

  • Actual packaging block tests prove unset/0 plist parity and the opt-in role/delegate. Source/docs/lint checks pass.

  • Phone reactivation now preserves audio/controller recovery while an external scene keeps aggregate focus active. Seven added checks use the real interruption observer with activation/controller endpoints mocked; they also verify that guest focus, the graphics gate and display link are not reset. Native result: 30 checks, 0 failed at 2816bfa.

  • No physical external display, cross-display drawable delivery, display-link rebinding or unplug during GPU work was tested. No external gameplay claim or five-game route.

  • The standalone fixture now clearly identifies itself as a verification app that uses no game files; its result records the actual visible label. The final source passes the same native checks.

Docs

  • Build opt-in, ownership and hardware limits documented.
  • No game files, keys or extracted game data.

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 29, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-29T03:05:28.198445Z 2816bfa New commits
🔒 Security Review ✅ Completed 2026-10-29T03:07:09.735015Z 2816bfa New commits
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: d1bf33d385

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread dm/gfx/nvn/nvn_mtl.m Resolved
Comment thread dm/ios/Sources/front_ios.m Resolved
oliverames pushed a commit that referenced this pull request Nov 2, 2026
The walk from the load back to the bounds check noticed copies and masks but no
other write: cmp w18,#4; b.hi; add w18,w18,#1; ldrsw x18,[x4,x18,lsl #2] read
entries 0 to 4 while the code uses 1 to 5, so one case's target was missing with
no sign of it. A site with a write of the index after its check, or a call with
a caller-saved index, is now refused, as jump_adr_offsets and half_count already
refuse a write. A refusal goes on to the other recognizers and ends in the jump
table assertion. Writes before the check do not count, which keeps the sites
check_before_copy takes.

A write that keeps the value, such as sxtw x0,w0, is refused too; no module on
the drive has one.

Checked: test_jump_copies.py (the new cases fail on the previous rewriter). Of the
345 unique modules on the drive, old and new recognition are the same on 281, and
60 more mains were scanned on the previous code with no site this refuses. That
includes Smash 13.0.5, EA SPORTS FC 27 and Well Dweller. Four could not be checked:
New Super Mario Bros. U Deluxe's main, sdk and rtld fail alike (no profile), and
Smash 1.0.0's main stops at a table the game's note already lists. No regress.py
run: nothing changes in the modules checked.
@oliverames

Copy link
Copy Markdown
Owner Author

Closing: experiment evidence and testing are tracked in the upstream nxnative PRs, so the fork-only experiment copy comes down. Keeping the branch here for reference.

@oliverames oliverames closed this Nov 5, 2026
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