<div dir="ltr"><div>Reviewed-by: Marek Olšák <<a href="mailto:marek.olsak@amd.com">marek.olsak@amd.com</a>></div><div><br></div><div>Marek<br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Sat, Jun 2, 2018 at 2:51 AM,  <span dir="ltr"><<a href="mailto:Mathias.Froehlich@gmx.net" target="_blank">Mathias.Froehlich@gmx.net</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">From: Mathias Fröhlich <<a href="mailto:mathias.froehlich@web.de">mathias.froehlich@web.de</a>><br>
<br>
Hi all,<br>
<br>
The below patch fixes a recently introduced failure of my VAO rework.<br>
I could finally reproduce the problem using the provided apitrace<br>
(thanks Kai for the hint with the lower left corner).<br>
The change is slightly different than what I put initially into the<br>
bugreport.<br>
The patch survived piglit quick and dEQP in radeonsi and did not<br>
introduce regressions to the base version with intels CI system.<br>
<br>
Please review!<br>
<br>
best<br>
<br>
Mathias<br>
<br>
<br>
<br>
<br>
The recent patch<br>
<br>
    mesa: Remove FLUSH_VERTICES from VAO state changes.<br>
<br>
    Pending draw calls on immediate mode or display list calls do<br>
    not depend on changes of the VAO state. So, remove calls to<br>
    FLUSH_VERTICES and flag _NEW_ARRAY as appropriate.<br>
<br>
uncovered a problem that non immediate mode draw calls do only<br>
flush outstanding immediate mode draws if FLUSH_UPDATE_CURRENT<br>
is set in ctx->Driver.NeedFlush.<br>
In that case, due to the sequence of _mesa_set_draw_vao commands<br>
we could end up with the VAO from the FLUSH_VERTICES call set<br>
into gl_context::Array._DrawVAO when the array draw is executed.<br>
So the change pulls FLUSH_CURRENT out of _mesa_validate_* calls<br>
into the array draw calls being validated.<br>
The change introduces a new macro FLUSH_FOR_DRAW beside FLUSH_VERTICES<br>
and FLUSH_CURRENT that flushes on changed current attributes as well<br>
as on outstanding immediate mode draw calls. Use FLUSH_FOR_DRAW<br>
in the non immediate mode draw code paths.<br>
<br>
Bugzilla: <a href="https://bugs.freedesktop.org/show_bug.cgi?id=106594" rel="noreferrer" target="_blank">https://bugs.freedesktop.org/<wbr>show_bug.cgi?id=106594</a><br>
Signed-off-by: Mathias Fröhlich <<a href="mailto:Mathias.Froehlich@web.de">Mathias.Froehlich@web.de</a>><br>
---<br>
 src/mesa/main/context.h       | 16 ++++++++<br>
 src/mesa/main/draw_validate.c | 26 ------------<br>
 src/mesa/vbo/vbo_exec_array.c | 77 ++++++++++++++++++------------<wbr>-----<br>
 src/mesa/vbo/vbo_save_draw.c  |  2 +-<br>
 4 files changed, 56 insertions(+), 65 deletions(-)<br>
<br>
diff --git a/src/mesa/main/context.h b/src/mesa/main/context.h<br>
index 77520f678f..d50438fd7f 100644<br>
--- a/src/mesa/main/context.h<br>
+++ b/src/mesa/main/context.h<br>
@@ -232,6 +232,22 @@ do {                                                               \<br>
    ctx->NewState |= newstate;                                  \<br>
 } while (0)<br>
<br>
+/**<br>
+ * Flush vertices.<br>
+ *<br>
+ * \param ctx GL context.<br>
+ *<br>
+ * Checks if dd_function_table::NeedFlush is marked to flush stored vertices<br>
+ * or current state and calls dd_function_table::<wbr>FlushVertices if so.<br>
+ */<br>
+#define FLUSH_FOR_DRAW(ctx)                                     \<br>
+do {                                                            \<br>
+   if (MESA_VERBOSE & VERBOSE_STATE)                            \<br>
+      _mesa_debug(ctx, "FLUSH_FOR_DRAW in %s\n", __func__);     \<br>
+   if (ctx->Driver.NeedFlush)                                   \<br>
+      vbo_exec_FlushVertices(ctx, ctx->Driver.NeedFlush);       \<br>
+} while (0)<br>
+<br>
 /**<br>
  * Macro to assert that the API call was made outside the<br>
  * glBegin()/glEnd() pair, with return value.<br>
diff --git a/src/mesa/main/draw_validate.<wbr>c b/src/mesa/main/draw_validate.<wbr>c<br>
index bcb2d91306..352263c5c7 100644<br>
--- a/src/mesa/main/draw_validate.<wbr>c<br>
+++ b/src/mesa/main/draw_validate.<wbr>c<br>
@@ -696,8 +696,6 @@ _mesa_validate_DrawElements(<wbr>struct gl_context *ctx,<br>
                             GLenum mode, GLsizei count, GLenum type,<br>
                             const GLvoid *indices)<br>
 {<br>
-   FLUSH_CURRENT(ctx, 0);<br>
-<br>
    return validate_DrawElements_common(<wbr>ctx, mode, count, type, indices,<br>
                                        "glDrawElements");<br>
 }<br>
@@ -716,8 +714,6 @@ _mesa_validate_<wbr>MultiDrawElements(struct gl_context *ctx,<br>
 {<br>
    GLsizei i;<br>
<br>
-   FLUSH_CURRENT(ctx, 0);<br>
-<br>
    /*<br>
     * Section 2.3.1 (Errors) of the OpenGL 4.5 (Core Profile) spec says:<br>
     *<br>
@@ -780,8 +776,6 @@ _mesa_validate_<wbr>DrawRangeElements(struct gl_context *ctx, GLenum mode,<br>
                                  GLsizei count, GLenum type,<br>
                                  const GLvoid *indices)<br>
 {<br>
-   FLUSH_CURRENT(ctx, 0);<br>
-<br>
    if (end < start) {<br>
       _mesa_error(ctx, GL_INVALID_VALUE, "glDrawRangeElements(end<<wbr>start)");<br>
       return GL_FALSE;<br>
@@ -895,8 +889,6 @@ static bool<br>
 validate_draw_arrays(struct gl_context *ctx, const char *func,<br>
                      GLenum mode, GLsizei count, GLsizei numInstances)<br>
 {<br>
-   FLUSH_CURRENT(ctx, 0);<br>
-<br>
    if (count < 0) {<br>
       _mesa_error(ctx, GL_INVALID_VALUE, "%s(count)", func);<br>
       return false;<br>
@@ -971,8 +963,6 @@ _mesa_validate_<wbr>MultiDrawArrays(struct gl_context *ctx, GLenum mode,<br>
 {<br>
    int i;<br>
<br>
-   FLUSH_CURRENT(ctx, 0);<br>
-<br>
    if (!_mesa_valid_prim_mode(ctx, mode, "glMultiDrawArrays"))<br>
       return false;<br>
<br>
@@ -1018,8 +1008,6 @@ _mesa_validate_<wbr>DrawElementsInstanced(struct gl_context *ctx,<br>
                                      GLenum mode, GLsizei count, GLenum type,<br>
                                      const GLvoid *indices, GLsizei numInstances)<br>
 {<br>
-   FLUSH_CURRENT(ctx, 0);<br>
-<br>
    if (numInstances < 0) {<br>
       _mesa_error(ctx, GL_INVALID_VALUE,<br>
                   "glDrawElementsInstanced(<wbr>numInstances=%d)", numInstances);<br>
@@ -1039,8 +1027,6 @@ _mesa_validate_<wbr>DrawTransformFeedback(struct gl_context *ctx,<br>
                                      GLuint stream,<br>
                                      GLsizei numInstances)<br>
 {<br>
-   FLUSH_CURRENT(ctx, 0);<br>
-<br>
    if (!_mesa_valid_prim_mode(ctx, mode, "glDrawTransformFeedback*(<wbr>mode)")) {<br>
       return GL_FALSE;<br>
    }<br>
@@ -1244,8 +1230,6 @@ _mesa_validate_<wbr>DrawArraysIndirect(struct gl_context *ctx,<br>
 {<br>
    const unsigned drawArraysNumParams = 4;<br>
<br>
-   FLUSH_CURRENT(ctx, 0);<br>
-<br>
    return valid_draw_indirect(ctx, mode,<br>
                               indirect, drawArraysNumParams * sizeof(GLuint),<br>
                               "glDrawArraysIndirect");<br>
@@ -1258,8 +1242,6 @@ _mesa_validate_<wbr>DrawElementsIndirect(struct gl_context *ctx,<br>
 {<br>
    const unsigned drawElementsNumParams = 5;<br>
<br>
-   FLUSH_CURRENT(ctx, 0);<br>
-<br>
    return valid_draw_indirect_elements(<wbr>ctx, mode, type,<br>
                                        indirect, drawElementsNumParams * sizeof(GLuint),<br>
                                        "glDrawElementsIndirect");<br>
@@ -1274,8 +1256,6 @@ _mesa_validate_<wbr>MultiDrawArraysIndirect(struct gl_context *ctx,<br>
    GLsizeiptr size = 0;<br>
    const unsigned drawArraysNumParams = 4;<br>
<br>
-   FLUSH_CURRENT(ctx, 0);<br>
-<br>
    /* caller has converted stride==0 to drawArraysNumParams * sizeof(GLuint) */<br>
    assert(stride != 0);<br>
<br>
@@ -1304,8 +1284,6 @@ _mesa_validate_<wbr>MultiDrawElementsIndirect(<wbr>struct gl_context *ctx,<br>
    GLsizeiptr size = 0;<br>
    const unsigned drawElementsNumParams = 5;<br>
<br>
-   FLUSH_CURRENT(ctx, 0);<br>
-<br>
    /* caller has converted stride==0 to drawElementsNumParams * sizeof(GLuint) */<br>
    assert(stride != 0);<br>
<br>
@@ -1385,8 +1363,6 @@ _mesa_validate_<wbr>MultiDrawArraysIndirectCount(<wbr>struct gl_context *ctx,<br>
    GLsizeiptr size = 0;<br>
    const unsigned drawArraysNumParams = 4;<br>
<br>
-   FLUSH_CURRENT(ctx, 0);<br>
-<br>
    /* caller has converted stride==0 to drawArraysNumParams * sizeof(GLuint) */<br>
    assert(stride != 0);<br>
<br>
@@ -1418,8 +1394,6 @@ _mesa_validate_<wbr>MultiDrawElementsIndirectCount<wbr>(struct gl_context *ctx,<br>
    GLsizeiptr size = 0;<br>
    const unsigned drawElementsNumParams = 5;<br>
<br>
-   FLUSH_CURRENT(ctx, 0);<br>
-<br>
    /* caller has converted stride==0 to drawElementsNumParams * sizeof(GLuint) */<br>
    assert(stride != 0);<br>
<br>
diff --git a/src/mesa/vbo/vbo_exec_array.<wbr>c b/src/mesa/vbo/vbo_exec_array.<wbr>c<br>
index e74e1bd458..792907ac04 100644<br>
--- a/src/mesa/vbo/vbo_exec_array.<wbr>c<br>
+++ b/src/mesa/vbo/vbo_exec_array.<wbr>c<br>
@@ -530,9 +530,9 @@ vbo_exec_DrawArrays(GLenum mode, GLint start, GLsizei count)<br>
       _mesa_debug(ctx, "glDrawArrays(%s, %d, %d)\n",<br>
                   _mesa_enum_to_string(mode), start, count);<br>
<br>
-   if (_mesa_is_no_error_enabled(<wbr>ctx)) {<br>
-      FLUSH_CURRENT(ctx, 0);<br>
+   FLUSH_FOR_DRAW(ctx);<br>
<br>
+   if (_mesa_is_no_error_enabled(<wbr>ctx)) {<br>
       _mesa_set_draw_vao(ctx, ctx->Array.VAO, enabled_filter(ctx));<br>
<br>
       if (ctx->NewState)<br>
@@ -568,10 +568,9 @@ vbo_exec_DrawArraysInstanced(<wbr>GLenum mode, GLint start, GLsizei count,<br>
       _mesa_debug(ctx, "glDrawArraysInstanced(%s, %d, %d, %d)\n",<br>
                   _mesa_enum_to_string(mode), start, count, numInstances);<br>
<br>
+   FLUSH_FOR_DRAW(ctx);<br>
<br>
    if (_mesa_is_no_error_enabled(<wbr>ctx)) {<br>
-      FLUSH_CURRENT(ctx, 0);<br>
-<br>
       _mesa_set_draw_vao(ctx, ctx->Array.VAO, enabled_filter(ctx));<br>
<br>
       if (ctx->NewState)<br>
@@ -610,9 +609,9 @@ vbo_exec_<wbr>DrawArraysInstancedBaseInstanc<wbr>e(GLenum mode, GLint first,<br>
                   _mesa_enum_to_string(mode), first, count,<br>
                   numInstances, baseInstance);<br>
<br>
-   if (_mesa_is_no_error_enabled(<wbr>ctx)) {<br>
-      FLUSH_CURRENT(ctx, 0);<br>
+   FLUSH_FOR_DRAW(ctx);<br>
<br>
+   if (_mesa_is_no_error_enabled(<wbr>ctx)) {<br>
       _mesa_set_draw_vao(ctx, ctx->Array.VAO, enabled_filter(ctx));<br>
<br>
       if (ctx->NewState)<br>
@@ -650,9 +649,9 @@ vbo_exec_MultiDrawArrays(<wbr>GLenum mode, const GLint *first,<br>
                   "glMultiDrawArrays(%s, %p, %p, %d)\n",<br>
                   _mesa_enum_to_string(mode), first, count, primcount);<br>
<br>
-   if (_mesa_is_no_error_enabled(<wbr>ctx)) {<br>
-      FLUSH_CURRENT(ctx, 0);<br>
+   FLUSH_FOR_DRAW(ctx);<br>
<br>
+   if (_mesa_is_no_error_enabled(<wbr>ctx)) {<br>
       _mesa_set_draw_vao(ctx, ctx->Array.VAO, enabled_filter(ctx));<br>
<br>
       if (ctx->NewState)<br>
@@ -873,9 +872,9 @@ vbo_exec_<wbr>DrawRangeElementsBaseVertex(<wbr>GLenum mode, GLuint start, GLuint end,<br>
                   _mesa_enum_to_string(mode), start, end, count,<br>
                   _mesa_enum_to_string(type), indices, basevertex);<br>
<br>
-   if (_mesa_is_no_error_enabled(<wbr>ctx)) {<br>
-      FLUSH_CURRENT(ctx, 0);<br>
+   FLUSH_FOR_DRAW(ctx);<br>
<br>
+   if (_mesa_is_no_error_enabled(<wbr>ctx)) {<br>
       _mesa_set_draw_vao(ctx, ctx->Array.VAO, enabled_filter(ctx));<br>
<br>
       if (ctx->NewState)<br>
@@ -984,9 +983,9 @@ vbo_exec_DrawElements(GLenum mode, GLsizei count, GLenum type,<br>
                   _mesa_enum_to_string(mode), count,<br>
                   _mesa_enum_to_string(type), indices);<br>
<br>
-   if (_mesa_is_no_error_enabled(<wbr>ctx)) {<br>
-      FLUSH_CURRENT(ctx, 0);<br>
+   FLUSH_FOR_DRAW(ctx);<br>
<br>
+   if (_mesa_is_no_error_enabled(<wbr>ctx)) {<br>
       _mesa_set_draw_vao(ctx, ctx->Array.VAO, enabled_filter(ctx));<br>
<br>
       if (ctx->NewState)<br>
@@ -1017,9 +1016,9 @@ vbo_exec_<wbr>DrawElementsBaseVertex(GLenum mode, GLsizei count, GLenum type,<br>
                   _mesa_enum_to_string(mode), count,<br>
                   _mesa_enum_to_string(type), indices);<br>
<br>
-   if (_mesa_is_no_error_enabled(<wbr>ctx)) {<br>
-      FLUSH_CURRENT(ctx, 0);<br>
+   FLUSH_FOR_DRAW(ctx);<br>
<br>
+   if (_mesa_is_no_error_enabled(<wbr>ctx)) {<br>
       _mesa_set_draw_vao(ctx, ctx->Array.VAO, enabled_filter(ctx));<br>
<br>
       if (ctx->NewState)<br>
@@ -1050,9 +1049,9 @@ vbo_exec_<wbr>DrawElementsInstanced(GLenum mode, GLsizei count, GLenum type,<br>
                   _mesa_enum_to_string(mode), count,<br>
                   _mesa_enum_to_string(type), indices);<br>
<br>
-   if (_mesa_is_no_error_enabled(<wbr>ctx)) {<br>
-      FLUSH_CURRENT(ctx, 0);<br>
+   FLUSH_FOR_DRAW(ctx);<br>
<br>
+   if (_mesa_is_no_error_enabled(<wbr>ctx)) {<br>
       _mesa_set_draw_vao(ctx, ctx->Array.VAO, enabled_filter(ctx));<br>
<br>
       if (ctx->NewState)<br>
@@ -1089,9 +1088,9 @@ vbo_exec_<wbr>DrawElementsInstancedBaseVerte<wbr>x(GLenum mode, GLsizei count,<br>
                   _mesa_enum_to_string(type), indices,<br>
                   numInstances, basevertex);<br>
<br>
-   if (_mesa_is_no_error_enabled(<wbr>ctx)) {<br>
-      FLUSH_CURRENT(ctx, 0);<br>
+   FLUSH_FOR_DRAW(ctx);<br>
<br>
+   if (_mesa_is_no_error_enabled(<wbr>ctx)) {<br>
       _mesa_set_draw_vao(ctx, ctx->Array.VAO, enabled_filter(ctx));<br>
<br>
       if (ctx->NewState)<br>
@@ -1130,9 +1129,9 @@ vbo_exec_<wbr>DrawElementsInstancedBaseInsta<wbr>nce(GLenum mode, GLsizei count,<br>
                   _mesa_enum_to_string(type), indices,<br>
                   numInstances, baseInstance);<br>
<br>
-   if (_mesa_is_no_error_enabled(<wbr>ctx)) {<br>
-      FLUSH_CURRENT(ctx, 0);<br>
+   FLUSH_FOR_DRAW(ctx);<br>
<br>
+   if (_mesa_is_no_error_enabled(<wbr>ctx)) {<br>
       _mesa_set_draw_vao(ctx, ctx->Array.VAO, enabled_filter(ctx));<br>
<br>
       if (ctx->NewState)<br>
@@ -1173,9 +1172,9 @@ vbo_exec_<wbr>DrawElementsInstancedBaseVerte<wbr>xBaseInstance(GLenum mode,<br>
                   _mesa_enum_to_string(type), indices,<br>
                   numInstances, basevertex, baseInstance);<br>
<br>
-   if (_mesa_is_no_error_enabled(<wbr>ctx)) {<br>
-      FLUSH_CURRENT(ctx, 0);<br>
+   FLUSH_FOR_DRAW(ctx);<br>
<br>
+   if (_mesa_is_no_error_enabled(<wbr>ctx)) {<br>
       _mesa_set_draw_vao(ctx, ctx->Array.VAO, enabled_filter(ctx));<br>
<br>
       if (ctx->NewState)<br>
@@ -1337,6 +1336,8 @@ vbo_exec_MultiDrawElements(<wbr>GLenum mode,<br>
 {<br>
    GET_CURRENT_CONTEXT(ctx);<br>
<br>
+   FLUSH_FOR_DRAW(ctx);<br>
+<br>
    _mesa_set_draw_vao(ctx, ctx->Array.VAO, enabled_filter(ctx));<br>
<br>
    if (!_mesa_validate_<wbr>MultiDrawElements(ctx, mode, count, type, indices,<br>
@@ -1360,9 +1361,9 @@ vbo_exec_<wbr>MultiDrawElementsBaseVertex(<wbr>GLenum mode,<br>
 {<br>
    GET_CURRENT_CONTEXT(ctx);<br>
<br>
-   if (_mesa_is_no_error_enabled(<wbr>ctx)) {<br>
-      FLUSH_CURRENT(ctx, 0);<br>
+   FLUSH_FOR_DRAW(ctx);<br>
<br>
+   if (_mesa_is_no_error_enabled(<wbr>ctx)) {<br>
       _mesa_set_draw_vao(ctx, ctx->Array.VAO, enabled_filter(ctx));<br>
<br>
       if (ctx->NewState)<br>
@@ -1398,9 +1399,9 @@ vbo_draw_transform_feedback(<wbr>struct gl_context *ctx, GLenum mode,<br>
 {<br>
    struct _mesa_prim prim;<br>
<br>
-   if (_mesa_is_no_error_enabled(<wbr>ctx)) {<br>
-      FLUSH_CURRENT(ctx, 0);<br>
+   FLUSH_FOR_DRAW(ctx);<br>
<br>
+   if (_mesa_is_no_error_enabled(<wbr>ctx)) {<br>
       _mesa_set_draw_vao(ctx, ctx->Array.VAO, enabled_filter(ctx));<br>
<br>
       if (ctx->NewState)<br>
@@ -1615,9 +1616,9 @@ vbo_exec_DrawArraysIndirect(<wbr>GLenum mode, const GLvoid *indirect)<br>
       _mesa_debug(ctx, "glDrawArraysIndirect(%s, %p)\n",<br>
                   _mesa_enum_to_string(mode), indirect);<br>
<br>
-   if (_mesa_is_no_error_enabled(<wbr>ctx)) {<br>
-      FLUSH_CURRENT(ctx, 0);<br>
+   FLUSH_FOR_DRAW(ctx);<br>
<br>
+   if (_mesa_is_no_error_enabled(<wbr>ctx)) {<br>
       _mesa_set_draw_vao(ctx, ctx->Array.VAO, enabled_filter(ctx));<br>
<br>
       if (ctx->NewState)<br>
@@ -1646,9 +1647,9 @@ vbo_exec_DrawElementsIndirect(<wbr>GLenum mode, GLenum type, const GLvoid *indirect)<br>
                   _mesa_enum_to_string(mode),<br>
                   _mesa_enum_to_string(type), indirect);<br>
<br>
-   if (_mesa_is_no_error_enabled(<wbr>ctx)) {<br>
-      FLUSH_CURRENT(ctx, 0);<br>
+   FLUSH_FOR_DRAW(ctx);<br>
<br>
+   if (_mesa_is_no_error_enabled(<wbr>ctx)) {<br>
       _mesa_set_draw_vao(ctx, ctx->Array.VAO, enabled_filter(ctx));<br>
<br>
       if (ctx->NewState)<br>
@@ -1681,9 +1682,9 @@ vbo_exec_<wbr>MultiDrawArraysIndirect(GLenum mode, const GLvoid *indirect,<br>
    if (stride == 0)<br>
       stride = 4 * sizeof(GLuint);      /* sizeof(<wbr>DrawArraysIndirectCommand) */<br>
<br>
-   if (_mesa_is_no_error_enabled(<wbr>ctx)) {<br>
-      FLUSH_CURRENT(ctx, 0);<br>
+   FLUSH_FOR_DRAW(ctx);<br>
<br>
+   if (_mesa_is_no_error_enabled(<wbr>ctx)) {<br>
       _mesa_set_draw_vao(ctx, ctx->Array.VAO, enabled_filter(ctx));<br>
<br>
       if (ctx->NewState)<br>
@@ -1720,9 +1721,9 @@ vbo_exec_<wbr>MultiDrawElementsIndirect(<wbr>GLenum mode, GLenum type,<br>
    if (stride == 0)<br>
       stride = 5 * sizeof(GLuint);      /* sizeof(<wbr>DrawElementsIndirectCommand) */<br>
<br>
-   if (_mesa_is_no_error_enabled(<wbr>ctx)) {<br>
-      FLUSH_CURRENT(ctx, 0);<br>
+   FLUSH_FOR_DRAW(ctx);<br>
<br>
+   if (_mesa_is_no_error_enabled(<wbr>ctx)) {<br>
       _mesa_set_draw_vao(ctx, ctx->Array.VAO, enabled_filter(ctx));<br>
<br>
       if (ctx->NewState)<br>
@@ -1815,9 +1816,9 @@ vbo_exec_<wbr>MultiDrawArraysIndirectCount(<wbr>GLenum mode, GLintptr indirect,<br>
    if (stride == 0)<br>
       stride = 4 * sizeof(GLuint);      /* sizeof(<wbr>DrawArraysIndirectCommand) */<br>
<br>
-   if (_mesa_is_no_error_enabled(<wbr>ctx)) {<br>
-      FLUSH_CURRENT(ctx, 0);<br>
+   FLUSH_FOR_DRAW(ctx);<br>
<br>
+   if (_mesa_is_no_error_enabled(<wbr>ctx)) {<br>
       _mesa_set_draw_vao(ctx, ctx->Array.VAO, enabled_filter(ctx));<br>
<br>
       if (ctx->NewState)<br>
@@ -1860,9 +1861,9 @@ vbo_exec_<wbr>MultiDrawElementsIndirectCount<wbr>(GLenum mode, GLenum type,<br>
    if (stride == 0)<br>
       stride = 5 * sizeof(GLuint);      /* sizeof(<wbr>DrawElementsIndirectCommand) */<br>
<br>
-   if (_mesa_is_no_error_enabled(<wbr>ctx)) {<br>
-      FLUSH_CURRENT(ctx, 0);<br>
+   FLUSH_FOR_DRAW(ctx);<br>
<br>
+   if (_mesa_is_no_error_enabled(<wbr>ctx)) {<br>
       _mesa_set_draw_vao(ctx, ctx->Array.VAO, enabled_filter(ctx));<br>
<br>
       if (ctx->NewState)<br>
diff --git a/src/mesa/vbo/vbo_save_draw.c b/src/mesa/vbo/vbo_save_draw.c<br>
index f4b2c80748..71620e9a3c 100644<br>
--- a/src/mesa/vbo/vbo_save_draw.c<br>
+++ b/src/mesa/vbo/vbo_save_draw.c<br>
@@ -168,7 +168,7 @@ vbo_save_playback_vertex_list(<wbr>struct gl_context *ctx, void *data)<br>
       remap_vertex_store = GL_TRUE;<br>
    }<br>
<br>
-   FLUSH_CURRENT(ctx, 0);<br>
+   FLUSH_FOR_DRAW(ctx);<br>
<br>
    if (node->prim_count > 0) {<br>
<span class="HOEnZb"><font color="#888888"> <br>
-- <br>
2.17.1<br>
<br>
______________________________<wbr>_________________<br>
mesa-dev mailing list<br>
<a href="mailto:mesa-dev@lists.freedesktop.org">mesa-dev@lists.freedesktop.org</a><br>
<a href="https://lists.freedesktop.org/mailman/listinfo/mesa-dev" rel="noreferrer" target="_blank">https://lists.freedesktop.org/<wbr>mailman/listinfo/mesa-dev</a><br>
</font></span></blockquote></div><br></div>