From 963b69651117c6774769bf75438ebc4c00c7a7a3 Mon Sep 17 00:00:00 2001 From: Rajnesh Kanwal Date: Wed, 5 Oct 2022 18:48:24 +0500 Subject: [PATCH] pvr: Add PVR_SUB_CMD_TYPE_OCCLUSION_QUERY type sub cmd. Co-authored-by: Karmjit Mahil Signed-off-by: Rajnesh Kanwal Signed-off-by: Karmjit Mahil Reviewed-by: Frank Binns Part-of: --- src/imagination/vulkan/pvr_cmd_buffer.c | 9 +++++++++ src/imagination/vulkan/pvr_private.h | 1 + src/imagination/vulkan/pvr_queue.c | 4 ++++ 3 files changed, 14 insertions(+) diff --git a/src/imagination/vulkan/pvr_cmd_buffer.c b/src/imagination/vulkan/pvr_cmd_buffer.c index 30e863d171e..1eb6b9089df 100644 --- a/src/imagination/vulkan/pvr_cmd_buffer.c +++ b/src/imagination/vulkan/pvr_cmd_buffer.c @@ -95,6 +95,7 @@ static void pvr_cmd_buffer_free_sub_cmd(struct pvr_cmd_buffer *cmd_buffer, break; case PVR_SUB_CMD_TYPE_COMPUTE: + case PVR_SUB_CMD_TYPE_OCCLUSION_QUERY: pvr_csb_finish(&sub_cmd->compute.control_stream); break; @@ -273,7 +274,12 @@ static void pvr_cmd_buffer_update_barriers(struct pvr_cmd_buffer *cmd_buffer, barriers = PVR_PIPELINE_STAGE_COMPUTE_BIT; break; + case PVR_SUB_CMD_TYPE_OCCLUSION_QUERY: case PVR_SUB_CMD_TYPE_TRANSFER: + /* Compute jobs are used for occlusion queries but to copy the results we + * have to sync with transfer jobs because vkCmdCopyQueryPoolResults() is + * deemed as a transfer operation by the spec. + */ barriers = PVR_PIPELINE_STAGE_TRANSFER_BIT; break; @@ -1489,6 +1495,7 @@ VkResult pvr_cmd_buffer_end_sub_cmd(struct pvr_cmd_buffer *cmd_buffer) break; } + case PVR_SUB_CMD_TYPE_OCCLUSION_QUERY: case PVR_SUB_CMD_TYPE_COMPUTE: { struct pvr_sub_cmd_compute *const compute_sub_cmd = &sub_cmd->compute; @@ -1663,6 +1670,7 @@ VkResult pvr_cmd_buffer_start_sub_cmd(struct pvr_cmd_buffer *cmd_buffer, } break; + case PVR_SUB_CMD_TYPE_OCCLUSION_QUERY: case PVR_SUB_CMD_TYPE_COMPUTE: pvr_csb_init(device, PVR_CMD_STREAM_TYPE_COMPUTE, @@ -5686,6 +5694,7 @@ static VkResult pvr_execute_sub_cmd(struct pvr_cmd_buffer *cmd_buffer, primary_sub_cmd->gfx = sec_sub_cmd->gfx; break; + case PVR_SUB_CMD_TYPE_OCCLUSION_QUERY: case PVR_SUB_CMD_TYPE_COMPUTE: primary_sub_cmd->compute = sec_sub_cmd->compute; break; diff --git a/src/imagination/vulkan/pvr_private.h b/src/imagination/vulkan/pvr_private.h index 5592d96e0bf..e8312e5ee8c 100644 --- a/src/imagination/vulkan/pvr_private.h +++ b/src/imagination/vulkan/pvr_private.h @@ -106,6 +106,7 @@ enum pvr_sub_cmd_type { PVR_SUB_CMD_TYPE_GRAPHICS, PVR_SUB_CMD_TYPE_COMPUTE, PVR_SUB_CMD_TYPE_TRANSFER, + PVR_SUB_CMD_TYPE_OCCLUSION_QUERY, PVR_SUB_CMD_TYPE_EVENT, }; diff --git a/src/imagination/vulkan/pvr_queue.c b/src/imagination/vulkan/pvr_queue.c index 9acc2ff4dfd..1d6f7931955 100644 --- a/src/imagination/vulkan/pvr_queue.c +++ b/src/imagination/vulkan/pvr_queue.c @@ -703,6 +703,10 @@ static VkResult pvr_process_cmd_buffer( per_cmd_buffer_syncobjs); break; + case PVR_SUB_CMD_TYPE_OCCLUSION_QUERY: + pvr_finishme("Add support to occlusion query."); + break; + case PVR_SUB_CMD_TYPE_EVENT: result = pvr_process_event_cmd(device, &sub_cmd->event,