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
