Direct3D feature levels discussion


GPU Work Graphs: A Great Day for GPU Programmability


AMD said:
If you’re a graphics programmer, today is going to be an exciting day for you: Microsoft® has just released a new DirectX® graphics API called Work Graphs as part of the DirectX Developer Preview today. This API enables you to perform very fine-grained scheduling on graphics cards, which can help you overcome problems previously unachievable for GPU processing and has been a major ask from the graphics community for many years now. For example, complex scene traversal and highly adaptive algorithms can now be implemented more efficiently. Additionally, many algorithms which previously required heroic efforts to get running on the GPU can now be easily expressed in this new API.


D3D12 Work Graphs Preview


MS DirectX Team said:

Introduction to work graphs​

Work graphs are a system for GPU autonomy in D3D12. Given the increasing prevalence of general compute workloads on GPUs, the motivation is to address some limitations in their programming model, unlock latent GPU capabilities, and enable future evolution.

To start, here are some words on the potential:

Epic Games has been searching and advocating for a better solution to the GPU generated work problem for a while now. UE5 rendering features such as Nanite and Lumen are hitting the limits of the current compute shader paradigm of chains of separate dispatches issued by the CPU.
Work graphs directly address that problem in a way that not only allows us to do things we previously could not but also enables us to do them in ways that should be far easier to write. We have already started exploring how we can optimize our current features with work graphs and are excited about what possibilities they could unlock in the future.

— Brian Karis, Epic Games
This is very much a preview, with reasonably functional drivers available now.

The current state reflects a lengthy collaboration between Microsoft and hardware vendors as well as developer input. Looking forward longer term, there should also be a lot of improvement both in software and hardware.
 
Last edited:
D3D12 Work Graphs API is an 'official solution' to Nanite's hierarchal culling optimization where waves push some data into a queue data structure with atomics which is considered to be a bad idea since there's no guarantee that putting thread to sleep won't deadlock the GPUs ...


Epic Games are relying on the observation that once a wave becomes active on a CU/SM, forward progress is guaranteed for their duration of execution. Some define this forward progress model to be "occupancy bound execution" ...
 
I’m guessing that this work graphs model effectively kills mesh shaders?

Also this is probably bad for steam deck until Vulcan adds an analogous extension, though I expect that’ll happen fairly quickly.
 
Last edited:
I’m guessing that this work graphs model effectively kills mesh shaders?

Also this is probably bad for steam deck until Vulcan adds an analogous extension, though I expect that’ll happen fairly quickly.
Notes: https://github.com/microsoft/Direct...s.md#graphics-nodes-execution-characteristics
  • Draw order: The order of Draw*/DispatchMesh calls is undefined. Invocations of multiple concurrent graphics nodes (or any nodes in the work graph) have no ordering relative to each other. Similarly, draw calls sent to a single graphics node (like any node in a work graph) may be reordered.
A major limitation of graphics nodes (not supported yet) is that draw order isn't respected compared to the graphics pipeline. Indeterminate rendering artifacts that appear with work graphs may not appear on the graphics pipeline ...
Also this is probably bad for steam deck until Vulcan adds an analogous extension, though I expect that’ll happen fairly quickly.
It is potentially bad news for translation layers. The early assessment from Valve developers is that have no way of emulating this functionality in Vulkan ...

It might or might not depending on how much bike shedding the other vendors decide to do. The other hardware vendors besides AMD don't seem too enthusiastic about the feature and AMD doesn't really do vendor extensions for Vulkan often either ...
 
Sounds really promising. Finally the PC gets some of that secret sauce goodness!
You think this is available on console
Already?

I wouldn't think it is. They likely knew it was coming however. Which may explain some things. I thought I saw mention that it would be supported RDnA 2 and up, but perhaps I was too tired and read wrong.


You will also need a graphics card which supports GPU Work Graphs (an AMD Radeon™ RX 7000 Series Graphics Cards) and an AMD driver which supports GPU Work Graphs, which can be acquired here.

Nice to see they will pull this feature over from console:
We are continuing to partner with Microsoft and developers to bring you further extensions and improvements to the API. For example, we plan to add the ability to issue draw calls (with PSO changing!) directly from Work Graphs.
 
Last edited:
The only one seemingly overly excited for this development seems to be AMD, at least for now, Intel and NVIDIA are suspiciously absent. They have no drivers, no press statement or blog announcement, what gives?
 
The only one seemingly overly excited for this development seems to be AMD, at least for now, Intel and NVIDIA are suspiciously absent. They have no drivers, no press statement or blog announcement, what gives?

While Intel and Nvidia haven't released much press regarding GPU Work Graphs they collaborated with Microsoft during the planning phase. Sounds like AMD and Nvidia have drivers while Intel will support in the future.
AMD, NVIDIA, Intel and Qualcomm have all helped with the work graphs design. Here is the status on driver availability:

[*]AMD: A preview AMD Software: Adrenalin Edition™ driver showcasing the AMD implementation of the current Work Graphs API for AMD Radeon™ RX 7000 Series graphics cards can be downloaded here. See how AMD worked with Microsoft and the developer community to bring Work Graphs to life here and when you’re ready to try this for yourself you can read the corresponding AMD GPUOpen Programmer’s Guide to Work Graphs here.
At AMD we are incredibly excited to see the Work Graph API finally in the hands of developers. After multiple years of effort and collaboration, it’s great to see this release realized and we can’t wait to hear about what you’ll will accomplish with these new capabilities. We strongly encourage you to give it a try today and look forward to hearing your feedback!
Mike Mantor, Chief GPU architect and Corporate Fellow


[*]NVIDIA: To obtain the NVIDIA drivers supporting work graphs, please reach out to your developer engagement representative.
[*]

[*]Intel: Intel’s close collaboration and partnership with Microsoft on the work graphs feature set will enable developers to better harness the power of Intel Graphics processors, delivering increased performance and innovative graphics techniques. We look forward to supporting the upcoming work graphs in a future driver release. For further inquiries please reach out to Intel developer relations at gamedevtech@intel.com.

Though it's still early and sounds like they just exposed the API without much testing. I saw that there is a proposal in the spec for driving rasterization at leaf nodes which might be of some interest to some IHVs.
 
Some testimonials ...

 
The only one seemingly overly excited for this development seems to be AMD, at least for now, Intel and NVIDIA are suspiciously absent. They have no drivers, no press statement or blog announcement, what gives?
AMD driven development with this release being very much "experimental" (all Agility SDKs beyond v1.6xx are "previews").
 
The only one seemingly overly excited for this development seems to be AMD, at least for now, Intel and NVIDIA are suspiciously absent. They have no drivers, no press statement or blog announcement, what gives?
Maybe it doesn’t map well to their architecture.
 
Does anyone know for sure if this was already available on console?
If not couple decent upgrades to the api and efficency on XS.
 
Does anyone know for sure if this was already available on console?
If not couple decent upgrades to the api and efficency on XS.

I doubt it, unless AMD exposed something similar on Playstation. The reaction from game devs makes it appear as if it's something new.
 
Maybe it doesn’t map well to their architecture.
Or it solves a problem which doesn't exist on their h/w.
Pointless guessing is pointless.
Fact is the majority of developers of this feature seem to be from AMD and MS which alone is enough to explain why other IHVs are silent.
 
Maybe it doesn’t map well to their architecture.
Launching compute kernels from device has been available in CUDA since Kepler.
CUDA Graphs have also been available for a while. Not sure how it compares to the DX Compute Graphs, but the concept seems to be the same.
Differences might lie in the interaction with graphics, but this has not been explored in the DX api yet.
 
Back
Top