xref: /aosp_15_r20/external/mesa3d/src/vulkan/runtime/vk_synchronization.h (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1*61046927SAndroid Build Coastguard Worker /*
2*61046927SAndroid Build Coastguard Worker  * Copyright © 2023 Collabora, Ltd
3*61046927SAndroid Build Coastguard Worker  *
4*61046927SAndroid Build Coastguard Worker  * Permission is hereby granted, free of charge, to any person obtaining a
5*61046927SAndroid Build Coastguard Worker  * copy of this software and associated documentation files (the "Software"),
6*61046927SAndroid Build Coastguard Worker  * to deal in the Software without restriction, including without limitation
7*61046927SAndroid Build Coastguard Worker  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8*61046927SAndroid Build Coastguard Worker  * and/or sell copies of the Software, and to permit persons to whom the
9*61046927SAndroid Build Coastguard Worker  * Software is furnished to do so, subject to the following conditions:
10*61046927SAndroid Build Coastguard Worker  *
11*61046927SAndroid Build Coastguard Worker  * The above copyright notice and this permission notice (including the next
12*61046927SAndroid Build Coastguard Worker  * paragraph) shall be included in all copies or substantial portions of the
13*61046927SAndroid Build Coastguard Worker  * Software.
14*61046927SAndroid Build Coastguard Worker  *
15*61046927SAndroid Build Coastguard Worker  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16*61046927SAndroid Build Coastguard Worker  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17*61046927SAndroid Build Coastguard Worker  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
18*61046927SAndroid Build Coastguard Worker  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19*61046927SAndroid Build Coastguard Worker  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20*61046927SAndroid Build Coastguard Worker  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
21*61046927SAndroid Build Coastguard Worker  * IN THE SOFTWARE.
22*61046927SAndroid Build Coastguard Worker  */
23*61046927SAndroid Build Coastguard Worker #ifndef VK_SYNCHRONIZATION_H
24*61046927SAndroid Build Coastguard Worker #define VK_SYNCHRONIZATION_H
25*61046927SAndroid Build Coastguard Worker 
26*61046927SAndroid Build Coastguard Worker #include <vulkan/vulkan_core.h>
27*61046927SAndroid Build Coastguard Worker 
28*61046927SAndroid Build Coastguard Worker #include <stdbool.h>
29*61046927SAndroid Build Coastguard Worker 
30*61046927SAndroid Build Coastguard Worker #ifdef __cplusplus
31*61046927SAndroid Build Coastguard Worker extern "C" {
32*61046927SAndroid Build Coastguard Worker #endif
33*61046927SAndroid Build Coastguard Worker 
34*61046927SAndroid Build Coastguard Worker static inline bool
vk_pipeline_stage_flags2_has_graphics_shader(VkPipelineStageFlags2 stages)35*61046927SAndroid Build Coastguard Worker vk_pipeline_stage_flags2_has_graphics_shader(VkPipelineStageFlags2 stages)
36*61046927SAndroid Build Coastguard Worker {
37*61046927SAndroid Build Coastguard Worker    return stages & (VK_PIPELINE_STAGE_2_TOP_OF_PIPE_BIT |
38*61046927SAndroid Build Coastguard Worker                     VK_PIPELINE_STAGE_2_VERTEX_SHADER_BIT |
39*61046927SAndroid Build Coastguard Worker                     VK_PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT |
40*61046927SAndroid Build Coastguard Worker                     VK_PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT |
41*61046927SAndroid Build Coastguard Worker                     VK_PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT |
42*61046927SAndroid Build Coastguard Worker                     VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT |
43*61046927SAndroid Build Coastguard Worker                     VK_PIPELINE_STAGE_2_BOTTOM_OF_PIPE_BIT |
44*61046927SAndroid Build Coastguard Worker                     VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT |
45*61046927SAndroid Build Coastguard Worker                     VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT |
46*61046927SAndroid Build Coastguard Worker                     VK_PIPELINE_STAGE_2_TASK_SHADER_BIT_EXT |
47*61046927SAndroid Build Coastguard Worker                     VK_PIPELINE_STAGE_2_MESH_SHADER_BIT_EXT);
48*61046927SAndroid Build Coastguard Worker }
49*61046927SAndroid Build Coastguard Worker 
50*61046927SAndroid Build Coastguard Worker static inline bool
vk_pipeline_stage_flags2_has_compute_shader(VkPipelineStageFlags2 stages)51*61046927SAndroid Build Coastguard Worker vk_pipeline_stage_flags2_has_compute_shader(VkPipelineStageFlags2 stages)
52*61046927SAndroid Build Coastguard Worker {
53*61046927SAndroid Build Coastguard Worker    return stages & (VK_PIPELINE_STAGE_2_TOP_OF_PIPE_BIT |
54*61046927SAndroid Build Coastguard Worker                     VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT |
55*61046927SAndroid Build Coastguard Worker                     VK_PIPELINE_STAGE_2_BOTTOM_OF_PIPE_BIT |
56*61046927SAndroid Build Coastguard Worker                     VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT);
57*61046927SAndroid Build Coastguard Worker }
58*61046927SAndroid Build Coastguard Worker 
59*61046927SAndroid Build Coastguard Worker /** Expands pipeline stage group flags
60*61046927SAndroid Build Coastguard Worker  *
61*61046927SAndroid Build Coastguard Worker  * Some stages like VK_PIPELINE_SHADER_STAGE_2_ALL_GRAPHICS_BIT represent more
62*61046927SAndroid Build Coastguard Worker  * than one stage.  This helper expands any such bits out to the full set of
63*61046927SAndroid Build Coastguard Worker  * individual stages bits they represent.
64*61046927SAndroid Build Coastguard Worker  *
65*61046927SAndroid Build Coastguard Worker  * Note: This helper does not handle BOTTOM/TOP_OF_PIPE.  You probably want to
66*61046927SAndroid Build Coastguard Worker  * use vk_expand_src/dst_stage_flags2() instead.
67*61046927SAndroid Build Coastguard Worker  */
68*61046927SAndroid Build Coastguard Worker VkPipelineStageFlags2
69*61046927SAndroid Build Coastguard Worker vk_expand_pipeline_stage_flags2(VkPipelineStageFlags2 stages);
70*61046927SAndroid Build Coastguard Worker 
71*61046927SAndroid Build Coastguard Worker static inline VkPipelineStageFlags2
vk_expand_src_stage_flags2(VkPipelineStageFlags2 stages)72*61046927SAndroid Build Coastguard Worker vk_expand_src_stage_flags2(VkPipelineStageFlags2 stages)
73*61046927SAndroid Build Coastguard Worker {
74*61046927SAndroid Build Coastguard Worker    if (stages & VK_PIPELINE_STAGE_2_BOTTOM_OF_PIPE_BIT)
75*61046927SAndroid Build Coastguard Worker       stages |= VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT;
76*61046927SAndroid Build Coastguard Worker 
77*61046927SAndroid Build Coastguard Worker    return vk_expand_pipeline_stage_flags2(stages);
78*61046927SAndroid Build Coastguard Worker }
79*61046927SAndroid Build Coastguard Worker 
80*61046927SAndroid Build Coastguard Worker static inline VkPipelineStageFlags2
vk_expand_dst_stage_flags2(VkPipelineStageFlags2 stages)81*61046927SAndroid Build Coastguard Worker vk_expand_dst_stage_flags2(VkPipelineStageFlags2 stages)
82*61046927SAndroid Build Coastguard Worker {
83*61046927SAndroid Build Coastguard Worker    if (stages & VK_PIPELINE_STAGE_2_TOP_OF_PIPE_BIT)
84*61046927SAndroid Build Coastguard Worker       stages |= VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT;
85*61046927SAndroid Build Coastguard Worker 
86*61046927SAndroid Build Coastguard Worker    return vk_expand_pipeline_stage_flags2(stages);
87*61046927SAndroid Build Coastguard Worker }
88*61046927SAndroid Build Coastguard Worker 
89*61046927SAndroid Build Coastguard Worker /** Returns the set of read accesses allowed in the given stages */
90*61046927SAndroid Build Coastguard Worker VkAccessFlags2
91*61046927SAndroid Build Coastguard Worker vk_read_access2_for_pipeline_stage_flags2(VkPipelineStageFlags2 stages);
92*61046927SAndroid Build Coastguard Worker 
93*61046927SAndroid Build Coastguard Worker /** Returns the set of write accesses allowed in the given stages */
94*61046927SAndroid Build Coastguard Worker VkAccessFlags2
95*61046927SAndroid Build Coastguard Worker vk_write_access2_for_pipeline_stage_flags2(VkPipelineStageFlags2 stages);
96*61046927SAndroid Build Coastguard Worker 
97*61046927SAndroid Build Coastguard Worker VkAccessFlags2
98*61046927SAndroid Build Coastguard Worker vk_expand_src_access_flags2(VkPipelineStageFlags2 stages,
99*61046927SAndroid Build Coastguard Worker                             VkAccessFlags2 access);
100*61046927SAndroid Build Coastguard Worker 
101*61046927SAndroid Build Coastguard Worker VkAccessFlags2
102*61046927SAndroid Build Coastguard Worker vk_expand_dst_access_flags2(VkPipelineStageFlags2 stages,
103*61046927SAndroid Build Coastguard Worker                             VkAccessFlags2 access);
104*61046927SAndroid Build Coastguard Worker 
105*61046927SAndroid Build Coastguard Worker VkAccessFlags2
106*61046927SAndroid Build Coastguard Worker vk_filter_src_access_flags2(VkPipelineStageFlags2 stages,
107*61046927SAndroid Build Coastguard Worker                             VkAccessFlags2 access);
108*61046927SAndroid Build Coastguard Worker 
109*61046927SAndroid Build Coastguard Worker VkAccessFlags2
110*61046927SAndroid Build Coastguard Worker vk_filter_dst_access_flags2(VkPipelineStageFlags2 stages,
111*61046927SAndroid Build Coastguard Worker                             VkAccessFlags2 access);
112*61046927SAndroid Build Coastguard Worker 
113*61046927SAndroid Build Coastguard Worker #ifdef __cplusplus
114*61046927SAndroid Build Coastguard Worker }
115*61046927SAndroid Build Coastguard Worker #endif
116*61046927SAndroid Build Coastguard Worker 
117*61046927SAndroid Build Coastguard Worker #endif /* VK_SYNCHRONIZATION_H */
118