nir/gather_info: clear interpolation qualifiers only in fragment stage

Asahi wants the the interpolation qualifiers from the shader info in the
vertex shader. Clear them only in the fragment stage so they can
propagate back.

Closes: https://gitlab.freedesktop.org/mesa/mesa/-/work_items/15288
Backport-to: 26.0
Fixes: a72704d0fb ("nir/gather_info: clear interpolation qualifiers before gathering")
Signed-off-by: Janne Grunau <j@jannau.net>
(cherry picked from commit 98a97cb413)

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/41269>
This commit is contained in:
Janne Grunau 2026-04-17 15:38:31 +02:00 committed by Eric Engestrom
parent d10e31b725
commit 64f8339209
3 changed files with 8 additions and 3 deletions

View file

@ -4494,7 +4494,7 @@
"description": "nir/gather_info: clear interpolation qualifiers only in fragment stage",
"nominated": true,
"nomination_type": 4,
"resolution": 0,
"resolution": 1,
"main_sha": null,
"because_sha": "a72704d0fbd0dc594570ae2c97b7a8015a944b8e",
"notes": null

View file

@ -1067,8 +1067,6 @@ nir_shader_gather_info(nir_shader *shader, nir_function_impl *entrypoint)
shader->info.patch_outputs_written_indirectly = 0;
shader->info.per_primitive_inputs = 0;
shader->info.per_primitive_outputs = 0;
shader->info.linear_varyings = 0;
shader->info.perspective_varyings = 0;
shader->info.uses_resource_info_query = false;
@ -1086,6 +1084,8 @@ nir_shader_gather_info(nir_shader *shader, nir_function_impl *entrypoint)
/* By definition the fragment shader knows, unless we fail to gather. */
shader->info.known_interpolation_qualifiers = true;
shader->info.linear_varyings = 0;
shader->info.perspective_varyings = 0;
}
if (shader->info.stage == MESA_SHADER_TESS_CTRL) {
shader->info.tess.tcs_same_invocation_inputs_read = 0;

View file

@ -1800,6 +1800,11 @@ agx_shader_initialize(struct agx_device *dev, struct agx_uncompiled_shader *so,
nir_lower_io_lower_64bit_to_32 |
nir_lower_io_use_interpolated_input_intrinsics);
/* Regather shader info after nir_lower_io. This recalculates interpolation
* qualifiers which got lost when mesa/st lowered I/O back to vars.
*/
nir_shader_gather_info(nir, nir_shader_get_entrypoint(nir));
if (nir->info.stage == MESA_SHADER_FRAGMENT) {
so->info.uses_fbfetch = nir->info.fs.uses_fbfetch_output;
so->info.inputs_linear_shaded = nir->info.linear_varyings;