The recent patch
mesa: Remove FLUSH_VERTICES from VAO state changes.
Pending draw calls on immediate mode or display list calls do not depend on changes of the VAO state. So, remove calls to FLUSH_VERTICES and flag _NEW_ARRAY as appropriate.
uncovered a problem that non immediate mode draw calls do only flush outstanding immediate mode draws if FLUSH_UPDATE_CURRENT is set in ctx->Driver.NeedFlush. In that case, due to the sequence of _mesa_set_draw_vao commands we could end up with the VAO from the FLUSH_VERTICES call set into gl_context::Array._DrawVAO when the array draw is executed. So the change pulls FLUSH_CURRENT out of _mesa_validate_* calls into the array draw calls being validated. The change introduces a new macro FLUSH_FOR_DRAW beside FLUSH_VERTICES and FLUSH_CURRENT that flushes on changed current attributes as well as on outstanding immediate mode draw calls. Use FLUSH_FOR_DRAW in the non immediate mode draw code paths.
1ac4439d62 mesa: Make sure that imm draws are flushed before other draws execute.
src/mesa/main/context.h | 16 +++++++++
src/mesa/main/draw_validate.c | 26 ---------------
src/mesa/vbo/vbo_exec_array.c | 77 ++++++++++++++++++++++---------------------
src/mesa/vbo/vbo_save_draw.c | 2 +-
4 files changed, 56 insertions(+), 65 deletions(-)