Mesa (master): zink: hook up IndirectCount draw commands
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Thu Dec 31 13:46:01 UTC 2020
Module: Mesa
Branch: master
Commit: a299ea3c89311b0130c538d2a7a48ab2bb9bb31d
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=a299ea3c89311b0130c538d2a7a48ab2bb9bb31d
Author: Mike Blumenkrantz <michael.blumenkrantz at gmail.com>
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 <erik.faye-lund at collabora.com>
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);
}
More information about the mesa-commit
mailing list