Mesa (master): mesa/st: cope with non-ibo index data in st_draw_feedback.c

Keith Whitwell keithw at kemper.freedesktop.org
Fri May 8 09:04:21 UTC 2009


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

Author: Keith Whitwell <keithw at vmware.com>
Date:   Thu May  7 11:46:08 2009 +0100

mesa/st: cope with non-ibo index data in st_draw_feedback.c

Previously only non-indexed or indicies-in-a-vbo cases were handled in
this code.  This change adds the missing regular indices-in-memory
case.

---

 src/mesa/state_tracker/st_draw_feedback.c |   23 +++++++++++++++--------
 1 files changed, 15 insertions(+), 8 deletions(-)

diff --git a/src/mesa/state_tracker/st_draw_feedback.c b/src/mesa/state_tracker/st_draw_feedback.c
index e533afd..32502a9 100644
--- a/src/mesa/state_tracker/st_draw_feedback.c
+++ b/src/mesa/state_tracker/st_draw_feedback.c
@@ -196,13 +196,10 @@ st_feedback_draw_vbo(GLcontext *ctx,
    draw_set_vertex_elements(draw, vp->num_inputs, velements);
 
    if (ib) {
-      unsigned indexSize;
       struct gl_buffer_object *bufobj = ib->obj;
-      struct st_buffer_object *stobj = st_buffer_object(bufobj);
+      unsigned indexSize;
       void *map;
 
-      index_buffer_handle = stobj->buffer;
-
       switch (ib->type) {
       case GL_UNSIGNED_INT:
          indexSize = 4;
@@ -215,9 +212,19 @@ st_feedback_draw_vbo(GLcontext *ctx,
 	 return;
       }
 
-      map = pipe_buffer_map(pipe->screen, index_buffer_handle,
-                            PIPE_BUFFER_USAGE_CPU_READ);
-      draw_set_mapped_element_buffer(draw, indexSize, map);
+      if (bufobj && bufobj->Name) {
+         struct st_buffer_object *stobj = st_buffer_object(bufobj);
+
+         index_buffer_handle = stobj->buffer;
+
+         map = pipe_buffer_map(pipe->screen, index_buffer_handle,
+                               PIPE_BUFFER_USAGE_CPU_READ);
+
+         draw_set_mapped_element_buffer(draw, indexSize, map);
+      }
+      else {
+         draw_set_mapped_element_buffer(draw, indexSize, (void *) ib->ptr);
+      }
    }
    else {
       /* no index/element buffer */
@@ -252,7 +259,7 @@ st_feedback_draw_vbo(GLcontext *ctx,
          draw_set_mapped_vertex_buffer(draw, i, NULL);
       }
    }
-   if (ib) {
+   if (index_buffer_handle) {
       pipe_buffer_unmap(pipe->screen, index_buffer_handle);
       draw_set_mapped_element_buffer(draw, 0, NULL);
    }




More information about the mesa-commit mailing list