The framebuffer and accelerator allocation interface changes must be built and installed together. Use the NVRMFB framebuffer source and the matching NVRM headers from this revision.
610-display-completion.patch implements the mapped flip notifier query and resets the selected slot for each committed surface. NVIDIA modeset treats the BEGUN notifier state as the latched flip; FINISHED is also accepted. Invalid or unavailable notifier state keeps the transaction pending.
610-setmode-reason.patch applies after it. A refused mode set logged only "commit rejected" in release builds (the reason lines are debug-only), so a WindowServer that could not set its first mode stopped with no cause on record. The patch logs one warning with the set-mode status, the display status, and each head's status.
610-viewport-scaling.patch applies to kapi/src/nvkms-kapi.c. Window scaling caps (sizeIn != sizeOut on the primary layer) are zeroed on architectures using postcomp head scaling (such as Turing, Ada Lovelace, Blackwell), causing NVKMS to reject scaled desktop and HiDPI modes (e.g. 3840x2160 on a 2560x1440 raster or 1920x1080 HiDPI). The patch keeps the primary layer unscaled (1:1) and passes the desktop dimensions as the head viewport size (viewPortSizeIn), allowing the postcomp head scaler to scale the framebuffer to native raster timings without violating window scaling limits (issue #221).
610-backlight-register-log.patch applies to src/nvkms-rm.c. A laptop panel driven by the GPU has no brightness control when NVKMS registers no backlight, and both inputs to that decision (the internal display mask and the brightness query) are answered by the GPU firmware with nothing on record. The patch logs the internal display status and masks, each display's brightness query status and level, and the case where none answered. No behaviour change.
With the original NVIDIA 610.57.04 Darwin modeset archive and compile commands already built, run:
python3 kexts/NVRM/build-completion-archive.py --vendor /build/vendor/src/nvidia-modeset --output /build/paired-completion
Link NVRM against the resulting libnvkms.a, not the original archive. The script preserves the original archive and replaces only the completion object and release build metadata. Build NVAccel with the matching allocation cookie interface, once for macOS 15 and once for macOS 26.
610-fsp-timer-double-destroy.patch applies to the open-gpu-kernel-modules 610.57.04 tree (git apply from its root) before the RM objects are built. When the FSP boot commands fail, kfspCleanupBootState runs from both the failure path and kfspStateDestroy; the second tmrEventDestroy faulted on the freed OS timer (page fault at 0x1010 in nv_destroy_nano_timer). The patch destroys the poll event once and clears the OS timer handle after cancelling it.