r600g: fix rendering with a vertex attrib having a zero stride
authorAlex Deucher <alexdeucher@gmail.com>
Mon, 13 Dec 2010 03:44:53 +0000 (22:44 -0500)
committerAlex Deucher <alexdeucher@gmail.com>
Mon, 13 Dec 2010 04:35:37 +0000 (23:35 -0500)
The hardware supports zero stride just fine.  This is a port
of 2af8a1983180fc0168c1e0e53bcc69ee3d684ea4 from r300g.

NOTE: This is a candidate for both the 7.9 and 7.10 branches.

Signed-off-by: Alex Deucher <alexdeucher@gmail.com>
src/gallium/drivers/r600/r600_state_common.c

index c647e77b3738e2262886a0f15c75d9e9a3ed3e2f..1333808c66f702800fe04a1f372050a81203d0f1 100644 (file)
@@ -187,11 +187,13 @@ void r600_set_vertex_buffers(struct pipe_context *ctx, unsigned count,
                        rctx->any_user_vbs = TRUE;
                pipe_resource_reference(&rctx->vertex_buffer[i].buffer, buffers[i].buffer);
 
+               /* The stride of zero means we will be fetching only the first
+                * vertex, so don't care about max_index. */
+               if (!vbo->stride)
+                       continue;
+
                if (vbo->max_index == ~0) {
-                       if (!vbo->stride)
-                               vbo->max_index = 1;
-                       else
-                               vbo->max_index = (vbo->buffer->width0 - vbo->buffer_offset) / vbo->stride;
+                       vbo->max_index = (vbo->buffer->width0 - vbo->buffer_offset) / vbo->stride;
                }
                max_index = MIN2(vbo->max_index, max_index);
        }