From: Marek Olšák Date: Wed, 8 Jun 2011 22:50:29 +0000 (+0200) Subject: r300g: fix draw_vbo splitting on r3xx-r4xx X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=578d4539ba72a9f52e0cb3f615bb04bf9407b574;p=mesa.git r300g: fix draw_vbo splitting on r3xx-r4xx NOTE: This is a candidate for the 7.10 branch. --- diff --git a/src/gallium/drivers/r300/r300_render.c b/src/gallium/drivers/r300/r300_render.c index 479503f8f65..d9399d78ef9 100644 --- a/src/gallium/drivers/r300/r300_render.c +++ b/src/gallium/drivers/r300/r300_render.c @@ -673,10 +673,11 @@ static void r300_draw_elements(struct r300_context *r300, indices3); } else { do { - if (indexSize == 2 && (start & 1)) - short_count = MIN2(count, 65535); - else - short_count = MIN2(count, 65534); + /* The maximum must be divisible by 4 and 3, + * so that quad and triangle lists are split correctly. + * + * Strips, loops, and fans won't work. */ + short_count = MIN2(count, 65532); r300_emit_draw_elements(r300, indexBuffer, indexSize, info->min_index, info->max_index, @@ -722,7 +723,11 @@ static void r300_draw_arrays(struct r300_context *r300, r300_emit_draw_arrays(r300, info->mode, count); } else { do { - short_count = MIN2(count, 65535); + /* The maximum must be divisible by 4 and 3, + * so that quad and triangle lists are split correctly. + * + * Strips, loops, and fans won't work. */ + short_count = MIN2(count, 65532); r300_emit_draw_arrays(r300, info->mode, short_count); start += short_count;