radeonsi: only emit line stippling and provoking vertex state when it changes
[mesa.git] / src / gallium / drivers / radeonsi / si_state_draw.c
index 4383da4ad0922853f24732efc79ac3f5fe77c10a..f3d58c3e2ab0e23880709a24590649a2f4bf1e8c 100644 (file)
@@ -156,6 +156,9 @@ static void si_emit_rasterizer_prim_state(struct si_context *sctx, unsigned mode
        if (sctx->gs_shader)
                mode = sctx->gs_shader->gs_output_prim;
 
+       if (mode == sctx->last_rast_prim)
+               return;
+
        r600_write_context_reg(cs, R_028A0C_PA_SC_LINE_STIPPLE,
                sctx->pa_sc_line_stipple |
                S_028A0C_AUTO_RESET_CNTL(mode == PIPE_PRIM_LINES ? 1 :
@@ -166,6 +169,8 @@ static void si_emit_rasterizer_prim_state(struct si_context *sctx, unsigned mode
                S_028814_PROVOKING_VTX_LAST(mode == PIPE_PRIM_QUADS ||
                                            mode == PIPE_PRIM_QUAD_STRIP ||
                                            mode == PIPE_PRIM_POLYGON));
+
+       sctx->last_rast_prim = mode;
 }
 
 static void si_emit_draw_registers(struct si_context *sctx,