From: Marek Olšák Date: Wed, 16 May 2018 02:03:40 +0000 (-0400) Subject: radeonsi: round ps_iter_samples in set_min_samples X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=07e02c8617ebdc7e4a729676dbd93d63b77bcd9d;p=mesa.git radeonsi: round ps_iter_samples in set_min_samples Tested-by: Dieter Nützel Reviewed-by: Nicolai Hähnle --- diff --git a/src/gallium/drivers/radeonsi/si_state.c b/src/gallium/drivers/radeonsi/si_state.c index 5bbf134b706..f4e29f68b29 100644 --- a/src/gallium/drivers/radeonsi/si_state.c +++ b/src/gallium/drivers/radeonsi/si_state.c @@ -3412,8 +3412,7 @@ static void si_emit_msaa_config(struct si_context *sctx) }; unsigned log_samples = util_logbase2(coverage_samples); unsigned ps_iter_samples = si_get_ps_iter_samples(sctx); - unsigned log_ps_iter_samples = - util_logbase2(util_next_power_of_two(ps_iter_samples)); + unsigned log_ps_iter_samples = util_logbase2(ps_iter_samples); radeon_set_context_reg_seq(cs, R_028BDC_PA_SC_LINE_CNTL, 2); radeon_emit(cs, sc_line_cntl | @@ -3468,6 +3467,9 @@ static void si_set_min_samples(struct pipe_context *ctx, unsigned min_samples) { struct si_context *sctx = (struct si_context *)ctx; + /* The hardware can only do sample shading with 2^n samples. */ + min_samples = util_next_power_of_two(min_samples); + if (sctx->ps_iter_samples == min_samples) return; diff --git a/src/gallium/drivers/radeonsi/si_state_shaders.c b/src/gallium/drivers/radeonsi/si_state_shaders.c index 2e215b91ce8..1b618502e85 100644 --- a/src/gallium/drivers/radeonsi/si_state_shaders.c +++ b/src/gallium/drivers/radeonsi/si_state_shaders.c @@ -1414,7 +1414,7 @@ static inline void si_shader_selector_key(struct pipe_context *ctx, if (sctx->ps_iter_samples > 1 && sel->info.reads_samplemask) { key->part.ps.prolog.samplemask_log_ps_iter = - util_logbase2(util_next_power_of_two(sctx->ps_iter_samples)); + util_logbase2(sctx->ps_iter_samples); } if (rs->force_persample_interp &&