From ec7d48afc40343bf314d28a7276500efb1e52361 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Thu, 27 Feb 2020 15:46:11 -0500 Subject: [PATCH] vbo: use vbo_exec_wrap_upgrade_vertex for glVertex in ATTR_UNION MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit We can't decrease the size for glVertex before a flush, so use vbo_exec_wrap_upgrade_vertex directly. Reviewed-by: Mathias Fröhlich Part-of: --- src/mesa/vbo/vbo_exec_api.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/mesa/vbo/vbo_exec_api.c b/src/mesa/vbo/vbo_exec_api.c index 6fd4c1493cf..d97c4988b29 100644 --- a/src/mesa/vbo/vbo_exec_api.c +++ b/src/mesa/vbo/vbo_exec_api.c @@ -474,14 +474,14 @@ do { \ \ assert(sz == 1 || sz == 2); \ \ - /* check if attribute size or type is changing */ \ - if (unlikely(exec->vtx.attr[A].active_size != N * sz || \ - exec->vtx.attr[A].type != T)) { \ - vbo_exec_fixup_vertex(ctx, A, N * sz, T); \ - } \ - \ /* store a copy of the attribute in exec except for glVertex */ \ if ((A) != 0) { \ + /* Check if attribute size or type is changing. */ \ + if (unlikely(exec->vtx.attr[A].active_size != N * sz || \ + exec->vtx.attr[A].type != T)) { \ + vbo_exec_fixup_vertex(ctx, A, N * sz, T); \ + } \ + \ C *dest = (C *)exec->vtx.attrptr[A]; \ if (N>0) dest[0] = V0; \ if (N>1) dest[1] = V1; \ @@ -493,6 +493,12 @@ do { \ ctx->Driver.NeedFlush |= FLUSH_UPDATE_CURRENT; \ } else { \ /* This is a glVertex call */ \ + /* Check if attribute size or type is changing. */ \ + if (unlikely(exec->vtx.attr[0].size < N * sz || \ + exec->vtx.attr[0].type != T)) { \ + vbo_exec_wrap_upgrade_vertex(exec, 0, N * sz, T); \ + } \ + \ uint32_t *dst = (uint32_t *)exec->vtx.buffer_ptr; \ uint32_t *src = (uint32_t *)exec->vtx.vertex; \ unsigned vertex_size_no_pos = exec->vtx.vertex_size_no_pos; \ -- 2.30.2