diff --git a/src/amd/vulkan/radv_cmd_buffer.c b/src/amd/vulkan/radv_cmd_buffer.c index 9a0efca1856..01f53188f9c 100644 --- a/src/amd/vulkan/radv_cmd_buffer.c +++ b/src/amd/vulkan/radv_cmd_buffer.c @@ -14521,14 +14521,7 @@ radv_CmdSetEvent2(VkCommandBuffer commandBuffer, VkEvent _event, const VkDepende { VK_FROM_HANDLE(radv_cmd_buffer, cmd_buffer, commandBuffer); VK_FROM_HANDLE(radv_event, event, _event); - VkPipelineStageFlags2 src_stage_mask = 0; - - for (uint32_t i = 0; i < pDependencyInfo->memoryBarrierCount; i++) - src_stage_mask |= pDependencyInfo->pMemoryBarriers[i].srcStageMask; - for (uint32_t i = 0; i < pDependencyInfo->bufferMemoryBarrierCount; i++) - src_stage_mask |= pDependencyInfo->pBufferMemoryBarriers[i].srcStageMask; - for (uint32_t i = 0; i < pDependencyInfo->imageMemoryBarrierCount; i++) - src_stage_mask |= pDependencyInfo->pImageMemoryBarriers[i].srcStageMask; + VkPipelineStageFlags2 src_stage_mask = vk_collect_dependency_info_src_stages(pDependencyInfo); write_event(cmd_buffer, event, src_stage_mask, 1); } diff --git a/src/freedreno/vulkan/tu_event.cc b/src/freedreno/vulkan/tu_event.cc index d70c963bc31..337841d2e37 100644 --- a/src/freedreno/vulkan/tu_event.cc +++ b/src/freedreno/vulkan/tu_event.cc @@ -9,6 +9,8 @@ #include "tu_event.h" +#include "vk_synchronization.h" + #include "tu_cmd_buffer.h" #include "tu_rmv.h" @@ -109,14 +111,8 @@ tu_CmdSetEvent2(VkCommandBuffer commandBuffer, { VK_FROM_HANDLE(tu_cmd_buffer, cmd, commandBuffer); VK_FROM_HANDLE(tu_event, event, _event); - VkPipelineStageFlags2 src_stage_mask = 0; - - for (uint32_t i = 0; i < pDependencyInfo->memoryBarrierCount; i++) - src_stage_mask |= pDependencyInfo->pMemoryBarriers[i].srcStageMask; - for (uint32_t i = 0; i < pDependencyInfo->bufferMemoryBarrierCount; i++) - src_stage_mask |= pDependencyInfo->pBufferMemoryBarriers[i].srcStageMask; - for (uint32_t i = 0; i < pDependencyInfo->imageMemoryBarrierCount; i++) - src_stage_mask |= pDependencyInfo->pImageMemoryBarriers[i].srcStageMask; + VkPipelineStageFlags2 src_stage_mask = + vk_collect_dependency_info_src_stages(pDependencyInfo); tu_write_event(cmd, event, src_stage_mask, 1); } diff --git a/src/gallium/frontends/lavapipe/lvp_execute.c b/src/gallium/frontends/lavapipe/lvp_execute.c index 10d60a7b61c..6416a34b2e5 100644 --- a/src/gallium/frontends/lavapipe/lvp_execute.c +++ b/src/gallium/frontends/lavapipe/lvp_execute.c @@ -48,6 +48,7 @@ #include "vk_blend.h" #include "vk_cmd_enqueue_entrypoints.h" #include "vk_descriptor_update_template.h" +#include "vk_synchronization.h" #include "vk_util.h" #include "vk_enum_to_str.h" @@ -2792,14 +2793,8 @@ static void handle_event_set2(struct vk_cmd_queue_entry *cmd, { LVP_FROM_HANDLE(lvp_event, event, cmd->u.set_event2.event); - VkPipelineStageFlags2 src_stage_mask = 0; - - for (uint32_t i = 0; i < cmd->u.set_event2.dependency_info->memoryBarrierCount; i++) - src_stage_mask |= cmd->u.set_event2.dependency_info->pMemoryBarriers[i].srcStageMask; - for (uint32_t i = 0; i < cmd->u.set_event2.dependency_info->bufferMemoryBarrierCount; i++) - src_stage_mask |= cmd->u.set_event2.dependency_info->pBufferMemoryBarriers[i].srcStageMask; - for (uint32_t i = 0; i < cmd->u.set_event2.dependency_info->imageMemoryBarrierCount; i++) - src_stage_mask |= cmd->u.set_event2.dependency_info->pImageMemoryBarriers[i].srcStageMask; + VkPipelineStageFlags2 src_stage_mask = + vk_collect_dependency_info_src_stages(cmd->u.set_event2.dependency_info); if (src_stage_mask & VK_PIPELINE_STAGE_2_TOP_OF_PIPE_BIT) state->pctx->flush(state->pctx, NULL, 0); diff --git a/src/imagination/vulkan/pvr_cmd_buffer.c b/src/imagination/vulkan/pvr_cmd_buffer.c index 19faf9d5732..c19e61c4483 100644 --- a/src/imagination/vulkan/pvr_cmd_buffer.c +++ b/src/imagination/vulkan/pvr_cmd_buffer.c @@ -76,6 +76,7 @@ #include "vk_log.h" #include "vk_object.h" #include "vk_pipeline_layout.h" +#include "vk_synchronization.h" #include "vk_util.h" /* Structure used to pass data into pvr_compute_generate_control_stream() @@ -8341,7 +8342,6 @@ void pvr_CmdSetEvent2(VkCommandBuffer commandBuffer, { VK_FROM_HANDLE(pvr_cmd_buffer, cmd_buffer, commandBuffer); VK_FROM_HANDLE(pvr_event, event, _event); - VkPipelineStageFlags2 stage_mask = 0; VkResult result; PVR_CHECK_COMMAND_BUFFER_BUILDING_STATE(cmd_buffer); @@ -8350,14 +8350,8 @@ void pvr_CmdSetEvent2(VkCommandBuffer commandBuffer, if (result != VK_SUCCESS) return; - for (uint32_t i = 0; i < pDependencyInfo->memoryBarrierCount; i++) - stage_mask |= pDependencyInfo->pMemoryBarriers[i].srcStageMask; - - for (uint32_t i = 0; i < pDependencyInfo->bufferMemoryBarrierCount; i++) - stage_mask |= pDependencyInfo->pBufferMemoryBarriers[i].srcStageMask; - - for (uint32_t i = 0; i < pDependencyInfo->imageMemoryBarrierCount; i++) - stage_mask |= pDependencyInfo->pImageMemoryBarriers[i].srcStageMask; + VkPipelineStageFlags2 stage_mask = + vk_collect_dependency_info_src_stages(pDependencyInfo); cmd_buffer->state.current_sub_cmd->event = (struct pvr_sub_cmd_event){ .type = PVR_EVENT_TYPE_SET, diff --git a/src/intel/vulkan/genX_cmd_buffer.c b/src/intel/vulkan/genX_cmd_buffer.c index 599e1f39ec6..0b0763836d5 100644 --- a/src/intel/vulkan/genX_cmd_buffer.c +++ b/src/intel/vulkan/genX_cmd_buffer.c @@ -6160,14 +6160,8 @@ void genX(CmdSetEvent2)( case INTEL_ENGINE_CLASS_RENDER: case INTEL_ENGINE_CLASS_COMPUTE: { - VkPipelineStageFlags2 src_stages = 0; - - for (uint32_t i = 0; i < pDependencyInfo->memoryBarrierCount; i++) - src_stages |= pDependencyInfo->pMemoryBarriers[i].srcStageMask; - for (uint32_t i = 0; i < pDependencyInfo->bufferMemoryBarrierCount; i++) - src_stages |= pDependencyInfo->pBufferMemoryBarriers[i].srcStageMask; - for (uint32_t i = 0; i < pDependencyInfo->imageMemoryBarrierCount; i++) - src_stages |= pDependencyInfo->pImageMemoryBarriers[i].srcStageMask; + VkPipelineStageFlags2 src_stages = + vk_collect_dependency_info_src_stages(pDependencyInfo); cmd_buffer->state.pending_pipe_bits |= ANV_PIPE_POST_SYNC_BIT; genX(cmd_buffer_apply_pipe_flushes)(cmd_buffer); diff --git a/src/intel/vulkan_hasvk/genX_cmd_buffer.c b/src/intel/vulkan_hasvk/genX_cmd_buffer.c index 221c1c61c06..da52f2517da 100644 --- a/src/intel/vulkan_hasvk/genX_cmd_buffer.c +++ b/src/intel/vulkan_hasvk/genX_cmd_buffer.c @@ -28,6 +28,7 @@ #include "anv_measure.h" #include "vk_format.h" #include "vk_render_pass.h" +#include "vk_synchronization.h" #include "vk_util.h" #include "util/fast_idiv_by_const.h" @@ -5811,14 +5812,8 @@ void genX(CmdSetEvent2)( ANV_FROM_HANDLE(anv_cmd_buffer, cmd_buffer, commandBuffer); ANV_FROM_HANDLE(anv_event, event, _event); - VkPipelineStageFlags2 src_stages = 0; - - for (uint32_t i = 0; i < pDependencyInfo->memoryBarrierCount; i++) - src_stages |= pDependencyInfo->pMemoryBarriers[i].srcStageMask; - for (uint32_t i = 0; i < pDependencyInfo->bufferMemoryBarrierCount; i++) - src_stages |= pDependencyInfo->pBufferMemoryBarriers[i].srcStageMask; - for (uint32_t i = 0; i < pDependencyInfo->imageMemoryBarrierCount; i++) - src_stages |= pDependencyInfo->pImageMemoryBarriers[i].srcStageMask; + VkPipelineStageFlags2 src_stages = + vk_collect_dependency_info_src_stages(pDependencyInfo); cmd_buffer->state.pending_pipe_bits |= ANV_PIPE_POST_SYNC_BIT; genX(cmd_buffer_apply_pipe_flushes)(cmd_buffer); diff --git a/src/nouveau/vulkan/nvk_event.c b/src/nouveau/vulkan/nvk_event.c index 7e43bbdee3f..599614cf133 100644 --- a/src/nouveau/vulkan/nvk_event.c +++ b/src/nouveau/vulkan/nvk_event.c @@ -9,6 +9,8 @@ #include "nvk_entrypoints.h" #include "nvk_mme.h" +#include "vk_synchronization.h" + #include "nv_push_cl906f.h" #include "nv_push_cl9097.h" #include "nv_push_cl90b5.h" @@ -214,13 +216,8 @@ nvk_CmdSetEvent2(VkCommandBuffer commandBuffer, nvk_cmd_flush_wait_dep(cmd, pDependencyInfo, false); - VkPipelineStageFlags2 stages = 0; - for (uint32_t i = 0; i < pDependencyInfo->memoryBarrierCount; i++) - stages |= pDependencyInfo->pMemoryBarriers[i].srcStageMask; - for (uint32_t i = 0; i < pDependencyInfo->bufferMemoryBarrierCount; i++) - stages |= pDependencyInfo->pBufferMemoryBarriers[i].srcStageMask; - for (uint32_t i = 0; i < pDependencyInfo->imageMemoryBarrierCount; i++) - stages |= pDependencyInfo->pImageMemoryBarriers[i].srcStageMask; + VkPipelineStageFlags2 stages = + vk_collect_dependency_info_src_stages(pDependencyInfo); nvk_event_report_semaphore(cmd, stages, event->addr, VK_EVENT_SET); } diff --git a/src/virtio/vulkan/vn_command_buffer.c b/src/virtio/vulkan/vn_command_buffer.c index f6f15a5e6d7..4233909df80 100644 --- a/src/virtio/vulkan/vn_command_buffer.c +++ b/src/virtio/vulkan/vn_command_buffer.c @@ -12,6 +12,7 @@ #include "venus-protocol/vn_protocol_driver_command_buffer.h" #include "venus-protocol/vn_protocol_driver_command_pool.h" +#include "vk_synchronization.h" #include "vn_descriptor_set.h" #include "vn_device.h" @@ -1580,23 +1581,6 @@ vn_CmdSetEvent(VkCommandBuffer commandBuffer, false); } -static VkPipelineStageFlags2 -vn_dependency_info_collect_src_stage_mask(const VkDependencyInfo *dep_info) -{ - VkPipelineStageFlags2 mask = 0; - - for (uint32_t i = 0; i < dep_info->memoryBarrierCount; i++) - mask |= dep_info->pMemoryBarriers[i].srcStageMask; - - for (uint32_t i = 0; i < dep_info->bufferMemoryBarrierCount; i++) - mask |= dep_info->pBufferMemoryBarriers[i].srcStageMask; - - for (uint32_t i = 0; i < dep_info->imageMemoryBarrierCount; i++) - mask |= dep_info->pImageMemoryBarriers[i].srcStageMask; - - return mask; -} - void vn_CmdSetEvent2(VkCommandBuffer commandBuffer, VkEvent event, @@ -1611,7 +1595,7 @@ vn_CmdSetEvent2(VkCommandBuffer commandBuffer, VN_CMD_ENQUEUE(vkCmdSetEvent2, commandBuffer, event, pDependencyInfo); const VkPipelineStageFlags2 src_stage_mask = - vn_dependency_info_collect_src_stage_mask(pDependencyInfo); + vk_collect_dependency_info_src_stages(pDependencyInfo); vn_event_feedback_cmd_record(commandBuffer, event, src_stage_mask, VK_EVENT_SET, true); }