From: Zack Rusin Date: Sat, 27 Apr 2013 12:55:36 +0000 (-0400) Subject: draw: don't crash if GS doesn't emit anything X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=d48054ff222ac75241ca74b8e4080261eae9e8e9;p=mesa.git draw: don't crash if GS doesn't emit anything Technically it's legal for geometry shader to not emit any vertices. It's silly, but perfectly legal, so lets make draw stop crashing if it happens. Signed-off-by: Zack Rusin Reviewed-by: José Fonseca Reviewed-by: Roland Scheidegger --- diff --git a/src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline.c b/src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline.c index 7b871c2952d..8d66c885436 100644 --- a/src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline.c +++ b/src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline.c @@ -299,6 +299,15 @@ static void fetch_pipeline_generic( struct draw_pt_middle_end *middle, } } } + if (prim_info->count == 0) { + debug_printf("GS/IA didn't emit any vertices!\n"); + + FREE(vert_info->verts); + if (free_prim_info) { + FREE(prim_info->primitive_lengths); + } + return; + } /* Stream output needs to be done before clipping. diff --git a/src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline_llvm.c b/src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline_llvm.c index 0873e342a2d..48fb6165bdc 100644 --- a/src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline_llvm.c +++ b/src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline_llvm.c @@ -397,6 +397,15 @@ llvm_pipeline_generic( struct draw_pt_middle_end *middle, } } } + if (prim_info->count == 0) { + debug_printf("GS/IA didn't emit any vertices!\n"); + + FREE(vert_info->verts); + if (free_prim_info) { + FREE(prim_info->primitive_lengths); + } + return; + } /* stream output needs to be done before clipping */ draw_pt_so_emit( fpme->so_emit, vert_info, prim_info );