radeonsi: don't set VGT_LS_HS_CONFIG if it doesn't change
authorMarek Olšák <marek.olsak@amd.com>
Thu, 31 May 2018 01:24:06 +0000 (21:24 -0400)
committerMarek Olšák <marek.olsak@amd.com>
Thu, 14 Jun 2018 02:00:25 +0000 (22:00 -0400)
Tested-by: Dieter Nützel <Dieter@nuetzel-hh.de>
src/gallium/drivers/radeonsi/si_gfx_cs.c
src/gallium/drivers/radeonsi/si_pipe.h
src/gallium/drivers/radeonsi/si_state_draw.c

index d1596a3..b81773e 100644 (file)
@@ -318,6 +318,7 @@ void si_begin_new_gfx_cs(struct si_context *ctx)
        ctx->last_tcs = NULL;
        ctx->last_tes_sh_base = -1;
        ctx->last_num_tcs_input_cp = -1;
+       ctx->last_ls_hs_config = -1; /* impossible value */
 
        ctx->cs_shader_state.initialized = false;
 
index e7f6b45..ea199d3 100644 (file)
@@ -916,6 +916,7 @@ struct si_context {
        int                     last_tes_sh_base;
        bool                    last_tess_uses_primid;
        unsigned                last_num_patches;
+       int                     last_ls_hs_config;
 
        /* Debug state. */
        bool                    is_debug;
index 845ec46..42522c0 100644 (file)
@@ -280,12 +280,16 @@ static void si_emit_derived_tess_state(struct si_context *sctx,
                       S_028B58_HS_NUM_INPUT_CP(num_tcs_input_cp) |
                       S_028B58_HS_NUM_OUTPUT_CP(num_tcs_output_cp);
 
-       if (sctx->chip_class >= CIK)
-               radeon_set_context_reg_idx(cs, R_028B58_VGT_LS_HS_CONFIG, 2,
-                                          ls_hs_config);
-       else
-               radeon_set_context_reg(cs, R_028B58_VGT_LS_HS_CONFIG,
-                                      ls_hs_config);
+       if (sctx->last_ls_hs_config != ls_hs_config) {
+               if (sctx->chip_class >= CIK) {
+                       radeon_set_context_reg_idx(cs, R_028B58_VGT_LS_HS_CONFIG, 2,
+                                                  ls_hs_config);
+               } else {
+                       radeon_set_context_reg(cs, R_028B58_VGT_LS_HS_CONFIG,
+                                              ls_hs_config);
+               }
+               sctx->last_ls_hs_config = ls_hs_config;
+       }
 }
 
 static unsigned si_num_prims_for_vertices(const struct pipe_draw_info *info)