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