venus: clean up globalFencing

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 08:56:00 -08:00 committed by Marge Bot
parent 344be4405c
commit 05791b6ae0
3 changed files with 14 additions and 48 deletions

View file

@ -725,28 +725,6 @@ vn_AcquireImageANDROID(VkDevice device,
struct vn_device *dev = vn_device_from_handle(device);
VkResult result = VK_SUCCESS;
if (dev->instance->experimental.globalFencing == VK_FALSE) {
/* Fallback when VkVenusExperimentalFeatures100000MESA::globalFencing is
* VK_FALSE, out semaphore and fence are filled with already signaled
* payloads, and the native fence fd is waited inside until signaled.
*/
if (nativeFenceFd >= 0) {
int ret = sync_wait(nativeFenceFd, -1);
/* Android loader expects the ICD to always close the fd */
close(nativeFenceFd);
if (ret)
return vn_error(dev->instance, VK_ERROR_SURFACE_LOST_KHR);
}
if (semaphore != VK_NULL_HANDLE)
vn_semaphore_signal_wsi(dev, vn_semaphore_from_handle(semaphore));
if (fence != VK_NULL_HANDLE)
vn_fence_signal_wsi(dev, vn_fence_from_handle(fence));
return VK_SUCCESS;
}
int semaphore_fd = -1;
int fence_fd = -1;
if (nativeFenceFd >= 0) {
@ -835,7 +813,6 @@ 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->instance->experimental.globalFencing == VK_TRUE &&
(dev->physical_device->renderer_sync_fd_fence_features &
VK_EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT);
VkDevice device = vn_device_to_handle(dev);

View file

@ -874,10 +874,8 @@ vn_physical_device_init_external_fence_handles(
physical_dev->external_fence_handles = 0;
#ifdef ANDROID
if (physical_dev->instance->experimental.globalFencing) {
physical_dev->external_fence_handles =
VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT;
}
physical_dev->external_fence_handles =
VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT;
#endif
}
@ -923,10 +921,8 @@ vn_physical_device_init_external_semaphore_handles(
physical_dev->external_timeline_semaphore_handles = 0;
#ifdef ANDROID
if (physical_dev->instance->experimental.globalFencing) {
physical_dev->external_binary_semaphore_handles =
VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT;
}
physical_dev->external_binary_semaphore_handles =
VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT;
#endif
}
@ -952,18 +948,16 @@ vn_physical_device_get_native_extensions(
exts->ANDROID_native_buffer = true;
}
/* we have a very poor implementation */
if (instance->experimental.globalFencing) {
if ((physical_dev->renderer_sync_fd_fence_features &
VK_EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT))
exts->KHR_external_fence_fd = true;
if ((physical_dev->renderer_sync_fd_fence_features &
VK_EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT))
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))
exts->KHR_external_semaphore_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))
exts->KHR_external_semaphore_fd = true;
}
#else /* ANDROID */
if (can_external_mem) {
exts->KHR_external_memory_fd = true;

View file

@ -273,8 +273,7 @@ vn_queue_submission_prepare(struct vn_queue_submission *submit)
* - explicit fencing: sync file export
* - implicit fencing: dma-fence attached to the wsi bo
*
* Under globalFencing, we enforce above via a synchronous submission if
* any of the below applies:
* We enforce above via a synchronous submission if seeing any of below:
* - struct wsi_memory_signal_submit_info
* - fence is an external fence
* - has an external signal semaphore
@ -1371,7 +1370,6 @@ vn_ImportFenceFdKHR(VkDevice device,
VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT;
const int fd = pImportFenceFdInfo->fd;
assert(dev->instance->experimental.globalFencing);
assert(sync_file);
if (!vn_sync_valid_fd(fd))
@ -1399,7 +1397,6 @@ vn_GetFenceFdKHR(VkDevice device,
struct vn_sync_payload *payload = fence->payload;
VkResult result;
assert(dev->instance->experimental.globalFencing);
assert(sync_file);
assert(dev->physical_device->renderer_sync_fd_fence_features &
VK_EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT);
@ -1829,7 +1826,6 @@ vn_ImportSemaphoreFdKHR(
VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT;
const int fd = pImportSemaphoreFdInfo->fd;
assert(dev->instance->experimental.globalFencing);
assert(sync_file);
if (!vn_sync_valid_fd(fd))
@ -1856,7 +1852,6 @@ vn_GetSemaphoreFdKHR(VkDevice device,
pGetFdInfo->handleType == VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT;
struct vn_sync_payload *payload = sem->payload;
assert(dev->instance->experimental.globalFencing);
assert(sync_file);
assert((dev->physical_device->renderer_sync_fd_semaphore_features &
VK_EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT));