mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 22:38:05 +02:00
ac/nir: simplify force_*_sample_interp options in ac_nir_lower_ps_early
The only thing we need here is whether sample shading is enabled and how many samples. 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:
parent
d7d4d56f5b
commit
3bccfa72cc
3 changed files with 11 additions and 14 deletions
|
|
@ -271,15 +271,13 @@ typedef struct {
|
|||
* generate AMD-specific intrinsics.
|
||||
*/
|
||||
/* System values. */
|
||||
bool force_persp_sample_interp;
|
||||
bool force_linear_sample_interp;
|
||||
bool force_persp_center_interp;
|
||||
bool force_linear_center_interp;
|
||||
bool interpolate_at_sample_force_center;
|
||||
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 */
|
||||
unsigned ps_iter_samples;
|
||||
unsigned ps_iter_samples; /* >= 2 forces sample interpolation, affects sample_mask_in lowering */
|
||||
|
||||
/* fbfetch_output */
|
||||
bool fbfetch_is_1D;
|
||||
|
|
|
|||
|
|
@ -48,19 +48,19 @@ get_baryc_var(nir_builder *b, nir_intrinsic_op baryc_op, enum glsl_interp_mode m
|
|||
switch (baryc_op) {
|
||||
case nir_intrinsic_load_barycentric_pixel:
|
||||
if (mode == INTERP_MODE_NOPERSPECTIVE) {
|
||||
return get_baryc_var_common(b, s->options->force_linear_sample_interp, &s->linear_center,
|
||||
return get_baryc_var_common(b, s->options->ps_iter_samples > 1, &s->linear_center,
|
||||
"linear_center");
|
||||
} else {
|
||||
return get_baryc_var_common(b, s->options->force_persp_sample_interp, &s->persp_center,
|
||||
return get_baryc_var_common(b, s->options->ps_iter_samples > 1, &s->persp_center,
|
||||
"persp_center");
|
||||
}
|
||||
case nir_intrinsic_load_barycentric_centroid:
|
||||
if (mode == INTERP_MODE_NOPERSPECTIVE) {
|
||||
return get_baryc_var_common(b, s->options->force_linear_sample_interp ||
|
||||
return get_baryc_var_common(b, s->options->ps_iter_samples > 1 ||
|
||||
s->options->force_linear_center_interp, &s->linear_centroid,
|
||||
"linear_centroid");
|
||||
} else {
|
||||
return get_baryc_var_common(b, s->options->force_persp_sample_interp ||
|
||||
return get_baryc_var_common(b, s->options->ps_iter_samples > 1 ||
|
||||
s->options->force_persp_center_interp, &s->persp_centroid,
|
||||
"persp_centroid");
|
||||
}
|
||||
|
|
@ -91,12 +91,9 @@ init_interp_param(nir_builder *b, lower_ps_early_state *s)
|
|||
{
|
||||
b->cursor = nir_before_cf_list(&b->impl->body);
|
||||
|
||||
if (s->options->force_persp_sample_interp) {
|
||||
if (s->options->ps_iter_samples > 1) {
|
||||
set_interp_vars(b, nir_load_barycentric_sample(b, 32, .interp_mode = INTERP_MODE_SMOOTH),
|
||||
s->persp_center, s->persp_centroid);
|
||||
}
|
||||
|
||||
if (s->options->force_linear_sample_interp) {
|
||||
set_interp_vars(b, nir_load_barycentric_sample(b, 32, .interp_mode = INTERP_MODE_NOPERSPECTIVE),
|
||||
s->linear_center, s->linear_centroid);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2482,14 +2482,16 @@ 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_sample_interp = key->ps.part.prolog.force_persp_sample_interp,
|
||||
.force_linear_sample_interp = key->ps.part.prolog.force_linear_sample_interp,
|
||||
.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,
|
||||
.load_sample_positions_always_loads_current_ones = true,
|
||||
.force_front_face = key->ps.opt.force_front_face_input,
|
||||
.ps_iter_samples = 1 << key->ps.part.prolog.samplemask_log_ps_iter,
|
||||
/* This forces per-sample interpolation (if at least 2) and lowers sample_mask_in. */
|
||||
.ps_iter_samples = key->ps.part.prolog.samplemask_log_ps_iter ?
|
||||
(1 << key->ps.part.prolog.samplemask_log_ps_iter) :
|
||||
(key->ps.part.prolog.force_persp_sample_interp ||
|
||||
key->ps.part.prolog.force_linear_sample_interp ? 2 : 1),
|
||||
|
||||
.fbfetch_is_1D = key->ps.mono.fbfetch_is_1D,
|
||||
.fbfetch_layered = key->ps.mono.fbfetch_layered,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue