Taking it all the way to 12!

Microsoft exposes low level functionality in the latest DX iteration

Microsoft has been developing DirectX for around 20 years now.  Back in the 90s, the hardware and software scene for gaming was chaotic, at best.  We had wonderful things like “SoundBlaster compatibility” and 3rd party graphics APIs such as Glide, S3G, PowerSGL, RRedline, and ATICIF.  OpenGL was aimed more towards professional applications and it took John Carmack and iD, through GLQuake in 1996, to start the ball moving in that particular direction.  There was a distinct need to provide standards across audio and 3D graphics that would de-fragment the industry and developers.  DirectX was introduced with Windows 95, but the popularity of Direct3D did not really take off until DirectX 3.0 that was released in late 1996.

DirectX has had some notable successes, and some notable let downs, over the years.  DX6 provided a much needed boost in 3D graphics, while DX8 introduced the world to programmable shading.  DX9 was the most long-lived version, thanks to it being the basis for the Xbox 360 console with its extended lifespan.  DX11 added in a bunch of features and made programming much simpler, all the while improving performance over DX10.  The low points?  DX10 was pretty dismal due to the performance penalty on hardware that supported some of the advanced rendering techniques.  DirectX 7 was around a little more than a year before giving way to DX8.  DX1 and DX2?  Yeah, those were very unpopular and problematic, due to the myriad changes in a modern operating system (Win95) as compared to the DOS based world that game devs were used to.

Some four years ago, if going by what NVIDIA has said, initial talks were initiated to start pursuing the development of DirectX 12.  DX11 was released in 2009 and has been an excellent foundation for PC games.  It is not perfect, though.  There is still a significant impact in potential performance due to a variety of factors, including a fairly inefficient hardware abstraction layer that relies more upon fast single threaded performance from a CPU rather than leveraging the power of a modern multi-core/multi-thread unit.  This has the result of limiting how many objects can be represented on screen as well as different operations that would bottleneck even the fastest CPU threads.

Since the release of DX11, there had been very little word from Microsoft about what the next generation DX would bring.  In fact, there had been rumors that MS had put all development on the back burner for DirectX.  The focus was making the new Xbox One as competent as possible with its own version of DX11.  Now, I do not have any inside information about how the development of DX12 proceeded during these years, but I do think it is rather obvious that it was not a priority.  DX11 was doing great, there was very good support for it from the PC side, and DX9c was available to most mobile devices.

Things do not always go as planned.  The Xbox One has some performance issues as compared to the PS4.  Promises that Microsoft made to developers about the capabilities of the XBOne seem to have been far too optimistic for what was actually delivered.  It was likely during final development, with working silicon and the basic OS installed, that Microsoft realized they had some serious issues on their hands.  The APU being used for that console contains eight cores running at lower speeds than even what a modern, low-end PC exhibits.  With the single core/thread bias that DX11 exhibits, performance for the XBOne is not going to blow the doors off the competition.  While MS and AMD have done quite a bit of optimizing at the OS level for the XBOne, there are still many improvements to be made.  Consoles typically can be programmed for much closer to the metal than a PC, due to the hardware for that console being locked down and identical to every other XBOne out there.  It is still a DirectX development platform though, and that means DX11 is the basis for what we see.

3D Mark 2011 in DX11 mode shows the bias towards single thread usage.  Other threads are utilized, but not greatly so.

The PS4 is in a slightly different scenario with its reliance on PSGL.  PSGL is nearly identical to OpenGL, but custom tailored by Sony for the Playstation.  Sony has been able to move a bit closer to the metal than what Microsoft has, because Sony is not constrained by a more general programming environment that Microsoft is with DirectX 11.  We really can only make some general guesses as to what actual performance is on the PS4 vs. the XBOne, but the PS4 does have a far more robust implementation in terms of hardware than what Microsoft does.  It will be interesting to see more concrete performance figures from these consoles once more cross-platform titles become common.

Next we need to ask ourselves where AMD’s Mantle comes in.  With the launch of the R9 290X, AMD also introduced us to TrueAudio and Mantle.  We do not know what Microsoft’s internal schedule was for DirectX 12, but the feeling around the industry was that the release of Mantle helped to accelerate work on that project.  Undoubtedly, Microsoft learned of AMD’s work on Mantle by at least the Spring of 2013.  At that point, Microsoft started to work earnestly with its partners to begin fleshing out DX12 and get some basic support for it in software and drivers to announce it at GDC this year.

So did Mantle motivate Microsoft to create DX12?  No, that project has been in the works for quite some time, but I think that we can safely say that Mantle and the XBOne have helped to accelerate the process beyond what Microsoft had originally planned for.  This is only speculation on my part, but my gut feeling is that Microsoft was planning to wait a few years before releasing DX12, and when they did then they could advertise a mid-life performance boost for the XBOne on titles developed for DX12 and that console in particular.  The industry does not stand still, and AMD’s push with Mantle may have forced Microsoft’s hand more than they would have liked.  Obviously AMD and NVIDIA were not pleased at what appears to be a glacial pace for DirectX development since the release of DX11, but AMD took it into their own hands to offer an alternative which would also accentuate their brand.  Add in Microsoft’s challenges in the mobile market (Surface, Windows Phone) and it is clear that they needed more inertia to capture a larger portion of these growing spaces.  DirectX 12 should help provide some of that inertia.

3D Mark 2011 in DX12 mode shows much greater multi-thread awareness as well as utilizing that single thread less, and causing less CPU time to be used on that thread.  Less time spent means more potential frames rendered when not GPU bound.

AMD does not want to have to curate an API.  That is quite honestly a waste of resources for AMD in the long term.  Well defined industry standards allow these IHVs to focus on their products rather than gather support for a home-built API.  However, with the original timeline for DX12, AMD saw an opportunity to push these features as an exclusive for their hardware, thereby potentially increasing sales and support before the standardized DX12 is released.  This also has the added advantage for AMD of exposing developers to a more low level, close to the metal API that will benefit both the developer and AMD.  In the short term, these developers gain experience in programming that will reap benefits once DX12 is released. In the meantime, AMD gets a nice checkbox on their products for exclusive support of Mantle.

« PreviousNext »