diff --git a/src/intel/vulkan/anv_device.c b/src/intel/vulkan/anv_device.c index 46cf43d8516..1753668038a 100644 --- a/src/intel/vulkan/anv_device.c +++ b/src/intel/vulkan/anv_device.c @@ -1936,88 +1936,6 @@ VkResult anv_BindBufferMemory2( return VK_SUCCESS; } -// Event functions - -VkResult anv_CreateEvent( - VkDevice _device, - const VkEventCreateInfo* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkEvent* pEvent) -{ - ANV_FROM_HANDLE(anv_device, device, _device); - struct anv_event *event; - - assert(pCreateInfo->sType == VK_STRUCTURE_TYPE_EVENT_CREATE_INFO); - - event = vk_object_alloc(&device->vk, pAllocator, sizeof(*event), - VK_OBJECT_TYPE_EVENT); - if (event == NULL) - return vk_error(device, VK_ERROR_OUT_OF_HOST_MEMORY); - - event->state = anv_state_pool_alloc(&device->dynamic_state_pool, - sizeof(uint64_t), 8); - *(uint64_t *)event->state.map = VK_EVENT_RESET; - - ANV_RMV(event_create, device, event, pCreateInfo->flags, false); - - *pEvent = anv_event_to_handle(event); - - return VK_SUCCESS; -} - -void anv_DestroyEvent( - VkDevice _device, - VkEvent _event, - const VkAllocationCallbacks* pAllocator) -{ - ANV_FROM_HANDLE(anv_device, device, _device); - ANV_FROM_HANDLE(anv_event, event, _event); - - if (!event) - return; - - ANV_RMV(resource_destroy, device, event); - - anv_state_pool_free(&device->dynamic_state_pool, event->state); - - vk_object_free(&device->vk, pAllocator, event); -} - -VkResult anv_GetEventStatus( - VkDevice _device, - VkEvent _event) -{ - ANV_FROM_HANDLE(anv_device, device, _device); - ANV_FROM_HANDLE(anv_event, event, _event); - - if (vk_device_is_lost(&device->vk)) - return VK_ERROR_DEVICE_LOST; - - return *(uint64_t *)event->state.map; -} - -VkResult anv_SetEvent( - VkDevice _device, - VkEvent _event) -{ - ANV_FROM_HANDLE(anv_event, event, _event); - - *(uint64_t *)event->state.map = VK_EVENT_SET; - - return VK_SUCCESS; -} - -VkResult anv_ResetEvent( - VkDevice _device, - VkEvent _event) -{ - ANV_FROM_HANDLE(anv_event, event, _event); - - *(uint64_t *)event->state.map = VK_EVENT_RESET; - - return VK_SUCCESS; -} - // Buffer functions static void diff --git a/src/intel/vulkan/anv_event.c b/src/intel/vulkan/anv_event.c new file mode 100644 index 00000000000..5794805cb86 --- /dev/null +++ b/src/intel/vulkan/anv_event.c @@ -0,0 +1,85 @@ +/* Copyright © 2024 Intel Corporation + * SPDX-License-Identifier: MIT + */ + +#include "anv_private.h" + +VkResult anv_CreateEvent( + VkDevice _device, + const VkEventCreateInfo* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkEvent* pEvent) +{ + ANV_FROM_HANDLE(anv_device, device, _device); + struct anv_event *event; + + assert(pCreateInfo->sType == VK_STRUCTURE_TYPE_EVENT_CREATE_INFO); + + event = vk_object_alloc(&device->vk, pAllocator, sizeof(*event), + VK_OBJECT_TYPE_EVENT); + if (event == NULL) + return vk_error(device, VK_ERROR_OUT_OF_HOST_MEMORY); + + event->state = anv_state_pool_alloc(&device->dynamic_state_pool, + sizeof(uint64_t), 8); + *(uint64_t *)event->state.map = VK_EVENT_RESET; + + ANV_RMV(event_create, device, event, pCreateInfo->flags, false); + + *pEvent = anv_event_to_handle(event); + + return VK_SUCCESS; +} + +void anv_DestroyEvent( + VkDevice _device, + VkEvent _event, + const VkAllocationCallbacks* pAllocator) +{ + ANV_FROM_HANDLE(anv_device, device, _device); + ANV_FROM_HANDLE(anv_event, event, _event); + + if (!event) + return; + + ANV_RMV(resource_destroy, device, event); + + anv_state_pool_free(&device->dynamic_state_pool, event->state); + + vk_object_free(&device->vk, pAllocator, event); +} + +VkResult anv_GetEventStatus( + VkDevice _device, + VkEvent _event) +{ + ANV_FROM_HANDLE(anv_device, device, _device); + ANV_FROM_HANDLE(anv_event, event, _event); + + if (vk_device_is_lost(&device->vk)) + return VK_ERROR_DEVICE_LOST; + + return *(uint64_t *)event->state.map; +} + +VkResult anv_SetEvent( + VkDevice _device, + VkEvent _event) +{ + ANV_FROM_HANDLE(anv_event, event, _event); + + *(uint64_t *)event->state.map = VK_EVENT_SET; + + return VK_SUCCESS; +} + +VkResult anv_ResetEvent( + VkDevice _device, + VkEvent _event) +{ + ANV_FROM_HANDLE(anv_event, event, _event); + + *(uint64_t *)event->state.map = VK_EVENT_RESET; + + return VK_SUCCESS; +} diff --git a/src/intel/vulkan/meson.build b/src/intel/vulkan/meson.build index 9db99492626..7c953574a5e 100644 --- a/src/intel/vulkan/meson.build +++ b/src/intel/vulkan/meson.build @@ -151,6 +151,7 @@ libanv_files = files( 'anv_cmd_buffer.c', 'anv_descriptor_set.c', 'anv_device.c', + 'anv_event.c', 'anv_formats.c', 'anv_genX.h', 'anv_image.c',