<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>