DirectX 12 – ExecuteIndirect Command Further Improves Performance & Greatly Reduces CPU Usage

At GDC 2015, Microsoft revealed a new, complete indirect dispatching draw solution that can be used by all DX12 hardware from Feature Level 11 and up. This new draw solution replaces DX11’s DrawIndirect and DispatchIndirect, and brings major performance improvements to the already incredible performance that DX12 can achieve.

In addition, ExecuteIndirect can perform multiple draws with a single API call, and gives the ability to both the CPU and the GPU to control draw calls. Not only that, but ExecuteIndirect can even change bindings between draw calls.

Max McMullen, Principal Development Lead for Direct3D and DXGI at Microsoft, demoed Intel’s Asteroids benchmark in order to show the performance difference between DX11 and DX12, as well as DX12 Bindless and DX12 ExecuteIndirect.

As we can see below, DX11 ran the demo with only 29FPS.

DX11-Asteroids

By simply switching to DX12, the framerate was almost tripled as the benchmark was running with 75FPS. Naturally, CPU usage was increased.

DX12-Asteroids

Via bindless mode, DX12 can pre-bake all the textures used by the asteroids, thus offering a slight performance boost (79FPS). In case you’re not aware of, DX12’s “bindless resources” is a major efficiency improvement in how the GPU is running, making sure it’s not stalling waiting for the CPU to tell it about some of the changes that are needed.

DX12-Bindless-Asteroids

Lastly, via Execute Indirect, Intel’s Asteroids demo ran with almost 90FPS. What’s really great here, however, is that the CPU usage was reduced significantly, meaning that more CPU intense scenarios will be possible via this rendering method.

DX12-ExecuteIndirect-Asteroids

All in all, DX12 is surely a great API that aims to bring huge performance improvements to all PC configurations. It remains to be seen now whether developers will be able to take advantage of this new API or not!