Mesa (gallium-0.1): st: reduce unnecessary calls to pipe-> set_vertex_buffers()
Keith Whitwell
keithw at kemper.freedesktop.org
Fri Dec 12 16:58:22 UTC 2008
Module: Mesa
Branch: gallium-0.1
Commit: eb20e2984e51e632ef1a51620db7aca3eb89dafa
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=eb20e2984e51e632ef1a51620db7aca3eb89dafa
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