What We Know about DX12 So Far
Unfortunately, we know relatively little about DX12. There was an initial assumption that DX12 would not require new hardware, as it would not have new features that relied on new hardware. So any current DX11 compliant part will be DX12 compliant. Well, part of this is true, and the rest is not. Most current DX11 parts can take advantage of the low level efficiencies gained from DX12 programming (AMD GCN, NVIDIA Fermi and above, and Intel’s 4000 series and above), but Microsoft has yet to detail the other changes that WILL require new hardware to be fully DX12 compliant. Throughout the next year and a half, we will get bits and pieces of what DX12 offers over DX11, other than the low level programming differences between the APIs.
A more granular look at what the driver overhead of DX11 does to performance and how it compares to what Microsoft is introducing with DX12.
Matt Sandy of Microsoft put up a nice little blog post that quickly details three major functions that DX12 will encompass. These are pipeline state objects, command lists and bundles, and descriptor heaps and tables. Matt describes these in a cursory, but effective manner. I am afraid that I cannot compress the information any more than what he has done in his blog. For a more detailed description, definitely look at his post.
I can try to summarize what Microsoft is aiming at with DX12, however. Essentially the rendering pipeline in DirectX did a lot of the work for engines and applications, but did not exactly do so efficiently. This high level abstraction of operations allowed for great portability because DX handles a lot of the low level work. Unfortunately, one of the big issues is that the device driver has to wait for certain operations and state changes to occur before it can complete the current operation and submit more work. The big hit comes with draw calls, which are negatively impacted by the relatively inefficient abstraction layer and driver interactions. IHVs, like NVIDIA and AMD, work around this on a case by case basis, as is seen by the very frequent driver updates which improve performance (sometimes dramatically) for individual applications that have been recently released.
DirectX 12 will allow for some interesting work to go on in the background. It will permit a much more low level of control of the hardware device from applications. The really smart guys who design engines (Andersson, Sweeney, Yerli, etc.) can really optimize their engines to extract the greatest (or nearly greatest) amount of performance out of any hardware configuration. They can control memory addresses for data assets directly, rather than having to ask DirectX to translate these addresses and handle all memory transactions. This results in a lot of extra performance, but it is very intensive in terms of programming prowess and manpower. Not every game developer has programmers that can handle that type of workload, and so they rely on engine level optimizations to achieve good performance.
What exactly a lower level API such as DX12 (and theoretically mantle) will provide for developers and IHVs.
Even if a game developer does not institute lower level hardware control, the lower driver overhead and increased multi-thread aware software stack in DX12 will still allow for greater overall performance than what was seen in DX11. A licensed engine which is developed for DX12 will still institute many low level operations that will take advantage of the much slimmer abstraction layer separating software from the driver/hardware.
Almost all DX11-compliant hardware will work in DX12 (the Radeon HD 5000 and 6000 series excepted). These performance advantages will be applicable to current hardware, so users do not have to upgrade to see the benefits. Unfortunately, they will still miss out on all the other features, requiring new hardware that will be designed specifically for DX12. Considering that the first DX12 titles are not expected out until the Holiday season of 2015, there will be plenty of chances (and reasons) to upgrade before that time.
So what will become of Mantle? AMD’s competitors believe that most development and porting engines over to Mantle will stop due to the (not so) impending release of DX12. Personally, I think that quite the opposite will happen. I believe we will see a few more developers start nosing around Mantle, not only for what performance advantages they can see from that API, but also to get their programmers experienced in going that close to the metal. Porting from Mantle to DX12 should be relatively straight forward, due to the similar ways these APIs address hardware. They certainly are not identical but, according to what we are hearing from developers, they are similar. For AMD, Mantle allows them to more adequately tune drivers so that, when DX12 finally hits, they also have that experience under their belt. Driver development for DX12 also takes a load off of the IHVs. While performance improvements will continue through time, the onus of providing much of that performance through specialized drivers will be taken away from the IHVs.
Microsoft hinted a few more upcoming features for DX12 that will not see the light of day until 2015. IHVs are likely quite pleased, as they can offer new and improved hardware to encompass these features.
DirectX 12 is a much needed improvement to the line. It has been four years since DX11 was released with two minor iterations in that time. We have seen the rise of extreme programmability and parallelism that requires new thinking on the software side in order to harness that type of horsepower. My guess is that DirectX 12 will improve general computing in GPUs and APUs to a great degree as compared to what we have seen with DX11 and DirectCompute. The ball has been rolling for some time, but now that the industry has seen the advances that DX12 brings to the table, I am sure it will lead to some interesting developments on both the hardware and software sides. Good times await enthusiasts of this industry.