diff --git a/src/amd/common/nir/ac_nir.h b/src/amd/common/nir/ac_nir.h index 46635909705..db67fdfdaae 100644 --- a/src/amd/common/nir/ac_nir.h +++ b/src/amd/common/nir/ac_nir.h @@ -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 */ diff --git a/src/amd/common/nir/ac_nir_lower_ps_early.c b/src/amd/common/nir/ac_nir_lower_ps_early.c index 320e406d9dc..f716df0dae3 100644 --- a/src/amd/common/nir/ac_nir_lower_ps_early.c +++ b/src/amd/common/nir/ac_nir_lower_ps_early.c @@ -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; } diff --git a/src/gallium/drivers/radeonsi/si_shader.c b/src/gallium/drivers/radeonsi/si_shader.c index 968caf7f48e..e13b35b82ed 100644 --- a/src/gallium/drivers/radeonsi/si_shader.c +++ b/src/gallium/drivers/radeonsi/si_shader.c @@ -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. */