Repository navigation
Conversation
Present negotiated HDR scanout through a float EDR layer on macOS and iOS, with shared luminance metadata and SDR capture conversion. Retain Game Mode eligibility and the documented per-game workaround for affected Macs. Cover production Metal presentation paths, transfer conversion, display transitions and launcher settings.
|
A data point from an M4 Pro, on this game, for the Game Mode revert. Setup: MacBook Pro M4 Pro (Mac16,8), 24 GB, macOS 27.0. Mario Kart World 1.8.0, fullscreen, 2026-11-03. Build: One run, with Game Mode switched off in Game Overlay while playing:
Limits:
For reference, with the key false: 24 minutes on |
|
Thanks for sharing these measurements. The slowdown was intermittent on my M5 Max too: some runs stayed at 60 fps, while others entered a persistent ~30 fps state near the rivers. Opening the pause menu restored 60 fps only in the menu; switching focus away from the app and back also restored performance in gameplay. With the fixes now in #1245, I haven’t reproduced that state in my subsequent tests with Game Mode enabled. Could you clarify how the slowdown behaved on your M4 Pro? Once triggered, did it persist, and did switching focus away and back recover performance without disabling Game Mode? If you can test with #1245 applied, a comparison with Game Mode on and off would help establish whether the issue remains on M4 Pro. |
|
Thanks. This comes from
|
The status query answers HDR only while the window's screen can show EDR, and the game follows the window between screens: Mario Kart World asks every frame and switches windows. The format is 1, as the SDK's own QueryHdrStatus sets on = (format == 1) (found in seedds#1249). The HDR layer carries HDR10 metadata with the game's declared range, and Core Animation maps highlights into the headroom. The host's own roll-off is gone: side by side it looked the same and reached the screen in the same time. Screenshots bring highlights to SDR white with their hue. Adds t_present_hdr and DM_PRESENT_SHOWN, a log of when frames reach the screen. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Thanks for this. #1176 covers the same ground (HDR output for Switch 2 games), and your findings here improved it:
Where #1176 differs:
Happy to merge efforts, either by folding anything from here into #1176 or the other way round. — Claude Opus 5.5, via Claude Code |
The status query answers HDR only while the window's screen can show EDR, and the game follows the window between screens: Mario Kart World asks every frame and switches windows. The format is 1, as the SDK's own QueryHdrStatus sets on = (format == 1) (found in seedds#1249). The HDR layer carries HDR10 metadata with the game's declared range, and Core Animation maps highlights into the headroom. The host's own roll-off is gone: side by side it looked the same and reached the screen in the same time. Screenshots bring highlights to SDR white with their hue. Adds t_present_hdr and DM_PRESENT_SHOWN, a log of when frames reach the screen. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The status query answers HDR only while the window's screen can show EDR, and the game follows the window between screens: Mario Kart World asks every frame and switches windows. The format is 1, as the SDK's own QueryHdrStatus sets on = (format == 1) (found in seedds#1249). The HDR layer carries HDR10 metadata with the game's declared range, and Core Animation maps highlights into the headroom. The host's own roll-off is gone: side by side it looked the same and reached the screen in the same time. Screenshots bring highlights to SDR white with their hue. Adds t_present_hdr and DM_PRESENT_SHOWN, a log of when frames reach the screen. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The status query answers HDR only while the window's screen can show EDR, and the game follows the window between screens: Mario Kart World asks every frame and switches windows. The format is 1, as the SDK's own QueryHdrStatus sets on = (format == 1) (found in seedds#1249). The HDR layer carries HDR10 metadata with the game's declared range, and Core Animation maps highlights into the headroom. The host's own roll-off is gone: side by side it looked the same and reached the screen in the same time. Screenshots bring highlights to SDR white with their hue. Adds t_present_hdr and DM_PRESENT_SHOWN, a log of when frames reach the screen. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The status query answers HDR only while the window's screen can show EDR, and the game follows the window between screens: Mario Kart World asks every frame and switches windows. The format is 1, as the SDK's own QueryHdrStatus sets on = (format == 1) (found in seedds#1249). The HDR layer carries HDR10 metadata with the game's declared range, and Core Animation maps highlights into the headroom. The host's own roll-off is gone: side by side it looked the same and reached the screen in the same time. Screenshots bring highlights to SDR white with their hue. Adds t_present_hdr and DM_PRESENT_SHOWN, a log of when frames reach the screen. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Add HDR presentation on macOS and iOS, with launcher controls for Mario Kart World and Donkey Kong Bananza on both platforms. Negotiate display capability through VI, decode PQ and linear scRGB scanout into extended-linear Rec.2020, and apply content luminance metadata through Core Animation. Preserve SDR presentation and tone-map HDR screenshots to SDR. Bypass the perceptual SDR MetalFX scaler for HDR scanout.
Restore
LSSupportsGameMode=truein Mac bundles. iOS already enables Game Mode and retains that configuration. The global opt-out followed an M4 Pro low-clock report; that issue and its per-game workaround remain documented. For MKW 1.8.0 on M5 Max, the queue timestamp and allocator-lifetime fixes in #1245 restored stable 60 fps with Game Mode enabled, without forcing GPU clocks or lowering resolution.Validation: 178 GPU checks covering HDR luminance, gamut conversion, SDR output, crop handling and both Metal presentation paths; 114 packaging, profile, settings, documentation and shader-chain tests; all 263 iOS host sources compile. GPU tests pass with Metal validation enabled. Guest Bezier tone-curve overrides remain unsupported; Core Animation maps HDR to the display.
Front-ends: interface: expose
DM_HDRfrom the shared settings list on macOS and iOS, and rebuild the host with its updated present shader. Mac bundles again opt into Game Mode.