xref: /aosp_15_r20/external/mesa3d/src/intel/vulkan/anv_event.c (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1*61046927SAndroid Build Coastguard Worker /* Copyright © 2024 Intel Corporation
2*61046927SAndroid Build Coastguard Worker  * SPDX-License-Identifier: MIT
3*61046927SAndroid Build Coastguard Worker  */
4*61046927SAndroid Build Coastguard Worker 
5*61046927SAndroid Build Coastguard Worker #include "anv_private.h"
6*61046927SAndroid Build Coastguard Worker 
anv_CreateEvent(VkDevice _device,const VkEventCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkEvent * pEvent)7*61046927SAndroid Build Coastguard Worker VkResult anv_CreateEvent(
8*61046927SAndroid Build Coastguard Worker     VkDevice                                    _device,
9*61046927SAndroid Build Coastguard Worker     const VkEventCreateInfo*                    pCreateInfo,
10*61046927SAndroid Build Coastguard Worker     const VkAllocationCallbacks*                pAllocator,
11*61046927SAndroid Build Coastguard Worker     VkEvent*                                    pEvent)
12*61046927SAndroid Build Coastguard Worker {
13*61046927SAndroid Build Coastguard Worker    ANV_FROM_HANDLE(anv_device, device, _device);
14*61046927SAndroid Build Coastguard Worker    struct anv_event *event;
15*61046927SAndroid Build Coastguard Worker 
16*61046927SAndroid Build Coastguard Worker    assert(pCreateInfo->sType == VK_STRUCTURE_TYPE_EVENT_CREATE_INFO);
17*61046927SAndroid Build Coastguard Worker 
18*61046927SAndroid Build Coastguard Worker    event = vk_object_alloc(&device->vk, pAllocator, sizeof(*event),
19*61046927SAndroid Build Coastguard Worker                            VK_OBJECT_TYPE_EVENT);
20*61046927SAndroid Build Coastguard Worker    if (event == NULL)
21*61046927SAndroid Build Coastguard Worker       return vk_error(device, VK_ERROR_OUT_OF_HOST_MEMORY);
22*61046927SAndroid Build Coastguard Worker 
23*61046927SAndroid Build Coastguard Worker    event->state = anv_state_pool_alloc(&device->dynamic_state_pool,
24*61046927SAndroid Build Coastguard Worker                                        sizeof(uint64_t), 8);
25*61046927SAndroid Build Coastguard Worker    *(uint64_t *)event->state.map = VK_EVENT_RESET;
26*61046927SAndroid Build Coastguard Worker 
27*61046927SAndroid Build Coastguard Worker    ANV_RMV(event_create, device, event, pCreateInfo->flags, false);
28*61046927SAndroid Build Coastguard Worker 
29*61046927SAndroid Build Coastguard Worker    *pEvent = anv_event_to_handle(event);
30*61046927SAndroid Build Coastguard Worker 
31*61046927SAndroid Build Coastguard Worker    return VK_SUCCESS;
32*61046927SAndroid Build Coastguard Worker }
33*61046927SAndroid Build Coastguard Worker 
anv_DestroyEvent(VkDevice _device,VkEvent _event,const VkAllocationCallbacks * pAllocator)34*61046927SAndroid Build Coastguard Worker void anv_DestroyEvent(
35*61046927SAndroid Build Coastguard Worker     VkDevice                                    _device,
36*61046927SAndroid Build Coastguard Worker     VkEvent                                     _event,
37*61046927SAndroid Build Coastguard Worker     const VkAllocationCallbacks*                pAllocator)
38*61046927SAndroid Build Coastguard Worker {
39*61046927SAndroid Build Coastguard Worker    ANV_FROM_HANDLE(anv_device, device, _device);
40*61046927SAndroid Build Coastguard Worker    ANV_FROM_HANDLE(anv_event, event, _event);
41*61046927SAndroid Build Coastguard Worker 
42*61046927SAndroid Build Coastguard Worker    if (!event)
43*61046927SAndroid Build Coastguard Worker       return;
44*61046927SAndroid Build Coastguard Worker 
45*61046927SAndroid Build Coastguard Worker    ANV_RMV(resource_destroy, device, event);
46*61046927SAndroid Build Coastguard Worker 
47*61046927SAndroid Build Coastguard Worker    anv_state_pool_free(&device->dynamic_state_pool, event->state);
48*61046927SAndroid Build Coastguard Worker 
49*61046927SAndroid Build Coastguard Worker    vk_object_free(&device->vk, pAllocator, event);
50*61046927SAndroid Build Coastguard Worker }
51*61046927SAndroid Build Coastguard Worker 
anv_GetEventStatus(VkDevice _device,VkEvent _event)52*61046927SAndroid Build Coastguard Worker VkResult anv_GetEventStatus(
53*61046927SAndroid Build Coastguard Worker     VkDevice                                    _device,
54*61046927SAndroid Build Coastguard Worker     VkEvent                                     _event)
55*61046927SAndroid Build Coastguard Worker {
56*61046927SAndroid Build Coastguard Worker    ANV_FROM_HANDLE(anv_device, device, _device);
57*61046927SAndroid Build Coastguard Worker    ANV_FROM_HANDLE(anv_event, event, _event);
58*61046927SAndroid Build Coastguard Worker 
59*61046927SAndroid Build Coastguard Worker    if (vk_device_is_lost(&device->vk))
60*61046927SAndroid Build Coastguard Worker       return VK_ERROR_DEVICE_LOST;
61*61046927SAndroid Build Coastguard Worker 
62*61046927SAndroid Build Coastguard Worker    return *(uint64_t *)event->state.map;
63*61046927SAndroid Build Coastguard Worker }
64*61046927SAndroid Build Coastguard Worker 
anv_SetEvent(VkDevice _device,VkEvent _event)65*61046927SAndroid Build Coastguard Worker VkResult anv_SetEvent(
66*61046927SAndroid Build Coastguard Worker     VkDevice                                    _device,
67*61046927SAndroid Build Coastguard Worker     VkEvent                                     _event)
68*61046927SAndroid Build Coastguard Worker {
69*61046927SAndroid Build Coastguard Worker    ANV_FROM_HANDLE(anv_event, event, _event);
70*61046927SAndroid Build Coastguard Worker 
71*61046927SAndroid Build Coastguard Worker    *(uint64_t *)event->state.map = VK_EVENT_SET;
72*61046927SAndroid Build Coastguard Worker 
73*61046927SAndroid Build Coastguard Worker    return VK_SUCCESS;
74*61046927SAndroid Build Coastguard Worker }
75*61046927SAndroid Build Coastguard Worker 
anv_ResetEvent(VkDevice _device,VkEvent _event)76*61046927SAndroid Build Coastguard Worker VkResult anv_ResetEvent(
77*61046927SAndroid Build Coastguard Worker     VkDevice                                    _device,
78*61046927SAndroid Build Coastguard Worker     VkEvent                                     _event)
79*61046927SAndroid Build Coastguard Worker {
80*61046927SAndroid Build Coastguard Worker    ANV_FROM_HANDLE(anv_event, event, _event);
81*61046927SAndroid Build Coastguard Worker 
82*61046927SAndroid Build Coastguard Worker    *(uint64_t *)event->state.map = VK_EVENT_RESET;
83*61046927SAndroid Build Coastguard Worker 
84*61046927SAndroid Build Coastguard Worker    return VK_SUCCESS;
85*61046927SAndroid Build Coastguard Worker }
86