Module: Mesa Branch: main Commit: 657cd2e1d421d83db29c4383cced952070782455 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=657cd2e1d421d83db29c4383cced952070782455
Author: Yiwei Zhang <[email protected]> Date: Wed Feb 15 09:22:29 2023 -0800 venus: refactor sync fd fence and sempahore features Signed-off-by: Yiwei Zhang <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/21379> --- src/virtio/vulkan/vn_android.c | 3 +-- src/virtio/vulkan/vn_device.c | 6 ++---- src/virtio/vulkan/vn_physical_device.c | 28 ++++++++++++++-------------- src/virtio/vulkan/vn_physical_device.h | 8 +++++--- src/virtio/vulkan/vn_queue.c | 12 ++++-------- 5 files changed, 26 insertions(+), 31 deletions(-) diff --git a/src/virtio/vulkan/vn_android.c b/src/virtio/vulkan/vn_android.c index 5046f09f31e..40f948c1623 100644 --- a/src/virtio/vulkan/vn_android.c +++ b/src/virtio/vulkan/vn_android.c @@ -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; diff --git a/src/virtio/vulkan/vn_device.c b/src/virtio/vulkan/vn_device.c index 79bf32c7548..5bfc6f8bfa2 100644 --- a/src/virtio/vulkan/vn_device.c +++ b/src/virtio/vulkan/vn_device.c @@ -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; } diff --git a/src/virtio/vulkan/vn_physical_device.c b/src/virtio/vulkan/vn_physical_device.c index c6101dc683f..5bd8da70415 100644 --- a/src/virtio/vulkan/vn_physical_device.c +++ b/src/virtio/vulkan/vn_physical_device.c @@ -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, diff --git a/src/virtio/vulkan/vn_physical_device.h b/src/virtio/vulkan/vn_physical_device.h index 575d064fc41..22195ef4cdc 100644 --- a/src/virtio/vulkan/vn_physical_device.h +++ b/src/virtio/vulkan/vn_physical_device.h @@ -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; diff --git a/src/virtio/vulkan/vn_queue.c b/src/virtio/vulkan/vn_queue.c index fd825679b52..204ae3e0778 100644 --- a/src/virtio/vulkan/vn_queue.c +++ b/src/virtio/vulkan/vn_queue.c @@ -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) {
