World of Warcraft is an old game – make no mistake about it.
The development history of the game is fascinating, the original launch effectively using a heavily modified Warcraft III engine to produce the game we all came to know and love. But a lot has changed over the last 14 years, and Battle for Azeroth is going to introduce something potentially huge to the game engine – support for DirectX 12 on Windows, and use of Metal on MacOS.
Now, before we dive in, I should establish that I have not been able to test this since I am not in the BfA alpha, and I have not seen people try to test it, so this is conjecture based on an understanding of how DirectX works.
Firstly – what is a DirectX anyways?
DirectX is an API – application programming interface – that acts as a translator for games and your hardware and operating system. WoW tells DirectX that it needs combat math, sound processing, and 3D rendering done, and DirectX interprets and delegates those commands to your system to ensure they are done as specified. Over the years that WoW has been out, we’ve gone through 5 different versions, 8-12.
The game has upgraded slowly over time to enable the improved features of each of these releases, with Legion currently offering players the choice of a Direct3D 9 or Direct3D 11 render pathway (you can choose to switch through the Advanced Graphics Settings in the game). Generally, if you have a fairly modern PC, you’re probably playing with D3D 11, as 9 only really exists to give the game legacy hardware support.
WoW’s relationship with APIs is extremely important – relying on the API to do the heavy lifting of hardware utilization and optimization allows the game to be easily portable (hence why Blizzard’s MacOS support has always been excellent for the game). Since MacOS does not have DirectX, building a heavily optimized code base around specific operations in the operating system would make bringing the game between platforms harder. While modern Macs aren’t much different from PCs on a hardware level, using the API rather than specific machine coding in the game itself makes supporting a wider range of systems much easier. On Mac, you can tell the game to shop out its work to OpenGL for graphics, or now Metal, which are both graphics APIs that work on Mac – and the API decides how best to handle that request.
This is understandable and fine, but there is one snag…
DirectX Finally Gets Parallel Workloads in the 12th Hour
The problem those of us with more modern gaming PCs have with WoW is simple – because WoW relies on older DirectX versions, it doesn’t really do parallel processing very well. That is because DirectX 11, the current supported version that WoW uses, came out all the way back in 2008, at a time where multi-core processors were not widely purchased and the majority of computers still shipped with single-core parts. What this does to WoW, then, is that it can often bottleneck the game, as DirectX11, left to decide for itself, often will use only 1 CPU core for all of its work. Back in 2008, this would have been just fine, and often today it is still fine. For a game like WoW, a fast-enough modern CPU will still be able to crunch the numbers fast enough to keep up, but in Legion, this has gotten harder. The game now stretches on basic combat math, requiring a CPU that can quite often calculate large numbers a lot – it has to know and track that you just did 1,176,453 damage against a bosses’ health pool of 5,189,234,471. That alone is an easy-enough single operation to calculate, but now, in a raid setting, imagine that your system has to track every DPS player hitting like that, plus DoT ticks, plus threat values, plus healing, while also managing timers, and then on top of all of that it is also processing the game sound data for output while preparing the basic graphical data which gets shipped out to your graphics card to be processed and displayed.
It is a lot to ask of a single CPU core, made worse when you consider that in any computer bought in the last 8 years, you almost certainly have at least 2 cores, and there are good odds you probably have 4 cores. An enthusiast system like mine has 6 cores, and there are mainstream computer processors available today with 8 cores, while high-end enthusiast computers can have as many as 18 cores! This means that while WoW can be CPU intensive, it is that way because of this problematic approach to balancing workload – which is to say, in a multi-core system, the game doesn’t really seem to balance workload at all. To be fair, this is mainly a problem with DirectX 11 and the need to rely on APIs to self-optimize to ensure portability between platforms. Blizzard could, in theory, optimize the game a lot more to balance across multiple CPU cores, but the approach to this code would be different between Windows and MacOS, which could cause problems when trying to keep the game released and updated simultaneously on both platforms.
Enter DirectX 12. 6 years after the introduction of DirectX 11, DirectX 12’s biggest improvement comes from optimization and the reduction of overhead. DirectX 12’s biggest achievement is that it runs far better on multi-core systems, thanks to a new parallelization of work that enables the API to more aggressively shop out tasks across your system, using multiple CPU cores for the preparation of graphical data that is then handed off to your graphics card for processing to completion. While all the other stuff can add up, that is relatively simple math for a CPU. 3D computation and graphics are a fair bit more complicated and so being able to hand out tasks within this workload to different CPU cores to work on simultaneously is a tremendous performance boost. Under DirectX 11, the one CPU core engaged for graphics has to complete tasks in order, basically doing task 1, task 2, task 3, and so on – and if your graphics card is expecting 6 completed tasks simultaneously so it can complete the scene, that can take some time. Under DirectX 12, in a system like mine, a 6-task graphical operation could have 1 task shipped off to each CPU core, completed, and then recompiled and sent off to the graphics card, completing the overall task much faster and far more efficiently.
Alright, Great. What Does It Mean For WoW?
Well, hypothetically, the ability for DirectX 12 to be the main API for Battle for Azeroth means that WoW, for the first time in its life, will be able to more properly leverage a multi-core CPU. Large, complex visuals can be broken down and worked on in parallel, resulting in better overall performance on just about any computer purchased in the last 10 years. If you have a new, modern, fire-breathing gaming PC, this will result in much higher average performance than the game has ever had. Even if you have an old, but still fine dual-core processor, the game will still benefit – not as much, but it does mean that the game will be able to see and properly utilize much more of your system than it ever has before.
The easiest place to observe this is in raids. If you have a very fast modern PC with an excellent graphics card, you’ve probably noticed that raiding leaves a lot to be desired in overall performance. The single-threaded nature of WoW under DirectX 11 causes that – your graphics card could do much more, but it is stuck waiting for the processor to finish its work and send that data along. In non-raid, non-BG settings with much less going on, the CPU has more time available to crunch the numbers, and less overall data to work with on just about every task – so your performance in the overworld is fine. That should change for the better with Battle for Azeroth – in theory. Without having been able to test it and see, it cannot be said with certainty, but with an understanding of how these things work, I feel it is safe to say that overall, BfA will run much better than the game has at any other point in time.
It will probably also help that combat math in a raid will be back to subtracting 1,000 damage from a few million health, instead of the ridiculous numbers we have today.