2016 was a really interesting year, as we got ourselves the first games running on Microsoft’s new API, DirectX 12. DirectX 12 was meant to give developers lower-level access to the graphics cards, which would supposedly make a lot of games run faster/better. After all, a number of developers were asking for low-level access similar to the one the already had on consoles.
However, as it turns out, things did not go as well as most PC gamers anticipated back in 2015. Like it or not, DX12 – in its current state – is not up to what we were expecting from a low-level API. In fact, DX12 is slower than DX11 in almost every game, without adding any new graphical effects (something that was happening in previous versions of DirectX that could somehow justify the performance differences).
We’ve re-tested every DX12 title that was released in 2016 in order to see how they perform on the PC platform. And in pretty much all cases, DX11 performs better than DX12, while also looking exactly the same.
Rise of the Tomb Raider runs faster under DX11, although there are some scenes in which DX12 performs better. Still, overall performance is better under DX11. The same applies to HITMAN. While there were some scenes in which HITMAN ran better under DX12, its overall performance was better in DX11. Not only that, but we’re still noticing some crashing issues under DX12. Deus Ex: Mankind Divided’s DX12 path still suffers from major slowdowns in Prague and runs significantly worse than DX11. Quantum Break’s Windows Store version (DX12-only) runs noticeably worse than its Steam version (DX11-only).
What really surprised us was Battlefield 1’s underwhelming performance in DX12. DICE was the team responsible for Mantle, so we kind of expected truly awesome things from it. After all, the team know how to “write to the metal” and get amazing results from current-gen graphics cards (from both vendors). Instead, Battlefield 1’s DX12 mode runs worse than DX11 on both NVIDIA’s and AMD’s graphics cards. And for the record, Battlefield 4 ran better in Mantle than in DX11.
What also puzzled us was the disappointing performance of two strategy games that supported DX12. Both Sid Meier’s Civilization VI and Total War: WARHAMMER did not benefit from DX12. DX12 is meant to – among other things – offer better multi-tasking capabilities, however both of these titles did not take advantage of that feature.
And then we have the DX12-only titles that were released by Microsoft. From them, only Gears of War 4 runs great, however we don’t have a DX11 version in order to compare it with. Forza Horizon 3 still has major performance issues, and Gears of War: Ultimate Edition’s performance is not up to what we were expecting from a Remaster.
“But why is that happening?” some may ask. And the reason is, quite simple. DX12 is too different from DX11. Without going into a lot of details, developers will have to re-write their whole – or at least major parts of their – engines in order to take advantage of it. But that’s not what is happening these days. Instead, most developers are simply adding DX12 support, relying heavily on features like Async Compute. And while Async Compute comes with some benefits, it’s not the only beneficial feature that DX12 supports.
DX12 is more than Async Compute. DX12 allows for explicit multi-GPU support (a feature that thankfully some games already support), offers better multi-tasking CPU capabilities, reduces CPU overhead and can handle more draw calls than before. DX12 also offers low-level access to the graphics cards, something that – theoretically – should make things easier for experienced developers. And for the time being, only a couple of DX12’s features have been utilized.
It’s also worth addressing the DX12 performance “differences” between NVIDIA and AMD. Architecture-wise, AMD’s GPUs benefit greatly from Async Compute. However, that’s not the only reason why AMD sees some performance benefits in a couple of DX12 titles. AMD’s DX11 drivers are not as optimized as NVIDIA’s drivers. As a result of that, AMD’s GPUs benefit from the lack of a software layer under DX12. In NVIDIA’s case, however, there is no performance gain at all as its DX11 software layer is highly optimized (which makes us wonder whether a low-level access API is actually worth it when NVIDIA’s drivers are doing such an incredible work already).
DirectX 12 is an interesting low-level API, no doubt about that. However, it’s quite obvious that its current implementations in today’s games are really, really awful. These current implementations also prove that DX12 won’t magically improve performance. On the contrary. As it’s been proven, it can actually decrease performance.
In order to take proper advantage of it, developers will have to re-write their engines and built them around it. Whether developers will do such a thing in 2017 remains to be seen!