Direct3D 12 Overview Part 1: 'Closer To The Metal'

At GDC 2014 Microsoft announced what can be considered the most exciting news for PC Gaming in 2015. The next iteration of Direct3D, version 12. D3D12 is a return to low level programming, it will give more control to game developers and introduce many new exciting features. The D3D12 development team is focused on reducing CPU overhead and increasing stability across CPU cores. The goal with D3D 12 is “Console API efficiency and performance”. Modern console games are able to more effectively use all CPU/GPU cores available to them with great results. In the world of PC gaming Thread 0 often does most, if not all the work while the other threads only handle other OS or system tasks. Few truly multithreaded PC games exist. Microsoft wants to change that with D3D 12. It is a superset of D3D 11 rendering functionality. This means modern GPUs can run D3D 12 as it will make more effective use of the multi core CPUs and GPUs that exist today. No need to spend money on a new GPU to get the advantages of D3D 12. Add in the exciting Intel roadmap and the future of PC Gaming on Intel is very bright indeed! Not just PC gaming though, D3D 12 targets the XBOX One, laptops, tablets and phones! But I am getting ahead of myself…


Blast from the Past:

Low level programming is common in the console industry. After all, the specification of each console are fixed. There is no need to worry about countless configuration permutations. Game developers can take time to fine tune their games and squeeze all the power and performance they can out of the XBOX One or Playstation 4. PC’s by their nature are a flexible platform. The end user can choose discrete or integrated graphics and sound. Hundreds of SKUs exist for each CPU and GPU. Enthusiasts build their own cases and add water cooling so they can overclock their PCs for peak performance. Others build mid-range systems or buy off the shelf. Take a trip to Fry’s Electronics or visit and you find pages and pages of options. Buy from Lenovo or Dell online and you still have so many choices.  That is a lot of options, and many permutations to plan for when developing a new game. So we have high level APIs like OpenGL and Direct3D to simplify development. The API can do a lot of the heavy lifting and the developer can focus on their game. Problem is the API and to a slightly lesser extent the drivers have reached such a level of complexity that they are getting in the way and with that comes a performance cost, we will get to that later. That is where low level programming comes into play.

Low level programming on PCs died off when the MS-DOS era ended and vendor specific APIs, like 3DGlide by 3DFX, soon followed. We lost performance in the name of much needed convenience and flexibility. The hardware market had grown too big, with too many options. Development time was increasing not because the developers were adding more content, butto  simply make sure anyone who bought their product could play it.  It is not just the software side that has changed. On the CPU, side power efficiency has overtaken performance and speed in importance. We do not see the huge leaps in performance generation over generation anymore, hardware designers are focused on low power. Instead of focusing raw GHz now multiple cores and threads in CPUs and the modern GPU’s use of parallel rendering are where the future performance gains lie. It is time for PC gaming to look to console gaming for direction. It is time to make better, more efficient use of all those cores and threads. It is time for PC gaming to enter the 21st century.


Closer to the Metal:

We need to bring the game closer to metal, by that I mean we must reduce the size and complexity of the API and the driver. There should be fewer layers between the hardware and the game itself. The API and driver spend too much time translating commands and calls. Some, if not most, of that control will be given back to the game developer. Reduced overhead by D3D 12 will improve performance, fewer layers between the game and GPU hardware will mean better performaning and looking games that more easily take advantage of all the great hardware on the market today, and in development for tomorrow. There is another side to this of course. Some developers may not want the control over things the API used to deal with, such as GPU memory management. Perhaps that is where the game engine developers come in, such as EPIC and DICE. In the end only time will tell. As the release of D3D 12 is still a ways off there is plenty of time to figure that part out. So all these great promises, but how will it be accomplished? The 4 primary new features are called the Pipeline State Object, also Command Lists, Bundles & Heaps. Each of these features will be covered in greater detail in the next parts of my D3D 12 series.

For more complete information about compiler optimizations, see our Optimization Notice.