v3dv: only export the last job sync object once
authorIago Toral Quiroga <itoral@igalia.com>
Fri, 13 Mar 2020 09:38:31 +0000 (10:38 +0100)
committerMarge Bot <eric+marge@anholt.net>
Tue, 13 Oct 2020 21:21:28 +0000 (21:21 +0000)
Instead of exporting the very same object once per signal semaphore

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6766>

src/broadcom/vulkan/v3dv_queue.c

index f1274bf..393eba2 100644 (file)
@@ -83,6 +83,11 @@ process_semaphores_to_signal(struct v3dv_device *device,
    if (count == 0)
       return VK_SUCCESS;
 
+   int fd;
+   drmSyncobjExportSyncFile(device->render_fd, device->last_job_sync, &fd);
+   if (fd == -1)
+      return VK_ERROR_DEVICE_LOST;
+
    for (uint32_t i = 0; i < count; i++) {
       struct v3dv_semaphore *sem = v3dv_semaphore_from_handle(sems[i]);
 
@@ -90,11 +95,6 @@ process_semaphores_to_signal(struct v3dv_device *device,
          close(sem->fd);
       sem->fd = -1;
 
-      int fd;
-      drmSyncobjExportSyncFile(device->render_fd, device->last_job_sync, &fd);
-      if (fd == -1)
-         return VK_ERROR_DEVICE_LOST;
-
       int ret = drmSyncobjImportSyncFile(device->render_fd, sem->sync, fd);
       if (ret)
          return VK_ERROR_DEVICE_LOST;