D3DMetal Extreme Over Synchronization Issues

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

Answered by DTS Engineer in 884960022

Thanks for the detailed analysis and for taking the time to profile this with Metal System Tracer — that kind of data is valuable.

DXMT and D3DMetal handle different versions of Direct3D, which makes a direct comparison difficult. DXMT supports Direct3D 11, while both Death Stranding 2 and Assassin's Creed Valhalla are Direct3D 12 titles. DX11 and DX12 have fundamentally different synchronization models — DX12 gives the application explicit control over resource barriers, fences, and synchronization, so the translation layer's job is substantially different than it is for DX11. The synchronization behavior in D3DMetal isn't comparable to how DXMT handles DX11 workloads.

It's also worth keeping in mind that the frame times you're measuring reflect the full translation stack — Rosetta, Wine, and D3DMetal together — so isolating any single layer's contribution to the overhead is challenging.

Thank you for filing FB22426600. If you have additional GPU traces or Instruments captures that help identify where time is being spent within each layer, attaching those to the feedback report would be a great next step.

Thanks for the detailed analysis and for taking the time to profile this with Metal System Tracer — that kind of data is valuable.

DXMT and D3DMetal handle different versions of Direct3D, which makes a direct comparison difficult. DXMT supports Direct3D 11, while both Death Stranding 2 and Assassin's Creed Valhalla are Direct3D 12 titles. DX11 and DX12 have fundamentally different synchronization models — DX12 gives the application explicit control over resource barriers, fences, and synchronization, so the translation layer's job is substantially different than it is for DX11. The synchronization behavior in D3DMetal isn't comparable to how DXMT handles DX11 workloads.

It's also worth keeping in mind that the frame times you're measuring reflect the full translation stack — Rosetta, Wine, and D3DMetal together — so isolating any single layer's contribution to the overhead is challenging.

Thank you for filing FB22426600. If you have additional GPU traces or Instruments captures that help identify where time is being spent within each layer, attaching those to the feedback report would be a great next step.

D3DMetal Extreme Over Synchronization Issues
 
 
Q