draw: Revert code reorg in previous change.
authorJosé Fonseca <jfonseca@vmware.com>
Thu, 31 Mar 2011 11:20:10 +0000 (12:20 +0100)
committerJosé Fonseca <jfonseca@vmware.com>
Thu, 31 Mar 2011 11:20:37 +0000 (12:20 +0100)
Because

  fetch_count = max_index - min_index + 1

overflows for min_index = 0 and max_index = 0xffffffff.

Fixes fdo 35815.

src/gallium/auxiliary/draw/draw_pt_vsplit_tmp.h

index 2acaef3..10842a3 100644 (file)
@@ -49,9 +49,6 @@ CONCAT(vsplit_primitive_, ELT_TYPE)(struct vsplit_frontend *vsplit,
 
    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)
@@ -70,7 +67,7 @@ CONCAT(vsplit_primitive_, ELT_TYPE)(struct vsplit_frontend *vsplit,
    }
 
    /* this is faster only when we fetch less elements than the normal path */
-   if (fetch_count > icount)
+   if (max_index - min_index > icount - 1)
       return FALSE;
 
    if (elt_bias < 0 && min_index < -elt_bias)
@@ -82,6 +79,9 @@ 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++) {