Module: Mesa Branch: main Commit: fc06e35a58f86e80766dfbed3a2d49406fbd25e3 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=fc06e35a58f86e80766dfbed3a2d49406fbd25e3
Author: Rob Clark <[email protected]> Date: Fri Feb 17 10:07:56 2023 -0800 turnip: Move QueueWaitIdle entrypoint to kgsl Handle in the same way as other kgsl specific entrypoints. Signed-off-by: Rob Clark <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/21394> --- src/freedreno/vulkan/tu_device.c | 28 ---------------------------- src/freedreno/vulkan/tu_knl_kgsl.c | 27 +++++++++++++++++++++++++++ 2 files changed, 27 insertions(+), 28 deletions(-) diff --git a/src/freedreno/vulkan/tu_device.c b/src/freedreno/vulkan/tu_device.c index 752f544854f..a165468acbc 100644 --- a/src/freedreno/vulkan/tu_device.c +++ b/src/freedreno/vulkan/tu_device.c @@ -2504,34 +2504,6 @@ tu_EnumerateInstanceLayerProperties(uint32_t *pPropertyCount, return VK_SUCCESS; } -/* Only used for kgsl since drm started using common implementation */ -#ifdef TU_USE_KGSL -VKAPI_ATTR VkResult VKAPI_CALL -tu_QueueWaitIdle(VkQueue _queue) -{ - TU_FROM_HANDLE(tu_queue, queue, _queue); - - if (vk_device_is_lost(&queue->device->vk)) - return VK_ERROR_DEVICE_LOST; - - if (queue->fence < 0) - return VK_SUCCESS; - - struct pollfd fds = { .fd = queue->fence, .events = POLLIN }; - int ret; - do { - ret = poll(&fds, 1, -1); - } while (ret == -1 && (errno == EINTR || errno == EAGAIN)); - - /* TODO: otherwise set device lost ? */ - assert(ret == 1 && !(fds.revents & (POLLERR | POLLNVAL))); - - close(queue->fence); - queue->fence = -1; - return VK_SUCCESS; -} -#endif - VKAPI_ATTR VkResult VKAPI_CALL tu_EnumerateInstanceExtensionProperties(const char *pLayerName, uint32_t *pPropertyCount, diff --git a/src/freedreno/vulkan/tu_knl_kgsl.c b/src/freedreno/vulkan/tu_knl_kgsl.c index d125ae6246b..558623a1248 100644 --- a/src/freedreno/vulkan/tu_knl_kgsl.c +++ b/src/freedreno/vulkan/tu_knl_kgsl.c @@ -293,6 +293,32 @@ sync_merge(const VkSemaphore *syncobjs, uint32_t count, bool wait_all, bool rese return ret; } +/* Only used for kgsl since drm started using common implementation */ +static VKAPI_ATTR VkResult VKAPI_CALL +kgsl_QueueWaitIdle(VkQueue _queue) +{ + TU_FROM_HANDLE(tu_queue, queue, _queue); + + if (vk_device_is_lost(&queue->device->vk)) + return VK_ERROR_DEVICE_LOST; + + if (queue->fence < 0) + return VK_SUCCESS; + + struct pollfd fds = { .fd = queue->fence, .events = POLLIN }; + int ret; + do { + ret = poll(&fds, 1, -1); + } while (ret == -1 && (errno == EINTR || errno == EAGAIN)); + + /* TODO: otherwise set device lost ? */ + assert(ret == 1 && !(fds.revents & (POLLERR | POLLNVAL))); + + close(queue->fence); + queue->fence = -1; + return VK_SUCCESS; +} + static VKAPI_ATTR VkResult VKAPI_CALL kgsl_QueueSubmit2(VkQueue _queue, uint32_t submitCount, @@ -763,6 +789,7 @@ kgsl_QueueSignalReleaseImageANDROID(VkQueue _queue, * instead. */ static const struct vk_device_entrypoint_table kgsl_device_entrypoints = { + .QueueWaitIdle = kgsl_QueueWaitIdle, .QueueSubmit2 = kgsl_QueueSubmit2, .ImportSemaphoreFdKHR = kgsl_ImportSemaphoreFdKHR, .GetSemaphoreFdKHR = kgsl_GetSemaphoreFdKHR,
