mesa: Update VAO internal state when setting the _DrawVAO.
Update the VAO internal state on Array._DrawVAO instead of Array.VAO. Also the VAO internal state update gets triggered now by a change of Array._DrawVAO instead of the _NEW_ARRAY state flag. Also no driver looks at any VAO's NewArrays value from within the Driver.UpdateState callback. So it should be safe to move this update into the _mesa_set_draw_vao method. Reviewed-by: Brian Paul <brianp@vmware.com> Signed-off-by: Mathias Fröhlich <Mathias.Froehlich@web.de>
This commit is contained in:
parent
c4c56ff303
commit
d3c604e12e
|
@ -461,6 +461,12 @@ _mesa_update_vao_derived_arrays(struct gl_context *ctx,
|
|||
{
|
||||
/* Make sure we do not run into problems with shared objects */
|
||||
assert(!vao->SharedAndImmutable || vao->NewArrays == 0);
|
||||
|
||||
/*
|
||||
* Stay tuned, the next series scans for duplicate bindings in this
|
||||
* function. So that drivers can easily know the minimum unique set
|
||||
* of bindings.
|
||||
*/
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -360,9 +360,6 @@ _mesa_update_state_locked( struct gl_context *ctx )
|
|||
update_program(ctx);
|
||||
}
|
||||
|
||||
if (new_state & _NEW_ARRAY)
|
||||
_mesa_update_vao_derived_arrays(ctx, ctx->Array.VAO);
|
||||
|
||||
out:
|
||||
new_prog_state |= update_program_constants(ctx);
|
||||
|
||||
|
@ -377,7 +374,6 @@ _mesa_update_state_locked( struct gl_context *ctx )
|
|||
*/
|
||||
ctx->Driver.UpdateState(ctx);
|
||||
ctx->NewState = 0;
|
||||
ctx->Array.VAO->NewArrays = 0x0;
|
||||
}
|
||||
|
||||
|
||||
|
@ -496,8 +492,14 @@ _mesa_set_draw_vao(struct gl_context *ctx, struct gl_vertex_array_object *vao,
|
|||
struct gl_vertex_array_object **ptr = &ctx->Array._DrawVAO;
|
||||
if (*ptr != vao) {
|
||||
_mesa_reference_vao_(ctx, ptr, vao);
|
||||
|
||||
ctx->NewDriverState |= ctx->DriverFlags.NewArray;
|
||||
} else if (vao->NewArrays) {
|
||||
}
|
||||
|
||||
if (vao->NewArrays) {
|
||||
_mesa_update_vao_derived_arrays(ctx, vao);
|
||||
vao->NewArrays = 0;
|
||||
|
||||
ctx->NewDriverState |= ctx->DriverFlags.NewArray;
|
||||
}
|
||||
|
||||
|
|
|
@ -231,9 +231,6 @@ vbo_exec_bind_arrays(struct gl_context *ctx)
|
|||
assert(!_mesa_is_bufferobj(exec->vtx.bufferobj) ||
|
||||
(vao_enabled & ~vao->VertexAttribBufferMask) == 0);
|
||||
|
||||
_mesa_update_vao_derived_arrays(ctx, vao);
|
||||
vao->NewArrays = 0;
|
||||
|
||||
_mesa_set_draw_vao(ctx, vao, _vbo_get_vao_filter(mode));
|
||||
/* The exec VAO is not immutable, so we need to set manually */
|
||||
ctx->NewDriverState |= ctx->DriverFlags.NewArray;
|
||||
|
|
Loading…
Reference in New Issue