From 98e46a7e9b27221ef64fd3d517e6fe1e79c73b30 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Mon, 30 Dec 2024 23:46:06 -0500 Subject: [PATCH] radeonsi: use barycentrics from load_point_coord_maybe_flipped The pass is called sooner because we want to optimize the point_coord barycentrics in ac_nir_lower_ps_early. Acked-by: Pierre-Eric Pelloux-Prayer Part-of: --- src/gallium/drivers/radeonsi/si_nir_lower_abi.c | 6 ++---- src/gallium/drivers/radeonsi/si_shader.c | 8 ++++---- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/src/gallium/drivers/radeonsi/si_nir_lower_abi.c b/src/gallium/drivers/radeonsi/si_nir_lower_abi.c index 68c295741b2..3fe12a884b0 100644 --- a/src/gallium/drivers/radeonsi/si_nir_lower_abi.c +++ b/src/gallium/drivers/radeonsi/si_nir_lower_abi.c @@ -517,11 +517,9 @@ static bool lower_intrinsic(nir_builder *b, nir_instr *instr, struct lower_abi_s break; } case nir_intrinsic_load_point_coord_maybe_flipped: { - nir_def *interp_param = - nir_load_barycentric_pixel(b, 32, .interp_mode = INTERP_MODE_NONE); - /* Load point coordinates (x, y) which are written by the hw after the interpolated inputs */ - replacement = nir_load_interpolated_input(b, 2, 32, interp_param, nir_imm_int(b, 0), + nir_def *baryc = intrin->src[0].ssa; + replacement = nir_load_interpolated_input(b, 2, 32, baryc, nir_imm_int(b, 0), .base = si_get_ps_num_interp(shader), .component = 2, /* This tells si_nir_scan_shader that it's PARAM_GEN */ diff --git a/src/gallium/drivers/radeonsi/si_shader.c b/src/gallium/drivers/radeonsi/si_shader.c index 21bbb77bb30..62c22b4c403 100644 --- a/src/gallium/drivers/radeonsi/si_shader.c +++ b/src/gallium/drivers/radeonsi/si_shader.c @@ -2307,6 +2307,10 @@ static bool run_pre_link_optimization_passes(struct si_nir_shader_ctx *ctx) if (sel->info.colors_read) NIR_PASS(progress, nir, si_nir_lower_ps_color_input, &shader->key, &sel->info); + /* This adds discard and barycentrics. */ + if (key->ps.mono.point_smoothing) + NIR_PASS(progress, nir, nir_lower_point_smooth, true); + /* This eliminates system values and unused shader output components. */ ac_nir_lower_ps_early_options early_options = { .force_center_interp_no_msaa = key->ps.part.prolog.force_persp_center_interp || @@ -2344,10 +2348,6 @@ static bool run_pre_link_optimization_passes(struct si_nir_shader_ctx *ctx) if (key->ps.mono.poly_line_smoothing) NIR_PASS(progress, nir, nir_lower_poly_line_smooth, SI_NUM_SMOOTH_AA_SAMPLES); - /* This adds discard. */ - if (key->ps.mono.point_smoothing) - NIR_PASS(progress, nir, nir_lower_point_smooth, true); - /* This adds discard. */ if (key->ps.part.prolog.poly_stipple) NIR_PASS(progress, nir, si_nir_emit_polygon_stipple);