Module: Mesa Branch: main Commit: 00e88584af6d9fe4ea441791487646f1bdc4c772 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=00e88584af6d9fe4ea441791487646f1bdc4c772
Author: Faith Ekstrand <faith.ekstr...@collabora.com> Date: Wed Nov 29 14:24:55 2023 -0600 vulkan: Add helpers for access flags Reviewed-by: Lionel Landwerlin <lionel.g.landwer...@intel.com> Reviewed-by: Konstantin Seurer <konstantin.seu...@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26407> --- src/vulkan/runtime/vk_synchronization.c | 36 +++++++++++++++++++++++++++++++++ src/vulkan/runtime/vk_synchronization.h | 8 ++++++++ 2 files changed, 44 insertions(+) diff --git a/src/vulkan/runtime/vk_synchronization.c b/src/vulkan/runtime/vk_synchronization.c index e64472772f7..36873bb9062 100644 --- a/src/vulkan/runtime/vk_synchronization.c +++ b/src/vulkan/runtime/vk_synchronization.c @@ -31,6 +31,42 @@ #include "vk_util.h" #include "../wsi/wsi_common.h" +VkAccessFlags2 +vk_filter_src_access_flags2(VkPipelineStageFlags2 stages, + VkAccessFlags2 access) +{ + 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; +} + +VkAccessFlags2 +vk_filter_dst_access_flags2(VkPipelineStageFlags2 stages, + VkAccessFlags2 access) +{ + 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; +} + VKAPI_ATTR void VKAPI_CALL vk_common_CmdWriteTimestamp( VkCommandBuffer commandBuffer, diff --git a/src/vulkan/runtime/vk_synchronization.h b/src/vulkan/runtime/vk_synchronization.h index 95c3f6681f5..5c3fd1f4992 100644 --- a/src/vulkan/runtime/vk_synchronization.h +++ b/src/vulkan/runtime/vk_synchronization.h @@ -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_filter_src_access_flags2(VkPipelineStageFlags2 stages, + VkAccessFlags2 access); + +VkAccessFlags2 +vk_filter_dst_access_flags2(VkPipelineStageFlags2 stages, + VkAccessFlags2 access); + #ifdef __cplusplus } #endif