vulkan: Add vk_expand_(dst|src)_access_flags2

Those helpers do not filter out dead access bits to keep synchronization
conservative.

Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/29051>
This commit is contained in:
Konstantin Seurer 2024-05-23 11:42:08 +02:00 committed by Marge Bot
parent 7b3cdacf7f
commit b0fa138c86
2 changed files with 38 additions and 16 deletions

View file

@ -31,6 +31,34 @@
#include "vk_util.h"
#include "../wsi/wsi_common.h"
VkAccessFlags2
vk_expand_src_access_flags2(VkPipelineStageFlags2 stages,
VkAccessFlags2 access)
{
if (access & VK_ACCESS_2_MEMORY_WRITE_BIT)
access |= vk_write_access2_for_pipeline_stage_flags2(stages);;
if (access & VK_ACCESS_2_SHADER_WRITE_BIT)
access |= VK_ACCESS_2_SHADER_STORAGE_WRITE_BIT;
return access;
}
VkAccessFlags2
vk_expand_dst_access_flags2(VkPipelineStageFlags2 stages,
VkAccessFlags2 access)
{
if (access & VK_ACCESS_2_MEMORY_READ_BIT)
access |= vk_read_access2_for_pipeline_stage_flags2(stages);
if (access & VK_ACCESS_2_SHADER_READ_BIT)
access |= VK_ACCESS_2_SHADER_SAMPLED_READ_BIT |
VK_ACCESS_2_SHADER_STORAGE_READ_BIT |
VK_ACCESS_2_SHADER_BINDING_TABLE_READ_BIT_KHR;
return access;
}
VkAccessFlags2
vk_filter_src_access_flags2(VkPipelineStageFlags2 stages,
VkAccessFlags2 access)
@ -38,14 +66,8 @@ vk_filter_src_access_flags2(VkPipelineStageFlags2 stages,
const VkPipelineStageFlags2 all_write_access =
vk_write_access2_for_pipeline_stage_flags2(stages);
if (access & VK_ACCESS_2_MEMORY_WRITE_BIT)
access |= all_write_access;
if (access & VK_ACCESS_2_SHADER_WRITE_BIT)
access |= VK_ACCESS_2_SHADER_STORAGE_WRITE_BIT;
/* We only care about write access in src flags */
return access & all_write_access;
return vk_expand_src_access_flags2(stages, access) & all_write_access;
}
VkAccessFlags2
@ -55,16 +77,8 @@ vk_filter_dst_access_flags2(VkPipelineStageFlags2 stages,
const VkPipelineStageFlags2 all_read_access =
vk_read_access2_for_pipeline_stage_flags2(stages);
if (access & VK_ACCESS_2_MEMORY_READ_BIT)
access |= all_read_access;
if (access & VK_ACCESS_2_SHADER_READ_BIT)
access |= VK_ACCESS_2_SHADER_SAMPLED_READ_BIT |
VK_ACCESS_2_SHADER_STORAGE_READ_BIT |
VK_ACCESS_2_SHADER_BINDING_TABLE_READ_BIT_KHR;
/* We only care about read access in dst flags */
return access & all_read_access;
return vk_expand_dst_access_flags2(stages, access) & all_read_access;
}
VKAPI_ATTR void VKAPI_CALL

View file

@ -94,6 +94,14 @@ vk_read_access2_for_pipeline_stage_flags2(VkPipelineStageFlags2 stages);
VkAccessFlags2
vk_write_access2_for_pipeline_stage_flags2(VkPipelineStageFlags2 stages);
VkAccessFlags2
vk_expand_src_access_flags2(VkPipelineStageFlags2 stages,
VkAccessFlags2 access);
VkAccessFlags2
vk_expand_dst_access_flags2(VkPipelineStageFlags2 stages,
VkAccessFlags2 access);
VkAccessFlags2
vk_filter_src_access_flags2(VkPipelineStageFlags2 stages,
VkAccessFlags2 access);