Module: Mesa Branch: main Commit: 44add595af895986c4732f8c90f7ec567d6d04ba URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=44add595af895986c4732f8c90f7ec567d6d04ba
Author: Faith Ekstrand <faith.ekstr...@collabora.com> Date: Thu Nov 30 18:08:04 2023 -0600 vulkan: Add helpers for pipeline stage flags This adds hand-written helpers for detecting if a set of stage flags contains shaders as well as expand helpers that properly handle TOP/BOTTOM_OF_PIPE_BIT. 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 | 2 ++ src/vulkan/runtime/vk_synchronization.h | 46 +++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+) diff --git a/src/vulkan/runtime/vk_synchronization.c b/src/vulkan/runtime/vk_synchronization.c index 8fb1d102141..e64472772f7 100644 --- a/src/vulkan/runtime/vk_synchronization.c +++ b/src/vulkan/runtime/vk_synchronization.c @@ -21,6 +21,8 @@ * IN THE SOFTWARE. */ +#include "vk_synchronization.h" + #include "vk_alloc.h" #include "vk_command_buffer.h" #include "vk_common_entrypoints.h" diff --git a/src/vulkan/runtime/vk_synchronization.h b/src/vulkan/runtime/vk_synchronization.h index da1565060e9..95c3f6681f5 100644 --- a/src/vulkan/runtime/vk_synchronization.h +++ b/src/vulkan/runtime/vk_synchronization.h @@ -31,15 +31,61 @@ extern "C" { #endif +static inline bool +vk_pipeline_stage_flags2_has_graphics_shader(VkPipelineStageFlags2 stages) +{ + return stages & (VK_PIPELINE_STAGE_2_TOP_OF_PIPE_BIT | + VK_PIPELINE_STAGE_2_VERTEX_SHADER_BIT | + VK_PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT | + VK_PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT | + VK_PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT | + VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT | + VK_PIPELINE_STAGE_2_BOTTOM_OF_PIPE_BIT | + VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT | + VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT | + VK_PIPELINE_STAGE_2_TASK_SHADER_BIT_EXT | + VK_PIPELINE_STAGE_2_MESH_SHADER_BIT_EXT); +} + +static inline bool +vk_pipeline_stage_flags2_has_compute_shader(VkPipelineStageFlags2 stages) +{ + return stages & (VK_PIPELINE_STAGE_2_TOP_OF_PIPE_BIT | + VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT | + VK_PIPELINE_STAGE_2_BOTTOM_OF_PIPE_BIT | + VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT); +} + /** Expands pipeline stage group flags * * Some stages like VK_PIPELINE_SHADER_STAGE_2_ALL_GRAPHICS_BIT represent more * than one stage. This helper expands any such bits out to the full set of * individual stages bits they represent. + * + * Note: This helper does not handle BOTTOM/TOP_OF_PIPE. You probably want to + * use vk_expand_src/dst_stage_flags2() instead. */ VkPipelineStageFlags2 vk_expand_pipeline_stage_flags2(VkPipelineStageFlags2 stages); +static inline VkPipelineStageFlags2 +vk_expand_src_stage_flags2(VkPipelineStageFlags2 stages) +{ + if (stages & VK_PIPELINE_STAGE_2_BOTTOM_OF_PIPE_BIT) + stages |= VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT; + + return vk_expand_pipeline_stage_flags2(stages); +} + +static inline VkPipelineStageFlags2 +vk_expand_dst_stage_flags2(VkPipelineStageFlags2 stages) +{ + if (stages & VK_PIPELINE_STAGE_2_TOP_OF_PIPE_BIT) + stages |= VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT; + + return vk_expand_pipeline_stage_flags2(stages); +} + /** Returns the set of read accesses allowed in the given stages */ VkAccessFlags2 vk_read_access2_for_pipeline_stage_flags2(VkPipelineStageFlags2 stages);