radeonsi: Fix primitive restart when index changes
authorJames Legg <jlegg@feralinteractive.com>
Tue, 4 Oct 2016 13:30:11 +0000 (14:30 +0100)
committerMarek Olšák <marek.olsak@amd.com>
Tue, 4 Oct 2016 13:57:37 +0000 (15:57 +0200)
If primitive restart is enabled for two consecutive draws which use
different primitive restart indices, then the first draw's primitive
restart index was incorrectly used for the second draw.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=98025

Cc: 11.1 11.2 12.0 <mesa-stable@lists.freedesktop.org>
Signed-off-by: Marek Olšák <marek.olsak@amd.com>
src/gallium/drivers/radeonsi/si_state_draw.c

index e44147f..10e8be4 100644 (file)
@@ -509,13 +509,13 @@ static void si_emit_draw_registers(struct si_context *sctx,
                radeon_set_context_reg(cs, R_028A94_VGT_MULTI_PRIM_IB_RESET_EN, info->primitive_restart);
                sctx->last_primitive_restart_en = info->primitive_restart;
 
-               if (info->primitive_restart &&
-                   (info->restart_index != sctx->last_restart_index ||
-                    sctx->last_restart_index == SI_RESTART_INDEX_UNKNOWN)) {
-                       radeon_set_context_reg(cs, R_02840C_VGT_MULTI_PRIM_IB_RESET_INDX,
-                                              info->restart_index);
-                       sctx->last_restart_index = info->restart_index;
-               }
+       }
+       if (info->primitive_restart &&
+           (info->restart_index != sctx->last_restart_index ||
+            sctx->last_restart_index == SI_RESTART_INDEX_UNKNOWN)) {
+               radeon_set_context_reg(cs, R_02840C_VGT_MULTI_PRIM_IB_RESET_INDX,
+                                      info->restart_index);
+               sctx->last_restart_index = info->restart_index;
        }
 }