auxiliary/draw: fix crash with zero-stride draw auto
authorRoland Scheidegger <sroland@vmware.com>
Wed, 15 May 2019 18:35:21 +0000 (20:35 +0200)
committerRoland Scheidegger <sroland@vmware.com>
Thu, 16 May 2019 12:01:33 +0000 (14:01 +0200)
transform feedback draws get the number of vertices from the transform
feedback object. In draw, we'll figure this out with the number of bytes
written divided by the stride. However, it is apparently possible we end
up with a stride of 0 there (not entirely sure it could happen with GL).
Probably when nothing was actually ever written (so we don't actually
have a stride set). Just avoid the division by zero by setting the count
to 0.

Reviewed-by: Jose Fonseca <jfonseca@vmware.com>
src/gallium/auxiliary/draw/draw_pt.c

index 50286149cd48de91a555e720c8e7d72f357489e4..eeebca30ce7983c2beacf9b62023bf44784eac60 100644 (file)
@@ -440,7 +440,8 @@ resolve_draw_info(const struct pipe_draw_info *raw_info,
       struct draw_so_target *target =
          (struct draw_so_target *)info->count_from_stream_output;
       assert(vertex_buffer != NULL);
-      info->count = target->internal_offset / vertex_buffer->stride;
+      info->count = vertex_buffer->stride == 0 ? 0 :
+                       target->internal_offset / vertex_buffer->stride;
 
       /* Stream output draw can not be indexed */
       debug_assert(!info->index_size);