It’s been a few years since Microsoft introduced DirectX 12, and there’s a new set of console introductions coming this fall, so the time is ripe for the unveiling of a new DirectX version. Microsoft has just launched DirectX 12 Ultimate, an extension and unification of various DX12 features that should serve as a common capability reference for new products and consoles.
GPUs labeled as supporting DirectX 12 Ultimate will offer the following capabilities:
DirectX Raytracing
Variable Rate Shading
Mesh Shaders
Sampler Feedback
GPUs that can’t provide all of these capabilities will continue to be sold as DirectX 12 GPUs, not DirectX 12 Ultimate cards. None of the capabilities above are new — Nvidia introduced the first GPUs with DX12 raytracing support back in 2018 — but they aren’t supported across modern GPU families.
More of a Point Update
The way DirectX 12 Ultimate functions is more like a point update than a completely new API version. Just because a game supports DirectX 12 Ultimate doesn’t mean your existing DX12 card won’t run it — you just won’t have access to that common group of features.
The reason Microsoft is doing this, I suspect, is because there are now significant new features in DX12 that aren’t really “attached” to the standard. This would be equivalent to a DirectX 12_2 feature level, except Microsoft has decided to throw new branding around the concept and go with DX12U.
In this case, Nvidia has a leg up on other GPU families, with support for these features already baked into Turing. At this point, however, gamers would be better off waiting to see what Ampere brings to the table rather than buying into Turing if the goal is longevity and maximum feature support — everything Turing can do in these regards, Ampere will obviously be able to do better. Anandtech has put together a table showing how the major GPUs from AMD, Nvidia, and Intel compare:
According to AMD, all new Navi 20 GPUs coming in 2020 will support DirectX 12 Ultimate.
Specific Features
First, we’ve got DirectX raytracing 1.1: Going forward, developers will be able to create raytracing tasks that run directly on the GPU without invoking the CPU. Streaming engines will now be able to load raytracing shaders more efficiently, and there’s a new “inline” raytracing feature that gives the developer more control over the RT process. Microsoft writes:
Scenarios with many complex shaders will run better with dynamic-shader-based raytracing, as opposed to using massive inline raytracing uber-shaders. Meanwhile, scenarios that have a minimal shading complexity and/or very few shaders will run better with inline raytracing.
If the above all seems quite complicated, well, it is! The high-level takeaway is that both the new inline raytracing and the original dynamic-shader-based raytracing are valuable for different purposes.
Variable-rate shading is a feature we’ve discussed before. It allows the GPU to dedicate more resources to the most important areas of a game (visually speaking) and reduces detail level in areas where you are unlikely to notice it. Mesh shaders have been described as “compute shaders for geometry.” Here’s how Microsoft describes them:
Prior to mesh shader, the GPU geometry pipeline hid the parallel nature of GPU hardware execution behind a simplified programming abstraction which only gave developers access to seemingly linear shader functions… Mesh shaders change this by making geometry processing behave more like compute shaders. Rather than a single function that shades one vertex or one primitive, mesh shaders operate across an entire compute thread group, with access to group shared memory and advanced compute features such as cross-lane wave intrinsics that provide even more fine grained control over actual hardware execution.
This should remove substantial overhead from geometry processing and allow for the creation of more detailed objects and scenes. Microsoft’s blog post has additional details on how they expect this advance to simplify GPU programming. Geometry culling should also be more efficient — mesh shaders basically add a mid-step cull between the coarse (per-mesh) and fine (per-triangle) culling performed in the existing geometry pipeline. The one catch? Implementing mesh shaders would probably require a game to be written for DX12U hardware and above, meaning we won’t see those kinds of titles until the standard is established as the expected baseline.
These are features and capabilities we’ll see rolled out over time, but with ray tracing debuting on consoles and AMD GPUs for the PC market, we should start to see increased uptake of that feature, at least, in 2021 – 2022. If you don’t have a DX12U card, there’s no reason to worry — you’ll be fully compatible with games for quite some time yet.
Microsoft Unveils DirectX 12 Ultimate, Its Next-Generation API - ExtremeTech