diff options
author | Marek Olšák <maraeo@gmail.com> | 2011-03-07 19:34:34 +0100 |
---|---|---|
committer | Marek Olšák <maraeo@gmail.com> | 2011-03-08 22:14:47 +0100 |
commit | ef58598c1cf2ac689f67c75b2f477f2c404fce98 (patch) | |
tree | 841362b09c27bcdfdcd0a54533d31c3a28e677d0 /src | |
parent | ff8baec5bc377cab716b0510d98195fb5564fb1a (diff) |
vbo: mark vertex arrays as dirty when re-binding
This fixes:
https://bugs.freedesktop.org/show_bug.cgi?id=34378
Diffstat (limited to 'src')
-rw-r--r-- | src/mesa/vbo/vbo_exec_array.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/src/mesa/vbo/vbo_exec_array.c b/src/mesa/vbo/vbo_exec_array.c index 5818b134d3..98d6badc47 100644 --- a/src/mesa/vbo/vbo_exec_array.c +++ b/src/mesa/vbo/vbo_exec_array.c @@ -461,6 +461,14 @@ recalculate_input_bindings(struct gl_context *ctx) inputs[VERT_ATTRIB_GENERIC0 + i] = &vbo->generic_currval[i]; const_inputs |= 1 << (VERT_ATTRIB_GENERIC0 + i); } + + /* There is no need to make _NEW_ARRAY dirty here for the TnL program, + * because it already takes care of invalidating the state necessary + * to revalidate vertex arrays. Not marking the state as dirty also + * improves performance (quite significantly in some apps). + */ + if (!ctx->VertexProgram._MaintainTnlProgram) + ctx->NewState |= _NEW_ARRAY; break; case VP_NV: @@ -486,6 +494,8 @@ recalculate_input_bindings(struct gl_context *ctx) inputs[i] = &vbo->generic_currval[i - VERT_ATTRIB_GENERIC0]; const_inputs |= 1 << i; } + + ctx->NewState |= _NEW_ARRAY; break; case VP_ARB: @@ -521,8 +531,9 @@ recalculate_input_bindings(struct gl_context *ctx) inputs[VERT_ATTRIB_GENERIC0 + i] = &vbo->generic_currval[i]; const_inputs |= 1 << (VERT_ATTRIB_GENERIC0 + i); } - } + + ctx->NewState |= _NEW_ARRAY; break; } |