Mesa (master): radeonsi: don't set VGT_LS_HS_CONFIG if it doesn't change

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Thu Jun 14 02:02:06 UTC 2018


Module: Mesa
Branch: master
Commit: 73b0d10152728e9820d1706564e1f4b9c9bec9ca
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=73b0d10152728e9820d1706564e1f4b9c9bec9ca

Author: Marek Olšák <marek.olsak at amd.com>
Date:   Wed May 30 21:24:06 2018 -0400

radeonsi: don't set VGT_LS_HS_CONFIG if it doesn't change

Tested-by: Dieter Nützel <Dieter at nuetzel-hh.de>

---

 src/gallium/drivers/radeonsi/si_gfx_cs.c     |  1 +
 src/gallium/drivers/radeonsi/si_pipe.h       |  1 +
 src/gallium/drivers/radeonsi/si_state_draw.c | 16 ++++++++++------
 3 files changed, 12 insertions(+), 6 deletions(-)

diff --git a/src/gallium/drivers/radeonsi/si_gfx_cs.c b/src/gallium/drivers/radeonsi/si_gfx_cs.c
index d1596a3177..b81773e01a 100644
--- a/src/gallium/drivers/radeonsi/si_gfx_cs.c
+++ b/src/gallium/drivers/radeonsi/si_gfx_cs.c
@@ -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;
 
diff --git a/src/gallium/drivers/radeonsi/si_pipe.h b/src/gallium/drivers/radeonsi/si_pipe.h
index e7f6b45ccc..ea199d3924 100644
--- a/src/gallium/drivers/radeonsi/si_pipe.h
+++ b/src/gallium/drivers/radeonsi/si_pipe.h
@@ -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;
diff --git a/src/gallium/drivers/radeonsi/si_state_draw.c b/src/gallium/drivers/radeonsi/si_state_draw.c
index 845ec468ae..42522c0129 100644
--- a/src/gallium/drivers/radeonsi/si_state_draw.c
+++ b/src/gallium/drivers/radeonsi/si_state_draw.c
@@ -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)




More information about the mesa-commit mailing list