ac/nir: simplify force_*_center_interp options in ac_nir_lower_ps_early

This only indicates whether MSAA is disabled.

Having a separate option for each sysval is better for the PS prolog,
but not for monolithic compilation.

Reviewed-by: Timur Kristóf <timur.kristof@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/33024>
This commit is contained in:
Marek Olšák 2025-01-02 18:37:54 -05:00
parent 3bccfa72cc
commit 43f6b2655e
3 changed files with 10 additions and 15 deletions

View file

@ -271,9 +271,7 @@ typedef struct {
* generate AMD-specific intrinsics.
*/
/* System values. */
bool force_persp_center_interp;
bool force_linear_center_interp;
bool interpolate_at_sample_force_center;
bool force_center_interp_no_msaa; /* true if MSAA is disabled, false may mean that the state is unknown */
bool load_sample_positions_always_loads_current_ones;
bool dynamic_rasterization_samples;
int force_front_face; /* 0 -> keep, 1 -> set to true, -1 -> set to false */

View file

@ -57,19 +57,19 @@ get_baryc_var(nir_builder *b, nir_intrinsic_op baryc_op, enum glsl_interp_mode m
case nir_intrinsic_load_barycentric_centroid:
if (mode == INTERP_MODE_NOPERSPECTIVE) {
return get_baryc_var_common(b, s->options->ps_iter_samples > 1 ||
s->options->force_linear_center_interp, &s->linear_centroid,
s->options->force_center_interp_no_msaa, &s->linear_centroid,
"linear_centroid");
} else {
return get_baryc_var_common(b, s->options->ps_iter_samples > 1 ||
s->options->force_persp_center_interp, &s->persp_centroid,
s->options->force_center_interp_no_msaa, &s->persp_centroid,
"persp_centroid");
}
case nir_intrinsic_load_barycentric_sample:
if (mode == INTERP_MODE_NOPERSPECTIVE) {
return get_baryc_var_common(b, s->options->force_linear_center_interp, &s->linear_sample,
return get_baryc_var_common(b, s->options->force_center_interp_no_msaa, &s->linear_sample,
"linear_sample");
} else {
return get_baryc_var_common(b, s->options->force_persp_center_interp, &s->persp_sample,
return get_baryc_var_common(b, s->options->force_center_interp_no_msaa, &s->persp_sample,
"persp_sample");
}
default:
@ -98,12 +98,9 @@ init_interp_param(nir_builder *b, lower_ps_early_state *s)
s->linear_center, s->linear_centroid);
}
if (s->options->force_persp_center_interp) {
if (s->options->force_center_interp_no_msaa) {
set_interp_vars(b, nir_load_barycentric_pixel(b, 32, .interp_mode = INTERP_MODE_SMOOTH),
s->persp_sample, s->persp_centroid);
}
if (s->options->force_linear_center_interp) {
set_interp_vars(b, nir_load_barycentric_pixel(b, 32, .interp_mode = INTERP_MODE_NOPERSPECTIVE),
s->linear_sample, s->linear_centroid);
}
@ -387,7 +384,7 @@ lower_ps_intrinsic(nir_builder *b, nir_intrinsic_instr *intrin, void *state)
case nir_intrinsic_load_barycentric_at_sample: {
unsigned mode = nir_intrinsic_interp_mode(intrin);
if (s->options->interpolate_at_sample_force_center) {
if (s->options->force_center_interp_no_msaa) {
nir_def_replace(&intrin->def, nir_load_barycentric_pixel(b, 32, .interp_mode = mode));
return true;
}

View file

@ -2482,9 +2482,9 @@ static struct nir_shader *si_get_nir_shader(struct si_shader *shader, struct si_
shader->info.ps_colors_read = info.colors_read;
ac_nir_lower_ps_early_options early_options = {
.force_persp_center_interp = key->ps.part.prolog.force_persp_center_interp,
.force_linear_center_interp = key->ps.part.prolog.force_linear_center_interp,
.interpolate_at_sample_force_center = key->ps.mono.interpolate_at_sample_force_center,
.force_center_interp_no_msaa = key->ps.part.prolog.force_persp_center_interp ||
key->ps.part.prolog.force_linear_center_interp ||
key->ps.mono.interpolate_at_sample_force_center,
.load_sample_positions_always_loads_current_ones = true,
.force_front_face = key->ps.opt.force_front_face_input,
/* This forces per-sample interpolation (if at least 2) and lowers sample_mask_in. */