radeonsi: round ps_iter_samples in set_min_samples
authorMarek Olšák <marek.olsak@amd.com>
Wed, 16 May 2018 02:03:40 +0000 (22:03 -0400)
committerMarek Olšák <marek.olsak@amd.com>
Thu, 24 May 2018 17:41:57 +0000 (13:41 -0400)
Tested-by: Dieter Nützel <Dieter@nuetzel-hh.de>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
src/gallium/drivers/radeonsi/si_state.c
src/gallium/drivers/radeonsi/si_state_shaders.c

index 5bbf134b706a1c6da2d793e69cbc89fc132be9bf..f4e29f68b29630f9717fbe7c27125cb931f7a8c4 100644 (file)
@@ -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;
 
index 2e215b91ce82ea61f5fbf1c14627fef41d6f02e9..1b618502e857760cb746b256ce313845529b574d 100644 (file)
@@ -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 &&