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