From d2f7b8db9dc994c9d5b52c08c9b2cc19afd0367e Mon Sep 17 00:00:00 2001 From: Lorenzo Rossi Date: Wed, 15 Apr 2026 11:09:53 +0200 Subject: [PATCH] pan/compiler: Collect nopersp varyings in lower_noperspective_fs Now that lower_noperspective_fs and varying collection are closer together we can merge nopersp collection in lower_noperspective_fs without fear of desyncrhonization, making everything also a bit cleaner. Signed-off-by: Lorenzo Rossi Reviewed-by: Christoph Pillmayer Reviewed-by: Faith Ekstrand Part-of: --- src/panfrost/compiler/bifrost/bifrost_nir.c | 7 ++----- src/panfrost/compiler/pan_nir.h | 3 ++- src/panfrost/compiler/pan_nir_lower_noperspective.c | 5 ++++- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/panfrost/compiler/bifrost/bifrost_nir.c b/src/panfrost/compiler/bifrost/bifrost_nir.c index 87166cce104..3364fa52504 100644 --- a/src/panfrost/compiler/bifrost/bifrost_nir.c +++ b/src/panfrost/compiler/bifrost/bifrost_nir.c @@ -885,7 +885,8 @@ bifrost_postprocess_nir(nir_shader *nir, NIR_PASS(_, nir, nir_lower_is_helper_invocation); NIR_PASS(_, nir, pan_nir_lower_helper_invocation); NIR_PASS(_, nir, pan_nir_lower_sample_pos); - NIR_PASS(_, nir, pan_nir_lower_noperspective_fs); + NIR_PASS(_, nir, pan_nir_lower_noperspective_fs, + &info->varyings.noperspective); NIR_PASS(_, nir, nir_lower_frag_coord_to_pixel_coord); NIR_PASS(_, nir, pan_nir_lower_var_special_pan); @@ -902,10 +903,6 @@ bifrost_postprocess_nir(nir_shader *nir, inputs->trust_varying_flat_highp_types, false /* lower mediump */); - /* TODO: This can go in lower_noperspective_fs */ - info->varyings.noperspective = - pan_nir_collect_noperspective_varyings_fs(nir); - if (!inputs->is_blend) NIR_PASS(_, nir, pan_nir_lower_fs_inputs, inputs->gpu_id, inputs->varying_layout, info); diff --git a/src/panfrost/compiler/pan_nir.h b/src/panfrost/compiler/pan_nir.h index 5fd90f0986a..1cf2cff291f 100644 --- a/src/panfrost/compiler/pan_nir.h +++ b/src/panfrost/compiler/pan_nir.h @@ -53,7 +53,8 @@ bool pan_nir_lower_image_ms(nir_shader *shader); bool pan_nir_lower_var_special_pan(nir_shader *shader); bool pan_nir_lower_noperspective_vs(nir_shader *shader); -bool pan_nir_lower_noperspective_fs(nir_shader *shader); +bool pan_nir_lower_noperspective_fs(nir_shader *shader, + uint32_t *noperspective_varyings); bool pan_nir_lower_vs_outputs(nir_shader *shader, uint64_t gpu_id, const struct pan_varying_layout *varying_layout, diff --git a/src/panfrost/compiler/pan_nir_lower_noperspective.c b/src/panfrost/compiler/pan_nir_lower_noperspective.c index 0fe48f85b5d..fd0cf814f18 100644 --- a/src/panfrost/compiler/pan_nir_lower_noperspective.c +++ b/src/panfrost/compiler/pan_nir_lower_noperspective.c @@ -214,7 +214,8 @@ pan_nir_lower_noperspective_vs(nir_shader *shader) } bool -pan_nir_lower_noperspective_fs(nir_shader *shader) +pan_nir_lower_noperspective_fs(nir_shader *shader, + uint32_t *noperspective_varyings) { assert(shader->info.stage == MESA_SHADER_FRAGMENT); @@ -226,5 +227,7 @@ pan_nir_lower_noperspective_fs(nir_shader *shader) nir_shader_intrinsics_pass(shader, lower_noperspective_fs, nir_metadata_control_flow, NULL); + *noperspective_varyings = + pan_nir_collect_noperspective_varyings_fs(shader); return true; }