As promised Microsoft explained what they had planed for DirectX 12 at this years GDC but what does it all mean for the average DirectX programmer?
The first thing to say is that while DirectX is a collection of different multimedia APIs Microsoft only wanted to talk about Direct3D. This isn't unreasonable as Direct3D is the one most used but if you are concerned about one of the other DirectX technologies you are simply going to have to wait until there is some news.
As to Direct3D it is difficult to get a clear picture of what is going on from the blizzard of marketing speak and hyperbole. You can be assured that the new Direct3D is:
"...faster and more efficient than ever before. "
and it will enable:
"...richer scenes, more objects,"
"...full utilization of modern GPU hardware. "
Well they would say that wouldn't they.
However in this case they have some benchmarks to back the otherwise platitudinous statements.
The following chart shows DirectX 11 v DirectX 12 on 3DMark:
You can see that DirectX12 balances the workload between threads better and gets home first. What makes this possible is difficult to say at anything more than a top level view:
"... it provides a lower level of hardware abstraction than ever before, allowing games to significantly improve multithread scaling and CPU utilization. "
So how much work is involved in getting the speed up?
How hard do you have to try in manually balancing resources and thread use to get the best out of the new system.
Other improvement are similarly expressed in vague terms:
"Direct3D 12 also introduces a set of new rendering pipeline features that will dramatically improve the efficiency of algorithms such as order-independent transparency, collision detection, and geometry culling."
Again yes, you would expect this sort of improvement but you don't get much feeling for changes that would be important to the average DirectX programmer.
The changes that are described are very low level and involve working with the GPU pipeline and the low level code that feeds it. Some have been comparing the new features to those in AMDs Mantle graphics alternative but convergent evolution is natural and so much easier when you have an idea of what already works.
For example the introduction of immutable pipeline state objects allows the hardware to convert them to GPU code much earlier than under DirectX 11 where objects could be changed right up to the draw time. The result is that you can get more draw calls per frame - but how much recoding does this involve?
Also new are command lists and bundles which package up sets of commands so that there is no inherited state. This makes it possible for the system to pre-compute everything before submitting it to the GPU. To allow reuse bundles of commands can be defined and "played back" to create custom lists of instructions.
Clearly these changes are only going to be used by DirectX programmers who want to get on personal terms with the GPU and resource allocation. In other words this is exciting stuff for the top end games programmer but many DirectX programmers are going to be some way from this level of working.
There is also the small matter of the fact that they actually have a benchmark.
How complete is DirectX 12?
We only got wind of it a week or so ago but it seems to be developed enough to have demo programs in the form of Forza Motorsport 5. DirectX 12 is still referred to as an alpha and it isn't supposed to make an impact until late 2015 but it seems to be a fairly functional alpha.
It is also claimed that about 80% of new machines selling today targeting games will be suitable for DirectX 12. Specifically supported GPUs are HD7000 and greater, NVIDA Fermi, Kepler and Maxwell. Microsoft also claim that DirectX 12 will be supported on all platforms - The XBox, Windows, Windows RT and Phone. It isn't clear if all features will be supported on all platforms.
A more interesting question is whether or not DirectX 12 will be made available for Windows 7? It will target Windows 8 but given the time line it also looks as if it could be a major component in Windows 9. Microsoft has a habit of restricting new technology to the latest OS to make sure you have a reason to upgrade.
There doesn't seem to be much on offer at the moment in DirectX 12 for the average programmer using DirectX. No mention of a reprieve of XNA and not word on any official managed wrapper - both of which would make DirectX much easier to use and benefit many more programmers.