Skip to content

radv, ac: Clean up shader I/O intrinsics to use AC shader arguments directly.

Timur Kristóf requested to merge Venemo/mesa:ac_radv_again into main

This refactors the tessellation, ES-GS and NGG shader ABI to use NIR based intrinsics instead of hard-coding RADV specifics into ACO.

Depends on:

Also, there is MR !16266 (merged) which mitigates the stats changes caused by this MR.

Concept

This continues the work by Connor and Rhys. We will now allow NIR shaders to access ac_args directly. This means that instead of introducing an AMD-specific NIR intrinsic to represent each shader argument, we only need an intrinsic for loading args, and then can use that and remove most of the old ones from the backend.

Implementation

In order to cater to the differences between the RadeonSI and RADV, a new NIR-based ABI is added which allows the drivers to customize how these intrinsics behave, eg. this will be easy to extend to support RadeonSI's more complicated tessellation I/O (I originally thought what we had previously will be adequate, but it wasn't) and the different way of how some details of NGG are handled.

Our goal with this is to enable sharing more NIR code between the drivers and eventually remove (or significantly reduce) the LLVM based shader ABI.

Notes

  • The new ABI isn't hooked up to RadeonSI yet, we will do that as follow-up.
Edited by Timur Kristóf

Merge request reports