Module: Mesa Branch: master Commit: a299ea3c89311b0130c538d2a7a48ab2bb9bb31d URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=a299ea3c89311b0130c538d2a7a48ab2bb9bb31d
Author: Mike Blumenkrantz <[email protected]> Date: Thu Aug 20 09:42:52 2020 -0400 zink: hook up IndirectCount draw commands these take a draw count buffer Reviewed-by: Erik Faye-Lund <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8233> --- src/gallium/drivers/zink/zink_draw.c | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/gallium/drivers/zink/zink_draw.c b/src/gallium/drivers/zink/zink_draw.c index 7aa7517b80c..5d8297f7072 100644 --- a/src/gallium/drivers/zink/zink_draw.c +++ b/src/gallium/drivers/zink/zink_draw.c @@ -528,7 +528,14 @@ zink_draw_vbo(struct pipe_context *pctx, if (dindirect && dindirect->buffer) { struct zink_resource *indirect = zink_resource(dindirect->buffer); zink_batch_reference_resource_rw(batch, indirect, false); - vkCmdDrawIndexedIndirect(batch->cmdbuf, indirect->buffer, dindirect->offset, dindirect->draw_count, dindirect->stride); + if (dindirect->indirect_draw_count) { + struct zink_resource *indirect_draw_count = zink_resource(dindirect->indirect_draw_count); + zink_batch_reference_resource_rw(batch, indirect_draw_count, false); + screen->vk_CmdDrawIndexedIndirectCount(batch->cmdbuf, indirect->buffer, dindirect->offset, + indirect_draw_count->buffer, dindirect->indirect_draw_count_offset, + dindirect->draw_count, dindirect->stride); + } else + vkCmdDrawIndexedIndirect(batch->cmdbuf, indirect->buffer, dindirect->offset, dindirect->draw_count, dindirect->stride); } else vkCmdDrawIndexed(batch->cmdbuf, draws[0].count, dinfo->instance_count, @@ -542,7 +549,14 @@ zink_draw_vbo(struct pipe_context *pctx, } else if (dindirect && dindirect->buffer) { struct zink_resource *indirect = zink_resource(dindirect->buffer); zink_batch_reference_resource_rw(batch, indirect, false); - vkCmdDrawIndirect(batch->cmdbuf, indirect->buffer, dindirect->offset, dindirect->draw_count, dindirect->stride); + if (dindirect->indirect_draw_count) { + struct zink_resource *indirect_draw_count = zink_resource(dindirect->indirect_draw_count); + zink_batch_reference_resource_rw(batch, indirect_draw_count, false); + screen->vk_CmdDrawIndirectCount(batch->cmdbuf, indirect->buffer, dindirect->offset, + indirect_draw_count->buffer, dindirect->indirect_draw_count_offset, + dindirect->draw_count, dindirect->stride); + } else + vkCmdDrawIndirect(batch->cmdbuf, indirect->buffer, dindirect->offset, dindirect->draw_count, dindirect->stride); } else vkCmdDraw(batch->cmdbuf, draws[0].count, dinfo->instance_count, draws[0].start, dinfo->start_instance); } _______________________________________________ mesa-commit mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-commit
