[Mesa-dev] [PATCH] radeonsi: use optimal WD settings for primitive restart on Polaris

Marek Olšák maraeo at gmail.com
Fri Jun 24 16:20:53 UTC 2016


From: Marek Olšák <marek.olsak at amd.com>

ported from Vulkan
---
 src/gallium/drivers/radeonsi/si_state_draw.c | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/src/gallium/drivers/radeonsi/si_state_draw.c b/src/gallium/drivers/radeonsi/si_state_draw.c
index 717149b..5f866d5 100644
--- a/src/gallium/drivers/radeonsi/si_state_draw.c
+++ b/src/gallium/drivers/radeonsi/si_state_draw.c
@@ -291,13 +291,21 @@ static unsigned si_get_ia_multi_vgt_param(struct si_context *sctx,
 	if (sctx->b.chip_class >= CIK) {
 		/* WD_SWITCH_ON_EOP has no effect on GPUs with less than
 		 * 4 shader engines. Set 1 to pass the assertion below.
-		 * The other cases are hardware requirements. */
+		 * The other cases are hardware requirements.
+		 *
+		 * Polaris supports primitive restart with WD_SWITCH_ON_EOP=0
+		 * for points, line strips, and tri strips.
+		 */
 		if (sctx->b.screen->info.max_se < 4 ||
 		    prim == PIPE_PRIM_POLYGON ||
 		    prim == PIPE_PRIM_LINE_LOOP ||
 		    prim == PIPE_PRIM_TRIANGLE_FAN ||
 		    prim == PIPE_PRIM_TRIANGLE_STRIP_ADJACENCY ||
-		    info->primitive_restart ||
+		    (info->primitive_restart &&
+		     (sctx->b.family < CHIP_POLARIS10 ||
+		      (prim != PIPE_PRIM_POINTS &&
+		       prim != PIPE_PRIM_LINE_STRIP &&
+		       prim != PIPE_PRIM_TRIANGLE_STRIP))) ||
 		    info->count_from_stream_output)
 			wd_switch_on_eop = true;
 
-- 
2.7.4



More information about the mesa-dev mailing list