venus: refactor sync fd fence and sempahore features
authorYiwei Zhang <zzyiwei@chromium.org>
Wed, 15 Feb 2023 17:22:29 +0000 (09:22 -0800)
committerMarge Bot <emma+marge@anholt.net>
Tue, 28 Feb 2023 04:56:14 +0000 (04:56 +0000)
Signed-off-by: Yiwei Zhang <zzyiwei@chromium.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/21379>

src/virtio/vulkan/vn_android.c
src/virtio/vulkan/vn_device.c
src/virtio/vulkan/vn_physical_device.c
src/virtio/vulkan/vn_physical_device.h
src/virtio/vulkan/vn_queue.c

index 5046f09..40f948c 100644 (file)
@@ -813,8 +813,7 @@ vn_QueueSignalReleaseImageANDROID(VkQueue _queue,
    struct vn_device *dev = queue->device;
    const VkAllocationCallbacks *alloc = &dev->base.base.alloc;
    const bool has_sync_fd_fence_export =
-      (dev->physical_device->renderer_sync_fd_fence_features &
-       VK_EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT);
+      dev->physical_device->renderer_sync_fd.fence_exportable;
    VkDevice device = vn_device_to_handle(dev);
    VkPipelineStageFlags local_stage_masks[8];
    VkPipelineStageFlags *stage_masks = local_stage_masks;
index 79bf32c..5bfc6f8 100644 (file)
@@ -253,8 +253,7 @@ vn_device_fix_create_info(const struct vn_device *dev,
 
       if (app_exts->ANDROID_native_buffer) {
          if (!app_exts->KHR_external_fence_fd &&
-             (physical_dev->renderer_sync_fd_fence_features &
-              VK_EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT)) {
+             physical_dev->renderer_sync_fd.fence_exportable) {
             extra_exts[extra_count++] =
                VK_KHR_EXTERNAL_FENCE_FD_EXTENSION_NAME;
          }
@@ -299,8 +298,7 @@ vn_device_fix_create_info(const struct vn_device *dev,
 
    /* see vn_queue_submission_count_batch_semaphores */
    if (!app_exts->KHR_external_semaphore_fd &&
-       (physical_dev->renderer_sync_fd_semaphore_features &
-        VK_EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT)) {
+       physical_dev->renderer_sync_fd.semaphore_importable) {
       extra_exts[extra_count++] = VK_KHR_EXTERNAL_SEMAPHORE_FD_EXTENSION_NAME;
    }
 
index c6101dc..5bd8da7 100644 (file)
@@ -867,8 +867,9 @@ vn_physical_device_init_external_fence_handles(
          physical_dev->instance, vn_physical_device_to_handle(physical_dev),
          &info, &props);
 
-      physical_dev->renderer_sync_fd_fence_features =
-         props.externalFenceFeatures;
+      physical_dev->renderer_sync_fd.fence_exportable =
+         props.externalFenceFeatures &
+         VK_EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT;
    }
 
    physical_dev->external_fence_handles = 0;
@@ -913,8 +914,12 @@ vn_physical_device_init_external_semaphore_handles(
          physical_dev->instance, vn_physical_device_to_handle(physical_dev),
          &info, &props);
 
-      physical_dev->renderer_sync_fd_semaphore_features =
-         props.externalSemaphoreFeatures;
+      physical_dev->renderer_sync_fd.semaphore_exportable =
+         props.externalSemaphoreFeatures &
+         VK_EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT;
+      physical_dev->renderer_sync_fd.semaphore_importable =
+         props.externalSemaphoreFeatures &
+         VK_EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT;
    }
 
    physical_dev->external_binary_semaphore_handles = 0;
@@ -948,14 +953,11 @@ vn_physical_device_get_native_extensions(
       exts->ANDROID_native_buffer = true;
    }
 
-   if ((physical_dev->renderer_sync_fd_fence_features &
-        VK_EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT))
+   if (physical_dev->renderer_sync_fd.fence_exportable)
       exts->KHR_external_fence_fd = true;
 
-   if ((physical_dev->renderer_sync_fd_semaphore_features &
-        VK_EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT) &&
-       (physical_dev->renderer_sync_fd_semaphore_features &
-        VK_EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT))
+   if (physical_dev->renderer_sync_fd.semaphore_importable &&
+       physical_dev->renderer_sync_fd.semaphore_exportable)
       exts->KHR_external_semaphore_fd = true;
 
 #else  /* ANDROID */
@@ -971,8 +973,7 @@ vn_physical_device_get_native_extensions(
 #ifdef VN_USE_WSI_PLATFORM
    if (renderer_exts->EXT_image_drm_format_modifier &&
        renderer_exts->EXT_queue_family_foreign &&
-       (physical_dev->renderer_sync_fd_semaphore_features &
-        VK_EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT)) {
+       physical_dev->renderer_sync_fd.semaphore_importable) {
       exts->KHR_incremental_present = true;
       exts->KHR_swapchain = true;
       exts->KHR_swapchain_mutable_format = true;
@@ -1058,8 +1059,7 @@ vn_physical_device_get_passthrough_extensions(
        * for VK_KHR_synchronization2.
        */
       .KHR_synchronization2 =
-         physical_dev->renderer_sync_fd_semaphore_features &
-         VK_EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT,
+         physical_dev->renderer_sync_fd.semaphore_importable,
       .KHR_zero_initialize_workgroup_memory = true,
       .EXT_4444_formats = true,
       .EXT_extended_dynamic_state = true,
index 575d064..22195ef 100644 (file)
@@ -115,9 +115,11 @@ struct vn_physical_device {
       VkExternalMemoryHandleTypeFlags supported_handle_types;
    } external_memory;
 
-   /* syncFdFencing allows driver to query renderer sync_fd features */
-   VkExternalFenceFeatureFlags renderer_sync_fd_fence_features;
-   VkExternalSemaphoreFeatureFlags renderer_sync_fd_semaphore_features;
+   struct {
+      bool fence_exportable;
+      bool semaphore_exportable;
+      bool semaphore_importable;
+   } renderer_sync_fd;
 
    VkExternalFenceHandleTypeFlags external_fence_handles;
    VkExternalSemaphoreHandleTypeFlags external_binary_semaphore_handles;
index fd82567..204ae3e 100644 (file)
@@ -212,8 +212,7 @@ vn_queue_submission_fix_batch_semaphores(struct vn_queue_submission *submit,
       if (!vn_semaphore_wait_external(dev, sem))
          return VK_ERROR_DEVICE_LOST;
 
-      assert(dev->physical_device->renderer_sync_fd_semaphore_features &
-             VK_EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT);
+      assert(dev->physical_device->renderer_sync_fd.semaphore_importable);
 
       const VkImportSemaphoreResourceInfo100000MESA res_info = {
          .sType =
@@ -1398,8 +1397,7 @@ vn_GetFenceFdKHR(VkDevice device,
    VkResult result;
 
    assert(sync_file);
-   assert(dev->physical_device->renderer_sync_fd_fence_features &
-          VK_EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT);
+   assert(dev->physical_device->renderer_sync_fd.fence_exportable);
 
    int fd = -1;
    if (payload->type == VN_SYNC_TYPE_DEVICE_ONLY) {
@@ -1853,10 +1851,8 @@ vn_GetSemaphoreFdKHR(VkDevice device,
    struct vn_sync_payload *payload = sem->payload;
 
    assert(sync_file);
-   assert((dev->physical_device->renderer_sync_fd_semaphore_features &
-           VK_EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT));
-   assert((dev->physical_device->renderer_sync_fd_semaphore_features &
-           VK_EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT));
+   assert(dev->physical_device->renderer_sync_fd.semaphore_exportable);
+   assert(dev->physical_device->renderer_sync_fd.semaphore_importable);
 
    int fd = -1;
    if (payload->type == VN_SYNC_TYPE_DEVICE_ONLY) {