The current code would just calculate min/max_index for the first prim unconditionally, which is wrong if nr_prims > 1.
This would some cases like that the index is stored in element array buffer object and drawing by glMultiDrawEelements. Thus it fixes some intel oglc primbuff test cases. Signed-off-by: Yuanhan Liu <yuanhan....@linux.intel.com> --- src/mesa/drivers/dri/i965/brw_draw.c | 18 ++++++++++++++++-- 1 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/mesa/drivers/dri/i965/brw_draw.c b/src/mesa/drivers/dri/i965/brw_draw.c index 621195d..3d0cc7c 100644 --- a/src/mesa/drivers/dri/i965/brw_draw.c +++ b/src/mesa/drivers/dri/i965/brw_draw.c @@ -585,8 +585,22 @@ void brw_draw_prims( struct gl_context *ctx, return; if (!vbo_all_varyings_in_vbos(arrays)) { - if (!index_bounds_valid) - vbo_get_minmax_index(ctx, prim, ib, &min_index, &max_index); + if (!index_bounds_valid) { + struct _mesa_index_buffer tmp_ib; + GLuint tmp_min, tmp_max; + int i; + + min_index = ~0; + max_index = 0; + tmp_ib = *ib; + + for (i = 0; i < nr_prims; i++) { + tmp_ib.ptr = ib->ptr + prim[i].start * vbo_sizeof_ib_type(ib->type); + vbo_get_minmax_index(ctx, &prim[i], &tmp_ib, &tmp_min, &tmp_max); + min_index = MIN2(min_index, tmp_min); + max_index = MAX2(max_index, tmp_max); + } + } /* Decide if we want to rebase. If so we end up recursing once * only into this function. -- 1.7.4.4 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev