Mesa (gallium-0.2): st: reduce unnecessary calls to pipe-> set_vertex_buffers()

Alan Hourihane alanh at kemper.freedesktop.org
Mon Dec 15 03:30:34 PST 2008


Module: Mesa
Branch: gallium-0.2
Commit: 72d456494a7074f11ab9c735d0caeae4e09a33e7
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=72d456494a7074f11ab9c735d0caeae4e09a33e7

Author: Keith Whitwell <keith at tungstengraphics.com>
Date:   Wed Dec 10 15:43:21 2008 +0000

st: reduce unnecessary calls to pipe->set_vertex_buffers()

---

 src/mesa/state_tracker/st_draw.c |   19 ++++++++++++++-----
 1 files changed, 14 insertions(+), 5 deletions(-)

diff --git a/src/mesa/state_tracker/st_draw.c b/src/mesa/state_tracker/st_draw.c
index 8f27076..3229e93 100644
--- a/src/mesa/state_tracker/st_draw.c
+++ b/src/mesa/state_tracker/st_draw.c
@@ -409,6 +409,7 @@ setup_non_interleaved_attribs(GLcontext *ctx,
                               const struct st_vertex_program *vp,
                               const struct gl_client_array **arrays,
                               GLuint max_index,
+                              GLboolean *userSpace,
                               struct pipe_vertex_buffer vbuffer[],
                               struct pipe_vertex_element velements[])
 {
@@ -420,6 +421,8 @@ setup_non_interleaved_attribs(GLcontext *ctx,
       struct gl_buffer_object *bufobj = arrays[mesaAttr]->BufferObj;
       GLsizei stride = arrays[mesaAttr]->StrideB;
 
+      *userSpace = GL_FALSE;
+
       if (bufobj && bufobj->Name) {
          /* Attribute data is in a VBO.
           * Recall that for VBOs, the gl_client_array->Ptr field is
@@ -439,6 +442,8 @@ setup_non_interleaved_attribs(GLcontext *ctx,
          uint bytes;
          /*printf("user-space array %d stride %d\n", attr, stride);*/
 	
+         *userSpace = GL_TRUE;
+
          /* wrap user data */
          if (arrays[mesaAttr]->Ptr) {
             /* user's vertex array */
@@ -555,7 +560,7 @@ st_draw_vbo(GLcontext *ctx,
    else {
       /*printf("Draw non-interleaved\n");*/
       setup_non_interleaved_attribs(ctx, vp, arrays, max_index,
-                                    vbuffer, velements);
+                                    &userSpace, vbuffer, velements);
       num_vbuffers = vp->num_inputs;
       num_velements = vp->num_inputs;
    }
@@ -665,13 +670,17 @@ st_draw_vbo(GLcontext *ctx,
    }
 
    /* unreference buffers (frees wrapped user-space buffer objects) */
-   for (attr = 0; attr < num_vbuffers; attr++) {
-      pipe_buffer_reference(pipe->screen, &vbuffer[attr].buffer, NULL);
-      assert(!vbuffer[attr].buffer);
+   if (userSpace) 
+   {
+      for (attr = 0; attr < num_vbuffers; attr++) {
+         pipe_buffer_reference(pipe->screen, &vbuffer[attr].buffer, NULL);
+         assert(!vbuffer[attr].buffer);
+      }
+      pipe->set_vertex_buffers(pipe, 0, NULL);
    }
-   pipe->set_vertex_buffers(pipe, num_vbuffers, vbuffer);
 }
 
+
 void st_init_draw( struct st_context *st )
 {
    GLcontext *ctx = st->ctx;



More information about the mesa-commit mailing list