[Mesa-dev] [PATCH 5/5] radeonsi/gfx9: fix geometry shaders without output vertices

Nicolai Hähnle nhaehnle at gmail.com
Tue Sep 26 14:43:02 UTC 2017


From: Nicolai Hähnle <nicolai.haehnle at amd.com>

Not that those are super common or useful, but hey! Fun corner cases
of the API...

Fixes dEQP-GLES31.functional.geometry_shading.emit.*

Cc: mesa-stable at lists.freedesktop.org
---
 src/gallium/drivers/radeonsi/si_state_shaders.c | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/src/gallium/drivers/radeonsi/si_state_shaders.c b/src/gallium/drivers/radeonsi/si_state_shaders.c
index 53a60ba11ed..985ee130e6d 100644
--- a/src/gallium/drivers/radeonsi/si_state_shaders.c
+++ b/src/gallium/drivers/radeonsi/si_state_shaders.c
@@ -637,23 +637,25 @@ static void gfx9_get_gs_info(struct si_shader_selector *es,
 	assert(gs_num_invocations <= 32); /* GL maximum */
 
 	if (uses_adjacency || gs_num_invocations > 1)
 		max_gs_prims = 127 / gs_num_invocations;
 	else
 		max_gs_prims = 255;
 
 	/* MAX_PRIMS_PER_SUBGROUP = gs_prims * max_vert_out * gs_invocations.
 	 * Make sure we don't go over the maximum value.
 	 */
-	max_gs_prims = MIN2(max_gs_prims,
-			    max_out_prims /
-			    (gs->gs_max_out_vertices * gs_num_invocations));
+	if (gs->gs_max_out_vertices > 0) {
+		max_gs_prims = MIN2(max_gs_prims,
+				    max_out_prims /
+				    (gs->gs_max_out_vertices * gs_num_invocations));
+	}
 	assert(max_gs_prims > 0);
 
 	/* If the primitive has adjacency, halve the number of vertices
 	 * that will be reused in multiple primitives.
 	 */
 	min_es_verts = gs->gs_input_verts_per_prim / (uses_adjacency ? 2 : 1);
 
 	gs_prims = MIN2(ideal_gs_prims, max_gs_prims);
 	worst_case_es_verts = MIN2(min_es_verts * gs_prims, max_es_verts);
 
-- 
2.11.0



More information about the mesa-dev mailing list