diff --git a/src/panfrost/vulkan/csf/panvk_cmd_buffer.h b/src/panfrost/vulkan/csf/panvk_cmd_buffer.h index 42e3968d26a..68f7f0cfb34 100644 --- a/src/panfrost/vulkan/csf/panvk_cmd_buffer.h +++ b/src/panfrost/vulkan/csf/panvk_cmd_buffer.h @@ -481,4 +481,6 @@ panvk_per_arch(calculate_task_axis_and_increment)( assert(*task_increment > 0); } +void panvk_per_arch(emit_barrier)(struct panvk_cmd_buffer *cmdbuf, + struct panvk_cs_deps deps); #endif /* PANVK_CMD_BUFFER_H */ diff --git a/src/panfrost/vulkan/csf/panvk_vX_cmd_buffer.c b/src/panfrost/vulkan/csf/panvk_vX_cmd_buffer.c index 7dd57ffbcfd..118bd94de6d 100644 --- a/src/panfrost/vulkan/csf/panvk_vX_cmd_buffer.c +++ b/src/panfrost/vulkan/csf/panvk_vX_cmd_buffer.c @@ -536,24 +536,10 @@ panvk_per_arch(get_cs_deps)(struct panvk_cmd_buffer *cmdbuf, } } -VKAPI_ATTR void VKAPI_CALL -panvk_per_arch(CmdPipelineBarrier2)(VkCommandBuffer commandBuffer, - const VkDependencyInfo *pDependencyInfo) +void +panvk_per_arch(emit_barrier)(struct panvk_cmd_buffer *cmdbuf, + struct panvk_cs_deps deps) { - VK_FROM_HANDLE(panvk_cmd_buffer, cmdbuf, commandBuffer); - struct panvk_cs_deps deps; - - /* Intra render pass barriers can be skipped iff we're inside a render - * pass. */ - if ((cmdbuf->state.gfx.render.tiler || inherits_render_ctx(cmdbuf)) && - (pDependencyInfo->dependencyFlags & VK_DEPENDENCY_BY_REGION_BIT)) - return; - - panvk_per_arch(get_cs_deps)(cmdbuf, pDependencyInfo, &deps); - - if (deps.needs_draw_flush) - panvk_per_arch(cmd_flush_draws)(cmdbuf); - uint32_t wait_subqueue_mask = 0; for (uint32_t i = 0; i < PANVK_SUBQUEUE_COUNT; i++) { /* no need to perform both types of waits on the same subqueue */ @@ -620,6 +606,27 @@ panvk_per_arch(CmdPipelineBarrier2)(VkCommandBuffer commandBuffer, } } +VKAPI_ATTR void VKAPI_CALL +panvk_per_arch(CmdPipelineBarrier2)(VkCommandBuffer commandBuffer, + const VkDependencyInfo *pDependencyInfo) +{ + VK_FROM_HANDLE(panvk_cmd_buffer, cmdbuf, commandBuffer); + struct panvk_cs_deps deps; + + /* Intra render pass barriers can be skipped iff we're inside a render + * pass. */ + if ((cmdbuf->state.gfx.render.tiler || inherits_render_ctx(cmdbuf)) && + (pDependencyInfo->dependencyFlags & VK_DEPENDENCY_BY_REGION_BIT)) + return; + + panvk_per_arch(get_cs_deps)(cmdbuf, pDependencyInfo, &deps); + + if (deps.needs_draw_flush) + panvk_per_arch(cmd_flush_draws)(cmdbuf); + + panvk_per_arch(emit_barrier)(cmdbuf, deps); +} + #if PAN_ARCH >= 11 void panvk_per_arch(cs_next_iter_sb)(struct panvk_cmd_buffer *cmdbuf,