Module: Mesa Branch: main Commit: 3ad1c3eb7c956f3bcc43327f9d92f088fbd5da46 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=3ad1c3eb7c956f3bcc43327f9d92f088fbd5da46
Author: Marek Olšák <[email protected]> Date: Sat Dec 31 12:25:32 2022 -0500 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 <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26786> --- 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
