mesa: Make sure that imm draws are flushed before other draws execute.
authorMathias Fröhlich <mathias.froehlich@web.de>
Fri, 1 Jun 2018 17:10:08 +0000 (19:10 +0200)
committerMathias Fröhlich <mathias.froehlich@web.de>
Tue, 5 Jun 2018 05:05:24 +0000 (07:05 +0200)
commit1ac4439d6278e6c5f9da5499bbc50362f0c6759b
tree036f347b512becd479d16164b5b4100e20e7ef9a
parenta7b74a77fa63efe6d6462ff4f201bea03fa23a33
mesa: Make sure that imm draws are flushed before other draws execute.

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.

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Tested-by: Kai Wasserbäch <kai@dev.carbon-project.org>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=106594
Signed-off-by: Mathias Fröhlich <Mathias.Froehlich@web.de>
src/mesa/main/context.h
src/mesa/main/draw_validate.c
src/mesa/vbo/vbo_exec_array.c
src/mesa/vbo/vbo_save_draw.c