Mesa (main): radv: Use dispatch table for wsi_display.c

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Fri Dec 31 15:40:22 UTC 2021


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

Author: Bas Nieuwenhuizen <bas at basnieuwenhuizen.nl>
Date:   Sun Nov 28 20:13:39 2021 +0100

radv: Use dispatch table for wsi_display.c

Pretty sure this could be moved into WSI.

Reviewed-by: Jason Ekstrand <jason at jlekstrand.net>
Reviewed-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13974>

---

 src/amd/vulkan/radv_wsi_display.c | 72 +++++++++++++++++++++------------------
 1 file changed, 38 insertions(+), 34 deletions(-)

diff --git a/src/amd/vulkan/radv_wsi_display.c b/src/amd/vulkan/radv_wsi_display.c
index a84d82a8cfb..7a7a00548e2 100644
--- a/src/amd/vulkan/radv_wsi_display.c
+++ b/src/amd/vulkan/radv_wsi_display.c
@@ -51,33 +51,35 @@ radv_RegisterDeviceEventEXT(VkDevice _device, const VkDeviceEventInfoEXT *device
    VkResult ret;
    int fd;
 
-   ret = radv_CreateFence(_device,
-                          &(VkFenceCreateInfo){
-                             .sType = VK_STRUCTURE_TYPE_FENCE_CREATE_INFO,
-                             .pNext =
-                                &(VkExportFenceCreateInfo){
-                                   .sType = VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO,
-                                   .handleTypes = VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT,
-                                },
-                          },
-                          allocator, _fence);
+   ret = device->vk.dispatch_table.CreateFence(
+      _device,
+      &(VkFenceCreateInfo){
+         .sType = VK_STRUCTURE_TYPE_FENCE_CREATE_INFO,
+         .pNext =
+            &(VkExportFenceCreateInfo){
+               .sType = VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO,
+               .handleTypes = VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT,
+            },
+      },
+      allocator, _fence);
    if (ret != VK_SUCCESS)
       return ret;
 
-   RADV_FROM_HANDLE(radv_fence, fence, *_fence);
+   ret = device->vk.dispatch_table.GetFenceFdKHR(
+      _device,
+      &(VkFenceGetFdInfoKHR){.sType = VK_STRUCTURE_TYPE_FENCE_GET_FD_INFO_KHR,
+                             .handleType = VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT,
+                             .fence = *_fence},
+      &fd);
 
-   assert(fence->permanent.kind == RADV_FENCE_SYNCOBJ);
-
-   if (device->ws->export_syncobj(device->ws, fence->permanent.syncobj, &fd)) {
-      ret = VK_ERROR_OUT_OF_HOST_MEMORY;
-   } else {
+   if (ret == VK_SUCCESS) {
       ret = wsi_register_device_event(_device, &device->physical_device->wsi_device,
                                       device_event_info, allocator, NULL, fd);
       close(fd);
    }
 
    if (ret != VK_SUCCESS)
-      radv_DestroyFence(_device, *_fence, allocator);
+      device->vk.dispatch_table.DestroyFence(_device, *_fence, allocator);
 
    return ret;
 }
@@ -91,33 +93,35 @@ radv_RegisterDisplayEventEXT(VkDevice _device, VkDisplayKHR display,
    VkResult ret;
    int fd;
 
-   ret = radv_CreateFence(_device,
-                          &(VkFenceCreateInfo){
-                             .sType = VK_STRUCTURE_TYPE_FENCE_CREATE_INFO,
-                             .pNext =
-                                &(VkExportFenceCreateInfo){
-                                   .sType = VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO,
-                                   .handleTypes = VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT,
-                                },
-                          },
-                          allocator, _fence);
+   ret = device->vk.dispatch_table.CreateFence(
+      _device,
+      &(VkFenceCreateInfo){
+         .sType = VK_STRUCTURE_TYPE_FENCE_CREATE_INFO,
+         .pNext =
+            &(VkExportFenceCreateInfo){
+               .sType = VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO,
+               .handleTypes = VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT,
+            },
+      },
+      allocator, _fence);
    if (ret != VK_SUCCESS)
       return ret;
 
-   RADV_FROM_HANDLE(radv_fence, fence, *_fence);
-
-   assert(fence->permanent.kind == RADV_FENCE_SYNCOBJ);
+   ret = device->vk.dispatch_table.GetFenceFdKHR(
+      _device,
+      &(VkFenceGetFdInfoKHR){.sType = VK_STRUCTURE_TYPE_FENCE_GET_FD_INFO_KHR,
+                             .handleType = VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT,
+                             .fence = *_fence},
+      &fd);
 
-   if (device->ws->export_syncobj(device->ws, fence->permanent.syncobj, &fd)) {
-      ret = VK_ERROR_OUT_OF_HOST_MEMORY;
-   } else {
+   if (ret == VK_SUCCESS) {
       ret = wsi_register_display_event(_device, &device->physical_device->wsi_device, display,
                                        display_event_info, allocator, NULL, fd);
       close(fd);
    }
 
    if (ret != VK_SUCCESS)
-      radv_DestroyFence(_device, *_fence, allocator);
+      device->vk.dispatch_table.DestroyFence(_device, *_fence, allocator);
 
    return ret;
 }



More information about the mesa-commit mailing list