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

Author: Yiwei Zhang <[email protected]>
Date:   Mon Oct 16 17:18:46 2023 -0700

venus: properly expose KHR_external_fence/sempahore_fd

Summary:
1. hide those extensions for vtest since there's no export support
2. do block waiting upon export without implicit fencing support

Fixes: 68a478870d2 ("venus: expose KHR_external_fence/sempahore_fd extensions")
Signed-off-by: Yiwei Zhang <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25633>

---

 src/virtio/vulkan/vn_physical_device.c | 6 ++++--
 src/virtio/vulkan/vn_queue.c           | 9 +++++++++
 2 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/src/virtio/vulkan/vn_physical_device.c 
b/src/virtio/vulkan/vn_physical_device.c
index a67c238d354..bdf4813f711 100644
--- a/src/virtio/vulkan/vn_physical_device.c
+++ b/src/virtio/vulkan/vn_physical_device.c
@@ -925,10 +925,12 @@ vn_physical_device_get_native_extensions(
 {
    memset(exts, 0, sizeof(*exts));
 
-   if (physical_dev->renderer_sync_fd.fence_exportable)
+   if (physical_dev->instance->renderer->info.has_external_sync &&
+       physical_dev->renderer_sync_fd.fence_exportable)
       exts->KHR_external_fence_fd = true;
 
-   if (physical_dev->renderer_sync_fd.semaphore_importable &&
+   if (physical_dev->instance->renderer->info.has_external_sync &&
+       physical_dev->renderer_sync_fd.semaphore_importable &&
        physical_dev->renderer_sync_fd.semaphore_exportable)
       exts->KHR_external_semaphore_fd = true;
 
diff --git a/src/virtio/vulkan/vn_queue.c b/src/virtio/vulkan/vn_queue.c
index 0b9a06774f9..4848f96b5a7 100644
--- a/src/virtio/vulkan/vn_queue.c
+++ b/src/virtio/vulkan/vn_queue.c
@@ -1669,6 +1669,11 @@ vn_GetFenceFdKHR(VkDevice device,
 
       vn_sync_payload_release(dev, &fence->temporary);
       fence->payload = &fence->permanent;
+
+#ifdef VN_USE_WSI_PLATFORM
+      if (!dev->renderer->info.has_implicit_fencing)
+         sync_wait(fd, -1);
+#endif
    } else {
       assert(payload->type == VN_SYNC_TYPE_IMPORTED_SYNC_FD);
 
@@ -2126,6 +2131,10 @@ vn_GetSemaphoreFdKHR(VkDevice device,
       if (result != VK_SUCCESS)
          return vn_error(dev->instance, result);
 
+#ifdef VN_USE_WSI_PLATFORM
+      if (!dev->renderer->info.has_implicit_fencing)
+         sync_wait(fd, -1);
+#endif
    } else {
       assert(payload->type == VN_SYNC_TYPE_IMPORTED_SYNC_FD);
 

Reply via email to