Module: Mesa
Branch: main
Commit: 1b94dfd4b2765631cdf53ac2d74cdf039947dc49
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=1b94dfd4b2765631cdf53ac2d74cdf039947dc49

Author: Rajnesh Kanwal <[email protected]>
Date:   Thu Sep  8 14:37:04 2022 +0100

pvr: Implement vkCreateEvent and vkDestroyEvent APIs.

Signed-off-by: Rajnesh Kanwal <[email protected]>
Reviewed-by: Karmjit Mahil <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/18612>

---

 src/imagination/vulkan/pvr_device.c  | 26 ++++++++++++++++++++++++--
 src/imagination/vulkan/pvr_private.h | 15 +++++++++++++++
 2 files changed, 39 insertions(+), 2 deletions(-)

diff --git a/src/imagination/vulkan/pvr_device.c 
b/src/imagination/vulkan/pvr_device.c
index 018470cc0d3..b934f79b755 100644
--- a/src/imagination/vulkan/pvr_device.c
+++ b/src/imagination/vulkan/pvr_device.c
@@ -2541,7 +2541,20 @@ VkResult pvr_CreateEvent(VkDevice _device,
                          const VkAllocationCallbacks *pAllocator,
                          VkEvent *pEvent)
 {
-   assert(!"Unimplemented");
+   PVR_FROM_HANDLE(pvr_device, device, _device);
+
+   struct pvr_event *event = vk_object_alloc(&device->vk,
+                                             pAllocator,
+                                             sizeof(*event),
+                                             VK_OBJECT_TYPE_EVENT);
+   if (!event)
+      return vk_error(device, VK_ERROR_OUT_OF_HOST_MEMORY);
+
+   event->sync = NULL;
+   event->state = PVR_EVENT_STATE_RESET_BY_HOST;
+
+   *pEvent = pvr_event_to_handle(event);
+
    return VK_SUCCESS;
 }
 
@@ -2549,7 +2562,16 @@ void pvr_DestroyEvent(VkDevice _device,
                       VkEvent _event,
                       const VkAllocationCallbacks *pAllocator)
 {
-   assert(!"Unimplemented");
+   PVR_FROM_HANDLE(pvr_device, device, _device);
+   PVR_FROM_HANDLE(pvr_event, event, _event);
+
+   if (!event)
+      return;
+
+   if (event->sync)
+      vk_sync_destroy(&device->vk, event->sync);
+
+   vk_object_free(&device->vk, pAllocator, event);
 }
 
 VkResult pvr_GetEventStatus(VkDevice _device, VkEvent _event)
diff --git a/src/imagination/vulkan/pvr_private.h 
b/src/imagination/vulkan/pvr_private.h
index 485712638c5..b57584eaf25 100644
--- a/src/imagination/vulkan/pvr_private.h
+++ b/src/imagination/vulkan/pvr_private.h
@@ -222,6 +222,13 @@ enum pvr_static_clear_variant_bits {
 
 #define PVR_STATIC_CLEAR_VARIANT_COUNT (PVR_STATIC_CLEAR_COLOR_BIT << 1U)
 
+enum pvr_event_state {
+   PVR_EVENT_STATE_SET_BY_HOST,
+   PVR_EVENT_STATE_RESET_BY_HOST,
+   PVR_EVENT_STATE_SET_BY_DEVICE,
+   PVR_EVENT_STATE_RESET_BY_DEVICE
+};
+
 struct pvr_bo;
 struct pvr_compute_ctx;
 struct pvr_compute_pipeline;
@@ -630,6 +637,13 @@ struct pvr_descriptor_set {
    struct pvr_descriptor descriptors[0];
 };
 
+struct pvr_event {
+   struct vk_object_base base;
+
+   enum pvr_event_state state;
+   struct vk_sync *sync;
+};
+
 struct pvr_descriptor_state {
    struct pvr_descriptor_set *descriptor_sets[PVR_MAX_DESCRIPTOR_SETS];
    uint32_t valid_mask;
@@ -1601,6 +1615,7 @@ VK_DEFINE_NONDISP_HANDLE_CASTS(pvr_descriptor_set,
                                base,
                                VkDescriptorSet,
                                VK_OBJECT_TYPE_DESCRIPTOR_SET)
+VK_DEFINE_NONDISP_HANDLE_CASTS(pvr_event, base, VkEvent, VK_OBJECT_TYPE_EVENT)
 VK_DEFINE_NONDISP_HANDLE_CASTS(pvr_descriptor_pool,
                                base,
                                VkDescriptorPool,

Reply via email to