Skip to content

aco: Add support for NGG vertex and tess eval shaders

Timur Kristóf requested to merge Venemo/mesa:aco-ngg-vs into master

This is the first, and easiest part of supporting NGG in ACO.

When NGG is used, vertex and tess eval shaders are executed on the hardware NGG geometry stage and behave like a merged ESGS shader. There is a series of steps they must perform:

  • Request GS space using GS_ALLOC_REQ (on GS threads)
  • Export the primitive (on GS threads)
  • Finally, export the normal VS outputs (on ES threads, and only after the previous two are done)

In this MR, two modes are implemented:

  • "late" which matches what the RADV LLVM backend currently does
  • "early" which is an optimized version as seen in RadeonSI

Vulkan doesn't allow the shader to write the edge flags, so we can currently always use the "early" mode.

Exporting the primitive ID is also supported now.

This MR also enables support for NGG VS and TES in RADV. Since ACO currently doesn't support NGG GS, we disable NGG GS in RADV when ACO is used. NGG streamout is also not yet supported.

Edited by Timur Kristóf

Merge request reports