At the Game Developers Conference this year, Microsoft pulled back the curtain on Direct3D 12, the first major update to its graphics APIs since 2009. The company announced some pretty big changes, including support for a lower level of abstraction and compatibility with not just Windows, but also Windows Phone and the Xbox One. This will be the first version of Direct3D to unify graphics programming across all of Microsoft's gaming platforms. It may also be the first version of Direct3D to eke significant performance gains out of current hardware.
I already covered some of those developments in a couple of news posts during the GDC frenzy. Now that I'm back home with all my notes from various sessions and meetings with Microsoft and GPU vendors, I can go into a little more detail. In this article, I'll try to explore Direct3D 12's inception, the key ways in which it differs from Direct3D 11, and what AMD and Nvidia think about it.
First, though, let's straighten something out. We and others have occasionally referred to Microsoft's new API as DirectX 12, but what premiered at GDC was technically Direct3D 12, the graphics component of DirectX 12. As Microsoft's Matt Sandy wrote on the official DirectX blog, DirectX 12 will also encompass "other technologies" that "may be previewed at a later date," including "cutting-edge tools for developers." That's probably why we haven't heard anything about, say, the next version of DirectCompute. The news so far has centered solely on Direct3D.
Now that that's all cleared up, let's take a closer look at Microsoft's new graphics API—starting with a little history.
Direct3D 12's inception
Given the way Microsoft has presented Direct3D 12, it's hard not to draw parallels with AMD's Mantle API. Mantle was introduced last September, and much like D3D12, it provides a lower level of abstraction that lets developers write code closer to the metal. The result, at least in theory, is lower CPU overhead and better overall performance—the same perks Microsoft promises for D3D12.
The question, then, almost asks itself. Did AMD's work on Mantle motivate Microsoft to introduce a lower-level graphics API?
When I spoke to AMD people a few hours after the D3D12 reveal, I got a strong sense that that wasn't the case—and that it was developers, not AMD, who had spearheaded the push for a lower-level graphics API on Windows. Indeed, at the keynote, Microsoft's Development Manager for Graphics, Anuj Gosalia, made no mention of Mantle. He stated that "engineers at Microsoft and GPU manufacturers have been working at this for some time," and he added that D3D12 was "designed closely with game developers."
I then talked with Ritche Corpus, AMD's Software Alliances and Developer Relations Director. Corpus told me that AMD shared its work on Mantle with Microsoft "from day one" and that parts of Direct3D 12 are "very similar" to AMD's API. I asked if D3D12's development had begun before Mantle's. Corpus' answer: "Not that we know." Corpus explained that, when AMD was developing Mantle, it received no feedback from game developers that would suggest AMD was wasting its time because a similar project was underway at Microsoft. I recalled that, at AMD's APU13 event in November 2013, EA DICE's Johan Andersson expressed a desire to use Mantle "everywhere and on everything." Those are perhaps not the words I would have used if I had known D3D12 was right around the corner.
The day after the D3D12 keynote, I got on the phone with Tony Tamasi, Nvidia's Senior VP of Content and Technology. Tamasi painted a rather different picture than Corpus. He told me D3D12 had been in in the works for "more than three years" (longer than Mantle) and that "everyone" had been involved in its development. As he pointed out, people from AMD, Nvidia, Intel, and even Qualcomm stood on stage at the D3D12 reveal keynote. Those four companies' logos are also featured prominently on the current landing page for the official DirectX blog:
Tamasi went on to note that, since development cycles for new GPUs span "many years," there was "no possible way" Microsoft could have slapped together a new API within six months of Mantle's public debut.
Seen from that angle, it does seem quite far-fetched that Microsoft could have sprung a new graphics API on a major GPU vendor without giving them years to prepare—or, for that matter, requesting their input throughout the development process. AMD is hardly a bit player in the GPU market, and its silicon powers Microsoft's own Xbox One console, which will be one of the platforms supporting D3D12 next year. I'm not sure what Microsoft would stand to gain by keeping AMD out of the loop.
I think it's entirely possible AMD has known about D3D12 from the beginning, that it pushed ahead with Mantle anyhow in order to secure a temporary advantage over the competition, and that it's now seeking to embellish its part in D3D12's creation. It's equally possible AMD was entirely forthright with us, and that Nvidia is simply trying to downplay the extent of its competitor's influence.
In any event, as we're about to see, D3D12 indeed shares some notable similarities with Mantle. More importantly, it delivers something developers seem to have wanted for some time: a multi-vendor Windows graphics API that offers a console-like level of abstraction. Whatever part AMD played, it seems developers and gamers alike stand to benefit.