Open-source AMD Radeon Vulkan Driver to begin support for NVIDIA DGCs
Open-source AMD Radeon Vulkan Driver to begin support for NVIDIA DGCs

The AMD Radeon Vulkan driver "RADV" for open-source graphics has recently included support for the VK_NV_device_generated_commands extension in Mesa 22.2. The extension, created by NVIDIA, has been active for two years, allowing the graphics card to produce rendering commands via the hardware instead of only relying on software.
Michael Larabel of open-source website Phoronix reported the recent inclusion into Mesa 22.2. NVIDIA coded the VK_NV_device_generated_commands to now produce "device-generated commands to overcome the readback latency and inefficiencies when relying on the CPU for specific command generation work," reports Larabel. Device Generated Commands, or DGC for short, also aid in situations where the graphics card hardware can process a more extensive section of the global scene to alter the shaders "on a per-draw basis."
The NVIDIA blog post from March 2020 summarizes the Vulkan extension recently added to Mesa 22.2.
With general advances in programmable shading, the GPU can take on an ever-increasing set of responsibilities for rendering, by computing supplemental data and allowing a greater variety of rendering algorithms to be implemented. However, when it comes to setting up state for draw calls, the decisions must primarily be made on the CPU. Therefore, explicit synchronization or working from past frame’s results was necessary. Device-generated commands remove this readback latency and overcome existing inefficiencies.
— NVIDIA Developer blog from March 17, 2020
The extension VK_NV_device_generated_commands has purposely seen use since its origins in NVIDIA's own GPU driver, but we are now seeing that the AMD Radeon Vulkan driver in Mesa 22.2 supports Radeon graphics cards as well. Phoronix notes that:
No feature is free of trade-offs. A device-generation approach means that some driver-side optimizations may not apply. Furthermore, the generation process can add to the overall frame time, in cases where the CPU is able to record commands without affecting the GPU time. Finally, it requires additional GPU memory.
In summary, the goal of this extension is primarily to reduce the amount of actual work done on the GPU, by making decisions on the device about what and how work is generated. It is not about off-loading command generation from CPU to the GPU in general.
Bas Nieuwenhuizen, co-creator of the RADV driver, was one of the developers working on the current merge. Larabel points out that the extension may be beneficial "for VKD3D support in handling D3D12's ExecuteIndirect functionality."
News Sources: Phoronix, NVIDIA Developer Blog
What's Your Reaction?






