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

Reply via email to