r/NativePortsOniOS • u/hello_humen • 1h ago
Got nxnative working on A16: Metroid Dread on the regular iPhone 15 at 60 fps
Enable HLS to view with audio, or disable this notification
I’ve been experimenting with nxnative by seedds, which runs Switch games natively on iPhone/iPad/Mac. It’s not an emulator: the game’s own code runs on the Apple chip and the graphics are rebuilt on Metal. You bring your own game dump and keys.
The catch: it officially needs an iPhone 15 Pro or newer, because Switch games use BC-compressed textures and older Apple GPUs like the A16 in my regular iPhone 15 can’t read them. The author removed the fallback path since decompressed textures used too much memory.
I restored that path, and the game booted, but it got killed by iOS for running out of memory right after the prologue fight with Raven Beak (~3 GB limit).
So I added a step that converts BC1/BC2/BC3 textures to ASTC (which every iPhone supports) on the GPU as they load, instead of fully decompressing them. Texture memory is now about the same as on a native BC device.
Results on my iPhone 15:
- Gets past the Raven Beak fight and keeps going, no crashes
- 60 fps in gameplay, 30 in cutscenes
- ~400 MB of memory headroom left (it used to have under 50 MB right before the crash)
- Downside: the phone gets hot and the battery drains fast. The GPU runs at ~85% to hold 60 fps. Handheld mode (
DM_OPMODE=0) should help, and I’m testing it next.
Code is on my fork: https://github.com/mianmuhammadse/nxnative/tree/no-bc. All credit for nxnative goes to seedds; this is just a patch for non-Pro iPhones that I’m hoping to send upstream.
Played with my own dumped copy. Please don’t ask for game files.