[Mesa-dev] [Mesa-stable] [PATCH 5/5] radeonsi/gfx9: fix geometry shaders without output vertices
Dieter Nützel
Dieter at nuetzel-hh.de
Wed Sep 27 15:26:54 UTC 2017
For the series:
Tested-by: Dieter Nützel <Dieter at nuetzel-hh.de>
Dieter
Am 26.09.2017 16:43, schrieb Nicolai Hähnle:
> 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);
More information about the mesa-dev
mailing list