diff options
author | Marek Olšák <[email protected]> | 2011-02-12 03:57:19 +0100 |
---|---|---|
committer | Marek Olšák <[email protected]> | 2011-02-14 21:50:07 +0100 |
commit | cfaf217135d8a8e903b3fbf380f18170df018f0c (patch) | |
tree | 1447b05de44ae5a0b47b595be041bf3b7f0475cb /src | |
parent | 5a01361ceaf29614ba008278e31cf2ffe85f251b (diff) |
vbo: bind arrays only when necessary
We don't need to call bind_arrays in the vbo module if the states
which the function depends on are not dirty.
Diffstat (limited to 'src')
-rw-r--r-- | src/mesa/main/mtypes.h | 1 | ||||
-rw-r--r-- | src/mesa/main/state.c | 2 | ||||
-rw-r--r-- | src/mesa/vbo/vbo_exec_array.c | 5 |
3 files changed, 8 insertions, 0 deletions
diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h index 09e17d91105..b7473e1ca8d 100644 --- a/src/mesa/main/mtypes.h +++ b/src/mesa/main/mtypes.h @@ -1643,6 +1643,7 @@ struct gl_array_attrib GLuint RestartIndex; GLbitfield NewState; /**< mask of _NEW_ARRAY_* values */ + GLboolean RebindArrays; /**< whether the VBO module should rebind arrays */ /* GL_ARB_vertex_buffer_object */ struct gl_buffer_object *ArrayBufferObj; diff --git a/src/mesa/main/state.c b/src/mesa/main/state.c index cce1b464f0c..502c429294c 100644 --- a/src/mesa/main/state.c +++ b/src/mesa/main/state.c @@ -662,6 +662,8 @@ _mesa_update_state_locked( struct gl_context *ctx ) ctx->NewState = 0; ctx->Driver.UpdateState(ctx, new_state); ctx->Array.NewState = 0; + if (!ctx->Array.RebindArrays) + ctx->Array.RebindArrays = (new_state & (_NEW_ARRAY | _NEW_PROGRAM)) != 0; } diff --git a/src/mesa/vbo/vbo_exec_array.c b/src/mesa/vbo/vbo_exec_array.c index 80085c17c5c..6749541b77f 100644 --- a/src/mesa/vbo/vbo_exec_array.c +++ b/src/mesa/vbo/vbo_exec_array.c @@ -502,8 +502,13 @@ recalculate_input_bindings(struct gl_context *ctx) static void bind_arrays(struct gl_context *ctx) { + if (!ctx->Array.RebindArrays) { + return; + } + bind_array_obj(ctx); recalculate_input_bindings(ctx); + ctx->Array.RebindArrays = GL_FALSE; } |