From e2c54358083aa17bb49736cf69afdb2524371261 Mon Sep 17 00:00:00 2001 From: Yiwei Zhang Date: Mon, 10 Mar 2025 14:18:16 -0700 Subject: [PATCH] venus: drop vn_call usage on apis without any returns Signed-off-by: Yiwei Zhang Part-of: --- src/virtio/vulkan/vn_device.c | 16 ++++++++++++---- src/virtio/vulkan/vn_instance.c | 6 +++++- src/virtio/vulkan/vn_ring.c | 2 +- src/virtio/vulkan/vn_ring.h | 3 +++ 4 files changed, 21 insertions(+), 6 deletions(-) diff --git a/src/virtio/vulkan/vn_device.c b/src/virtio/vulkan/vn_device.c index 457b7a73863..e2788b48146 100644 --- a/src/virtio/vulkan/vn_device.c +++ b/src/virtio/vulkan/vn_device.c @@ -18,6 +18,7 @@ #include "vn_instance.h" #include "vn_physical_device.h" #include "vn_queue.h" +#include "vn_ring.h" /* device commands */ @@ -506,7 +507,14 @@ out_queue_family_fini: vn_device_queue_family_fini(dev); out_destroy_device: - vn_call_vkDestroyDevice(dev->primary_ring, dev_handle, NULL); + /* surpress -Wc23-extensions */ + { + struct vn_ring_submit_command ring_submit; + vn_submit_vkDestroyDevice(dev->primary_ring, 0, dev_handle, NULL, + &ring_submit); + if (ring_submit.ring_seqno_valid) + vn_ring_wait_seqno(dev->primary_ring, ring_submit.ring_seqno); + } return result; } @@ -587,9 +595,9 @@ vn_DestroyDevice(VkDevice device, const VkAllocationCallbacks *pAllocator) vn_async_vkDestroyDevice(dev->primary_ring, device, NULL); - /* We must emit vn_call_vkDestroyDevice before releasing bound ring_idx. - * Otherwise, another thread might reuse their ring_idx while they - * are still bound to the queues in the renderer. + /* We must emit vkDestroyDevice before releasing bound ring_idx. Otherwise, + * another thread might reuse their ring_idx while they are still bound to + * the queues in the renderer. */ for (uint32_t i = 0; i < dev->queue_count; i++) { if (!dev->queues[i].emulated) diff --git a/src/virtio/vulkan/vn_instance.c b/src/virtio/vulkan/vn_instance.c index 4bc2be769ca..04cb2c50cd1 100644 --- a/src/virtio/vulkan/vn_instance.c +++ b/src/virtio/vulkan/vn_instance.c @@ -424,7 +424,11 @@ vn_DestroyInstance(VkInstance _instance, mtx_destroy(&instance->ring_idx_mutex); if (instance->renderer) { - vn_call_vkDestroyInstance(instance->ring.ring, _instance, NULL); + struct vn_ring_submit_command ring_submit; + vn_submit_vkDestroyInstance(instance->ring.ring, 0, _instance, NULL, + &ring_submit); + if (ring_submit.ring_seqno_valid) + vn_ring_wait_seqno(instance->ring.ring, ring_submit.ring_seqno); vn_instance_fini_ring(instance); diff --git a/src/virtio/vulkan/vn_ring.c b/src/virtio/vulkan/vn_ring.c index 4e0cff9e9cd..acb682857b1 100644 --- a/src/virtio/vulkan/vn_ring.c +++ b/src/virtio/vulkan/vn_ring.c @@ -171,7 +171,7 @@ vn_ring_get_seqno_status(struct vn_ring *ring, uint32_t seqno) return vn_ring_ge_seqno(ring, vn_ring_load_head(ring), seqno); } -static void +void vn_ring_wait_seqno(struct vn_ring *ring, uint32_t seqno) { /* A renderer wait incurs several hops and the renderer might poll diff --git a/src/virtio/vulkan/vn_ring.h b/src/virtio/vulkan/vn_ring.h index 5035099225b..5128fa4115f 100644 --- a/src/virtio/vulkan/vn_ring.h +++ b/src/virtio/vulkan/vn_ring.h @@ -65,6 +65,9 @@ vn_ring_unset_status_bits(struct vn_ring *ring, uint32_t mask); bool vn_ring_get_seqno_status(struct vn_ring *ring, uint32_t seqno); +void +vn_ring_wait_seqno(struct vn_ring *ring, uint32_t seqno); + void vn_ring_wait_all(struct vn_ring *ring);