aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorBrian Paul <[email protected]>2012-05-24 11:09:18 -0600
committerBrian Paul <[email protected]>2012-05-25 10:02:22 -0600
commit1609efb4180659322557380550d17ed7adb8eae2 (patch)
treeb0c28d79339a82776e8d0a6ab4281cb8b1117e76 /src
parent93ea5cd80b98219100782feb3fee9d7283059036 (diff)
draw: fix primitive restart bug by using the index buffer offset
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.
Diffstat (limited to 'src')
-rw-r--r--src/gallium/auxiliary/draw/draw_pt.c9
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 dbe5e9470b2..2c4edc0f946 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;