radeonsi: allow sample mask export for single-sample framebuffers
authorNicolai Hähnle <nicolai.haehnle@amd.com>
Tue, 15 Nov 2016 13:37:47 +0000 (14:37 +0100)
committerNicolai Hähnle <nicolai.haehnle@amd.com>
Fri, 18 Nov 2016 08:48:43 +0000 (09:48 +0100)
This fixes GL45-CTS.sample_variables.mask.*.samples_1.*.

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Reviewed-by: Edward O'Callaghan <funfunctor@folklore1984.net>
src/gallium/drivers/radeonsi/si_state.c

index f8dfcf298bd120d266ba8eb72a2d434e29ad33f3..c64bb5b0460a6ab57601222f21e3e950085ffd16 100644 (file)
@@ -867,11 +867,12 @@ static void si_bind_rs_state(struct pipe_context *ctx, void *state)
        if (!state)
                return;
 
-       if (sctx->framebuffer.nr_samples > 1 &&
-           (!old_rs || old_rs->multisample_enable != rs->multisample_enable)) {
+       if (!old_rs || old_rs->multisample_enable != rs->multisample_enable) {
                si_mark_atom_dirty(sctx, &sctx->db_render_state);
 
-               if (sctx->b.family >= CHIP_POLARIS10)
+               /* Update the small primitive filter workaround if necessary. */
+               if (sctx->b.family >= CHIP_POLARIS10 &&
+                   sctx->framebuffer.nr_samples > 1)
                        si_mark_atom_dirty(sctx, &sctx->msaa_sample_locs.atom);
        }
 
@@ -1153,7 +1154,7 @@ static void si_emit_db_render_state(struct si_context *sctx, struct r600_atom *s
        }
 
        /* Disable the gl_SampleMask fragment shader output if MSAA is disabled. */
-       if (sctx->framebuffer.nr_samples <= 1 || (rs && !rs->multisample_enable))
+       if (!rs || !rs->multisample_enable)
                db_shader_control &= C_02880C_MASK_EXPORT_ENABLE;
 
        if (sctx->b.family == CHIP_STONEY &&