Mesa (main): zink: avoid extra submits for empty wait cmdbufs.

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Wed May 11 05:58:10 UTC 2022


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

Author: Dave Airlie <airlied at redhat.com>
Date:   Mon May  9 15:51:20 2022 +1000

zink: avoid extra submits for empty wait cmdbufs.

This just avoids cpu overheads from processing that won't get used.

Reviewed-by: Mike Blumenkrantz <michael.blumenkrantz at gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16393>

---

 src/gallium/drivers/zink/zink_batch.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/src/gallium/drivers/zink/zink_batch.c b/src/gallium/drivers/zink/zink_batch.c
index c40ae8e21aa..fb85cf3e343 100644
--- a/src/gallium/drivers/zink/zink_batch.c
+++ b/src/gallium/drivers/zink/zink_batch.c
@@ -344,7 +344,7 @@ submit_queue(void *data, void *gdata, int thread_index)
    struct zink_context *ctx = bs->ctx;
    struct zink_screen *screen = zink_screen(ctx->base.screen);
    VkSubmitInfo si[2] = {0};
-
+   int num_si = 2;
    while (!bs->fence.batch_id)
       bs->fence.batch_id = p_atomic_inc_return(&screen->curr_batch);
    bs->usage.usage = bs->fence.batch_id;
@@ -367,6 +367,9 @@ submit_queue(void *data, void *gdata, int thread_index)
       mask[i] = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT;
    si[0].pWaitDstStageMask = mask;
 
+   if (si[0].waitSemaphoreCount == 0)
+     num_si--;
+
    /* then the real submit */
    si[1].waitSemaphoreCount = util_dynarray_num_elements(&bs->wait_semaphores, VkSemaphore);
    si[1].pWaitSemaphores = bs->wait_semaphores.data;
@@ -415,7 +418,7 @@ submit_queue(void *data, void *gdata, int thread_index)
    }
 
    simple_mtx_lock(&screen->queue_lock);
-   if (VKSCR(QueueSubmit)(bs->queue, 2, si, VK_NULL_HANDLE) != VK_SUCCESS) {
+   if (VKSCR(QueueSubmit)(bs->queue, num_si, num_si == 2 ? si : &si[1], VK_NULL_HANDLE) != VK_SUCCESS) {
       mesa_loge("ZINK: vkQueueSubmit failed");
       bs->is_device_lost = true;
    }



More information about the mesa-commit mailing list