panvk: Pull CSF barrier logic into separate function

This makes it easier to implement internal syncs between subqueues later
in this MR.

Reviewed-by: Lars-Ivar Hesselberg Simonsen <lars-ivar.simonsen@arm.com>
Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/34932>
This commit is contained in:
Christoph Pillmayer
2025-05-07 10:54:29 +00:00
parent ccff24ba09
commit eb6f591fd6
2 changed files with 26 additions and 17 deletions
@@ -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 */
+24 -17
View File
@@ -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,