Microsoft Announces DirectX 12: Low Level Graphics Programming Comes To DirectX
by Ryan Smith on March 24, 2014 8:00 AM ESTThe Changing State of Game Development
The entry of Microsoft and Direct3D into this world stands to significantly change the status quo, due to the fact that Direct3D is by far the most widely used PC graphics API. As the maintainer of Direct3D Microsoft gets to set the pace in the PC graphics industry in several ways, so while Direct3D 12 won’t be the first modern low level graphics API, there’s little question after this announcement that it’s going to have the widest impact on game developers.
Perhaps the biggest reason for this is because of the fact that like every version of Direct3D before it, Direct3D 12 is going to be a cross-vendor standard that works on multiple GPUs. Though I don’t think it’s wise to treat Mantle and Direct3D as competitors at this point, the fact that this is a cross-vendor standard and not an AMD standard means that using it targets every video card and not just AMD video cards. So for all of the impact Mantle has had over the past 6 months, and will continue to have over the coming years, the fact that we’re to a point where there’s a cross-vendor standard will be a significant milestone.
That said, whenever we talk about low level programming it’s good to also recall who this model is and isn’t for. The purpose of abstraction is not only to provide wider hardware compatibility, but to outright hide certain types of execution ugliness from programmers. The reduction in abstraction will bring with it a reduction in the amount of this ugliness that gets hidden, and as a result the amount of knowledge needed to efficiently program at a low level goes up. Low level programing should not require a code wizard, but it’s unquestionably harder than straightforward (no optimization tricks) Direct3D 11.
Which is why the launch of Direct3D 12 is poised to increase the number of options available to graphics programmers, but not replace the high level programming model entirely. The development teams best suited for taking advantage of Direct3D 12 will be the well-funded AAA game studios, particularly those doing multi-platform titles across PCs and consoles. If you’re already doing low level programming for Xbox One and Playstation 4 – and more importantly have the staff and institutional knowledge for such an endeavor – then Direct3D 12 is but a small step, mostly one of learning the syntax of the new API. But for smaller game developers that aren’t able to put together large, experienced game development teams, then a need for a high level programming API will remain. Microsoft has not talked about high level programming within the context of Direct3D 12 thus far, but one way or another – be it Direct3D 11 or a high level friendly Direct3D 12 – high level programming will be here to stay.
Though when it comes to development, the role of middleware cannot be ignored. AMD and NVIDIA already target middleware developers for integration of their proprietary technologies, and the same concept applies on a larger scale when we’re talking about making low level programming accessible to more developers. Furthermore with the massive change in middleware licensing terms we’re seeing with this generation – Unreal Engine 4 for example is just 5% of gross revenues for smaller developers that can’t negotiate otherwise – powerful middleware is increasingly accessible to all categories of developers. So even if smaller developers can’t internally develop their own Direct3D 12 code, they will have the ability to target it by inheriting the capabilities through the middleware they use.
Consoles & Mobile Devices Too
The introduction of Direct3D 12 stands to not only change the nature of graphics development for Windows, but on other Microsoft platforms too. With Microsoft’s consumer arm having their hand in everything from phones to consoles, Microsoft is seeking to extend Direct3D 12 and its benefits to these platforms too.
Specifically, Microsoft is already committing to bringing Direct3D 12 to the Xbox One, their current-generation console. Powered by an AMD SoC whose GPU in turn is based on GCN 1.1, the Xbox One is functionally an x86 PC with a modern AMD GPU, so the fact that this is even technically possible is not a surprise. But what does come as a surprise is that the Direct3D12 API is different enough that this is even necessary.
The Xbox One, as you may recall, uses Microsoft’s Direct3D 11.X API. This details of this API are scarce as they’re only open to registered Xbox One developers, but fundamentally it’s said to be a variant of Direct3D 11 with a number of Xbox One additions, including low level API features that would be suitable for programming a console. Having the Xbox One be in alignment with Direct3D 12 is going to be a good thing regardless – it will make porting between the platforms easier – but the fact that Direct3D 12 will bring any kind of meaningful improvement to the Xbox One is unexpected. Without more details on the Xbox One API it’s impossible to say with any certainty what exact functionality isn’t currently available in Direct3D 11.X or what kind of performance benefit this would bring the Xbox One, but it stands to reason that unless most Xbox One programmers have been doing high level programming, the gains won’t be as great as for the PC.
Moving on, we have the fact that Microsoft will also be bringing Direct3D 12 to handheld devices. We’re presumably talking about Windows RT tablets and Windows Phone phones, extending Direct3D 12 to the bottom as well as it goes to the top on the PC. Handheld devices stand to gain just as much from this as PCs and consoles do, due to the fact that handheld devices are even more CPU-bottlenecked than PC laptops and desktops, so a low level API is as much a natural development for these platforms as it is the PC.
The question on our end is what kind of impact this will have on the Direct3D 12 standard with respect to abstraction. SoC-class GPUs are typically years behind PC GPUs in functionality (never mind performance), and at least among current GPUs wildly differ from each other in ways the PC GPU market hasn’t seen in years. So while extending Direct3D 12 to cover multiple PC GPUs should be relatively easy, having to support SoC GPUs certainly muddles the picture. This may mean Microsoft is looking at the long view here, when SoCs such as the Tegra K1 come along with feature sets that match recent PC architectures, coupled with the fact that Windows RT/Phone has not traditionally supported a large number of SoC GPU architectures. In which case only having to cover a handful of SoC GPU architectures instead of all 7 would certainly be an easier task.
105 Comments
View All Comments
The_Assimilator - Monday, March 24, 2014 - link
The 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 - link
Many 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 - link
The 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 - link
The latest Fifa :)munim - Monday, March 24, 2014 - link
I 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 - link
It 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 - link
Actually, 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 - link
It 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.