Timur Kristóf, Mesa's Radeon Vulkan RADV open-source driver contributor, recently shared his venture working on the Next-Gen Geometry (NGG) support for current and next-gen AMD RDNA graphics cards with the current driver. Kristóf is known for his work as a contractor for Valve, assisting with the Linux graphics stack for the developer.
Timur Kristóf discusses working with the RADV Driver for the implementation of the AMD NGG "Next-Gen Geometry" Engine within RDNA GPUs
NGG is utilized for processing vertex and geometry calculations within RDNA and RDNA 2-based graphics cards. Recently, with the reveal of AMD RDNA 3 architecture and its requirements and specifications with graphics, it has been reported that NGG will always stay enabled. Previously, NGG was focused initially on working on the GFX9 and Vega architectures but was found to be quite problematic in use and did not help with increasing performance. Now, we are finding that it is more optimized and better used with RDNA architecture and its successors.
The most significant issue with integrating NGG into the RDNA architecture is the complex nature of the driver. In turn, this struggle has caused NGG to be extremely difficult to execute for RadeonSI OpenGL and RADV Vulkan accelerators. Website Phoronix reports this is due to outside developers not working directly with AMD. The fixes have been harder to implement.
On his blog, Kristóf discussed the difficulties with implementing the NGG driver, including his lack of seeing any performance advantages.
We did some benchmarks when we switched RADV and ACO to use the new pipeline. We found no significant perf changes. At all. Considering all the hype we heard about NGG at the hardware launch, I was quite surprised. However, after I set the hype aside, it was quite self-explanatory. When we switched to NGG, we still compiled our shaders the same way as before, so even though we used the new geometry pipeline, we didn’t do anything to take advantage of its new capabilities. The actual perf improvement came after I also implemented shader-based culling.
The results from benchmarks and published samples have shown a contrasting amount of results from the NGG. Currently, NGG, along with adding shader culling, has been more accessible and produced a better improvement in performance on the RDNA 2 architecture. Developers from Valve have not seen performance increases when using NGG shader culling and, in turn, have disabled the next-gen geometry.
The main takeaway from this post is that NGG is not a performance silver bullet that magically makes all your games faster. Instead, it is an enabler of new features. It lets the driver implement new techniques such as shader culling and new programming models like mesh shaders.
Kristóf has gone into much more detail on his blog about the subject for readers interested in the topic.