1 // *** THIS FILE IS GENERATED - DO NOT EDIT ***
2 // See helper_file_generator.py for modifications
3 
4 
5 /***************************************************************************
6  *
7  * Copyright (c) 2015-2021 The Khronos Group Inc.
8  * Copyright (c) 2015-2021 Valve Corporation
9  * Copyright (c) 2015-2021 LunarG, Inc.
10  * Copyright (c) 2015-2021 Google Inc.
11  *
12  * Licensed under the Apache License, Version 2.0 (the "License");
13  * you may not use this file except in compliance with the License.
14  * You may obtain a copy of the License at
15  *
16  *     http://www.apache.org/licenses/LICENSE-2.0
17  *
18  * Unless required by applicable law or agreed to in writing, software
19  * distributed under the License is distributed on an "AS IS" BASIS,
20  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
21  * See the License for the specific language governing permissions and
22  * limitations under the License.
23  *
24  * Author: Mark Lobodzinski <mark@lunarg.com>
25  * Author: Courtney Goeltzenleuchter <courtneygo@google.com>
26  * Author: Tobin Ehlis <tobine@google.com>
27  * Author: Chris Forbes <chrisforbes@google.com>
28  * Author: John Zulauf<jzulauf@lunarg.com>
29  *
30  ****************************************************************************/
31 
32 #pragma once
33 
34 #include <array>
35 #include <bitset>
36 #include <map>
37 #include <stdint.h>
38 #include <vulkan/vulkan.h>
39 #include "vk_layer_data.h"
40 using SyncStageAccessFlags = std::bitset<128>;
41 
42 // clang-format off
43 
44 // Unique number for each  stage/access combination
45 enum SyncStageAccessIndex {
46     SYNC_ACCESS_INDEX_NONE = 0,
47     SYNC_DRAW_INDIRECT_INDIRECT_COMMAND_READ = 1,
48     SYNC_DRAW_INDIRECT_TRANSFORM_FEEDBACK_COUNTER_READ_EXT = 2,
49     SYNC_INDEX_INPUT_INDEX_READ = 3,
50     SYNC_VERTEX_ATTRIBUTE_INPUT_VERTEX_ATTRIBUTE_READ = 4,
51     SYNC_VERTEX_SHADER_ACCELERATION_STRUCTURE_READ = 5,
52     SYNC_VERTEX_SHADER_SHADER_SAMPLED_READ = 6,
53     SYNC_VERTEX_SHADER_SHADER_STORAGE_READ = 7,
54     SYNC_VERTEX_SHADER_SHADER_STORAGE_WRITE = 8,
55     SYNC_VERTEX_SHADER_UNIFORM_READ = 9,
56     SYNC_TESSELLATION_CONTROL_SHADER_ACCELERATION_STRUCTURE_READ = 10,
57     SYNC_TESSELLATION_CONTROL_SHADER_SHADER_SAMPLED_READ = 11,
58     SYNC_TESSELLATION_CONTROL_SHADER_SHADER_STORAGE_READ = 12,
59     SYNC_TESSELLATION_CONTROL_SHADER_SHADER_STORAGE_WRITE = 13,
60     SYNC_TESSELLATION_CONTROL_SHADER_UNIFORM_READ = 14,
61     SYNC_TESSELLATION_EVALUATION_SHADER_ACCELERATION_STRUCTURE_READ = 15,
62     SYNC_TESSELLATION_EVALUATION_SHADER_SHADER_SAMPLED_READ = 16,
63     SYNC_TESSELLATION_EVALUATION_SHADER_SHADER_STORAGE_READ = 17,
64     SYNC_TESSELLATION_EVALUATION_SHADER_SHADER_STORAGE_WRITE = 18,
65     SYNC_TESSELLATION_EVALUATION_SHADER_UNIFORM_READ = 19,
66     SYNC_GEOMETRY_SHADER_ACCELERATION_STRUCTURE_READ = 20,
67     SYNC_GEOMETRY_SHADER_SHADER_SAMPLED_READ = 21,
68     SYNC_GEOMETRY_SHADER_SHADER_STORAGE_READ = 22,
69     SYNC_GEOMETRY_SHADER_SHADER_STORAGE_WRITE = 23,
70     SYNC_GEOMETRY_SHADER_UNIFORM_READ = 24,
71     SYNC_TRANSFORM_FEEDBACK_EXT_TRANSFORM_FEEDBACK_COUNTER_READ_EXT = 25,
72     SYNC_TRANSFORM_FEEDBACK_EXT_TRANSFORM_FEEDBACK_COUNTER_WRITE_EXT = 26,
73     SYNC_TRANSFORM_FEEDBACK_EXT_TRANSFORM_FEEDBACK_WRITE_EXT = 27,
74     SYNC_FRAGMENT_DENSITY_PROCESS_EXT_FRAGMENT_DENSITY_MAP_READ_EXT = 28,
75     SYNC_TASK_SHADER_NV_ACCELERATION_STRUCTURE_READ = 29,
76     SYNC_TASK_SHADER_NV_SHADER_SAMPLED_READ = 30,
77     SYNC_TASK_SHADER_NV_SHADER_STORAGE_READ = 31,
78     SYNC_TASK_SHADER_NV_SHADER_STORAGE_WRITE = 32,
79     SYNC_TASK_SHADER_NV_UNIFORM_READ = 33,
80     SYNC_MESH_SHADER_NV_ACCELERATION_STRUCTURE_READ = 34,
81     SYNC_MESH_SHADER_NV_SHADER_SAMPLED_READ = 35,
82     SYNC_MESH_SHADER_NV_SHADER_STORAGE_READ = 36,
83     SYNC_MESH_SHADER_NV_SHADER_STORAGE_WRITE = 37,
84     SYNC_MESH_SHADER_NV_UNIFORM_READ = 38,
85     SYNC_FRAGMENT_SHADING_RATE_ATTACHMENT_FRAGMENT_SHADING_RATE_ATTACHMENT_READ = 39,
86     SYNC_EARLY_FRAGMENT_TESTS_DEPTH_STENCIL_ATTACHMENT_READ = 40,
87     SYNC_EARLY_FRAGMENT_TESTS_DEPTH_STENCIL_ATTACHMENT_WRITE = 41,
88     SYNC_FRAGMENT_SHADER_ACCELERATION_STRUCTURE_READ = 42,
89     SYNC_FRAGMENT_SHADER_INPUT_ATTACHMENT_READ = 43,
90     SYNC_FRAGMENT_SHADER_SHADER_SAMPLED_READ = 44,
91     SYNC_FRAGMENT_SHADER_SHADER_STORAGE_READ = 45,
92     SYNC_FRAGMENT_SHADER_SHADER_STORAGE_WRITE = 46,
93     SYNC_FRAGMENT_SHADER_UNIFORM_READ = 47,
94     SYNC_LATE_FRAGMENT_TESTS_DEPTH_STENCIL_ATTACHMENT_READ = 48,
95     SYNC_LATE_FRAGMENT_TESTS_DEPTH_STENCIL_ATTACHMENT_WRITE = 49,
96     SYNC_COLOR_ATTACHMENT_OUTPUT_COLOR_ATTACHMENT_READ = 50,
97     SYNC_COLOR_ATTACHMENT_OUTPUT_COLOR_ATTACHMENT_READ_NONCOHERENT_EXT = 51,
98     SYNC_COLOR_ATTACHMENT_OUTPUT_COLOR_ATTACHMENT_WRITE = 52,
99     SYNC_COMPUTE_SHADER_ACCELERATION_STRUCTURE_READ = 53,
100     SYNC_COMPUTE_SHADER_SHADER_SAMPLED_READ = 54,
101     SYNC_COMPUTE_SHADER_SHADER_STORAGE_READ = 55,
102     SYNC_COMPUTE_SHADER_SHADER_STORAGE_WRITE = 56,
103     SYNC_COMPUTE_SHADER_UNIFORM_READ = 57,
104     SYNC_COPY_TRANSFER_READ = 58,
105     SYNC_COPY_TRANSFER_WRITE = 59,
106     SYNC_RESOLVE_TRANSFER_READ = 60,
107     SYNC_RESOLVE_TRANSFER_WRITE = 61,
108     SYNC_BLIT_TRANSFER_READ = 62,
109     SYNC_BLIT_TRANSFER_WRITE = 63,
110     SYNC_CLEAR_TRANSFER_WRITE = 64,
111     SYNC_COMMAND_PREPROCESS_NV_COMMAND_PREPROCESS_READ_NV = 65,
112     SYNC_COMMAND_PREPROCESS_NV_COMMAND_PREPROCESS_WRITE_NV = 66,
113     SYNC_CONDITIONAL_RENDERING_EXT_CONDITIONAL_RENDERING_READ_EXT = 67,
114     SYNC_RAY_TRACING_SHADER_ACCELERATION_STRUCTURE_READ = 68,
115     SYNC_RAY_TRACING_SHADER_SHADER_SAMPLED_READ = 69,
116     SYNC_RAY_TRACING_SHADER_SHADER_STORAGE_READ = 70,
117     SYNC_RAY_TRACING_SHADER_SHADER_STORAGE_WRITE = 71,
118     SYNC_RAY_TRACING_SHADER_UNIFORM_READ = 72,
119     SYNC_ACCELERATION_STRUCTURE_BUILD_ACCELERATION_STRUCTURE_READ = 73,
120     SYNC_ACCELERATION_STRUCTURE_BUILD_ACCELERATION_STRUCTURE_WRITE = 74,
121     SYNC_ACCELERATION_STRUCTURE_BUILD_INDIRECT_COMMAND_READ = 75,
122     SYNC_ACCELERATION_STRUCTURE_BUILD_SHADER_SAMPLED_READ = 76,
123     SYNC_ACCELERATION_STRUCTURE_BUILD_SHADER_STORAGE_READ = 77,
124     SYNC_ACCELERATION_STRUCTURE_BUILD_TRANSFER_READ = 78,
125     SYNC_ACCELERATION_STRUCTURE_BUILD_TRANSFER_WRITE = 79,
126     SYNC_ACCELERATION_STRUCTURE_BUILD_UNIFORM_READ = 80,
127     SYNC_VIDEO_DECODE_VIDEO_DECODE_READ = 81,
128     SYNC_VIDEO_DECODE_VIDEO_DECODE_WRITE = 82,
129     SYNC_VIDEO_ENCODE_VIDEO_ENCODE_READ = 83,
130     SYNC_VIDEO_ENCODE_VIDEO_ENCODE_WRITE = 84,
131     SYNC_SUBPASS_SHADING_HUAWEI_INPUT_ATTACHMENT_READ = 85,
132     SYNC_HOST_HOST_READ = 86,
133     SYNC_HOST_HOST_WRITE = 87,
134     SYNC_IMAGE_LAYOUT_TRANSITION = 88,
135     SYNC_QUEUE_FAMILY_OWNERSHIP_TRANSFER = 89,
136 };
137 
138 // Unique bit for each  stage/access combination
139 static const SyncStageAccessFlags SYNC_DRAW_INDIRECT_INDIRECT_COMMAND_READ_BIT = (SyncStageAccessFlags(1) << SYNC_DRAW_INDIRECT_INDIRECT_COMMAND_READ);
140 static const SyncStageAccessFlags SYNC_DRAW_INDIRECT_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT = (SyncStageAccessFlags(1) << SYNC_DRAW_INDIRECT_TRANSFORM_FEEDBACK_COUNTER_READ_EXT);
141 static const SyncStageAccessFlags SYNC_INDEX_INPUT_INDEX_READ_BIT = (SyncStageAccessFlags(1) << SYNC_INDEX_INPUT_INDEX_READ);
142 static const SyncStageAccessFlags SYNC_VERTEX_ATTRIBUTE_INPUT_VERTEX_ATTRIBUTE_READ_BIT = (SyncStageAccessFlags(1) << SYNC_VERTEX_ATTRIBUTE_INPUT_VERTEX_ATTRIBUTE_READ);
143 static const SyncStageAccessFlags SYNC_VERTEX_SHADER_ACCELERATION_STRUCTURE_READ_BIT = (SyncStageAccessFlags(1) << SYNC_VERTEX_SHADER_ACCELERATION_STRUCTURE_READ);
144 static const SyncStageAccessFlags SYNC_VERTEX_SHADER_SHADER_SAMPLED_READ_BIT = (SyncStageAccessFlags(1) << SYNC_VERTEX_SHADER_SHADER_SAMPLED_READ);
145 static const SyncStageAccessFlags SYNC_VERTEX_SHADER_SHADER_STORAGE_READ_BIT = (SyncStageAccessFlags(1) << SYNC_VERTEX_SHADER_SHADER_STORAGE_READ);
146 static const SyncStageAccessFlags SYNC_VERTEX_SHADER_SHADER_STORAGE_WRITE_BIT = (SyncStageAccessFlags(1) << SYNC_VERTEX_SHADER_SHADER_STORAGE_WRITE);
147 static const SyncStageAccessFlags SYNC_VERTEX_SHADER_UNIFORM_READ_BIT = (SyncStageAccessFlags(1) << SYNC_VERTEX_SHADER_UNIFORM_READ);
148 static const SyncStageAccessFlags SYNC_TESSELLATION_CONTROL_SHADER_ACCELERATION_STRUCTURE_READ_BIT = (SyncStageAccessFlags(1) << SYNC_TESSELLATION_CONTROL_SHADER_ACCELERATION_STRUCTURE_READ);
149 static const SyncStageAccessFlags SYNC_TESSELLATION_CONTROL_SHADER_SHADER_SAMPLED_READ_BIT = (SyncStageAccessFlags(1) << SYNC_TESSELLATION_CONTROL_SHADER_SHADER_SAMPLED_READ);
150 static const SyncStageAccessFlags SYNC_TESSELLATION_CONTROL_SHADER_SHADER_STORAGE_READ_BIT = (SyncStageAccessFlags(1) << SYNC_TESSELLATION_CONTROL_SHADER_SHADER_STORAGE_READ);
151 static const SyncStageAccessFlags SYNC_TESSELLATION_CONTROL_SHADER_SHADER_STORAGE_WRITE_BIT = (SyncStageAccessFlags(1) << SYNC_TESSELLATION_CONTROL_SHADER_SHADER_STORAGE_WRITE);
152 static const SyncStageAccessFlags SYNC_TESSELLATION_CONTROL_SHADER_UNIFORM_READ_BIT = (SyncStageAccessFlags(1) << SYNC_TESSELLATION_CONTROL_SHADER_UNIFORM_READ);
153 static const SyncStageAccessFlags SYNC_TESSELLATION_EVALUATION_SHADER_ACCELERATION_STRUCTURE_READ_BIT = (SyncStageAccessFlags(1) << SYNC_TESSELLATION_EVALUATION_SHADER_ACCELERATION_STRUCTURE_READ);
154 static const SyncStageAccessFlags SYNC_TESSELLATION_EVALUATION_SHADER_SHADER_SAMPLED_READ_BIT = (SyncStageAccessFlags(1) << SYNC_TESSELLATION_EVALUATION_SHADER_SHADER_SAMPLED_READ);
155 static const SyncStageAccessFlags SYNC_TESSELLATION_EVALUATION_SHADER_SHADER_STORAGE_READ_BIT = (SyncStageAccessFlags(1) << SYNC_TESSELLATION_EVALUATION_SHADER_SHADER_STORAGE_READ);
156 static const SyncStageAccessFlags SYNC_TESSELLATION_EVALUATION_SHADER_SHADER_STORAGE_WRITE_BIT = (SyncStageAccessFlags(1) << SYNC_TESSELLATION_EVALUATION_SHADER_SHADER_STORAGE_WRITE);
157 static const SyncStageAccessFlags SYNC_TESSELLATION_EVALUATION_SHADER_UNIFORM_READ_BIT = (SyncStageAccessFlags(1) << SYNC_TESSELLATION_EVALUATION_SHADER_UNIFORM_READ);
158 static const SyncStageAccessFlags SYNC_GEOMETRY_SHADER_ACCELERATION_STRUCTURE_READ_BIT = (SyncStageAccessFlags(1) << SYNC_GEOMETRY_SHADER_ACCELERATION_STRUCTURE_READ);
159 static const SyncStageAccessFlags SYNC_GEOMETRY_SHADER_SHADER_SAMPLED_READ_BIT = (SyncStageAccessFlags(1) << SYNC_GEOMETRY_SHADER_SHADER_SAMPLED_READ);
160 static const SyncStageAccessFlags SYNC_GEOMETRY_SHADER_SHADER_STORAGE_READ_BIT = (SyncStageAccessFlags(1) << SYNC_GEOMETRY_SHADER_SHADER_STORAGE_READ);
161 static const SyncStageAccessFlags SYNC_GEOMETRY_SHADER_SHADER_STORAGE_WRITE_BIT = (SyncStageAccessFlags(1) << SYNC_GEOMETRY_SHADER_SHADER_STORAGE_WRITE);
162 static const SyncStageAccessFlags SYNC_GEOMETRY_SHADER_UNIFORM_READ_BIT = (SyncStageAccessFlags(1) << SYNC_GEOMETRY_SHADER_UNIFORM_READ);
163 static const SyncStageAccessFlags SYNC_TRANSFORM_FEEDBACK_BIT_EXT_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT = (SyncStageAccessFlags(1) << SYNC_TRANSFORM_FEEDBACK_EXT_TRANSFORM_FEEDBACK_COUNTER_READ_EXT);
164 static const SyncStageAccessFlags SYNC_TRANSFORM_FEEDBACK_BIT_EXT_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT = (SyncStageAccessFlags(1) << SYNC_TRANSFORM_FEEDBACK_EXT_TRANSFORM_FEEDBACK_COUNTER_WRITE_EXT);
165 static const SyncStageAccessFlags SYNC_TRANSFORM_FEEDBACK_BIT_EXT_TRANSFORM_FEEDBACK_WRITE_BIT_EXT = (SyncStageAccessFlags(1) << SYNC_TRANSFORM_FEEDBACK_EXT_TRANSFORM_FEEDBACK_WRITE_EXT);
166 static const SyncStageAccessFlags SYNC_FRAGMENT_DENSITY_PROCESS_BIT_EXT_FRAGMENT_DENSITY_MAP_READ_BIT_EXT = (SyncStageAccessFlags(1) << SYNC_FRAGMENT_DENSITY_PROCESS_EXT_FRAGMENT_DENSITY_MAP_READ_EXT);
167 static const SyncStageAccessFlags SYNC_TASK_SHADER_NV_ACCELERATION_STRUCTURE_READ_BIT = (SyncStageAccessFlags(1) << SYNC_TASK_SHADER_NV_ACCELERATION_STRUCTURE_READ);
168 static const SyncStageAccessFlags SYNC_TASK_SHADER_NV_SHADER_SAMPLED_READ_BIT = (SyncStageAccessFlags(1) << SYNC_TASK_SHADER_NV_SHADER_SAMPLED_READ);
169 static const SyncStageAccessFlags SYNC_TASK_SHADER_NV_SHADER_STORAGE_READ_BIT = (SyncStageAccessFlags(1) << SYNC_TASK_SHADER_NV_SHADER_STORAGE_READ);
170 static const SyncStageAccessFlags SYNC_TASK_SHADER_NV_SHADER_STORAGE_WRITE_BIT = (SyncStageAccessFlags(1) << SYNC_TASK_SHADER_NV_SHADER_STORAGE_WRITE);
171 static const SyncStageAccessFlags SYNC_TASK_SHADER_NV_UNIFORM_READ_BIT = (SyncStageAccessFlags(1) << SYNC_TASK_SHADER_NV_UNIFORM_READ);
172 static const SyncStageAccessFlags SYNC_MESH_SHADER_NV_ACCELERATION_STRUCTURE_READ_BIT = (SyncStageAccessFlags(1) << SYNC_MESH_SHADER_NV_ACCELERATION_STRUCTURE_READ);
173 static const SyncStageAccessFlags SYNC_MESH_SHADER_NV_SHADER_SAMPLED_READ_BIT = (SyncStageAccessFlags(1) << SYNC_MESH_SHADER_NV_SHADER_SAMPLED_READ);
174 static const SyncStageAccessFlags SYNC_MESH_SHADER_NV_SHADER_STORAGE_READ_BIT = (SyncStageAccessFlags(1) << SYNC_MESH_SHADER_NV_SHADER_STORAGE_READ);
175 static const SyncStageAccessFlags SYNC_MESH_SHADER_NV_SHADER_STORAGE_WRITE_BIT = (SyncStageAccessFlags(1) << SYNC_MESH_SHADER_NV_SHADER_STORAGE_WRITE);
176 static const SyncStageAccessFlags SYNC_MESH_SHADER_NV_UNIFORM_READ_BIT = (SyncStageAccessFlags(1) << SYNC_MESH_SHADER_NV_UNIFORM_READ);
177 static const SyncStageAccessFlags SYNC_FRAGMENT_SHADING_RATE_ATTACHMENT_FRAGMENT_SHADING_RATE_ATTACHMENT_READ_BIT = (SyncStageAccessFlags(1) << SYNC_FRAGMENT_SHADING_RATE_ATTACHMENT_FRAGMENT_SHADING_RATE_ATTACHMENT_READ);
178 static const SyncStageAccessFlags SYNC_EARLY_FRAGMENT_TESTS_DEPTH_STENCIL_ATTACHMENT_READ_BIT = (SyncStageAccessFlags(1) << SYNC_EARLY_FRAGMENT_TESTS_DEPTH_STENCIL_ATTACHMENT_READ);
179 static const SyncStageAccessFlags SYNC_EARLY_FRAGMENT_TESTS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT = (SyncStageAccessFlags(1) << SYNC_EARLY_FRAGMENT_TESTS_DEPTH_STENCIL_ATTACHMENT_WRITE);
180 static const SyncStageAccessFlags SYNC_FRAGMENT_SHADER_ACCELERATION_STRUCTURE_READ_BIT = (SyncStageAccessFlags(1) << SYNC_FRAGMENT_SHADER_ACCELERATION_STRUCTURE_READ);
181 static const SyncStageAccessFlags SYNC_FRAGMENT_SHADER_INPUT_ATTACHMENT_READ_BIT = (SyncStageAccessFlags(1) << SYNC_FRAGMENT_SHADER_INPUT_ATTACHMENT_READ);
182 static const SyncStageAccessFlags SYNC_FRAGMENT_SHADER_SHADER_SAMPLED_READ_BIT = (SyncStageAccessFlags(1) << SYNC_FRAGMENT_SHADER_SHADER_SAMPLED_READ);
183 static const SyncStageAccessFlags SYNC_FRAGMENT_SHADER_SHADER_STORAGE_READ_BIT = (SyncStageAccessFlags(1) << SYNC_FRAGMENT_SHADER_SHADER_STORAGE_READ);
184 static const SyncStageAccessFlags SYNC_FRAGMENT_SHADER_SHADER_STORAGE_WRITE_BIT = (SyncStageAccessFlags(1) << SYNC_FRAGMENT_SHADER_SHADER_STORAGE_WRITE);
185 static const SyncStageAccessFlags SYNC_FRAGMENT_SHADER_UNIFORM_READ_BIT = (SyncStageAccessFlags(1) << SYNC_FRAGMENT_SHADER_UNIFORM_READ);
186 static const SyncStageAccessFlags SYNC_LATE_FRAGMENT_TESTS_DEPTH_STENCIL_ATTACHMENT_READ_BIT = (SyncStageAccessFlags(1) << SYNC_LATE_FRAGMENT_TESTS_DEPTH_STENCIL_ATTACHMENT_READ);
187 static const SyncStageAccessFlags SYNC_LATE_FRAGMENT_TESTS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT = (SyncStageAccessFlags(1) << SYNC_LATE_FRAGMENT_TESTS_DEPTH_STENCIL_ATTACHMENT_WRITE);
188 static const SyncStageAccessFlags SYNC_COLOR_ATTACHMENT_OUTPUT_COLOR_ATTACHMENT_READ_BIT = (SyncStageAccessFlags(1) << SYNC_COLOR_ATTACHMENT_OUTPUT_COLOR_ATTACHMENT_READ);
189 static const SyncStageAccessFlags SYNC_COLOR_ATTACHMENT_OUTPUT_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT = (SyncStageAccessFlags(1) << SYNC_COLOR_ATTACHMENT_OUTPUT_COLOR_ATTACHMENT_READ_NONCOHERENT_EXT);
190 static const SyncStageAccessFlags SYNC_COLOR_ATTACHMENT_OUTPUT_COLOR_ATTACHMENT_WRITE_BIT = (SyncStageAccessFlags(1) << SYNC_COLOR_ATTACHMENT_OUTPUT_COLOR_ATTACHMENT_WRITE);
191 static const SyncStageAccessFlags SYNC_COMPUTE_SHADER_ACCELERATION_STRUCTURE_READ_BIT = (SyncStageAccessFlags(1) << SYNC_COMPUTE_SHADER_ACCELERATION_STRUCTURE_READ);
192 static const SyncStageAccessFlags SYNC_COMPUTE_SHADER_SHADER_SAMPLED_READ_BIT = (SyncStageAccessFlags(1) << SYNC_COMPUTE_SHADER_SHADER_SAMPLED_READ);
193 static const SyncStageAccessFlags SYNC_COMPUTE_SHADER_SHADER_STORAGE_READ_BIT = (SyncStageAccessFlags(1) << SYNC_COMPUTE_SHADER_SHADER_STORAGE_READ);
194 static const SyncStageAccessFlags SYNC_COMPUTE_SHADER_SHADER_STORAGE_WRITE_BIT = (SyncStageAccessFlags(1) << SYNC_COMPUTE_SHADER_SHADER_STORAGE_WRITE);
195 static const SyncStageAccessFlags SYNC_COMPUTE_SHADER_UNIFORM_READ_BIT = (SyncStageAccessFlags(1) << SYNC_COMPUTE_SHADER_UNIFORM_READ);
196 static const SyncStageAccessFlags SYNC_COPY_TRANSFER_READ_BIT = (SyncStageAccessFlags(1) << SYNC_COPY_TRANSFER_READ);
197 static const SyncStageAccessFlags SYNC_COPY_TRANSFER_WRITE_BIT = (SyncStageAccessFlags(1) << SYNC_COPY_TRANSFER_WRITE);
198 static const SyncStageAccessFlags SYNC_RESOLVE_TRANSFER_READ_BIT = (SyncStageAccessFlags(1) << SYNC_RESOLVE_TRANSFER_READ);
199 static const SyncStageAccessFlags SYNC_RESOLVE_TRANSFER_WRITE_BIT = (SyncStageAccessFlags(1) << SYNC_RESOLVE_TRANSFER_WRITE);
200 static const SyncStageAccessFlags SYNC_BLIT_TRANSFER_READ_BIT = (SyncStageAccessFlags(1) << SYNC_BLIT_TRANSFER_READ);
201 static const SyncStageAccessFlags SYNC_BLIT_TRANSFER_WRITE_BIT = (SyncStageAccessFlags(1) << SYNC_BLIT_TRANSFER_WRITE);
202 static const SyncStageAccessFlags SYNC_CLEAR_TRANSFER_WRITE_BIT = (SyncStageAccessFlags(1) << SYNC_CLEAR_TRANSFER_WRITE);
203 static const SyncStageAccessFlags SYNC_COMMAND_PREPROCESS_BIT_NV_COMMAND_PREPROCESS_READ_BIT_NV = (SyncStageAccessFlags(1) << SYNC_COMMAND_PREPROCESS_NV_COMMAND_PREPROCESS_READ_NV);
204 static const SyncStageAccessFlags SYNC_COMMAND_PREPROCESS_BIT_NV_COMMAND_PREPROCESS_WRITE_BIT_NV = (SyncStageAccessFlags(1) << SYNC_COMMAND_PREPROCESS_NV_COMMAND_PREPROCESS_WRITE_NV);
205 static const SyncStageAccessFlags SYNC_CONDITIONAL_RENDERING_BIT_EXT_CONDITIONAL_RENDERING_READ_BIT_EXT = (SyncStageAccessFlags(1) << SYNC_CONDITIONAL_RENDERING_EXT_CONDITIONAL_RENDERING_READ_EXT);
206 static const SyncStageAccessFlags SYNC_RAY_TRACING_SHADER_ACCELERATION_STRUCTURE_READ_BIT = (SyncStageAccessFlags(1) << SYNC_RAY_TRACING_SHADER_ACCELERATION_STRUCTURE_READ);
207 static const SyncStageAccessFlags SYNC_RAY_TRACING_SHADER_SHADER_SAMPLED_READ_BIT = (SyncStageAccessFlags(1) << SYNC_RAY_TRACING_SHADER_SHADER_SAMPLED_READ);
208 static const SyncStageAccessFlags SYNC_RAY_TRACING_SHADER_SHADER_STORAGE_READ_BIT = (SyncStageAccessFlags(1) << SYNC_RAY_TRACING_SHADER_SHADER_STORAGE_READ);
209 static const SyncStageAccessFlags SYNC_RAY_TRACING_SHADER_SHADER_STORAGE_WRITE_BIT = (SyncStageAccessFlags(1) << SYNC_RAY_TRACING_SHADER_SHADER_STORAGE_WRITE);
210 static const SyncStageAccessFlags SYNC_RAY_TRACING_SHADER_UNIFORM_READ_BIT = (SyncStageAccessFlags(1) << SYNC_RAY_TRACING_SHADER_UNIFORM_READ);
211 static const SyncStageAccessFlags SYNC_ACCELERATION_STRUCTURE_BUILD_ACCELERATION_STRUCTURE_READ_BIT = (SyncStageAccessFlags(1) << SYNC_ACCELERATION_STRUCTURE_BUILD_ACCELERATION_STRUCTURE_READ);
212 static const SyncStageAccessFlags SYNC_ACCELERATION_STRUCTURE_BUILD_ACCELERATION_STRUCTURE_WRITE_BIT = (SyncStageAccessFlags(1) << SYNC_ACCELERATION_STRUCTURE_BUILD_ACCELERATION_STRUCTURE_WRITE);
213 static const SyncStageAccessFlags SYNC_ACCELERATION_STRUCTURE_BUILD_INDIRECT_COMMAND_READ_BIT = (SyncStageAccessFlags(1) << SYNC_ACCELERATION_STRUCTURE_BUILD_INDIRECT_COMMAND_READ);
214 static const SyncStageAccessFlags SYNC_ACCELERATION_STRUCTURE_BUILD_SHADER_SAMPLED_READ_BIT = (SyncStageAccessFlags(1) << SYNC_ACCELERATION_STRUCTURE_BUILD_SHADER_SAMPLED_READ);
215 static const SyncStageAccessFlags SYNC_ACCELERATION_STRUCTURE_BUILD_SHADER_STORAGE_READ_BIT = (SyncStageAccessFlags(1) << SYNC_ACCELERATION_STRUCTURE_BUILD_SHADER_STORAGE_READ);
216 static const SyncStageAccessFlags SYNC_ACCELERATION_STRUCTURE_BUILD_TRANSFER_READ_BIT = (SyncStageAccessFlags(1) << SYNC_ACCELERATION_STRUCTURE_BUILD_TRANSFER_READ);
217 static const SyncStageAccessFlags SYNC_ACCELERATION_STRUCTURE_BUILD_TRANSFER_WRITE_BIT = (SyncStageAccessFlags(1) << SYNC_ACCELERATION_STRUCTURE_BUILD_TRANSFER_WRITE);
218 static const SyncStageAccessFlags SYNC_ACCELERATION_STRUCTURE_BUILD_UNIFORM_READ_BIT = (SyncStageAccessFlags(1) << SYNC_ACCELERATION_STRUCTURE_BUILD_UNIFORM_READ);
219 static const SyncStageAccessFlags SYNC_VIDEO_DECODE_VIDEO_DECODE_READ_BIT = (SyncStageAccessFlags(1) << SYNC_VIDEO_DECODE_VIDEO_DECODE_READ);
220 static const SyncStageAccessFlags SYNC_VIDEO_DECODE_VIDEO_DECODE_WRITE_BIT = (SyncStageAccessFlags(1) << SYNC_VIDEO_DECODE_VIDEO_DECODE_WRITE);
221 static const SyncStageAccessFlags SYNC_VIDEO_ENCODE_VIDEO_ENCODE_READ_BIT = (SyncStageAccessFlags(1) << SYNC_VIDEO_ENCODE_VIDEO_ENCODE_READ);
222 static const SyncStageAccessFlags SYNC_VIDEO_ENCODE_VIDEO_ENCODE_WRITE_BIT = (SyncStageAccessFlags(1) << SYNC_VIDEO_ENCODE_VIDEO_ENCODE_WRITE);
223 static const SyncStageAccessFlags SYNC_SUBPASS_SHADING_HUAWEI_INPUT_ATTACHMENT_READ_BIT = (SyncStageAccessFlags(1) << SYNC_SUBPASS_SHADING_HUAWEI_INPUT_ATTACHMENT_READ);
224 static const SyncStageAccessFlags SYNC_HOST_HOST_READ_BIT = (SyncStageAccessFlags(1) << SYNC_HOST_HOST_READ);
225 static const SyncStageAccessFlags SYNC_HOST_HOST_WRITE_BIT = (SyncStageAccessFlags(1) << SYNC_HOST_HOST_WRITE);
226 static const SyncStageAccessFlags SYNC_IMAGE_LAYOUT_TRANSITION_BIT = (SyncStageAccessFlags(1) << SYNC_IMAGE_LAYOUT_TRANSITION);
227 static const SyncStageAccessFlags SYNC_QUEUE_FAMILY_OWNERSHIP_TRANSFER_BIT = (SyncStageAccessFlags(1) << SYNC_QUEUE_FAMILY_OWNERSHIP_TRANSFER);
228 
229 // Map of the StageAccessIndices from the StageAccess Bit
230 extern const layer_data::unordered_map<SyncStageAccessFlags, SyncStageAccessIndex> syncStageAccessIndexByStageAccessBit;
231 
232 struct SyncStageAccessInfoType {
233     const char *name;
234     VkPipelineStageFlags2KHR stage_mask;
235     VkAccessFlags2KHR access_mask;
236     SyncStageAccessIndex stage_access_index;
237     SyncStageAccessFlags stage_access_bit;
238 };
239 
240 // Array of text names and component masks for each stage/access index
241 extern const std::array<SyncStageAccessInfoType, 90> syncStageAccessInfoByStageAccessIndex;
242 
243 // Constants defining the mask of all read and write stage_access states
244 static const SyncStageAccessFlags syncStageAccessReadMask = ( //  Mask of all read StageAccess bits
245     SYNC_DRAW_INDIRECT_INDIRECT_COMMAND_READ_BIT |
246     SYNC_DRAW_INDIRECT_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT |
247     SYNC_INDEX_INPUT_INDEX_READ_BIT |
248     SYNC_VERTEX_ATTRIBUTE_INPUT_VERTEX_ATTRIBUTE_READ_BIT |
249     SYNC_VERTEX_SHADER_ACCELERATION_STRUCTURE_READ_BIT |
250     SYNC_VERTEX_SHADER_SHADER_SAMPLED_READ_BIT |
251     SYNC_VERTEX_SHADER_SHADER_STORAGE_READ_BIT |
252     SYNC_VERTEX_SHADER_UNIFORM_READ_BIT |
253     SYNC_TESSELLATION_CONTROL_SHADER_ACCELERATION_STRUCTURE_READ_BIT |
254     SYNC_TESSELLATION_CONTROL_SHADER_SHADER_SAMPLED_READ_BIT |
255     SYNC_TESSELLATION_CONTROL_SHADER_SHADER_STORAGE_READ_BIT |
256     SYNC_TESSELLATION_CONTROL_SHADER_UNIFORM_READ_BIT |
257     SYNC_TESSELLATION_EVALUATION_SHADER_ACCELERATION_STRUCTURE_READ_BIT |
258     SYNC_TESSELLATION_EVALUATION_SHADER_SHADER_SAMPLED_READ_BIT |
259     SYNC_TESSELLATION_EVALUATION_SHADER_SHADER_STORAGE_READ_BIT |
260     SYNC_TESSELLATION_EVALUATION_SHADER_UNIFORM_READ_BIT |
261     SYNC_GEOMETRY_SHADER_ACCELERATION_STRUCTURE_READ_BIT |
262     SYNC_GEOMETRY_SHADER_SHADER_SAMPLED_READ_BIT |
263     SYNC_GEOMETRY_SHADER_SHADER_STORAGE_READ_BIT |
264     SYNC_GEOMETRY_SHADER_UNIFORM_READ_BIT |
265     SYNC_TRANSFORM_FEEDBACK_BIT_EXT_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT |
266     SYNC_FRAGMENT_DENSITY_PROCESS_BIT_EXT_FRAGMENT_DENSITY_MAP_READ_BIT_EXT |
267     SYNC_TASK_SHADER_NV_ACCELERATION_STRUCTURE_READ_BIT |
268     SYNC_TASK_SHADER_NV_SHADER_SAMPLED_READ_BIT |
269     SYNC_TASK_SHADER_NV_SHADER_STORAGE_READ_BIT |
270     SYNC_TASK_SHADER_NV_UNIFORM_READ_BIT |
271     SYNC_MESH_SHADER_NV_ACCELERATION_STRUCTURE_READ_BIT |
272     SYNC_MESH_SHADER_NV_SHADER_SAMPLED_READ_BIT |
273     SYNC_MESH_SHADER_NV_SHADER_STORAGE_READ_BIT |
274     SYNC_MESH_SHADER_NV_UNIFORM_READ_BIT |
275     SYNC_FRAGMENT_SHADING_RATE_ATTACHMENT_FRAGMENT_SHADING_RATE_ATTACHMENT_READ_BIT |
276     SYNC_EARLY_FRAGMENT_TESTS_DEPTH_STENCIL_ATTACHMENT_READ_BIT |
277     SYNC_FRAGMENT_SHADER_ACCELERATION_STRUCTURE_READ_BIT |
278     SYNC_FRAGMENT_SHADER_INPUT_ATTACHMENT_READ_BIT |
279     SYNC_FRAGMENT_SHADER_SHADER_SAMPLED_READ_BIT |
280     SYNC_FRAGMENT_SHADER_SHADER_STORAGE_READ_BIT |
281     SYNC_FRAGMENT_SHADER_UNIFORM_READ_BIT |
282     SYNC_LATE_FRAGMENT_TESTS_DEPTH_STENCIL_ATTACHMENT_READ_BIT |
283     SYNC_COLOR_ATTACHMENT_OUTPUT_COLOR_ATTACHMENT_READ_BIT |
284     SYNC_COLOR_ATTACHMENT_OUTPUT_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT |
285     SYNC_COMPUTE_SHADER_ACCELERATION_STRUCTURE_READ_BIT |
286     SYNC_COMPUTE_SHADER_SHADER_SAMPLED_READ_BIT |
287     SYNC_COMPUTE_SHADER_SHADER_STORAGE_READ_BIT |
288     SYNC_COMPUTE_SHADER_UNIFORM_READ_BIT |
289     SYNC_COPY_TRANSFER_READ_BIT |
290     SYNC_RESOLVE_TRANSFER_READ_BIT |
291     SYNC_BLIT_TRANSFER_READ_BIT |
292     SYNC_COMMAND_PREPROCESS_BIT_NV_COMMAND_PREPROCESS_READ_BIT_NV |
293     SYNC_CONDITIONAL_RENDERING_BIT_EXT_CONDITIONAL_RENDERING_READ_BIT_EXT |
294     SYNC_RAY_TRACING_SHADER_ACCELERATION_STRUCTURE_READ_BIT |
295     SYNC_RAY_TRACING_SHADER_SHADER_SAMPLED_READ_BIT |
296     SYNC_RAY_TRACING_SHADER_SHADER_STORAGE_READ_BIT |
297     SYNC_RAY_TRACING_SHADER_UNIFORM_READ_BIT |
298     SYNC_ACCELERATION_STRUCTURE_BUILD_ACCELERATION_STRUCTURE_READ_BIT |
299     SYNC_ACCELERATION_STRUCTURE_BUILD_INDIRECT_COMMAND_READ_BIT |
300     SYNC_ACCELERATION_STRUCTURE_BUILD_SHADER_SAMPLED_READ_BIT |
301     SYNC_ACCELERATION_STRUCTURE_BUILD_SHADER_STORAGE_READ_BIT |
302     SYNC_ACCELERATION_STRUCTURE_BUILD_TRANSFER_READ_BIT |
303     SYNC_ACCELERATION_STRUCTURE_BUILD_UNIFORM_READ_BIT |
304     SYNC_VIDEO_DECODE_VIDEO_DECODE_READ_BIT |
305     SYNC_VIDEO_ENCODE_VIDEO_ENCODE_READ_BIT |
306     SYNC_SUBPASS_SHADING_HUAWEI_INPUT_ATTACHMENT_READ_BIT |
307     SYNC_HOST_HOST_READ_BIT
308 );
309 
310 static const SyncStageAccessFlags syncStageAccessWriteMask = ( //  Mask of all write StageAccess bits
311     SYNC_VERTEX_SHADER_SHADER_STORAGE_WRITE_BIT |
312     SYNC_TESSELLATION_CONTROL_SHADER_SHADER_STORAGE_WRITE_BIT |
313     SYNC_TESSELLATION_EVALUATION_SHADER_SHADER_STORAGE_WRITE_BIT |
314     SYNC_GEOMETRY_SHADER_SHADER_STORAGE_WRITE_BIT |
315     SYNC_TRANSFORM_FEEDBACK_BIT_EXT_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT |
316     SYNC_TRANSFORM_FEEDBACK_BIT_EXT_TRANSFORM_FEEDBACK_WRITE_BIT_EXT |
317     SYNC_TASK_SHADER_NV_SHADER_STORAGE_WRITE_BIT |
318     SYNC_MESH_SHADER_NV_SHADER_STORAGE_WRITE_BIT |
319     SYNC_EARLY_FRAGMENT_TESTS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT |
320     SYNC_FRAGMENT_SHADER_SHADER_STORAGE_WRITE_BIT |
321     SYNC_LATE_FRAGMENT_TESTS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT |
322     SYNC_COLOR_ATTACHMENT_OUTPUT_COLOR_ATTACHMENT_WRITE_BIT |
323     SYNC_COMPUTE_SHADER_SHADER_STORAGE_WRITE_BIT |
324     SYNC_COPY_TRANSFER_WRITE_BIT |
325     SYNC_RESOLVE_TRANSFER_WRITE_BIT |
326     SYNC_BLIT_TRANSFER_WRITE_BIT |
327     SYNC_CLEAR_TRANSFER_WRITE_BIT |
328     SYNC_COMMAND_PREPROCESS_BIT_NV_COMMAND_PREPROCESS_WRITE_BIT_NV |
329     SYNC_RAY_TRACING_SHADER_SHADER_STORAGE_WRITE_BIT |
330     SYNC_ACCELERATION_STRUCTURE_BUILD_ACCELERATION_STRUCTURE_WRITE_BIT |
331     SYNC_ACCELERATION_STRUCTURE_BUILD_TRANSFER_WRITE_BIT |
332     SYNC_VIDEO_DECODE_VIDEO_DECODE_WRITE_BIT |
333     SYNC_VIDEO_ENCODE_VIDEO_ENCODE_WRITE_BIT |
334     SYNC_HOST_HOST_WRITE_BIT |
335     SYNC_IMAGE_LAYOUT_TRANSITION_BIT |
336     SYNC_QUEUE_FAMILY_OWNERSHIP_TRANSFER_BIT
337 );
338 
339 // Bit order mask of stage_access bit for each stage
340 extern const std::map<VkPipelineStageFlags2KHR, SyncStageAccessFlags> syncStageAccessMaskByStageBit;
341 
342 // Bit order mask of stage_access bit for each access
343 extern const std::map<VkAccessFlags2KHR, SyncStageAccessFlags> syncStageAccessMaskByAccessBit;
344 
345 // stage_access index for each stage and access
346 extern const std::map<VkPipelineStageFlags2KHR, std::map<VkAccessFlags2KHR, SyncStageAccessIndex>> syncStageAccessIndexByStageAndAccess;
347 
348 // Direct VkPipelineStageFlags to valid VkAccessFlags lookup table
349 extern const std::map<VkPipelineStageFlags2KHR, VkAccessFlags2KHR> syncDirectStageToAccessMask;
350 
351 // Pipeline stages corresponding to VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR for each VkQueueFlagBits
352 extern const std::map<VkQueueFlagBits, VkPipelineStageFlags2KHR> syncAllCommandStagesByQueueFlags;
353 
354 // Masks of logically earlier stage flags for a given stage flag
355 extern const std::map<VkPipelineStageFlags2KHR, VkPipelineStageFlags2KHR> syncLogicallyEarlierStages;
356 
357 // Masks of logically later stage flags for a given stage flag
358 extern const std::map<VkPipelineStageFlags2KHR, VkPipelineStageFlags2KHR> syncLogicallyLaterStages;
359 
360 // Lookup table of stage orderings
361 extern const std::map<VkPipelineStageFlags2KHR, int> syncStageOrder;
362 
363 struct SyncShaderStageAccess {
364     SyncStageAccessIndex sampled_read;
365     SyncStageAccessIndex storage_read;
366     SyncStageAccessIndex storage_write;
367     SyncStageAccessIndex uniform_read;
368 };
369 
370 extern const std::map<VkShaderStageFlagBits, SyncShaderStageAccess> syncStageAccessMaskByShaderStage;
371