Mesa (master): radeonsi: add has_draw_indirect_multi flag

Nicolai Hähnle nh at kemper.freedesktop.org
Mon Aug 8 10:59:45 UTC 2016


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

Author: Nicolai Hähnle <nicolai.haehnle at amd.com>
Date:   Fri Jul 29 17:59:11 2016 +0100

radeonsi: add has_draw_indirect_multi flag

Prefer to use DRAW_(INDEX)_INDIRECT_MULTI when available in the firmware.

Versions for SI and CI already added as provided by the firmware team, but
keep in mind that they won't currently be used since the radeon kernel module
has no interface to query the firmware version.

Reviewed-by: Marek Olšák <marek.olsak at amd.com>

---

 src/gallium/drivers/radeonsi/si_pipe.c       | 12 ++++++++++++
 src/gallium/drivers/radeonsi/si_pipe.h       |  1 +
 src/gallium/drivers/radeonsi/si_state_draw.c |  2 +-
 3 files changed, 14 insertions(+), 1 deletion(-)

diff --git a/src/gallium/drivers/radeonsi/si_pipe.c b/src/gallium/drivers/radeonsi/si_pipe.c
index e33823d..ffeeda3 100644
--- a/src/gallium/drivers/radeonsi/si_pipe.c
+++ b/src/gallium/drivers/radeonsi/si_pipe.c
@@ -785,6 +785,18 @@ struct pipe_screen *radeonsi_screen_create(struct radeon_winsys *ws)
 		sscreen->b.chip_class >= VI &&
 		sscreen->b.info.max_se >= 2;
 
+	sscreen->has_draw_indirect_multi =
+		(sscreen->b.family >= CHIP_POLARIS10) ||
+		(sscreen->b.chip_class == VI &&
+		 sscreen->b.info.pfp_fw_version >= 121 &&
+		 sscreen->b.info.me_fw_version >= 87) ||
+		(sscreen->b.chip_class == CIK &&
+		 sscreen->b.info.pfp_fw_version >= 211 &&
+		 sscreen->b.info.me_fw_version >= 173) ||
+		(sscreen->b.chip_class == SI &&
+		 sscreen->b.info.pfp_fw_version >= 121 &&
+		 sscreen->b.info.me_fw_version >= 87);
+
 	sscreen->b.has_cp_dma = true;
 	sscreen->b.has_streamout = true;
 	pipe_mutex_init(sscreen->shader_parts_mutex);
diff --git a/src/gallium/drivers/radeonsi/si_pipe.h b/src/gallium/drivers/radeonsi/si_pipe.h
index 55f8965..9e6bd78 100644
--- a/src/gallium/drivers/radeonsi/si_pipe.h
+++ b/src/gallium/drivers/radeonsi/si_pipe.h
@@ -85,6 +85,7 @@ struct si_screen {
 	unsigned			gs_table_depth;
 	unsigned			tess_offchip_block_dw_size;
 	bool				has_distributed_tess;
+	bool				has_draw_indirect_multi;
 
 	/* Whether shaders are monolithic (1-part) or separate (3-part). */
 	bool				use_monolithic_shaders;
diff --git a/src/gallium/drivers/radeonsi/si_state_draw.c b/src/gallium/drivers/radeonsi/si_state_draw.c
index 8f26f8c..a60723d 100644
--- a/src/gallium/drivers/radeonsi/si_state_draw.c
+++ b/src/gallium/drivers/radeonsi/si_state_draw.c
@@ -634,7 +634,7 @@ static void si_emit_draw_packets(struct si_context *sctx,
 			radeon_emit(cs, index_max_size);
 		}
 
-		if (sctx->b.family < CHIP_POLARIS10) {
+		if (!sctx->screen->has_draw_indirect_multi) {
 			radeon_emit(cs, PKT3(info->indexed ? PKT3_DRAW_INDEX_INDIRECT
 							   : PKT3_DRAW_INDIRECT,
 					     3, render_cond_bit));




More information about the mesa-commit mailing list