diff --git a/src/compiler/nir/nir_gather_info.c b/src/compiler/nir/nir_gather_info.c index f1f2b1cf0fb..25a14b977b0 100644 --- a/src/compiler/nir/nir_gather_info.c +++ b/src/compiler/nir/nir_gather_info.c @@ -1096,8 +1096,6 @@ nir_shader_gather_info(nir_shader *shader, nir_function_impl *entrypoint) shader->info.per_primitive_inputs = 0; shader->info.per_primitive_outputs = 0; shader->info.per_view_outputs = 0; - shader->info.linear_varyings = 0; - shader->info.perspective_varyings = 0; shader->info.uses_resource_info_query = false; @@ -1115,6 +1113,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; diff --git a/src/gallium/drivers/asahi/agx_state.c b/src/gallium/drivers/asahi/agx_state.c index dac83d20b7e..5666735047f 100644 --- a/src/gallium/drivers/asahi/agx_state.c +++ b/src/gallium/drivers/asahi/agx_state.c @@ -1790,6 +1790,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;