anv: Move close(fd) from anv_bo_cache_import to its callers (v2)
authorChad Versace <chadversary@chromium.org>
Mon, 11 Sep 2017 23:41:21 +0000 (16:41 -0700)
committerChad Versace <chadversary@chromium.org>
Tue, 17 Oct 2017 18:08:26 +0000 (11:08 -0700)
This will allow us to implement VK_ANDROID_native_buffer without dup'ing
the fd. We must close the fd in VK_KHR_external_memory_fd, but we should
not in VK_ANDROID_native_buffer.

v2:
  - Add missing close(fd) for case
    VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT_KHR, subcase
    ANV_SEMAPHORE_TYPE_BO.

Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
src/intel/vulkan/anv_allocator.c
src/intel/vulkan/anv_device.c
src/intel/vulkan/anv_intel.c
src/intel/vulkan/anv_queue.c

index 0f12356..401cea4 100644 (file)
@@ -1324,18 +1324,6 @@ anv_bo_cache_import(struct anv_device *device,
    }
 
    pthread_mutex_unlock(&cache->mutex);
-
-   /* From the Vulkan spec:
-    *
-    *    "Importing memory from a file descriptor transfers ownership of
-    *    the file descriptor from the application to the Vulkan
-    *    implementation. The application must not perform any operations on
-    *    the file descriptor after a successful import."
-    *
-    * If the import fails, we leave the file descriptor open.
-    */
-   close(fd);
-
    *bo_out = &bo->bo;
 
    return VK_SUCCESS;
index 2c10a2f..1634b51 100644 (file)
@@ -1547,6 +1547,17 @@ VkResult anv_AllocateMemory(
                                    &mem->bo);
       if (result != VK_SUCCESS)
          goto fail;
+
+      /* From the Vulkan spec:
+       *
+       *    "Importing memory from a file descriptor transfers ownership of
+       *    the file descriptor from the application to the Vulkan
+       *    implementation. The application must not perform any operations on
+       *    the file descriptor after a successful import."
+       *
+       * If the import fails, we leave the file descriptor open.
+       */
+      close(fd_info->fd);
    } else {
       result = anv_bo_cache_alloc(device, &device->bo_cache,
                                   pAllocateInfo->allocationSize,
index 9f8cd92..d6bad44 100644 (file)
@@ -71,6 +71,8 @@ VkResult anv_CreateDmaBufImageINTEL(
    if (result != VK_SUCCESS)
       goto fail;
 
+   close(pCreateInfo->fd);
+
    image = anv_image_from_handle(image_h);
 
    result = anv_bo_cache_import(device, &device->bo_cache,
index aff7c53..7e675e2 100644 (file)
@@ -1019,17 +1019,6 @@ VkResult anv_ImportSemaphoreFdKHR(
          new_impl.syncobj = anv_gem_syncobj_fd_to_handle(device, fd);
          if (!new_impl.syncobj)
             return vk_error(VK_ERROR_INVALID_EXTERNAL_HANDLE_KHR);
-
-         /* From the Vulkan spec:
-          *
-          *    "Importing semaphore state from a file descriptor transfers
-          *    ownership of the file descriptor from the application to the
-          *    Vulkan implementation. The application must not perform any
-          *    operations on the file descriptor after a successful import."
-          *
-          * If the import fails, we leave the file descriptor open.
-          */
-         close(pImportSemaphoreFdInfo->fd);
       } else {
          new_impl.type = ANV_SEMAPHORE_TYPE_BO;
 
@@ -1043,6 +1032,17 @@ VkResult anv_ImportSemaphoreFdKHR(
           */
          assert(!(new_impl.bo->flags & EXEC_OBJECT_ASYNC));
       }
+
+      /* From the Vulkan spec:
+       *
+       *    "Importing semaphore state from a file descriptor transfers
+       *    ownership of the file descriptor from the application to the
+       *    Vulkan implementation. The application must not perform any
+       *    operations on the file descriptor after a successful import."
+       *
+       * If the import fails, we leave the file descriptor open.
+       */
+      close(fd);
       break;
 
    case VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT_KHR: