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

Reply via email to