Thanks to Valve’s Linux graphics team, VK_EXT_device_generated_commands is now supported by the Radeon “RADV” Vulkan driver with the upcoming Mesa 24.3 release.
Prominent RADV developer Samuel Pitoiset at Valve has landed support for VK_EXT_device_generated_commands, the multi-vendor device generated commands “DGC” implementation. Last month with Vulkan 1.3.296 the VK_EXT_device_generated_commands extension was introduced to succeed NVIDIA’s vendor-prefixed DGC extension. The device generated commands extension allows for the GPU device to generate a number of commands for command buffers. VK_EXT_device_generated_commands is a very big and important addition to the Vulkan API: Valve’s Mike Blumenkrantz has argued that DGC is the biggest addition to Vulkan since ray-tracing.
What does it do?
Traditional graphics code works by having the CPU generate a sequence of commands which are packed together and sent to the GPU to run. This extension let’s you write code which runs on the GPU to generate commands, and then execute those same commands on the GPU without involving the CPU at all.
This is a super powerful feature which makes it possible to do things which simply weren’t feasible in the traditional model. Vulkan improved on OpenGL by allowing people to build command buffers on multiple threads, and also re-use existing command buffers, but GPU pipelines are getting so wide that scenes containing many objects with different render settings are bottlenecked by the rate at which the CPU can prepare commands, not by GPU throughput. Letting the GPU generate its own commands means you can leverage the GPU’s massive parallelism for the entire render process, and can also make render state changes much cheaper.
(For anyone familiar, this is basically a more fleshed out version of NVIDIA’s proprietary NV_command_list extension for OpenGL, except that it’s in Vulkan and standardized across all GPU drivers)
Oh, that sounds really cool! Thank you for the explanation.