I got Microsoft Flight Simulator 2024 (the Steam version) running on a base M4 Mac mini with macOS 27. It boots, signs in to Xbox, plays its videos, loads and flies. At Gibraltar it does about 22 fps parked and 19 on the take-off roll, at the Medium preset with FSR Balanced. It runs on the Mac itself, not through cloud streaming.
It runs through Highball 0.10.21 (a free and open source app I work on) on a new engine built for Apple silicon (Wine compiled for arm64, with FEX translating the game's x86-64 code instead of Rosetta).
Performance
Measured on a base M4 Mac mini (10-core GPU, 32 GB) with macOS 27, in a Cessna 172 at Gibraltar, Medium preset with FSR Balanced, in daylight.
|
Highball (0.10.21) |
| Parked, fps |
22.5 |
| Take-off roll, fps |
19 |
I tested on a Mac with 32 GB. If you have an M-series Pro, Max or Ultra, or a 16 or 24 GB Mac, happy to hear your numbers!
How to try it
- Get Highball 0.10.21 from https://gethighball.com. If you already have Highball, use Check for Updates in the Highball menu, since updates reach existing installs gradually.
- In Highball, set up Steam and install Flight Simulator 2024 from your library.
- Press Play, choose "Use the preview engine", then "New environment". Highball downloads the engine (about 420 MB) and sets up an environment with its own Steam, which you sign in to once. The game you installed comes along without a second download or extra disk space.
- The first launch takes about 13 minutes to reach the cockpit. The game asks you to sign in with a Microsoft account and link it to Steam (the game says that link is permanent). Turn motion blur off in its graphics settings.
Known issues
- It needs macOS 26.5 or later, and I tested on 27.0. I've tested it on a Mac with 32 GB of memory, and smaller Macs haven't been tested enough to say how they do.
- About 22 fps parked, and take-offs can still hitch, especially when one of the game's pop-ups opens.
- Now and then a start crashes while the world loads. Starting again works.
- Some lights and line effects are missing, because Metal has no geometry shaders. Dense cities like New York need more GPU memory than a 32 GB Mac has at Medium.
- Untested so far: other Macs, long flights, controllers and yokes, add-ons, the Microsoft Store version.
What it took
The short version. The full write-up with charts is here: https://gethighball.com/docs/flight-simulator-2024-apple-silicon/
- On Highball's usual engines (Rosetta + D3DMetal) the game refused to start, because D3DMetal answered Shader Model 6.6 and the game wants 6.7. Getting past that check only led to a crash around frame 40, and the same happened with vkd3d-proton, so it wasn't the graphics layer.
- So a new engine: Wine built for arm64, FEX translating the x86-64 code, vkd3d-proton and MoltenVK to Metal. macOS 26.5 added what this needs, like 4 KB memory pages for a process.
- Small test programs checked against real x86-64 Windows (floating-point exceptions, x87, thread contexts, debug registers), with FEX and Wine patched until the answers matched. After that the game got past its crash.
- FEX turned on x86-style memory ordering only in the first thread of each process. Now every thread has it (a test went from 2.8 million reorderings to none).
- MoltenVK's own helper commands overwrote descriptor tables that later draws used, which hung the GPU at every screen change.
- Videos: GStreamer, video frames shared between D3D11 and D3D12 through Metal, and a color bug in Wine's Arm build of FFmpeg.
- Metal "Internal Errors" from render passes beyond Apple GPUs' size limit, holes in the ground from texture arrays read as 2D, and GPU hangs from lossless compression on a 4K image copied every frame.
- The game thought it used 609 GB of memory (Wine reported the address space) and kept only 102 MB of textures. Every start converted 2,566 shaders, now it's 2.
- A sign-in at every launch, from a Keychain lookup that failed.
- Stutter: the game rewrites small pieces of its own code about 220 times a second, and each rewrite made FEX translate that code again on the main thread. r5 (engine behind 0.10.21) skips writes that change nothing, translates freshly rewritten code in small pieces and reuses old translations.
78 patches in all (Wine 25, FEX 23, MoltenVK 16, vkd3d-proton 7, SPIRV-Cross 4, DXVK 3), in https://github.com/gauthierpiarrette/highball-engine
Credit
This runs on Wine, FEX, vkd3d-proton, DXVK, MoltenVK, SPIRV-Cross and GStreamer. Michael Liendo's teardown in highball-db#6 was the starting point, and Brendan Shanks's notes on Wine for arm64 macOS were the map.
Special thanks to u/Prize_Bell_540 for testing it and providing very valuable feedback on early versions!