mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-14 20:58:06 +02:00
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:
parent
05791b6ae0
commit
657cd2e1d4
5 changed files with 26 additions and 31 deletions
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue