st/mesa: improved draw_range_elements code
authorBrian Paul <brianp@vmware.com>
Fri, 12 Feb 2010 22:40:57 +0000 (15:40 -0700)
committerBrian Paul <brianp@vmware.com>
Fri, 12 Feb 2010 22:42:12 +0000 (15:42 -0700)
Don't use pipe->draw_range_elements() if min_index=max_index=~0 since
that doesn't provide any useful info.

Also, implement the loop around pipe->draw_range_elements() when
nr_prims > 1.

src/mesa/state_tracker/st_draw.c

index e1dcb154c1b3ba75e2d29a10734239f39facbb31..34df4d48dd485be340c69b8d316ed92f10ee329b 100644 (file)
@@ -645,20 +645,18 @@ st_draw_vbo(GLcontext *ctx,
       }
 
       /* draw */
-      if (nr_prims == 1 && pipe->draw_range_elements != NULL) {
-         i = 0;
-
+      if (pipe->draw_range_elements && min_index != ~0 && max_index != ~0) {
          /* XXX: exercise temporary path to pass min/max directly
           * through to driver & draw module.  These interfaces still
           * need a bit of work...
           */
-         prim = translate_prim( ctx, prims[i].mode );
+         for (i = 0; i < nr_prims; i++) {
+            prim = translate_prim( ctx, prims[i].mode );
 
-         pipe->draw_range_elements(pipe, indexBuf, indexSize,
-                                   min_index,
-                                   max_index,
-                                   prim,
-                                   prims[i].start + indexOffset, prims[i].count);
+            pipe->draw_range_elements(pipe, indexBuf, indexSize,
+                                      min_index, max_index, prim,
+                                      prims[i].start + indexOffset, prims[i].count);
+         }
       }
       else {
          for (i = 0; i < nr_prims; i++) {