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