From 3ad1c3eb7c956f3bcc43327f9d92f088fbd5da46 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Sat, 31 Dec 2022 12:25:32 -0500 Subject: [PATCH] st/mesa: restore pipe_draw_info::mode at the end of st_hw_select_draw_gallium This fixes possible incorrect rendering with lowered multi draws because the first draw would override the prim type and the next draws would use the overriden (incorrect) prim type. Reviewed-by: Pierre-Eric Pelloux-Prayer Part-of: --- src/mesa/state_tracker/st_draw.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/mesa/state_tracker/st_draw.c b/src/mesa/state_tracker/st_draw.c index a2d0b85d0fd..582d853f6ab 100644 --- a/src/mesa/state_tracker/st_draw.c +++ b/src/mesa/state_tracker/st_draw.c @@ -443,12 +443,15 @@ st_hw_select_draw_gallium(struct gl_context *ctx, unsigned num_draws) { struct st_context *st = st_context(ctx); + enum mesa_prim old_mode = info->mode; - if (!st_draw_hw_select_prepare_common(ctx) || - !st_draw_hw_select_prepare_mode(ctx, info)) - return; + if (st_draw_hw_select_prepare_common(ctx) && + st_draw_hw_select_prepare_mode(ctx, info)) { + cso_draw_vbo(st->cso_context, info, drawid_offset, NULL, draws, + num_draws); + } - cso_draw_vbo(st->cso_context, info, drawid_offset, NULL, draws, num_draws); + info->mode = old_mode; } static void