‹ projects

reverb-m1

Native wired VR on Apple silicon: Reverb G1 display bring-up and stereo demo
git clone https://umhau.org/code/reverb-m1.git
Log | Files | Refs

commit 95213a8defde4ff69e4111a7ffc7c6d6fd00e7bd
parent 8fc49b4af4a755acf9db8a53cdf6224c6cde7f5c
Author: umhau <umhau@example.invalid>
Date:   Wed, 21 Oct 2026 12:00:15 +0000

Docs: 1001 is kCGErrorIllegalArgument; SkyLight wait root cause still unknown

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

Diffstat:
MNOTES.md | 6++++--
MSETUP.md | 3++-
2 files changed, 6 insertions(+), 3 deletions(-)

diff --git a/NOTES.md b/NOTES.md @@ -52,8 +52,10 @@ Run `tools/verify.sh` (boot-args + log summaries only; no ioreg/system_profiler) connection_fetch_updated_event_queue). Not triggered by our code; IMU callbacks on main stall with it. - Fix: recovery state machine on its own serial queue, fed directly from the CG callback before the main hop; rendering on a dedicated CAMetalDisplayLink thread. Forced outage 14.4 s -> 4.4 s. -- REFUTED hypothesis (vr1): "the window server waits for us to release the captured display". CGDisplayRelease inside - the REMOVE callback returns 1001 (display already gone) and outages stayed ~4.6 s. Removed. +- Tested, not supported (vr1 hypothesis): "the window server waits for us to release the captured display". + CGDisplayRelease inside the REMOVE callback returns 1001 = kCGErrorIllegalArgument (the id is no longer valid there) + and outages stayed ~4.6 s, so that release was removed. This does NOT conclusively rule out every capture-related + cause; the root cause of the ~10 s SkyLight wait remains unknown. - Helper result: DATA1 byte0 = 0x04 observed after a DRST whose IOReturn was 0 and after which the display returned. Meaning of 0x04 unknown (TI documents 0 = success, 1 = timeout/abort, 3 = rejected). The helper conservatively exits 1; the app relies on display ADD. diff --git a/SETUP.md b/SETUP.md @@ -93,9 +93,10 @@ zsh tools/build.sh # builds the app + the signe - Shutdown crash (exit -11, double CAMetalDisplayLink invalidate) fixed; 2 clean-exit/restart trials exit 0. - Fault soak (`evidence/final-metal-worker-soak.txt`, build before the recovery queue): 3 forced outages all recovered; after them ~7 min untouched with zero drops, 90.00 presented fps, GPU ~1.5 ms/frame, 0 GPU errors. + - Root cause of the ~10 s main-thread SkyLight wait after a REMOVE: unknown (see NOTES.md). - Forced-outage duration (display lost -> back): 14.4 s before the recovery queue, 4.4 s with it (= 2 s grace + ~2.2 s reset/retrain/re-add). Releasing the capture inside the callback did not help - (CGDisplayRelease returns 1001 there; outages 4.6 s) and was removed. + (CGDisplayRelease returns 1001 = kCGErrorIllegalArgument there; outages 4.6 s) and was removed. - Every DRST is followed ~5.7 s later by a brief lane-sync blip (IRQ_HPD/INTERLANE retrain) that the app recaptures. - A no-fault 660 s soak at 90 Hz is in progress; not yet final proof.