[Mesa-dev] [PATCH] draw: fix primitive restart bug by using the index buffer offset

Brian Paul brianp at vmware.com
Thu May 24 10:16:24 PDT 2012


The code which scans the index buffer for restart indexes wasn't adding
the index buffer offset so we were always starting at offset=0.  The
offset is usually zero so it wasn't noticed before.

Fixes a failure in the piglit primitive-restart test when testing
vertex data + index data in a single VBO.

NOTE: This is a candidate for the 8.0 branch.
---
 src/gallium/auxiliary/draw/draw_pt.c |    9 ++++++---
 1 files changed, 6 insertions(+), 3 deletions(-)

diff --git a/src/gallium/auxiliary/draw/draw_pt.c b/src/gallium/auxiliary/draw/draw_pt.c
index dbe5e94..2c4edc0 100644
--- a/src/gallium/auxiliary/draw/draw_pt.c
+++ b/src/gallium/auxiliary/draw/draw_pt.c
@@ -368,25 +368,28 @@ draw_pt_arrays_restart(struct draw_context *draw,
 
    if (draw->pt.user.elts) {
       /* indexed prims (draw_elements) */
+      const char *elts =
+         (const char *) draw->pt.user.elts + draw->pt.index_buffer.offset;
+
       cur_start = start;
       cur_count = 0;
 
       switch (draw->pt.user.eltSize) {
       case 1:
          {
-            const ubyte *elt_ub = (const ubyte *) draw->pt.user.elts;
+            const ubyte *elt_ub = (const ubyte *) elts;
             PRIM_RESTART_LOOP(elt_ub);
          }
          break;
       case 2:
          {
-            const ushort *elt_us = (const ushort *) draw->pt.user.elts;
+            const ushort *elt_us = (const ushort *) elts;
             PRIM_RESTART_LOOP(elt_us);
          }
          break;
       case 4:
          {
-            const uint *elt_ui = (const uint *) draw->pt.user.elts;
+            const uint *elt_ui = (const uint *) elts;
             PRIM_RESTART_LOOP(elt_ui);
          }
          break;
-- 
1.7.3.4



More information about the mesa-dev mailing list