As we’ve established by now, Microsoft certainly aren’t the first to offer a low level API solution to PC developers, and likely won’t be the last (don’t be surprised when we hear the OpenGL low level announcement). DirectX 12 will almost certainly have the largest impact on PC games developers for a plethora of different reasons, despite it coming out almost 18 months from now, some two years after AMD’s Mantle API.
We’ve previously discussed the new featured of DirectX 11, and because D3D 12 will be cross vendor compatible, owners of AMD, Nvidia or Intel will all enjoy the benefits of the API. Despite Mantle offering fantastic performance boosts, it being relegated only to AMD cards does make it a little harder for games developers to justify the extra optimization time. Don’t get me wrong – Mantle has had a fantastic impact in the PC industry, and already has engines like Frostbite and Cryengine with announced support, but Direct3D and Windows (like it or not) are a standard in PC gaming.
Although Microsoft haven’t stated so, there’ll certainly be a ‘higher level’ API path buried inside DX12, allowing developers to code titles with less focus on getting down and dirty with the code and instead focus on the games. At first thought, that might sound like a bad thing – encouraging poorly optimized titles, however it is likely to be a necessary requirement, particularly for the Indie game developers.
The AAA game developers studios who put out titles like Crysis and Battlefield 4 can afford the programming and optimization time to go the lower level route (and Microsoft’s DX12 for Windows PC sharing a lot of similarities with Xbox One isn’t a bad thing either as we’ll discuss). More so, the developers of these bleeding edge title would be using up a lot of draw calls, pushing huge textures, and requiring the optimizations low level API’s potentially provide. But what if you’re a smaller studio, developing titles titles such as Super Meat Boy or Limbo? You’ll certainly not have the requirement to optimize your titles for PC, given the ludicrously low hardware requirements to run the titles anyway.
DirectX 12 is there to offer optimization and control through choices and options for game developer, not to force it upon them. This is similar in concept to console game development such as the PS4. Where you’re offered two API’s – one low level and a higher level. GNM on the PS4 provides super low level access to the GPU – allowing you to code to metal, but if you don’t require that level of performance of optimization, or you’re simply putting the game together initially and want to test it out then you’ve got the option of using GNMX API (ironically, GNMX shares a lot of similarities with Microsoft’s own D3D11).
So in other words – higher level coding and API’s aren’t going to be pushed to the wayside just yet. With the recent introduction of the licensing monthly fees of both Cryengine and Unreal Engine, along with other popular game engines become ever more integrated – it’s likely we’ll see a lot of low level optimizations already implemented as is. It’ll be interesting however if Mantle still manages to slightly outperform D3D12 in applications were both are offered as API solutions. In theory it’s possible, since D3D12 would presumably still have some level of abstraction (as we’ve discussed previously, there are still differences between Intel, Nvidia and AMD’s respective GPU’s architectures after all).
Xbox One and DirectX 12 – Marketing or Performance Boost?
You might recall back to the initial announcement Microsoft would unveil DX12 at GDC 2014 and it would be a low level API, and that the Xbox One’s logo was front and center. It was fairly obvious that Microsoft had intended to bring the API to their now flagship console – and sure enough, at GDC the announcement was made. Immediately there were two theories which popped up – either this was Microsoft promoting PR spin for their new console and we’d see little to no real world benefit or the reverse and DX12 would be a revolution. The truth as is often the case is likely to fall between these two extremes.
Firstly to tackle the PR side of things, the Xbox One is fairly new. By the time Microsoft release DX12 the console will be around two years old (give or take a month or two), and unlike PC gamer’s, console gamer’s fully expect their purchase to remain ‘new technology’ for a long time. PC gamer’s are used to a new CPU or GPU being released 18 months later which is a complete upgrade, console gamer’s aren’t. It’s fair to say that quite a few people wouldn’t be happy if the Xbox One didn’t support DX12 – even if (for sake of argument for a moment) the GPU / hardware can’t really take full advantage of it, either from the standpoint of performance or features.
From Microsoft’s perspective, in many ways they’d little choice but to release DX12. Mantle is starting to gain ground, and it’s likely we’ll see OpenGL embrace low level at some point soon (there’s already rumors after all). In a future where Linux being pushed hard by Valve and OpenGL being the best way to code for performance, it’s possible that Microsoft could start losing ground with PC gamer’s. More over, a simpler and easier time of porting games from PC to the Xbox One (and vice versa) is only going to help them in the long run put more game’s on their systems.
The Xbox One is far closer to PC hardware than the Xbox 360, its hardware a low power X86-64 multi-core CPU (the AMD Jaguar) and an AMD Radeon GCN based GPU on an AMD SoC. Indeed, it’s fair to say that in some ways the X1 is closer to the original Xbox’s design than the X360. The Xbox One according to Microsoft uses DX11.x (we’re not exactly sure of the DX11 version – there are theories which say it’s 11.1 and others 11.2), but with some subtle adjustments. For a start, it has had numerous optimization’s and lower level access built in – Microsoft’s are still working to improve their SDK’s (as Sony are with the PS4). Additionally, Microsoft have of course added support for the Xbox One’s custom components such as the eSRAM and the Data Move Engines which are critical for the Xbox One’s performance.
There are arguments that due to these optimization’s already existing, and we’d presume some level of control to the multi-core rendering on the Xbox One’s CPU, that we’ll see less performance increase from the X1’s inclusion of D3D12 than the PC. After all, the PC has far worse optimization to work with than the Xbox One, Microsoft are stating that we could see up to 50 percent improvement in CPU performance (with multi-threading) on PC. Whether we’ll see these results mirrored on the Xbox One remains to be seen, but smart money is the results will show improvement, but not as large in terms of percent of increase as the PC, because of the difference in architecture between the platforms.
With that said, there are improvements to the other parts of the API, these include improved Command & Buffer lists, Pipeline State Objects (although you might wish to get used to the acronym PSO), descriptor heaps and more features that are yet to be announced as yet.
With the Playstation 4 we know that it’s fairly common practice to have an orchestrator thread which runs on core zero and sets up the jobs for the other five CPU cores available to the game engine (remember, out of the eight cores of the Jaguar, two are OS reserved – this goes for both the PS4 and the Xbox One). Fairly common when it comes to optimization – with Guerrilla games and Naughty Dog have shown off their respective PDF’s demoing this very thing. It’s likely that the Xbox One features very similar methods of optimization.
If we’re going to take a ‘broad’ way to look at this – the introduction of a new API isn’t going to change the Xbox One’s hardware specs. The GPU is still going to be considerably slower than its rival (currently the PS4, although who knows if Nintendo will announce their new system by the time DX12 is ready), and the memory system still slower and more complicated. The eSRAM is likely to prove quite the bottleneck for certain tasks, and the fill rate situation caused by lack of ROPs has already been the subject of discussion. If DX12 does push the X1’s performance numbers up, it’ll likely still fall behind the PS4. The PS4’s hardware specs have too much of a raw advantage – and remember Sony aren’t going to sit back and just be content with the PS4’s performance for its API / SDK. Like Microsoft they’re pushing their tools and development kits to the limits. That’s not to say that Microsoft’s efforts are in vain – any extra performance is great, and extra compatibility as we’ve mentioned in this very article is a huge plus.
One thing is for sure – it’s still way to early to make a conclusion on D3D 12 and DX 12 as a whole – but it’ll likely be one of the largest changes for PC gaming in a long time. Whether it has a similar affect (at least in terms of performance) for the Xbox One however, remains to be seen.