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

Author: Mike Blumenkrantz <[email protected]>
Date:   Wed Jan 20 14:29:14 2021 -0500

zink: use multidraw

Reviewed-by: Hoe Hao Cheng <[email protected]>
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);
+
+      }
    }
 }
 

_______________________________________________
mesa-commit mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to