Mesa (master): st/mesa: improved draw_range_elements code

Brian Paul brianp at kemper.freedesktop.org
Fri Feb 12 22:46:30 UTC 2010


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

Author: Brian Paul <brianp at vmware.com>
Date:   Fri Feb 12 15:40:57 2010 -0700

st/mesa: improved draw_range_elements code

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 |   16 +++++++---------
 1 files changed, 7 insertions(+), 9 deletions(-)

diff --git a/src/mesa/state_tracker/st_draw.c b/src/mesa/state_tracker/st_draw.c
index e1dcb15..34df4d4 100644
--- a/src/mesa/state_tracker/st_draw.c
+++ b/src/mesa/state_tracker/st_draw.c
@@ -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++) {




More information about the mesa-commit mailing list