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 <pierre-eric.pelloux-prayer@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/32910>
This commit is contained in:
Marek Olšák
2024-12-30 23:46:06 -05:00
committed by Marge Bot
parent 9e3033e071
commit 98e46a7e9b
2 changed files with 6 additions and 8 deletions
@@ -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 */
+4 -4
View File
@@ -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);