Module: Mesa Branch: main Commit: 42a83831705f2bfca9f8e8faddf18a9b6a7e8d28 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=42a83831705f2bfca9f8e8faddf18a9b6a7e8d28
Author: Yiwei Zhang <[email protected]> Date: Fri Apr 22 22:06:23 2022 +0000 venus: add VN_PERF option no_async_queue_submit Signed-off-by: Yiwei Zhang <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16110> --- src/virtio/vulkan/vn_android.c | 6 ++++-- src/virtio/vulkan/vn_common.c | 1 + src/virtio/vulkan/vn_common.h | 1 + src/virtio/vulkan/vn_queue.c | 2 +- 4 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/virtio/vulkan/vn_android.c b/src/virtio/vulkan/vn_android.c index 493600917bc..45dc7c8c501 100644 --- a/src/virtio/vulkan/vn_android.c +++ b/src/virtio/vulkan/vn_android.c @@ -787,11 +787,13 @@ vn_QueueSignalReleaseImageANDROID(VkQueue queue, return vn_error(dev->instance, result); if (dev->instance->experimental.globalFencing == VK_TRUE) { - /* XXX With globalFencing, the external queue fence was not passed in the + /* With globalFencing, the external queue fence was not passed in the * above vn_QueueSubmit to hint it to be synchronous. So we need to wait * for the ring here before vn_GetFenceFdKHR which is pure kernel ops. + * Skip ring wait if async queue submit is disabled. */ - vn_instance_ring_wait(dev->instance); + if (!VN_PERF(NO_ASYNC_QUEUE_SUBMIT)) + vn_instance_ring_wait(dev->instance); const VkFenceGetFdInfoKHR fd_info = { .sType = VK_STRUCTURE_TYPE_FENCE_GET_FD_INFO_KHR, diff --git a/src/virtio/vulkan/vn_common.c b/src/virtio/vulkan/vn_common.c index 24365c0032c..e39c5fa9fba 100644 --- a/src/virtio/vulkan/vn_common.c +++ b/src/virtio/vulkan/vn_common.c @@ -30,6 +30,7 @@ static const struct debug_control vn_debug_options[] = { static const struct debug_control vn_perf_options[] = { { "no_async_set_alloc", VN_PERF_NO_ASYNC_SET_ALLOC }, { "no_async_buffer_create", VN_PERF_NO_ASYNC_BUFFER_CREATE }, + { "no_async_queue_submit", VN_PERF_NO_ASYNC_QUEUE_SUBMIT }, { NULL, 0 }, }; diff --git a/src/virtio/vulkan/vn_common.h b/src/virtio/vulkan/vn_common.h index 7fbfafb9600..19831c6d2a9 100644 --- a/src/virtio/vulkan/vn_common.h +++ b/src/virtio/vulkan/vn_common.h @@ -145,6 +145,7 @@ enum vn_debug { enum vn_perf { VN_PERF_NO_ASYNC_SET_ALLOC = 1ull << 0, VN_PERF_NO_ASYNC_BUFFER_CREATE = 1ull << 1, + VN_PERF_NO_ASYNC_QUEUE_SUBMIT = 1ull << 2, }; typedef uint64_t vn_object_id; diff --git a/src/virtio/vulkan/vn_queue.c b/src/virtio/vulkan/vn_queue.c index 490955eebac..006ccc3e6a0 100644 --- a/src/virtio/vulkan/vn_queue.c +++ b/src/virtio/vulkan/vn_queue.c @@ -341,7 +341,7 @@ vn_QueueSubmit(VkQueue _queue, } /* TODO defer roundtrip for external fence until the next sync operation */ - if (!wsi_mem && !is_fence_external) { + if (!wsi_mem && !is_fence_external && !VN_PERF(NO_ASYNC_QUEUE_SUBMIT)) { vn_async_vkQueueSubmit(dev->instance, submit.queue, submit.batch_count, submit.submit_batches, submit.fence); vn_queue_submission_cleanup(&submit);
