panvk: add normalize_dependency

It normalizes the stage and access masks of a barrier.

Signed-off-by: Chia-I Wu <olvaffe@gmail.com>
Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/32164>
This commit is contained in:
Chia-I Wu 2024-11-15 10:41:45 -08:00 committed by Marge Bot
parent 0f47e362a6
commit 9e90e50362

View file

@ -431,6 +431,18 @@ collect_cs_deps(struct panvk_cmd_buffer *cmdbuf,
}
}
static void
normalize_dependency(VkPipelineStageFlags2 *src_stages,
VkPipelineStageFlags2 *dst_stages,
VkAccessFlags2 *src_access, VkAccessFlags2 *dst_access)
{
*src_stages = vk_expand_pipeline_stage_flags2(*src_stages);
*dst_stages = vk_expand_pipeline_stage_flags2(*dst_stages);
*src_access = vk_filter_src_access_flags2(*src_stages, *src_access);
*dst_access = vk_filter_dst_access_flags2(*dst_stages, *dst_access);
}
void
panvk_per_arch(get_cs_deps)(struct panvk_cmd_buffer *cmdbuf,
const VkDependencyInfo *in,
@ -440,14 +452,11 @@ panvk_per_arch(get_cs_deps)(struct panvk_cmd_buffer *cmdbuf,
for (uint32_t i = 0; i < in->memoryBarrierCount; i++) {
const VkMemoryBarrier2 *barrier = &in->pMemoryBarriers[i];
VkPipelineStageFlags2 src_stages =
vk_expand_pipeline_stage_flags2(barrier->srcStageMask);
VkPipelineStageFlags2 dst_stages =
vk_expand_pipeline_stage_flags2(barrier->dstStageMask);
VkAccessFlags2 src_access =
vk_filter_src_access_flags2(src_stages, barrier->srcAccessMask);
VkAccessFlags2 dst_access =
vk_filter_dst_access_flags2(dst_stages, barrier->dstAccessMask);
VkPipelineStageFlags2 src_stages = barrier->srcStageMask;
VkPipelineStageFlags2 dst_stages = barrier->dstStageMask;
VkAccessFlags2 src_access = barrier->srcAccessMask;
VkAccessFlags2 dst_access = barrier->dstAccessMask;
normalize_dependency(&src_stages, &dst_stages, &src_access, &dst_access);
collect_cs_deps(cmdbuf, src_stages, dst_stages, src_access, dst_access,
out);
@ -455,14 +464,11 @@ panvk_per_arch(get_cs_deps)(struct panvk_cmd_buffer *cmdbuf,
for (uint32_t i = 0; i < in->bufferMemoryBarrierCount; i++) {
const VkBufferMemoryBarrier2 *barrier = &in->pBufferMemoryBarriers[i];
VkPipelineStageFlags2 src_stages =
vk_expand_pipeline_stage_flags2(barrier->srcStageMask);
VkPipelineStageFlags2 dst_stages =
vk_expand_pipeline_stage_flags2(barrier->dstStageMask);
VkAccessFlags2 src_access =
vk_filter_src_access_flags2(src_stages, barrier->srcAccessMask);
VkAccessFlags2 dst_access =
vk_filter_dst_access_flags2(dst_stages, barrier->dstAccessMask);
VkPipelineStageFlags2 src_stages = barrier->srcStageMask;
VkPipelineStageFlags2 dst_stages = barrier->dstStageMask;
VkAccessFlags2 src_access = barrier->srcAccessMask;
VkAccessFlags2 dst_access = barrier->dstAccessMask;
normalize_dependency(&src_stages, &dst_stages, &src_access, &dst_access);
collect_cs_deps(cmdbuf, src_stages, dst_stages, src_access, dst_access,
out);
@ -470,14 +476,11 @@ panvk_per_arch(get_cs_deps)(struct panvk_cmd_buffer *cmdbuf,
for (uint32_t i = 0; i < in->imageMemoryBarrierCount; i++) {
const VkImageMemoryBarrier2 *barrier = &in->pImageMemoryBarriers[i];
VkPipelineStageFlags2 src_stages =
vk_expand_pipeline_stage_flags2(barrier->srcStageMask);
VkPipelineStageFlags2 dst_stages =
vk_expand_pipeline_stage_flags2(barrier->dstStageMask);
VkAccessFlags2 src_access =
vk_filter_src_access_flags2(src_stages, barrier->srcAccessMask);
VkAccessFlags2 dst_access =
vk_filter_dst_access_flags2(dst_stages, barrier->dstAccessMask);
VkPipelineStageFlags2 src_stages = barrier->srcStageMask;
VkPipelineStageFlags2 dst_stages = barrier->dstStageMask;
VkAccessFlags2 src_access = barrier->srcAccessMask;
VkAccessFlags2 dst_access = barrier->dstAccessMask;
normalize_dependency(&src_stages, &dst_stages, &src_access, &dst_access);
collect_cs_deps(cmdbuf, src_stages, dst_stages, src_access, dst_access,
out);