Microsoft Announces DirectX 12: Low Level Graphics Programming Comes To DirectXby Ryan Smith on March 24, 2014 8:00 AM EST
Early Direct3D 12 Demos
Wrapping things up, while DirectX 12 is not scheduled for public release until the Holiday 2015 time period, Microsoft tells us that they’ve already been working on the API for a number of years now. So although the API is 18-20 months off from its public release, Microsoft already has a very early version up and running on partner NVIDIA’s hardware.
In their demos Microsoft showed off a couple of different programs. The first of which was Futuremark’s 3DMark 2011, which along with being a solid synthetic benchmark for heavy workloads, also offers the ability to easily be dissected to find bottlenecks and otherwise monitor the rendering process.
3DMark 2011 CPU Time: Direct3D 11 vs. Direct3D 12
As part of their presentation Microsoft showed off some CPU utilization data comparing the Direct3D 11 and Direct3D 12 versions of 3DMark, which succinctly summarize the CPU performance gains. By moving the benchmark to Direct3D 12, Microsoft and Futuremark were able to significantly reduce the single-threaded bottlenecking, distributing more of the User Mode Driver workload across multiple threads. Meanwhile the use of the Kernel Mode Driver and the CPU time it consumed were eliminated entirely, as was some time within the Windows kernel itself. Finally, the amount of time spent within Direct3D was again reduced.
This benchmark likely leans towards a best case outcome for the use of Direct3D 12, but importantly it does show all of the benefits of a low level API at once. Some of the CPU workload has been distributed to other threads, other aspects of the CPU workload have been eliminated entirely. Yet despite all of this there’s still a clear “master” thread, showcasing the fact that not even the use of a low level graphics API can result in the workload being perfectly distributed among CPU threads. So there will still be a potential single-threaded bottleneck even with Direct3D 12, however it will be greatly diminished compared to the kinds of bottlenecking that could occur before.
Moving on, Microsoft’s other demo was a game demo, showcasing Forza Motorsport 5 running on a PC. Developer Turn 10 had ported the game from Direct3D 11.X to Direct3D 12, allowing the game to easily be run on a PC. Powered by a GeForce GTX Titan Black, Microsoft tells us the demo is capable of sustaining 60fps.
Wrapping things up, it’s probably best to start with a reminder that this is a beginning rather than an end. While Microsoft has finally publically announced DirectX 12, what we’ve seen thus far is the parts that they are ready to show off to the public at large, and not what they’re telling developers in private. So although we’ve seen some technical details about the graphics API, it’s very clear that we haven’t seen everything DirectX 12 will bring. Even a far as Direct3D is concerned, it’s a reasonable bet right now that Microsoft will have some additional functionality in the works – quite possibly functionality relating to next-generation GPUs – that will be revealed as the API is closer to completion.
But even without a complete picture, Microsoft has certainly released enough high level and low level information for us to get a good look at what they have planned; and based on what we’re seeing we have every reason to be excited. A lot of this is admittedly a rehash of we’ve said several months ago when Mantle was unveiled, but then again if Direct3D 12 and Mantle are as similar as some developers are hinting, then there may not be very many differences to discuss.
The potential for improved performance in PC graphics is clear, as are the potential benefits to multi-platform developers. A strong case has been laid out by AMD, and now Microsoft, NVIDIA, and Intel that we need a low level graphics API to better map to the capabilities of today’s GPUs and CPUs. Direct3D 12 in turn will be the common API needed to bring those benefits to everyone at once, as only a common API can do.
It’s important to be exceedingly clear that at least for the first phase the greatest benefits are on the CPU side and not the GPU side – something we’ve already seen in practice with Mantle – so the benefits in GPU-bound scenarios will not be as great at first. But in the long run this means changing how the GPU itself is fed work and how that work is processed, so through features such as descriptor heaps the door to improved GPU efficiency is at least left open. But since we are facing an increasing gap between GPU performance and single-threaded CPU performance, even just the CPU bottlenecking reductions alone can be worth it as developers look to push larger and larger batches.
Finally, while I feel it’s a bit too early to say anything definitive, I do want to close with the question of what this means for AMD’s Mantle. For low level PC graphics APIs Mantle will be the only game in town for the next 18-20 months; but after that, then what? If nothing else Mantle is an incredibly important public proving ground for the benefits of low level graphics APIs, so even if Direct3D 12 were to supplant Mantle, Mantle has done its job. But I’m nowhere close to declaring Mantle’s fate yet, as we only have a handful of details on Direct3D 12 and Mantle itself is still in beta. Does Mantle continue alongside Direct3D 12, an easy target for porting since the two APIs are (apparently) so similar? Does Mantle disappear entirely? Or does AMD take Mantle and make it an open API, setting it up against Direct3D 12 in a similar manner as OpenGL sits against Direct3D 11 today? I imagine AMD already has a plan in mind, but that will be a discussion for another day…
Post Your CommentPlease log in or sign up to comment.
View All Comments
The_Assimilator - Monday, March 24, 2014 - linkThe reason for CPUs bottlenecking GPUs is simple: single- vs multi-threaded. Writing a multi-threaded game engine that works properly is extremely difficult. It's even more difficult if you're licensing a graphics (and/or audio, etc.) engine that you need to integrate with your game's core, because you then become dependant on that engine and how it works, whether it's threaded, etc.
Unfortunately, off-the-shelf game engines - particularly graphics - have remained steadfastly single-threaded, and that's not something DirectX or Mantle will be able to change.
"To use consoles as an example once again, this is why they are capable of so much with such a (relatively) weak CPU, as they’re better able to utilize their multiple CPU cores than a high level programmed PC can."
Nonsense. The current crop of consoles use x86-64 and DirectX 11-class hardware, programming games for them is virtually identical to programming games for (a slow) PC.
"Meanwhile, though it’s a bit cynical, there’s a very real threat posed by the latest crop of consoles, putting PC gaming in a tight spot where it needs to adapt to keep pace with the consoles."
Consoles with AMD CPUs with their abysmal single-threaded performance? Alrighty then.
"PCs still hold a massive lead in single-threaded CPU performance, but given the limits we’ve discussed earlier, too much bottlenecking can lead to the PC being the slower platform despite the significant hardware advantage."
Perhaps you could point to a game that is faster on consoles than PC. What's that, you can't, because such a game doesn't and never will exist? Alrighty then.
MrSpadge - Monday, March 24, 2014 - link> Unfortunately, off-the-shelf game engines - particularly graphics - have remained steadfastly single-threaded, and that's not something DirectX or Mantle will be able to change.
What's a game engine using in the end if not DirectX? Of course there's engine work prior to the DX draw calls.. but still, they're there and currently have no alternative. And they are becoming a bottleneck. Rest assured that developers have profiled their engines to see which calls cost most performance.
> Nonsense. The current crop of consoles use x86-64 and DirectX 11-class hardware, programming games for them is virtually identical to programming games for (a slow) PC.
Except that on the consoles you have access to those low-level APIs and are free to use them when ever the benefit justifies the extra development work.
> Perhaps you could point to a game that is faster on consoles than PC. What's that, you can't, because such a game doesn't and never will exist?
Of course you'd have to compare to approximately similar hardware. Which is difficult, but doable for e.g. the older XBox. What did it have, a Coppermine Celeron 800 MHz and approximately a Gefore 7800? It's going to be challenging to find PC configurations of this class performing as well as late games for that platform.
Gigaplex - Monday, March 24, 2014 - link"What's a game engine using in the end if not DirectX?"
A lot of them support OpenGL and other platform specific APIs.
Lerianis - Monday, March 31, 2014 - linkMany graphics cards still support OpenGL because it was a popular API. Personally, I agree with the first poster: The problem is that multi-threaded games are almost unheard of today. Sure, the games do a TOKEN amount of multi-threading (i.e. putting graphics on one thread and sound on another) but anything more than that they do not really do.
So, in most games, having 4 cores is worthless or less important than having 2 cores at least is.
Alexvrb - Tuesday, March 25, 2014 - linkThe ORIGINAL Xbox? It had a 733 Mhz Coppermine PIII with half the L2 cache (but still 8-way so NOT a Celeron). So you were close there. But you're waaaay off on the GPU. It had a Geforce 3.5 (NV2A)! 7800 would be closer to what ended up in the next generation PS3.
mars777 - Monday, March 24, 2014 - linkThe latest Fifa :)
munim - Monday, March 24, 2014 - linkI thought all games were faster on console than comparatively spec'ed computers. Is that not the case? Do you have any performance comparison tests off the top of your head?
B3an - Monday, March 24, 2014 - linkIt is the case and has always been the case. He's just an idiot. PC will always remain faster, but a slower PC with similar hardware to a console will run a game slower than the console version. This is a well known fact, but that console advantage is something that may disappear with DX12 (or atleast be reduced). This will give PC an even further lead in performance.
ninjaquick - Monday, March 24, 2014 - linkActually, that isn't a fact at all. Only very low-level, hyper optimized software will run better on consoles, and that is only because the software will generally fail to run at all on PC as the hardware it is made for is not present on the PC.
B3an - Monday, March 24, 2014 - linkIt is fact. Ryan knows this, devs know this, everyone with any understanding at all knows this. Developers have been asking for lower level access on PC forever because of this.
Even ignoring the lower level API console advantage, games on console will already benefit from set hardware, the dev will always target that and get more performance out of it. Look at all the crappy PC ports that make poor use of the hardware. PC always runs games better anyway because of vastly superior hardware, but thats not the case on slower PC hardware thats similar in spec to a console - in that case the console always has the performance advantage there (and you need to remember the latest consoles use very PC-like hardware now so it's a lot easier to compare).
As a PC gamer DX12 is great news, it will make better use of all my cores, and will give the platform even more of a performance advantage over consoles. It may even help lower the cost of entry-level gamings PC's.