Mesa (master): draw: Fix bug when drawing ushort indices.

Jose Fonseca jrfonseca at kemper.freedesktop.org
Wed Mar 30 15:05:31 UTC 2011


Module: Mesa
Branch: master
Commit: 713230ff39cd22a2082c12b937889c3ef81973ac
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=713230ff39cd22a2082c12b937889c3ef81973ac

Author: José Fonseca <jfonseca at vmware.com>
Date:   Tue Mar 29 15:35:30 2011 +0100

draw: Fix bug when drawing ushort indices.

When the condition

 min_index == 0 && sizeof(ib[0]) == sizeof(draw_elts[0])

was true, we were wrongly ignoring istart and processing indices 0.

Reorder some statements to make the code easier to understand.

---

 src/gallium/auxiliary/draw/draw_pt_vsplit_tmp.h |   14 ++++++++------
 1 files changed, 8 insertions(+), 6 deletions(-)

diff --git a/src/gallium/auxiliary/draw/draw_pt_vsplit_tmp.h b/src/gallium/auxiliary/draw/draw_pt_vsplit_tmp.h
index 75dba8c..228da68 100644
--- a/src/gallium/auxiliary/draw/draw_pt_vsplit_tmp.h
+++ b/src/gallium/auxiliary/draw/draw_pt_vsplit_tmp.h
@@ -47,13 +47,18 @@ CONCAT(vsplit_primitive_, ELT_TYPE)(struct vsplit_frontend *vsplit,
    const ushort *draw_elts = NULL;
    unsigned i;
 
+   ib += istart;
+
+   fetch_start = min_index + elt_bias;
+   fetch_count = max_index - min_index + 1;
+
    /* use the ib directly */
    if (min_index == 0 && sizeof(ib[0]) == sizeof(draw_elts[0])) {
       if (icount > vsplit->max_vertices)
          return FALSE;
 
       for (i = 0; i < icount; i++) {
-         ELT_TYPE idx = ib[istart + i];
+         ELT_TYPE idx = ib[i];
          assert(idx >= min_index && idx <= max_index);
       }
       draw_elts = (const ushort *) ib;
@@ -65,7 +70,7 @@ CONCAT(vsplit_primitive_, ELT_TYPE)(struct vsplit_frontend *vsplit,
    }
 
    /* this is faster only when we fetch less elements than the normal path */
-   if (max_index - min_index > icount - 1)
+   if (fetch_count > icount)
       return FALSE;
 
    if (elt_bias < 0 && min_index < -elt_bias)
@@ -77,13 +82,10 @@ CONCAT(vsplit_primitive_, ELT_TYPE)(struct vsplit_frontend *vsplit,
          return FALSE;
    }
 
-   fetch_start = min_index + elt_bias;
-   fetch_count = max_index - min_index + 1;
-
    if (!draw_elts) {
       if (min_index == 0) {
          for (i = 0; i < icount; i++) {
-            ELT_TYPE idx = ib[istart + i];
+            ELT_TYPE idx = ib[i];
 
             assert(idx >= min_index && idx <= max_index);
             vsplit->draw_elts[i] = (ushort) idx;




More information about the mesa-commit mailing list