xref: /aosp_15_r20/external/mesa3d/src/asahi/vulkan/hk_event.c (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1*61046927SAndroid Build Coastguard Worker /*
2*61046927SAndroid Build Coastguard Worker  * Copyright 2024 Valve Corporation
3*61046927SAndroid Build Coastguard Worker  * Copyright 2024 Alyssa Rosenzweig
4*61046927SAndroid Build Coastguard Worker  * Copyright 2022-2023 Collabora Ltd. and Red Hat Inc.
5*61046927SAndroid Build Coastguard Worker  * SPDX-License-Identifier: MIT
6*61046927SAndroid Build Coastguard Worker  */
7*61046927SAndroid Build Coastguard Worker #include "hk_event.h"
8*61046927SAndroid Build Coastguard Worker #include "vulkan/vulkan_core.h"
9*61046927SAndroid Build Coastguard Worker 
10*61046927SAndroid Build Coastguard Worker #include "agx_bo.h"
11*61046927SAndroid Build Coastguard Worker #include "hk_cmd_buffer.h"
12*61046927SAndroid Build Coastguard Worker #include "hk_device.h"
13*61046927SAndroid Build Coastguard Worker #include "hk_entrypoints.h"
14*61046927SAndroid Build Coastguard Worker 
15*61046927SAndroid Build Coastguard Worker #define HK_EVENT_MEM_SIZE sizeof(VkResult)
16*61046927SAndroid Build Coastguard Worker 
17*61046927SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL
hk_CreateEvent(VkDevice device,const VkEventCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkEvent * pEvent)18*61046927SAndroid Build Coastguard Worker hk_CreateEvent(VkDevice device, const VkEventCreateInfo *pCreateInfo,
19*61046927SAndroid Build Coastguard Worker                const VkAllocationCallbacks *pAllocator, VkEvent *pEvent)
20*61046927SAndroid Build Coastguard Worker {
21*61046927SAndroid Build Coastguard Worker    VK_FROM_HANDLE(hk_device, dev, device);
22*61046927SAndroid Build Coastguard Worker    struct hk_event *event;
23*61046927SAndroid Build Coastguard Worker 
24*61046927SAndroid Build Coastguard Worker    event = vk_object_zalloc(&dev->vk, pAllocator, sizeof(*event),
25*61046927SAndroid Build Coastguard Worker                             VK_OBJECT_TYPE_EVENT);
26*61046927SAndroid Build Coastguard Worker    if (!event)
27*61046927SAndroid Build Coastguard Worker       return vk_error(dev, VK_ERROR_OUT_OF_HOST_MEMORY);
28*61046927SAndroid Build Coastguard Worker 
29*61046927SAndroid Build Coastguard Worker    /* TODO: this is really wasteful, bring back the NVK heap!
30*61046927SAndroid Build Coastguard Worker     *
31*61046927SAndroid Build Coastguard Worker     * XXX
32*61046927SAndroid Build Coastguard Worker     */
33*61046927SAndroid Build Coastguard Worker    event->bo =
34*61046927SAndroid Build Coastguard Worker       agx_bo_create(&dev->dev, HK_EVENT_MEM_SIZE, 0, AGX_BO_WRITEBACK, "Event");
35*61046927SAndroid Build Coastguard Worker    event->status = event->bo->map;
36*61046927SAndroid Build Coastguard Worker    event->addr = event->bo->va->addr;
37*61046927SAndroid Build Coastguard Worker 
38*61046927SAndroid Build Coastguard Worker    *event->status = VK_EVENT_RESET;
39*61046927SAndroid Build Coastguard Worker 
40*61046927SAndroid Build Coastguard Worker    *pEvent = hk_event_to_handle(event);
41*61046927SAndroid Build Coastguard Worker 
42*61046927SAndroid Build Coastguard Worker    return VK_SUCCESS;
43*61046927SAndroid Build Coastguard Worker }
44*61046927SAndroid Build Coastguard Worker 
45*61046927SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL
hk_DestroyEvent(VkDevice device,VkEvent _event,const VkAllocationCallbacks * pAllocator)46*61046927SAndroid Build Coastguard Worker hk_DestroyEvent(VkDevice device, VkEvent _event,
47*61046927SAndroid Build Coastguard Worker                 const VkAllocationCallbacks *pAllocator)
48*61046927SAndroid Build Coastguard Worker {
49*61046927SAndroid Build Coastguard Worker    VK_FROM_HANDLE(hk_device, dev, device);
50*61046927SAndroid Build Coastguard Worker    VK_FROM_HANDLE(hk_event, event, _event);
51*61046927SAndroid Build Coastguard Worker 
52*61046927SAndroid Build Coastguard Worker    if (!event)
53*61046927SAndroid Build Coastguard Worker       return;
54*61046927SAndroid Build Coastguard Worker 
55*61046927SAndroid Build Coastguard Worker    agx_bo_unreference(&dev->dev, event->bo);
56*61046927SAndroid Build Coastguard Worker    vk_object_free(&dev->vk, pAllocator, event);
57*61046927SAndroid Build Coastguard Worker }
58*61046927SAndroid Build Coastguard Worker 
59*61046927SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL
hk_GetEventStatus(VkDevice device,VkEvent _event)60*61046927SAndroid Build Coastguard Worker hk_GetEventStatus(VkDevice device, VkEvent _event)
61*61046927SAndroid Build Coastguard Worker {
62*61046927SAndroid Build Coastguard Worker    VK_FROM_HANDLE(hk_event, event, _event);
63*61046927SAndroid Build Coastguard Worker 
64*61046927SAndroid Build Coastguard Worker    return *event->status;
65*61046927SAndroid Build Coastguard Worker }
66*61046927SAndroid Build Coastguard Worker 
67*61046927SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL
hk_SetEvent(VkDevice device,VkEvent _event)68*61046927SAndroid Build Coastguard Worker hk_SetEvent(VkDevice device, VkEvent _event)
69*61046927SAndroid Build Coastguard Worker {
70*61046927SAndroid Build Coastguard Worker    VK_FROM_HANDLE(hk_event, event, _event);
71*61046927SAndroid Build Coastguard Worker 
72*61046927SAndroid Build Coastguard Worker    *event->status = VK_EVENT_SET;
73*61046927SAndroid Build Coastguard Worker 
74*61046927SAndroid Build Coastguard Worker    return VK_SUCCESS;
75*61046927SAndroid Build Coastguard Worker }
76*61046927SAndroid Build Coastguard Worker 
77*61046927SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL
hk_ResetEvent(VkDevice device,VkEvent _event)78*61046927SAndroid Build Coastguard Worker hk_ResetEvent(VkDevice device, VkEvent _event)
79*61046927SAndroid Build Coastguard Worker {
80*61046927SAndroid Build Coastguard Worker    VK_FROM_HANDLE(hk_event, event, _event);
81*61046927SAndroid Build Coastguard Worker 
82*61046927SAndroid Build Coastguard Worker    *event->status = VK_EVENT_RESET;
83*61046927SAndroid Build Coastguard Worker 
84*61046927SAndroid Build Coastguard Worker    return VK_SUCCESS;
85*61046927SAndroid Build Coastguard Worker }
86*61046927SAndroid Build Coastguard Worker 
87*61046927SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL
hk_CmdSetEvent2(VkCommandBuffer commandBuffer,VkEvent _event,const VkDependencyInfo * pDependencyInfo)88*61046927SAndroid Build Coastguard Worker hk_CmdSetEvent2(VkCommandBuffer commandBuffer, VkEvent _event,
89*61046927SAndroid Build Coastguard Worker                 const VkDependencyInfo *pDependencyInfo)
90*61046927SAndroid Build Coastguard Worker {
91*61046927SAndroid Build Coastguard Worker    VK_FROM_HANDLE(hk_cmd_buffer, cmd, commandBuffer);
92*61046927SAndroid Build Coastguard Worker    VK_FROM_HANDLE(hk_event, event, _event);
93*61046927SAndroid Build Coastguard Worker 
94*61046927SAndroid Build Coastguard Worker    hk_queue_write(cmd, event->bo->va->addr, VK_EVENT_SET, false);
95*61046927SAndroid Build Coastguard Worker }
96*61046927SAndroid Build Coastguard Worker 
97*61046927SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL
hk_CmdResetEvent2(VkCommandBuffer commandBuffer,VkEvent _event,VkPipelineStageFlags2 stageMask)98*61046927SAndroid Build Coastguard Worker hk_CmdResetEvent2(VkCommandBuffer commandBuffer, VkEvent _event,
99*61046927SAndroid Build Coastguard Worker                   VkPipelineStageFlags2 stageMask)
100*61046927SAndroid Build Coastguard Worker {
101*61046927SAndroid Build Coastguard Worker    VK_FROM_HANDLE(hk_cmd_buffer, cmd, commandBuffer);
102*61046927SAndroid Build Coastguard Worker    VK_FROM_HANDLE(hk_event, event, _event);
103*61046927SAndroid Build Coastguard Worker 
104*61046927SAndroid Build Coastguard Worker    hk_queue_write(cmd, event->bo->va->addr, VK_EVENT_RESET, false);
105*61046927SAndroid Build Coastguard Worker }
106*61046927SAndroid Build Coastguard Worker 
107*61046927SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL
hk_CmdWaitEvents2(VkCommandBuffer commandBuffer,uint32_t eventCount,const VkEvent * pEvents,const VkDependencyInfo * pDependencyInfos)108*61046927SAndroid Build Coastguard Worker hk_CmdWaitEvents2(VkCommandBuffer commandBuffer, uint32_t eventCount,
109*61046927SAndroid Build Coastguard Worker                   const VkEvent *pEvents,
110*61046927SAndroid Build Coastguard Worker                   const VkDependencyInfo *pDependencyInfos)
111*61046927SAndroid Build Coastguard Worker {
112*61046927SAndroid Build Coastguard Worker    /* Currently we barrier everything, so this is a no-op. */
113*61046927SAndroid Build Coastguard Worker }
114