diff --git a/.pick_status.json b/.pick_status.json index e01344800b3..afb971a9e79 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -1594,7 +1594,7 @@ "description": "nir/gather_info: clear interpolation qualifiers only in fragment stage", "nominated": true, "nomination_type": 2, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": "a72704d0fbd0dc594570ae2c97b7a8015a944b8e", "notes": null diff --git a/src/compiler/nir/nir_gather_info.c b/src/compiler/nir/nir_gather_info.c index 862a4d198e0..14b78a0da1e 100644 --- a/src/compiler/nir/nir_gather_info.c +++ b/src/compiler/nir/nir_gather_info.c @@ -1094,8 +1094,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; @@ -1113,6 +1111,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;