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

Author: Karmjit Mahil <[email protected]>
Date:   Thu Sep 15 12:01:37 2022 +0100

pvr: Add basic skeleton for event sub cmd.

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

---

 src/imagination/vulkan/pvr_cmd_buffer.c | 14 ++++++++++++++
 src/imagination/vulkan/pvr_private.h    | 13 +++++++++++++
 src/imagination/vulkan/pvr_queue.c      |  9 +++++++--
 3 files changed, 34 insertions(+), 2 deletions(-)

diff --git a/src/imagination/vulkan/pvr_cmd_buffer.c 
b/src/imagination/vulkan/pvr_cmd_buffer.c
index bdc44f1b6b1..7efba1b57b4 100644
--- a/src/imagination/vulkan/pvr_cmd_buffer.c
+++ b/src/imagination/vulkan/pvr_cmd_buffer.c
@@ -104,6 +104,9 @@ static void pvr_cmd_buffer_free_sub_cmd(struct 
pvr_cmd_buffer *cmd_buffer,
       }
       break;
 
+   case PVR_SUB_CMD_TYPE_EVENT:
+      break;
+
    default:
       pvr_finishme("Unsupported sub-command type %d", sub_cmd->type);
       break;
@@ -263,6 +266,10 @@ static void pvr_cmd_buffer_update_barriers(struct 
pvr_cmd_buffer *cmd_buffer,
       barriers = PVR_PIPELINE_STAGE_TRANSFER_BIT;
       break;
 
+   case PVR_SUB_CMD_TYPE_EVENT:
+      barriers = 0;
+      break;
+
    default:
       barriers = 0;
       pvr_finishme("Unsupported sub-command type %d", type);
@@ -1563,6 +1570,9 @@ static VkResult pvr_cmd_buffer_end_sub_cmd(struct 
pvr_cmd_buffer *cmd_buffer)
    case PVR_SUB_CMD_TYPE_TRANSFER:
       break;
 
+   case PVR_SUB_CMD_TYPE_EVENT:
+      break;
+
    default:
       pvr_finishme("Unsupported sub-command type %d", sub_cmd->type);
       break;
@@ -1713,6 +1723,10 @@ static VkResult pvr_cmd_buffer_start_sub_cmd(struct 
pvr_cmd_buffer *cmd_buffer,
       list_inithead(&sub_cmd->transfer.transfer_cmds);
       break;
 
+   case PVR_SUB_CMD_TYPE_EVENT:
+      /* TODO: Add support for joining consecutive event sub_cmd? */
+      break;
+
    default:
       pvr_finishme("Unsupported sub-command type %d", type);
       break;
diff --git a/src/imagination/vulkan/pvr_private.h 
b/src/imagination/vulkan/pvr_private.h
index e7099379435..485712638c5 100644
--- a/src/imagination/vulkan/pvr_private.h
+++ b/src/imagination/vulkan/pvr_private.h
@@ -111,6 +111,14 @@ enum pvr_sub_cmd_type {
    PVR_SUB_CMD_TYPE_GRAPHICS,
    PVR_SUB_CMD_TYPE_COMPUTE,
    PVR_SUB_CMD_TYPE_TRANSFER,
+   PVR_SUB_CMD_TYPE_EVENT,
+};
+
+enum pvr_event_type {
+   PVR_EVENT_TYPE_SET,
+   PVR_EVENT_TYPE_RESET,
+   PVR_EVENT_TYPE_WAIT,
+   PVR_EVENT_TYPE_BARRIER,
 };
 
 enum pvr_depth_stencil_usage {
@@ -710,6 +718,10 @@ struct pvr_sub_cmd_transfer {
    struct list_head transfer_cmds;
 };
 
+struct pvr_sub_cmd_event {
+   enum pvr_event_type type;
+};
+
 struct pvr_sub_cmd {
    /* This links the subcommand in pvr_cmd_buffer:sub_cmds list. */
    struct list_head link;
@@ -720,6 +732,7 @@ struct pvr_sub_cmd {
       struct pvr_sub_cmd_gfx gfx;
       struct pvr_sub_cmd_compute compute;
       struct pvr_sub_cmd_transfer transfer;
+      struct pvr_sub_cmd_event event;
    };
 };
 
diff --git a/src/imagination/vulkan/pvr_queue.c 
b/src/imagination/vulkan/pvr_queue.c
index 3b8504073c2..56ff8a7b877 100644
--- a/src/imagination/vulkan/pvr_queue.c
+++ b/src/imagination/vulkan/pvr_queue.c
@@ -509,9 +509,14 @@ pvr_process_cmd_buffer(struct pvr_device *device,
                                             completions);
          break;
 
+      case PVR_SUB_CMD_TYPE_EVENT:
+         pvr_finishme("Add support to process event sub cmds.");
+         result = vk_error(device, VK_ERROR_OUT_OF_HOST_MEMORY);
+         break;
+
       default:
-         pvr_finishme("Unsupported sub-command type %d", sub_cmd->type);
-         return vk_error(device, VK_ERROR_OUT_OF_HOST_MEMORY);
+         mesa_loge("Unsupported sub-command type %d", sub_cmd->type);
+         result = vk_error(device, VK_ERROR_OUT_OF_HOST_MEMORY);
       }
 
       if (result != VK_SUCCESS) {

Reply via email to