venus: refactor sync fd fence and sempahore features

Signed-off-by: Yiwei Zhang <zzyiwei@chromium.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/21379>
This commit is contained in:
Yiwei Zhang 2023-02-15 09:22:29 -08:00 committed by Marge Bot
parent 05791b6ae0
commit 657cd2e1d4
5 changed files with 26 additions and 31 deletions

View 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;

View 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;
}

View 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,

View 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;

View 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) {