Explanation
Currently, D3DMetal’s GPU synchronization approach introduces significant compute overhead on the CPU. This specifically affects D3D12 games that use modern rendering pipelines on Apple Silicon. Specifically, I’ve tested Death Stranding 2 On the Beach for how it handles its rendering. And the results are extreme: frame times are suffering from a 42% decrease from synchronization. Although there are obviously other effects at play, such as the overhead introduced by Rosetta and Wine, both of them don’t introduce as much overhead as D3DMetal.
This issue isn’t just specific to Death Stranding 2 On the Beach; most games running through D3DMetal suffer from this. Most games still seem to force synchronization to ~30 ms to reach the 30 fps amount. But it could be better with better synchronization, such as how DXMT handles it. Instead of doubling the work, it allows Metal to single-handedly track resource dependencies internally. This is in part due to the unfortunate bad mapping of D3D12 calls onto shared logic between D3D11 and D3D12.
System
- M2 Max Mac Studio — 32 GBs — 30-core GPU
- macOS 26.4 Tahoe
- CrossOver 26.1 RC
- Death Stranding 2 On the Beach — Steam
- Assassin’s Creed Valhalla — Steam & Ubisoft Connect
Thank you for your commitment. Another game that I recommend testing to really see this swell is Assassin’s Creed Valhalla.
Feedback
FB22426600 - D3DMetal Extereme Over Syncranization Issues