radv: fix unused non-xfb shader outputs not being removed
authorDanylo Piliaiev <dpiliaiev@igalia.com>
Thu, 27 Jul 2023 12:38:43 +0000 (14:38 +0200)
committerDanylo Piliaiev <dpiliaiev@igalia.com>
Tue, 1 Aug 2023 08:30:59 +0000 (10:30 +0200)
commit81407797b940dc97da808cde2f19fb59267d1f81
tree5b9fc11d1711f0eed2fe511410ca4ad60c2ddf5f
parent1e8d445bcfbce05fa4f7c56952708fc43a3e575a
radv: fix unused non-xfb shader outputs not being removed

It was not taken into account that without Offset decoration
the output is not written into XFB.

Aside from eliminating more outputs this change prevents gl_PerVertex
builtins generated by glslang from being kept alive in case when XFB
is enabled. Keeping such outputs alive may upset a driver.

VUID-StandaloneSpirv-Offset-04716:
    "Only variables or block members in the output interface decorated
    with Offset can be captured for transform feedback, and those
    variables or block members must also be decorated with XfbBuffer
    and XfbStride, or inherit XfbBuffer and XfbStride decorations from
    a block containing them"

Additional info about glslang behavior could be found at:
 https://github.com/KhronosGroup/glslang/issues/1526

Fixes: e95531e101f0ba61d28195fe38414e411bf418b3
("radv: fix gathering XFB info if there is dead outputs")

Signed-off-by: Danylo Piliaiev <dpiliaiev@igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24318>
src/amd/vulkan/radv_shader.c