Mesa (main): zink: use multidraw

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Tue Jun 22 13:17:15 UTC 2021


Module: Mesa
Branch: main
Commit: 60ff9dea27dad8c54ac19e7586c6a45d737f8fa6
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=60ff9dea27dad8c54ac19e7586c6a45d737f8fa6

Author: Mike Blumenkrantz <michael.blumenkrantz at gmail.com>
Date:   Wed Jan 20 14:29:14 2021 -0500

zink: use multidraw

Reviewed-by: Hoe Hao Cheng <haochengho12907 at gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11498>

---

 src/gallium/drivers/zink/zink_draw.c | 26 ++++++++++++++++++++------
 1 file changed, 20 insertions(+), 6 deletions(-)

diff --git a/src/gallium/drivers/zink/zink_draw.c b/src/gallium/drivers/zink/zink_draw.c
index 7153f5cdda7..4b55e926fd6 100644
--- a/src/gallium/drivers/zink/zink_draw.c
+++ b/src/gallium/drivers/zink/zink_draw.c
@@ -297,10 +297,17 @@ draw_indexed(struct zink_context *ctx,
    } else {
       if (needs_drawid)
          update_drawid(ctx, draw_id);
-      for (unsigned i = 0; i < num_draws; i++)
-         vkCmdDrawIndexed(cmdbuf,
-            draws[i].count, dinfo->instance_count,
-            draws[i].start, draws[i].index_bias, dinfo->start_instance);
+      if (zink_screen(ctx->base.screen)->info.have_EXT_multi_draw)
+         zink_screen(ctx->base.screen)->vk.CmdDrawMultiIndexedEXT(cmdbuf, num_draws, (VkMultiDrawIndexedInfoEXT*)draws,
+                                                                   dinfo->instance_count,
+                                                                   dinfo->start_instance, sizeof(struct pipe_draw_start_count_bias),
+                                                                   dinfo->index_bias_varies ? NULL : &draws[0].index_bias);
+      else {
+         for (unsigned i = 0; i < num_draws; i++)
+            vkCmdDrawIndexed(cmdbuf,
+               draws[i].count, dinfo->instance_count,
+               draws[i].start, draws[i].index_bias, dinfo->start_instance);
+      }
    }
 }
 
@@ -322,8 +329,15 @@ draw(struct zink_context *ctx,
    } else {
       if (needs_drawid)
          update_drawid(ctx, draw_id);
-      for (unsigned i = 0; i < num_draws; i++)
-         vkCmdDraw(cmdbuf, draws[i].count, dinfo->instance_count, draws[i].start, dinfo->start_instance);
+      if (zink_screen(ctx->base.screen)->info.have_EXT_multi_draw)
+         zink_screen(ctx->base.screen)->vk.CmdDrawMultiEXT(cmdbuf, num_draws, (VkMultiDrawInfoEXT*)draws,
+                                                            dinfo->instance_count, dinfo->start_instance,
+                                                            sizeof(struct pipe_draw_start_count_bias));
+      else {
+         for (unsigned i = 0; i < num_draws; i++)
+            vkCmdDraw(cmdbuf, draws[i].count, dinfo->instance_count, draws[i].start, dinfo->start_instance);
+
+      }
    }
 }
 



More information about the mesa-commit mailing list