• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1// Copyright (c) 2015 The Khronos Group Inc.
2//
3// Permission is hereby granted, free of charge, to any person obtaining a
4// copy of this software and/or associated documentation files (the
5// "Materials"), to deal in the Materials without restriction, including
6// without limitation the rights to use, copy, modify, merge, publish,
7// distribute, sublicense, and/or sell copies of the Materials, and to
8// permit persons to whom the Materials are furnished to do so, subject to
9// the following conditions:
10//
11// The above copyright notice and this permission notice shall be included
12// in all copies or substantial portions of the Materials.
13//
14// THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
17// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
18// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
19// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
20// MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
21
22import platform "platform.api"
23
24///////////////
25// Constants //
26///////////////
27
28// API version (major.minor.patch)
29define VERSION_MAJOR 1
30define VERSION_MINOR 1
31define VERSION_PATCH 68
32
33// API limits
34define VK_MAX_PHYSICAL_DEVICE_NAME_SIZE 256
35define VK_UUID_SIZE                     16
36define VK_MAX_EXTENSION_NAME_SIZE       256
37define VK_MAX_DESCRIPTION_SIZE          256
38define VK_MAX_MEMORY_TYPES              32
39define VK_MAX_MEMORY_HEAPS              16    /// The maximum number of unique memory heaps, each of which supporting 1 or more memory types.
40@vulkan1_1
41define VK_MAX_DEVICE_GROUP_SIZE         32
42@vulkan1_1
43define VK_LUID_SIZE                     8
44@vulkan1_1
45define VK_QUEUE_FAMILY_EXTERNAL         -2
46@extension("VK_EXT_queue_family_foreign")
47define VK_QUEUE_FAMILY_FOREIGN_EXT      -3
48
49// API keywords
50define VK_TRUE        1
51define VK_FALSE       0
52
53// API keyword, but needs special handling by some templates
54define NULL_HANDLE 0
55
56// 1
57@extension("VK_KHR_surface") define VK_KHR_SURFACE_SPEC_VERSION                 25
58@extension("VK_KHR_surface") define VK_KHR_SURFACE_EXTENSION_NAME               "VK_KHR_surface"
59
60// 2
61@extension("VK_KHR_swapchain") define VK_KHR_SWAPCHAIN_SPEC_VERSION             70
62@extension("VK_KHR_swapchain") define VK_KHR_SWAPCHAIN_EXTENSION_NAME           "VK_KHR_swapchain"
63
64// 3
65@extension("VK_KHR_display") define VK_KHR_DISPLAY_SPEC_VERSION                 21
66@extension("VK_KHR_display") define VK_KHR_DISPLAY_EXTENSION_NAME               "VK_KHR_display"
67
68// 4
69@extension("VK_KHR_display_swapchain") define VK_KHR_DISPLAY_SWAPCHAIN_SPEC_VERSION     9
70@extension("VK_KHR_display_swapchain") define VK_KHR_DISPLAY_SWAPCHAIN_EXTENSION_NAME   "VK_KHR_display_swapchain"
71
72// 5
73@extension("VK_KHR_xlib_surface") define VK_KHR_XLIB_SURFACE_SPEC_VERSION       6
74@extension("VK_KHR_xlib_surface") define VK_KHR_XLIB_SURFACE_NAME               "VK_KHR_xlib_surface"
75
76// 6
77@extension("VK_KHR_xcb_surface") define VK_KHR_XCB_SURFACE_SPEC_VERSION         6
78@extension("VK_KHR_xcb_surface") define VK_KHR_XCB_SURFACE_NAME                 "VK_KHR_xcb_surface"
79
80// 7
81@extension("VK_KHR_wayland_surface") define VK_KHR_WAYLAND_SURFACE_SPEC_VERSION 6
82@extension("VK_KHR_wayland_surface") define VK_KHR_WAYLAND_SURFACE_NAME         "VK_KHR_wayland_surface"
83
84// 8
85@extension("VK_KHR_mir_surface") define VK_KHR_MIR_SURFACE_SPEC_VERSION         4
86@extension("VK_KHR_mir_surface") define VK_KHR_MIR_SURFACE_NAME                 "VK_KHR_mir_surface"
87
88// 9
89@extension("VK_KHR_android_surface") define VK_KHR_ANDROID_SURFACE_SPEC_VERSION 6
90@extension("VK_KHR_android_surface") define VK_KHR_ANDROID_SURFACE_NAME         "VK_KHR_android_surface"
91
92// 10
93@extension("VK_KHR_win32_surface") define VK_KHR_WIN32_SURFACE_SPEC_VERSION     6
94@extension("VK_KHR_win32_surface") define VK_KHR_WIN32_SURFACE_NAME             "VK_KHR_win32_surface"
95
96// 11
97@extension("VK_ANDROID_native_buffer") define VK_ANDROID_NATIVE_BUFFER_SPEC_VERSION     7
98@extension("VK_ANDROID_native_buffer") define VK_ANDROID_NATIVE_BUFFER_NAME             "VK_ANDROID_native_buffer"
99
100// 12
101@extension("VK_EXT_debug_report") define VK_EXT_DEBUG_REPORT_SPEC_VERSION       9
102@extension("VK_EXT_debug_report") define VK_EXT_DEBUG_REPORT_NAME               "VK_EXT_debug_report"
103
104// 13
105@extension("VK_NV_glsl_shader") define VK_NV_GLSL_SHADER_SPEC_VERSION           1
106@extension("VK_NV_glsl_shader") define VK_NV_GLSL_SHADER_NAME                   "VK_NV_glsl_shader"
107
108// 14
109@extension("VK_EXT_depth_range_unrestricted") define VK_EXT_DEPTH_RANGE_UNRESTRICTED_SPEC_VERSION   1
110@extension("VK_EXT_depth_range_unrestricted") define VK_EXT_DEPTH_RANGE_UNRESTRICTED_NAME           "VK_EXT_depth_range_unrestricted"
111
112// 15
113@extension("VK_KHR_sampler_mirror_clamp_to_edge") define VK_KHR_SAMPLER_MIRROR_CLAMP_TO_EDGE_SPEC_VERSION   1
114@extension("VK_KHR_sampler_mirror_clamp_to_edge") define VK_KHR_SAMPLER_MIRROR_CLAMP_TO_EDGE_NAME           "VK_KHR_sampler_mirror_clamp_to_edge"
115
116// 16
117@extension("VK_IMG_filter_cubic") define VK_IMG_FILTER_CUBIC_SPEC_VERSION       1
118@extension("VK_IMG_filter_cubic") define VK_IMG_FILTER_CUBIC_NAME               "VK_IMG_filter_cubic"
119
120// 19
121@extension("VK_AMD_rasterization_order") define VK_AMD_RASTERIZATION_ORDER_SPEC_VERSION   1
122@extension("VK_AMD_rasterization_order") define VK_AMD_RASTERIZATION_ORDER_NAME           "VK_AMD_rasterization_order"
123
124// 21
125@extension("VK_AMD_shader_trinary_minmax") define VK_AMD_SHADER_TRINARY_MINMAX_SPEC_VERSION 1
126@extension("VK_AMD_shader_trinary_minmax") define VK_AMD_SHADER_TRINARY_MINMAX_EXTENSION_NAME "VK_AMD_shader_trinary_minmax"
127
128// 22
129@extension("VK_AMD_shader_explicit_vertex_parameter") define VK_AMD_SHADER_EXPLICIT_VERTEX_PARAMETER_SPEC_VERSION 1
130@extension("VK_AMD_shader_explicit_vertex_parameter") define VK_AMD_SHADER_EXPLICIT_VERTEX_PARAMETER_EXTENSION_NAME "VK_AMD_shader_explicit_vertex_parameter"
131
132// 23
133@extension("VK_EXT_debug_marker") define VK_EXT_DEBUG_MARKER_SPEC_VERSION       4
134@extension("VK_EXT_debug_marker") define VK_EXT_DEBUG_MARKER_NAME               "VK_EXT_debug_marker"
135
136// 26
137@extension("VK_AMD_gcn_shader") define VK_AMD_GCN_SHADER_SPEC_VERSION 1
138@extension("VK_AMD_gcn_shader") define VK_AMD_GCN_SHADER_EXTENSION_NAME "VK_AMD_gcn_shader"
139
140// 27
141@extension("VK_NV_dedicated_allocation") define VK_NV_DEDICATED_ALLOCATION_SPEC_VERSION 1
142@extension("VK_NV_dedicated_allocation") define VK_NV_DEDICATED_ALLOCATION_EXTENSION_NAME "VK_NV_dedicated_allocation"
143
144// 28
145@extension("VK_IMG_format_pvrtc") define VK_IMG_FORMAT_PVRTC_SPEC_VERSION 1
146@extension("VK_IMG_format_pvrtc") define VK_IMG_FORMAT_PVRTC_EXTENSION_NAME "VK_IMG_format_pvrtc"
147
148// 34
149@extension("VK_AMD_draw_indirect_count") define VK_AMD_DRAW_INDIRECT_COUNT_SPEC_VERSION 1
150@extension("VK_AMD_draw_indirect_count") define VK_AMD_DRAW_INDIRECT_COUNT_EXTENSION_NAME "VK_AMD_draw_indirect_count"
151
152// 36
153@extension("VK_AMD_negative_viewport_height") define VK_AMD_NEGATIVE_VIEWPORT_HEIGHT_SPEC_VERSION 1
154@extension("VK_AMD_negative_viewport_height") define VK_AMD_NEGATIVE_VIEWPORT_HEIGHT_EXTENSION_NAME "VK_AMD_negative_viewport_height"
155
156// 37
157@extension("VK_AMD_gpu_shader_half_float") define VK_AMD_GPU_SHADER_HALF_FLOAT_SPEC_VERSION 1
158@extension("VK_AMD_gpu_shader_half_float") define VK_AMD_GPU_SHADER_HALF_FLOAT_EXTENSION_NAME "VK_AMD_gpu_shader_half_float"
159
160// 38
161@extension("VK_AMD_shader_ballot") define VK_AMD_SHADER_BALLOT_SPEC_VERSION 1
162@extension("VK_AMD_shader_ballot") define VK_AMD_SHADER_BALLOT_EXTENSION_NAME "VK_AMD_shader_ballot"
163
164// 42
165@extension("VK_AMD_texture_gather_bias_lod") define VK_AMD_TEXTURE_GATHER_BIAS_LOD_SPEC_VERSION 1
166@extension("VK_AMD_texture_gather_bias_lod") define VK_AMD_TEXTURE_GATHER_BIAS_LOD_EXTENSION_NAME "VK_AMD_texture_gather_bias_lod"
167
168// 43
169@extension("VK_AMD_shader_info") define VK_AMD_SHADER_INFO_SPEC_VERSION 1
170@extension("VK_AMD_shader_info") define VK_AMD_SHADER_INFO_EXTENSION_NAME "VK_AMD_shader_info"
171
172// 47
173@extension("VK_AMD_shader_image_load_store_lod") define VK_AMD_SHADER_IMAGE_LOAD_STORE_LOD_SPEC_VERSION 1
174@extension("VK_AMD_shader_image_load_store_lod") define VK_AMD_SHADER_IMAGE_LOAD_STORE_LOD_EXTENSION_NAME "VK_AMD_shader_image_load_store_lod"
175
176// 54
177@extension("VK_KHR_multiview") define VK_KHR_MULTIVIEW_SPEC_VERSION 1
178@extension("VK_KHR_multiview") define VK_KHR_MULTIVIEW_EXTENSION_NAME "VK_KHR_multiview"
179
180// 56
181@extension("VK_NV_external_memory_capabilities") define VK_NV_EXTERNAL_MEMORY_CAPABILITIES_SPEC_VERSION 1
182@extension("VK_NV_external_memory_capabilities") define VK_NV_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME "VK_NV_external_memory_capabilities"
183
184// 57
185@extension("VK_NV_external_memory") define VK_NV_EXTERNAL_MEMORY_SPEC_VERSION 1
186@extension("VK_NV_external_memory") define VK_NV_EXTERNAL_MEMORY_EXTENSION_NAME "VK_NV_external_memory"
187
188// 58
189@extension("VK_NV_external_memory_win32") define VK_NV_EXTERNAL_MEMORY_WIN32_SPEC_VERSION 1
190@extension("VK_NV_external_memory_win32") define VK_NV_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME "VK_NV_external_memory_win32"
191
192// 59
193@extension("VK_NV_win32_keyed_mutex") define VK_NV_WIN32_KEYED_MUTEX_SPEC_VERSION 1
194@extension("VK_NV_win32_keyed_mutex") define VK_NV_WIN32_KEYED_MUTEX_EXTENSION_NAME "VK_NV_win32_keyed_mutex"
195
196// 60
197@extension("VK_KHR_get_physical_device_properties2") define VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_SPEC_VERSION 1
198@extension("VK_KHR_get_physical_device_properties2") define VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME "VK_KHR_get_physical_device_properties2"
199
200// 61
201@extension("VK_KHR_device_group") define VK_KHR_DEVICE_GROUP_SPEC_VERSION 3
202@extension("VK_KHR_device_group") define VK_KHR_DEVICE_GROUP_EXTENSION_NAME "VK_KHR_device_group"
203
204// 62
205@extension("VK_EXT_validation_flags") define VK_EXT_VALIDATION_FLAGS_SPEC_VERSION 1
206@extension("VK_EXT_validation_flags") define VK_EXT_VALIDATION_FLAGS_EXTENSION_NAME "VK_EXT_validation_flags"
207
208// 63
209@extension("VK_NN_vi_surface") define VK_NN_VI_SURFACE_SPEC_VERSION 1
210@extension("VK_NN_vi_surface") define VK_NN_VI_SURFACE_EXTENSION_NAME "VK_NN_vi_surface"
211
212// 64
213@extension("VK_KHR_shader_draw_parameters") define VK_KHR_SHADER_DRAW_PARAMETERS_SPEC_VERSION 1
214@extension("VK_KHR_shader_draw_parameters") define VK_KHR_SHADER_DRAW_PARAMETERS_EXTENSION_NAME "VK_KHR_shader_draw_parameters"
215
216// 65
217@extension("VK_EXT_shader_subgroup_ballot") define VK_EXT_SHADER_SUBGROUP_BALLOT_SPEC_VERSION 1
218@extension("VK_EXT_shader_subgroup_ballot") define VK_EXT_SHADER_SUBGROUP_BALLOT_EXTENSION_NAME "VK_EXT_shader_subgroup_ballot"
219
220// 66
221@extension("VK_EXT_shader_subgroup_vote") define VK_EXT_SHADER_SUBGROUP_VOTE_SPEC_VERSION 1
222@extension("VK_EXT_shader_subgroup_vote") define VK_EXT_SHADER_SUBGROUP_VOTE_EXTENSION_NAME "VK_EXT_shader_subgroup_vote"
223
224// 70
225@extension("VK_KHR_maintenance1") define VK_KHR_MAINTENANCE1_SPEC_VERSION 1
226@extension("VK_KHR_maintenance1") define VK_KHR_MAINTENANCE1_EXTENSION_NAME "VK_KHR_maintenance1"
227
228// 71
229@extension("VK_KHR_device_group_creation") define VK_KHR_DEVICE_GROUP_CREATION_SPEC_VERSION 1
230@extension("VK_KHR_device_group_creation") define VK_KHR_DEVICE_GROUP_CREATION_EXTENSION_NAME "VK_KHR_device_group_creation"
231
232// 72
233@extension("VK_KHR_external_memory_capabilities") define VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_SPEC_VERSION 1
234@extension("VK_KHR_external_memory_capabilities") define VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME "VK_KHR_external_memory_capabilities"
235
236// 73
237@extension("VK_KHR_external_memory") define VK_KHR_EXTERNAL_MEMORY_SPEC_VERSION 1
238@extension("VK_KHR_external_memory") define VK_KHR_EXTERNAL_MEMORY_EXTENSION_NAME "VK_KHR_external_memory"
239
240// 74
241@extension("VK_KHR_external_memory_win32") define VK_KHR_EXTERNAL_MEMORY_WIN32_SPEC_VERSION 1
242@extension("VK_KHR_external_memory_win32") define VK_KHR_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME "VK_KHR_external_memory_win32"
243
244// 75
245@extension("VK_KHR_external_memory_fd") define VK_KHR_EXTERNAL_MEMORY_FD_SPEC_VERSION 1
246@extension("VK_KHR_external_memory_fd") define VK_KHR_EXTERNAL_MEMORY_FD_EXTENSION_NAME "VK_KHR_external_memory_fd"
247
248// 76
249@extension("VK_KHR_win32_keyed_mutex") define VK_KHR_WIN32_KEYED_MUTEX_SPEC_VERSION 1
250@extension("VK_KHR_win32_keyed_mutex") define VK_KHR_WIN32_KEYED_MUTEX_EXTENSION_NAME "VK_KHR_win32_keyed_mutex"
251
252// 77
253@extension("VK_KHR_external_semaphore_capabilities") define VK_KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_SPEC_VERSION 1
254@extension("VK_KHR_external_semaphore_capabilities") define VK_KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_EXTENSION_NAME "VK_KHR_external_semaphore_capabilities"
255
256// 78
257@extension("VK_KHR_external_semaphore") define VK_KHR_EXTERNAL_SEMAPHORE_SPEC_VERSION 1
258@extension("VK_KHR_external_semaphore") define VK_KHR_EXTERNAL_SEMAPHORE_EXTENSION_NAME "VK_KHR_external_semaphore"
259
260// 79
261@extension("VK_KHR_external_semaphore_win32") define VK_KHR_EXTERNAL_SEMAPHORE_WIN32_SPEC_VERSION 1
262@extension("VK_KHR_external_semaphore_win32") define VK_KHR_EXTERNAL_SEMAPHORE_WIN32_EXTENSION_NAME "VK_KHR_external_semaphore_win32"
263
264// 80
265@extension("VK_KHR_external_semaphore_fd") define VK_KHR_EXTERNAL_SEMAPHORE_FD_SPEC_VERSION 1
266@extension("VK_KHR_external_semaphore_fd") define VK_KHR_EXTERNAL_SEMAPHORE_FD_EXTENSION_NAME "VK_KHR_external_semaphore_fd"
267
268// 81
269@extension("VK_KHR_push_descriptor") define VK_KHR_PUSH_DESCRIPTOR_SPEC_VERSION 2
270@extension("VK_KHR_push_descriptor") define VK_KHR_PUSH_DESCRIPTOR_EXTENSION_NAME "VK_KHR_push_descriptor"
271
272// 84
273@extension("VK_KHR_16bit_storage") define VK_KHR_16BIT_STORAGE_SPEC_VERSION 1
274@extension("VK_KHR_16bit_storage") define VK_KHR_16BIT_STORAGE_EXTENSION_NAME "VK_KHR_16bit_storage"
275
276// 85
277@extension("VK_KHR_incremental_present") define VK_KHR_INCREMENTAL_PRESENT_SPEC_VERSION 1
278@extension("VK_KHR_incremental_present") define VK_KHR_INCREMENTAL_PRESENT_EXTENSION_NAME "VK_KHR_incremental_present"
279
280// 86
281@extension("VK_KHR_descriptor_update_template") define VK_KHR_DESCRIPTOR_UPDATE_TEMPLATE_SPEC_VERSION 1
282@extension("VK_KHR_descriptor_update_template") define VK_KHR_DESCRIPTOR_UPDATE_TEMPLATE_EXTENSION_NAME "VK_KHR_descriptor_update_template"
283
284// 87
285@extension("VK_NVX_device_generated_commands") define VK_NVX_DEVICE_GENERATED_COMMANDS_SPEC_VERSION 3
286@extension("VK_NVX_device_generated_commands") define VK_NVX_DEVICE_GENERATED_COMMANDS_EXTENSION_NAME "VK_NVX_device_generated_commands"
287
288// 88
289@extension("VK_NV_clip_space_w_scaling") define VK_NV_CLIP_SPACE_W_SCALING_SPEC_VERSION 1
290@extension("VK_NV_clip_space_w_scaling") define VK_NV_CLIP_SPACE_W_SCALING_EXTENSION_NAME "VK_NV_clip_space_w_scaling"
291
292// 89
293@extension("VK_EXT_direct_mode_display") define VK_EXT_DIRECT_MODE_DISPLAY_SPEC_VERSION 1
294@extension("VK_EXT_direct_mode_display") define VK_EXT_DIRECT_MODE_DISPLAY_EXTENSION_NAME "VK_EXT_direct_mode_display"
295
296// 90
297@extension("VK_EXT_acquire_xlib_display") define VK_EXT_ACQUIRE_XLIB_DISPLAY_SPEC_VERSION 1
298@extension("VK_EXT_acquire_xlib_display") define VK_EXT_ACQUIRE_XLIB_DISPLAY_EXTENSION_NAME "VK_EXT_acquire_xlib_display"
299
300// 91
301@extension("VK_EXT_display_surface_counter") define VK_EXT_DISPLAY_SURFACE_COUNTER_SPEC_VERSION 1
302@extension("VK_EXT_display_surface_counter") define VK_EXT_DISPLAY_SURFACE_COUNTER_EXTENSION_NAME "VK_EXT_display_surface_counter"
303
304// 92
305@extension("VK_EXT_display_control") define VK_EXT_DISPLAY_CONTROL_SPEC_VERSION 1
306@extension("VK_EXT_display_control") define VK_EXT_DISPLAY_CONTROL_COUNTER_EXTENSION_NAME "VK_EXT_display_control"
307
308// 93
309@extension("VK_GOOGLE_display_timing") define VK_GOOGLE_DISPLAY_TIMING_SPEC_VERSION 1
310@extension("VK_GOOGLE_display_timing") define VK_GOOGLE_DISPLAY_TIMING_EXTENSION_NAME "VK_GOOGLE_display_timing"
311
312// 95
313@extension("VK_NV_sample_mask_override_coverage") define VK_NV_SAMPLE_MASK_OVERRIDE_COVERAGE_SPEC_VERSION 1
314@extension("VK_NV_sample_mask_override_coverage") define VK_NV_SAMPLE_MASK_OVERRIDE_COVERAGE_EXTENSION_NAME "VK_NV_sample_mask_override_coverage"
315
316// 96
317@extension("VK_NV_geometry_shader_passthrough") define VK_NV_GEOMETRY_SHADER_PASSTHROUGH_SPEC_VERSION 1
318@extension("VK_NV_geometry_shader_passthrough") define VK_NV_GEOMETRY_SHADER_PASSTHROUGH_EXTENSION_NAME "VK_NV_geometry_shader_passthrough"
319
320// 97
321@extension("VK_NV_viewport_array2") define VK_NV_VIEWPORT_ARRAY2_SPEC_VERSION 1
322@extension("VK_NV_viewport_array2") define VK_NV_VIEWPORT_ARRAY2_EXTENSION_NAME "VK_NV_viewport_array2"
323
324// 98
325@extension("VK_NVX_multiview_per_view_attributes") define VK_NVX_MULTIVIEW_PER_VIEW_ATTRIBUTES_SPEC_VERSION 1
326@extension("VK_NVX_multiview_per_view_attributes") define VK_NVX_MULTIVIEW_PER_VIEW_ATTRIBUTES_EXTENSION_NAME "VK_NVX_multiview_per_view_attributes"
327
328// 99
329@extension("VK_NV_viewport_swizzle") define VK_NV_VIEWPORT_SWIZZLE_SPEC_VERSION 1
330@extension("VK_NV_viewport_swizzle") define VK_NV_VIEWPORT_SWIZZLE_EXTENSION_NAME "VK_NV_viewport_swizzle"
331
332// 100
333@extension("VK_EXT_discard_rectangles") define VK_EXT_DISCARD_RECTANGLES_SPEC_VERSION 1
334@extension("VK_EXT_discard_rectangles") define VK_EXT_DISCARD_RECTANGLES_EXTENSION_NAME "VK_EXT_discard_rectangles"
335
336// 102
337@extension("VK_EXT_conservative_rasterization") define VK_EXT_CONSERVATIVE_RASTERIZATION_SPEC_VERSION 1
338@extension("VK_EXT_conservative_rasterization") define VK_EXT_CONSERVATIVE_RASTERIZATION_EXTENSION_NAME "VK_EXT_conservative_rasterization"
339
340// 105
341@extension("VK_EXT_swapchain_colorspace") define VK_EXT_SWAPCHAIN_COLORSPACE_SPEC_VERSION 3
342@extension("VK_EXT_swapchain_colorspace") define VK_EXT_SWAPCHAIN_COLORSPACE_EXTENSION_NAME "VK_EXT_swapchain_colorspace"
343
344// 106
345@extension("VK_EXT_hdr_metadata") define VK_EXT_HDR_METADATA_SPEC_VERSION 1
346@extension("VK_EXT_hdr_metadata") define VK_EXT_HDR_METADATA_EXTENSION_NAME "VK_EXT_hdr_metadata"
347
348// 112
349@extension("VK_KHR_shared_presentable_image") define VK_KHR_SHARED_PRESENTABLE_IMAGE_SPEC_VERSION 1
350@extension("VK_KHR_shared_presentable_image") define VK_KHR_SHARED_PRESENTABLE_IMAGE_EXTENSION_NAME "VK_KHR_shared_presentable_image"
351
352// 113
353@extension("VK_KHR_external_fence_capabilities") define VK_KHR_EXTERNAL_FENCE_CAPABILITIES_SPEC_VERSION 1
354@extension("VK_KHR_external_fence_capabilities") define VK_KHR_EXTERNAL_FENCE_CAPABILITIES_EXTENSION_NAME "VK_KHR_external_fence_capabilities"
355
356// 114
357@extension("VK_KHR_external_fence") define VK_KHR_EXTERNAL_FENCE_SPEC_VERSION 1
358@extension("VK_KHR_external_fence") define VK_KHR_EXTERNAL_FENCE_EXTENSION_NAME "VK_KHR_external_fence"
359
360// 115
361@extension("VK_KHR_external_fence_win32") define VK_KHR_EXTERNAL_FENCE_WIN32_SPEC_VERSION 1
362@extension("VK_KHR_external_fence_win32") define VK_KHR_EXTERNAL_FENCE_WIN32_EXTENSION_NAME "VK_KHR_external_fence_win32"
363
364// 116
365@extension("VK_KHR_external_fence_fd") define VK_KHR_EXTERNAL_FENCE_FD_SPEC_VERSION 1
366@extension("VK_KHR_external_fence_fd") define VK_KHR_EXTERNAL_FENCE_FD_EXTENSION_NAME "VK_KHR_external_fence_fd"
367
368// 118
369@extension("VK_KHR_maintenance2") define VK_KHR_MAINTENANCE2_SPEC_VERSION 1
370@extension("VK_KHR_maintenance2") define VK_KHR_MAINTENANCE2_EXTENSION_NAME "VK_KHR_maintenance2"
371
372// 120
373@extension("VK_KHR_get_surface_capabilities2") define VK_KHR_GET_SURFACE_CAPABILITIES_2_SPEC_VERSION 1
374@extension("VK_KHR_get_surface_capabilities2") define VK_KHR_GET_SURFACE_CAPABILITIES_2_EXTENSION_NAME "VK_KHR_get_surface_capabilities2"
375
376// 121
377@extension("VK_KHR_variable_pointers") define VK_KHR_VARIABLE_POINTERS_SPEC_VERSION 1
378@extension("VK_KHR_variable_pointers") define VK_KHR_VARIABLE_POINTERS_EXTENSION_NAME "VK_KHR_variable_pointers"
379
380// 123
381@extension("VK_MVK_ios_surface") define VK_MVK_IOS_SURFACE_SPEC_VERSION 1
382@extension("VK_MVK_ios_surface") define VK_MVK_IOS_SURFACE_EXTENSION_NAME "VK_MVK_ios_surface"
383
384// 124
385@extension("VK_MVK_macos_surface") define VK_MVK_MACOS_SURFACE_SPEC_VERSION 1
386@extension("VK_MVK_macos_surface") define VK_MVK_MACOS_SURFACE_EXTENSION_NAME "VK_MVK_macos_surface"
387
388// 126
389@extension("VK_EXT_external_memory_dma_buf") define VK_EXT_EXTERNAL_MEMORY_DMA_BUF_SPEC_VERSION 1
390@extension("VK_EXT_external_memory_dma_buf") define VK_EXT_EXTERNAL_MEMORY_DMA_BUF_EXTENSION_NAME "VK_EXT_external_memory_dma_buf"
391
392// 127
393@extension("VK_EXT_queue_family_foreign") define VK_EXT_QUEUE_FAMILY_FOREIGN_SPEC_VERSION 1
394@extension("VK_EXT_queue_family_foreign") define VK_EXT_QUEUE_FAMILY_FOREIGN_EXTENSION_NAME "VK_EXT_queue_family_foreign"
395
396// 128
397@extension("VK_KHR_dedicated_allocation") define VK_KHR_DEDICATED_ALLOCATION_SPEC_VERSION 3
398@extension("VK_KHR_dedicated_allocation") define VK_KHR_DEDICATED_ALLOCATION_EXTENSION_NAME "VK_KHR_dedicated_allocation"
399
400// 128
401@extension("VK_EXT_debug_utils") define VK_EXT_DEBUG_UTILS_SPEC_VERSION 1
402@extension("VK_EXT_debug_utils") define VK_EXT_DEBUG_UTILS_EXTENSION_NAME "VK_EXT_debug_utils"
403
404// 130
405@extension("VK_ANDROID_external_memory_android_hardware_buffer") define VK_ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_SPEC_VERSION 2
406@extension("VK_ANDROID_external_memory_android_hardware_buffer") define VK_ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_EXTENSION_NAME "VK_ANDROID_external_memory_android_hardware_buffer"
407
408// 131
409@extension("VK_EXT_sampler_filter_minmax") define VK_EXT_SAMPLER_FILTER_MINMAX_SPEC_VERSION 1
410@extension("VK_EXT_sampler_filter_minmax") define VK_EXT_SAMPLER_FILTER_MINMAX_EXTENSION_NAME "VK_EXT_sampler_filter_minmax"
411
412// 132
413@extension("VK_KHR_storage_buffer_storage_class") define VK_KHR_STORAGE_BUFFER_STORAGE_CLASS_SPEC_VERSION 1
414@extension("VK_KHR_storage_buffer_storage_class") define VK_KHR_STORAGE_BUFFER_STORAGE_CLASS_EXTENSION_NAME "VK_KHR_storage_buffer_storage_class"
415
416// 133
417@extension("VK_AMD_gpu_shader_int16") define VK_AMD_GPU_SHADER_INT16_SPEC_VERSION 1
418@extension("VK_AMD_gpu_shader_int16") define VK_AMD_GPU_SHADER_INT16_EXTENSION_NAME "VK_AMD_gpu_shader_int16"
419
420// 137
421@extension("VK_AMD_mixed_attachment_samples") define VK_AMD_MIXED_ATTACHMENT_SAMPLES_SPEC_VERSION 1
422@extension("VK_AMD_mixed_attachment_samples") define VK_AMD_MIXED_ATTACHMENT_SAMPLES_EXTENSION_NAME "VK_AMD_mixed_attachment_samples"
423
424// 138
425@extension("VK_AMD_shader_fragment_mask") define VK_AMD_SHADER_FRAGMENT_MASK_SPEC_VERSION 1
426@extension("VK_AMD_shader_fragment_mask") define VK_AMD_SHADER_FRAGMENT_MASK_EXTENSION_NAME "VK_AMD_shader_fragment_mask"
427
428// 141
429@extension("VK_EXT_shader_stencil_export") define VK_EXT_SHADER_STENCIL_EXPORT_SPEC_VERSION 1
430@extension("VK_EXT_shader_stencil_export") define VK_EXT_SHADER_STENCIL_EXPORT_EXTENSION_NAME "VK_EXT_shader_stencil_export"
431
432// 144
433@extension("VK_EXT_sample_locations") define VK_EXT_SAMPLE_LOCATIONS_SPEC_VERSION 1
434@extension("VK_EXT_sample_locations") define VK_EXT_SAMPLE_LOCATIONS_EXTENSION_NAME "VK_EXT_sample_locations"
435
436// 145
437@extension("VK_KHR_relaxed_block_layout") define VK_KHR_RELAXED_BLOCK_LAYOUT_SPEC_VERSION 1
438@extension("VK_KHR_relaxed_block_layout") define VK_KHR_RELAXED_BLOCK_LAYOUT_EXTENSION_NAME "VK_KHR_relaxed_block_layout"
439
440// 147
441@extension("VK_KHR_get_memory_requirements2") define VK_KHR_GET_MEMORY_REQUIREMENTS2_SPEC_VERSION 1
442@extension("VK_KHR_get_memory_requirements2") define VK_KHR_GET_MEMORY_REQUIREMENTS2_EXTENSION_NAME "VK_KHR_get_memory_requirements2"
443
444// 148
445@extension("VK_KHR_image_format_list") define VK_KHR_IMAGE_FORMAT_LIST_SPEC_VERSION 1
446@extension("VK_KHR_image_format_list") define VK_KHR_IMAGE_FORMAT_LIST_EXTENSION_NAME "VK_KHR_image_format_list"
447
448// 149
449@extension("VK_EXT_blend_operation_advanced") define VK_EXT_BLEND_OPERATION_ADVANCED_SPEC_VERSION 2
450@extension("VK_EXT_blend_operation_advanced") define VK_EXT_BLEND_OPERATION_ADVANCED_EXTENSION_NAME "VK_EXT_blend_operation_advanced"
451
452// 150
453@extension("VK_NV_fragment_coverage_to_color") define VK_NV_FRAGMENT_COVERAGE_TO_COLOR_SPEC_VERSION 1
454@extension("VK_NV_fragment_coverage_to_color") define VK_NV_FRAGMENT_COVERAGE_TO_COLOR_EXTENSION_NAME "VK_NV_fragment_coverage_to_color"
455
456// 153
457@extension("VK_NV_framebuffer_mixed_samples") define VK_NV_FRAMEBUFFER_MIXED_SAMPLES_SPEC_VERSION 1
458@extension("VK_NV_framebuffer_mixed_samples") define VK_NV_FRAMEBUFFER_MIXED_SAMPLES_EXTENSION_NAME "VK_NV_framebuffer_mixed_samples"
459
460// 154
461@extension("VK_NV_fill_rectangle") define VK_NV_FILL_RECTANGLE_SPEC_VERSION 1
462@extension("VK_NV_fill_rectangle") define VK_NV_FILL_RECTANGLE_EXTENSION_NAME "VK_NV_fill_rectangle"
463
464// 156
465@extension("VK_EXT_post_depth_coverage") define VK_EXT_POST_DEPTH_COVERAGE_SPEC_VERSION 1
466@extension("VK_EXT_post_depth_coverage") define VK_EXT_POST_DEPTH_COVERAGE_EXTENSION_NAME "VK_EXT_post_depth_coverage"
467
468// 157
469@extension("VK_KHR_sampler_ycbcr_conversion") define VK_KHR_SAMPLER_YCBCR_CONVERSION_SPEC_VERSION 1
470@extension("VK_KHR_sampler_ycbcr_conversion") define VK_KHR_SAMPLER_YCBCR_CONVERSION_EXTENSION_NAME "VK_KHR_sampler_ycbcr_conversion"
471
472// 158
473@extension("VK_KHR_bind_memory2") define VK_KHR_BIND_MEMORY2_SPEC_VERSION 1
474@extension("VK_KHR_bind_memory2") define VK_KHR_BIND_MEMORY2_EXTENSION_NAME "VK_KHR_bind_memory2"
475
476// 161
477@extension("VK_EXT_validation_cache") define VK_EXT_VALIDATION_CACHE_SPEC_VERSION 1
478@extension("VK_EXT_validation_cache") define VK_EXT_VALIDATION_CACHE_EXTENSION_NAME "VK_EXT_validation_cache"
479
480// 165
481@extension("VK_EXT_shader_viewport_index_layer") define VK_EXT_SHADER_VIEWPORT_INDEX_LAYER_SPEC_VERSION 1
482@extension("VK_EXT_shader_viewport_index_layer") define VK_EXT_SHADER_VIEWPORT_INDEX_LAYER_EXTENSION_NAME "VK_EXT_shader_viewport_index_layer"
483
484// 169
485@extension("VK_KHR_maintenance3") define VK_KHR_MAINTENANCE3_SPEC_VERSION 1
486@extension("VK_KHR_maintenance3") define VK_KHR_MAINTENANCE3_EXTENSION_NAME "VK_KHR_maintenance3"
487
488// 175
489@extension("VK_EXT_global_priority") define VK_EXT_GLOBAL_PRIORITY_SPEC_VERSION 1
490@extension("VK_EXT_global_priority") define VK_EXT_GLOBAL_PRIORITY_EXTENSION_NAME "VK_EXT_global_priority"
491
492// 179
493@extension("VK_EXT_external_memory_host") define VK_EXT_EXTERNAL_MEMORY_HOST_SPEC_VERSION 1
494@extension("VK_EXT_external_memory_host") define VK_EXT_EXTERNAL_MEMORY_HOST_EXTENSION_NAME "VK_EXT_external_memory_host"
495
496/////////////
497//  Types  //
498/////////////
499
500type u32 VkBool32
501type u32 VkFlags
502type u64 VkDeviceSize
503type u32 VkSampleMask
504
505/// Dispatchable handle types.
506@dispatchHandle type u64 VkInstance
507@dispatchHandle type u64 VkPhysicalDevice
508@dispatchHandle type u64 VkDevice
509@dispatchHandle type u64 VkQueue
510@dispatchHandle type u64 VkCommandBuffer
511
512/// Non dispatchable handle types.
513@nonDispatchHandle type u64 VkDeviceMemory
514@nonDispatchHandle type u64 VkCommandPool
515@nonDispatchHandle type u64 VkBuffer
516@nonDispatchHandle type u64 VkBufferView
517@nonDispatchHandle type u64 VkImage
518@nonDispatchHandle type u64 VkImageView
519@nonDispatchHandle type u64 VkShaderModule
520@nonDispatchHandle type u64 VkPipeline
521@nonDispatchHandle type u64 VkPipelineLayout
522@nonDispatchHandle type u64 VkSampler
523@nonDispatchHandle type u64 VkDescriptorSet
524@nonDispatchHandle type u64 VkDescriptorSetLayout
525@nonDispatchHandle type u64 VkDescriptorPool
526@nonDispatchHandle type u64 VkFence
527@nonDispatchHandle type u64 VkSemaphore
528@nonDispatchHandle type u64 VkEvent
529@nonDispatchHandle type u64 VkQueryPool
530@nonDispatchHandle type u64 VkFramebuffer
531@nonDispatchHandle type u64 VkRenderPass
532@nonDispatchHandle type u64 VkPipelineCache
533
534@vulkan1_1
535@nonDispatchHandle type u64 VkSamplerYcbcrConversion
536@nonDispatchHandle type u64 VkDescriptorUpdateTemplate
537
538// 1
539@extension("VK_KHR_surface")    @nonDispatchHandle type u64 VkSurfaceKHR
540
541// 2
542@extension("VK_KHR_swapchain")  @nonDispatchHandle type u64 VkSwapchainKHR
543
544// 3
545@extension("VK_KHR_display")    @nonDispatchHandle type u64 VkDisplayKHR
546@extension("VK_KHR_display")    @nonDispatchHandle type u64 VkDisplayModeKHR
547
548// 12
549@extension("VK_EXT_debug_report") @nonDispatchHandle type u64 VkDebugReportCallbackEXT
550
551// 86
552@extension("VK_KHR_descriptor_update_template") @nonDispatchHandle type u64 VkDescriptorUpdateTemplateKHR
553
554// 87
555@extension("VK_NVX_device_generated_commands") @nonDispatchHandle type u64 VkObjectTableNVX
556@extension("VK_NVX_device_generated_commands") @nonDispatchHandle type u64 VkIndirectCommandsLayoutNVX
557
558// 129
559@extension("VK_EXT_debug_utils") @nonDispatchHandle type u64 VkDebugUtilsMessengerEXT
560
561// 157
562@extension("VK_KHR_sampler_ycbcr_conversion") @nonDispatchHandle type u64 VkSamplerYcbcrConversionKHR
563
564// 161
565@extension("VK_EXT_validation_cache") @nonDispatchHandle type u64 VkValidationCacheEXT
566
567/////////////
568//  Enums  //
569/////////////
570
571enum VkImageLayout {
572    VK_IMAGE_LAYOUT_UNDEFINED                               = 0x00000000,   /// Implicit layout an image is when its contents are undefined due to various reasons (e.g. right after creation)
573    VK_IMAGE_LAYOUT_GENERAL                                 = 0x00000001,   /// General layout when image can be used for any kind of access
574    VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL                = 0x00000002,   /// Optimal layout when image is only used for color attachment read/write
575    VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL        = 0x00000003,   /// Optimal layout when image is only used for depth/stencil attachment read/write
576    VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL         = 0x00000004,   /// Optimal layout when image is used for read only depth/stencil attachment and shader access
577    VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL                = 0x00000005,   /// Optimal layout when image is used for read only shader access
578    VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL                    = 0x00000006,   /// Optimal layout when image is used only as source of transfer operations
579    VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL                    = 0x00000007,   /// Optimal layout when image is used only as destination of transfer operations
580    VK_IMAGE_LAYOUT_PREINITIALIZED                          = 0x00000008,   /// Initial layout used when the data is populated by the CPU
581
582    //@vulkan1_1
583    VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL = 1000117000,
584    VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL = 1000117001,
585
586    //@extension("VK_KHR_swapchain") // 2
587    VK_IMAGE_LAYOUT_PRESENT_SRC_KHR                         = 1000001002,
588
589    //@extension("VK_KHR_shared_presentable_image") // 112
590    VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR                      = 1000111000,
591
592    //@extension("VK_KHR_maintenance2") // 118
593    VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL_KHR  = 1000117000,
594    VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL_KHR  = 1000117001,
595}
596
597enum VkAttachmentLoadOp {
598    VK_ATTACHMENT_LOAD_OP_LOAD                              = 0x00000000,
599    VK_ATTACHMENT_LOAD_OP_CLEAR                             = 0x00000001,
600    VK_ATTACHMENT_LOAD_OP_DONT_CARE                         = 0x00000002,
601}
602
603enum VkAttachmentStoreOp {
604    VK_ATTACHMENT_STORE_OP_STORE                            = 0x00000000,
605    VK_ATTACHMENT_STORE_OP_DONT_CARE                        = 0x00000001,
606}
607
608enum VkImageType {
609    VK_IMAGE_TYPE_1D                                        = 0x00000000,
610    VK_IMAGE_TYPE_2D                                        = 0x00000001,
611    VK_IMAGE_TYPE_3D                                        = 0x00000002,
612}
613
614enum VkImageTiling {
615    VK_IMAGE_TILING_OPTIMAL                                 = 0x00000000,
616    VK_IMAGE_TILING_LINEAR                                  = 0x00000001,
617}
618
619enum VkImageViewType {
620    VK_IMAGE_VIEW_TYPE_1D                                   = 0x00000000,
621    VK_IMAGE_VIEW_TYPE_2D                                   = 0x00000001,
622    VK_IMAGE_VIEW_TYPE_3D                                   = 0x00000002,
623    VK_IMAGE_VIEW_TYPE_CUBE                                 = 0x00000003,
624    VK_IMAGE_VIEW_TYPE_1D_ARRAY                             = 0x00000004,
625    VK_IMAGE_VIEW_TYPE_2D_ARRAY                             = 0x00000005,
626    VK_IMAGE_VIEW_TYPE_CUBE_ARRAY                           = 0x00000006,
627}
628
629enum VkCommandBufferLevel {
630    VK_COMMAND_BUFFER_LEVEL_PRIMARY                         = 0x00000000,
631    VK_COMMAND_BUFFER_LEVEL_SECONDARY                       = 0x00000001,
632}
633
634enum VkComponentSwizzle {
635    VK_COMPONENT_SWIZZLE_IDENTITY                           = 0x00000000,
636    VK_COMPONENT_SWIZZLE_ZERO                               = 0x00000001,
637    VK_COMPONENT_SWIZZLE_ONE                                = 0x00000002,
638    VK_COMPONENT_SWIZZLE_R                                  = 0x00000003,
639    VK_COMPONENT_SWIZZLE_G                                  = 0x00000004,
640    VK_COMPONENT_SWIZZLE_B                                  = 0x00000005,
641    VK_COMPONENT_SWIZZLE_A                                  = 0x00000006,
642}
643
644enum VkDescriptorType {
645    VK_DESCRIPTOR_TYPE_SAMPLER                              = 0x00000000,
646    VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER               = 0x00000001,
647    VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE                        = 0x00000002,
648    VK_DESCRIPTOR_TYPE_STORAGE_IMAGE                        = 0x00000003,
649    VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER                 = 0x00000004,
650    VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER                 = 0x00000005,
651    VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER                       = 0x00000006,
652    VK_DESCRIPTOR_TYPE_STORAGE_BUFFER                       = 0x00000007,
653    VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC               = 0x00000008,
654    VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC               = 0x00000009,
655    VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT                     = 0x0000000a,
656}
657
658enum VkQueryType {
659    VK_QUERY_TYPE_OCCLUSION                                 = 0x00000000,
660    VK_QUERY_TYPE_PIPELINE_STATISTICS                       = 0x00000001, /// Optional
661    VK_QUERY_TYPE_TIMESTAMP                                 = 0x00000002,
662}
663
664enum VkBorderColor {
665    VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK                 = 0x00000000,
666    VK_BORDER_COLOR_INT_TRANSPARENT_BLACK                   = 0x00000001,
667    VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK                      = 0x00000002,
668    VK_BORDER_COLOR_INT_OPAQUE_BLACK                        = 0x00000003,
669    VK_BORDER_COLOR_FLOAT_OPAQUE_WHITE                      = 0x00000004,
670    VK_BORDER_COLOR_INT_OPAQUE_WHITE                        = 0x00000005,
671}
672
673enum VkPipelineBindPoint {
674    VK_PIPELINE_BIND_POINT_GRAPHICS                         = 0x00000000,
675    VK_PIPELINE_BIND_POINT_COMPUTE                          = 0x00000001,
676}
677
678enum VkPrimitiveTopology {
679    VK_PRIMITIVE_TOPOLOGY_POINT_LIST                        = 0x00000000,
680    VK_PRIMITIVE_TOPOLOGY_LINE_LIST                         = 0x00000001,
681    VK_PRIMITIVE_TOPOLOGY_LINE_STRIP                        = 0x00000002,
682    VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST                     = 0x00000003,
683    VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP                    = 0x00000004,
684    VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN                      = 0x00000005,
685    VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY          = 0x00000006,
686    VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY         = 0x00000007,
687    VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY      = 0x00000008,
688    VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY     = 0x00000009,
689    VK_PRIMITIVE_TOPOLOGY_PATCH_LIST                        = 0x0000000a,
690}
691
692enum VkSharingMode {
693    VK_SHARING_MODE_EXCLUSIVE                               = 0x00000000,
694    VK_SHARING_MODE_CONCURRENT                              = 0x00000001,
695}
696
697enum VkIndexType {
698    VK_INDEX_TYPE_UINT16                                    = 0x00000000,
699    VK_INDEX_TYPE_UINT32                                    = 0x00000001,
700}
701
702enum VkFilter {
703    VK_FILTER_NEAREST                                       = 0x00000000,
704    VK_FILTER_LINEAR                                        = 0x00000001,
705
706    //@extension("VK_IMG_filter_cubic") // 16
707    VK_FILTER_CUBIC_IMG                                     = 1000015000,
708}
709
710enum VkSamplerMipmapMode {
711    VK_SAMPLER_MIPMAP_MODE_NEAREST                          = 0x00000001,   /// Choose nearest mip level
712    VK_SAMPLER_MIPMAP_MODE_LINEAR                           = 0x00000002,   /// Linear filter between mip levels
713}
714
715enum VkSamplerAddressMode {
716    VK_SAMPLER_ADDRESS_MODE_REPEAT                          = 0x00000000,
717    VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT                 = 0x00000001,
718    VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE                   = 0x00000002,
719    VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER                 = 0x00000003,
720    VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE            = 0x00000004,
721}
722
723enum VkCompareOp {
724    VK_COMPARE_OP_NEVER                                     = 0x00000000,
725    VK_COMPARE_OP_LESS                                      = 0x00000001,
726    VK_COMPARE_OP_EQUAL                                     = 0x00000002,
727    VK_COMPARE_OP_LESS_OR_EQUAL                             = 0x00000003,
728    VK_COMPARE_OP_GREATER                                   = 0x00000004,
729    VK_COMPARE_OP_NOT_EQUAL                                 = 0x00000005,
730    VK_COMPARE_OP_GREATER_OR_EQUAL                          = 0x00000006,
731    VK_COMPARE_OP_ALWAYS                                    = 0x00000007,
732}
733
734enum VkPolygonMode {
735    VK_POLYGON_MODE_FILL                                    = 0x00000000,
736    VK_POLYGON_MODE_LINE                                    = 0x00000001,
737    VK_POLYGON_MODE_POINT                                   = 0x00000002,
738
739    //@extension("VK_NV_fill_rectangle") // 154
740    VK_POLYGON_MODE_FILL_RECTANGLE_NV                       = 1000153000,
741}
742
743enum VkFrontFace {
744    VK_FRONT_FACE_COUNTER_CLOCKWISE                         = 0x00000000,
745    VK_FRONT_FACE_CLOCKWISE                                 = 0x00000001,
746}
747
748enum VkBlendFactor {
749    VK_BLEND_FACTOR_ZERO                                    = 0x00000000,
750    VK_BLEND_FACTOR_ONE                                     = 0x00000001,
751    VK_BLEND_FACTOR_SRC_COLOR                               = 0x00000002,
752    VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR                     = 0x00000003,
753    VK_BLEND_FACTOR_DST_COLOR                               = 0x00000004,
754    VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR                     = 0x00000005,
755    VK_BLEND_FACTOR_SRC_ALPHA                               = 0x00000006,
756    VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA                     = 0x00000007,
757    VK_BLEND_FACTOR_DST_ALPHA                               = 0x00000008,
758    VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA                     = 0x00000009,
759    VK_BLEND_FACTOR_CONSTANT_COLOR                          = 0x0000000a,
760    VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR                = 0x0000000b,
761    VK_BLEND_FACTOR_CONSTANT_ALPHA                          = 0x0000000c,
762    VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA                = 0x0000000d,
763    VK_BLEND_FACTOR_SRC_ALPHA_SATURATE                      = 0x0000000e,
764    VK_BLEND_FACTOR_SRC1_COLOR                              = 0x0000000f,
765    VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR                    = 0x00000010,
766    VK_BLEND_FACTOR_SRC1_ALPHA                              = 0x00000011,
767    VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA                    = 0x00000012,
768}
769
770enum VkBlendOp {
771    VK_BLEND_OP_ADD                                         = 0x00000000,
772    VK_BLEND_OP_SUBTRACT                                    = 0x00000001,
773    VK_BLEND_OP_REVERSE_SUBTRACT                            = 0x00000002,
774    VK_BLEND_OP_MIN                                         = 0x00000003,
775    VK_BLEND_OP_MAX                                         = 0x00000004,
776
777    //@extension("VK_EXT_blend_operation_advanced") // 149
778    VK_BLEND_OP_ZERO_EXT                                    = 1000148000,
779    VK_BLEND_OP_SRC_EXT                                     = 1000148001,
780    VK_BLEND_OP_DST_EXT                                     = 1000148002,
781    VK_BLEND_OP_SRC_OVER_EXT                                = 1000148003,
782    VK_BLEND_OP_DST_OVER_EXT                                = 1000148004,
783    VK_BLEND_OP_SRC_IN_EXT                                  = 1000148005,
784    VK_BLEND_OP_DST_IN_EXT                                  = 1000148006,
785    VK_BLEND_OP_SRC_OUT_EXT                                 = 1000148007,
786    VK_BLEND_OP_DST_OUT_EXT                                 = 1000148008,
787    VK_BLEND_OP_SRC_ATOP_EXT                                = 1000148009,
788    VK_BLEND_OP_DST_ATOP_EXT                                = 1000148010,
789    VK_BLEND_OP_XOR_EXT                                     = 1000148011,
790    VK_BLEND_OP_MULTIPLY_EXT                                = 1000148012,
791    VK_BLEND_OP_SCREEN_EXT                                  = 1000148013,
792    VK_BLEND_OP_OVERLAY_EXT                                 = 1000148014,
793    VK_BLEND_OP_DARKEN_EXT                                  = 1000148015,
794    VK_BLEND_OP_LIGHTEN_EXT                                 = 1000148016,
795    VK_BLEND_OP_COLORDODGE_EXT                              = 1000148017,
796    VK_BLEND_OP_COLORBURN_EXT                               = 1000148018,
797    VK_BLEND_OP_HARDLIGHT_EXT                               = 1000148019,
798    VK_BLEND_OP_SOFTLIGHT_EXT                               = 1000148020,
799    VK_BLEND_OP_DIFFERENCE_EXT                              = 1000148021,
800    VK_BLEND_OP_EXCLUSION_EXT                               = 1000148022,
801    VK_BLEND_OP_INVERT_EXT                                  = 1000148023,
802    VK_BLEND_OP_INVERT_RGB_EXT                              = 1000148024,
803    VK_BLEND_OP_LINEARDODGE_EXT                             = 1000148025,
804    VK_BLEND_OP_LINEARBURN_EXT                              = 1000148026,
805    VK_BLEND_OP_VIVIDLIGHT_EXT                              = 1000148027,
806    VK_BLEND_OP_LINEARLIGHT_EXT                             = 1000148028,
807    VK_BLEND_OP_PINLIGHT_EXT                                = 1000148029,
808    VK_BLEND_OP_HARDMIX_EXT                                 = 1000148030,
809    VK_BLEND_OP_HSL_HUE_EXT                                 = 1000148031,
810    VK_BLEND_OP_HSL_SATURATION_EXT                          = 1000148032,
811    VK_BLEND_OP_HSL_COLOR_EXT                               = 1000148033,
812    VK_BLEND_OP_HSL_LUMINOSITY_EXT                          = 1000148034,
813    VK_BLEND_OP_PLUS_EXT                                    = 1000148035,
814    VK_BLEND_OP_PLUS_CLAMPED_EXT                            = 1000148036,
815    VK_BLEND_OP_PLUS_CLAMPED_ALPHA_EXT                      = 1000148037,
816    VK_BLEND_OP_PLUS_DARKER_EXT                             = 1000148038,
817    VK_BLEND_OP_MINUS_EXT                                   = 1000148039,
818    VK_BLEND_OP_MINUS_CLAMPED_EXT                           = 1000148040,
819    VK_BLEND_OP_CONTRAST_EXT                                = 1000148041,
820    VK_BLEND_OP_INVERT_OVG_EXT                              = 1000148042,
821    VK_BLEND_OP_RED_EXT                                     = 1000148043,
822    VK_BLEND_OP_GREEN_EXT                                   = 1000148044,
823    VK_BLEND_OP_BLUE_EXT                                    = 1000148045,
824}
825
826enum VkStencilOp {
827    VK_STENCIL_OP_KEEP                                      = 0x00000000,
828    VK_STENCIL_OP_ZERO                                      = 0x00000001,
829    VK_STENCIL_OP_REPLACE                                   = 0x00000002,
830    VK_STENCIL_OP_INCREMENT_AND_CLAMP                       = 0x00000003,
831    VK_STENCIL_OP_DECREMENT_AND_CLAMP                       = 0x00000004,
832    VK_STENCIL_OP_INVERT                                    = 0x00000005,
833    VK_STENCIL_OP_INCREMENT_AND_WRAP                        = 0x00000006,
834    VK_STENCIL_OP_DECREMENT_AND_WRAP                        = 0x00000007,
835}
836
837enum VkLogicOp {
838    VK_LOGIC_OP_CLEAR                                       = 0x00000000,
839    VK_LOGIC_OP_AND                                         = 0x00000001,
840    VK_LOGIC_OP_AND_REVERSE                                 = 0x00000002,
841    VK_LOGIC_OP_COPY                                        = 0x00000003,
842    VK_LOGIC_OP_AND_INVERTED                                = 0x00000004,
843    VK_LOGIC_OP_NO_OP                                       = 0x00000005,
844    VK_LOGIC_OP_XOR                                         = 0x00000006,
845    VK_LOGIC_OP_OR                                          = 0x00000007,
846    VK_LOGIC_OP_NOR                                         = 0x00000008,
847    VK_LOGIC_OP_EQUIVALENT                                  = 0x00000009,
848    VK_LOGIC_OP_INVERT                                      = 0x0000000a,
849    VK_LOGIC_OP_OR_REVERSE                                  = 0x0000000b,
850    VK_LOGIC_OP_COPY_INVERTED                               = 0x0000000c,
851    VK_LOGIC_OP_OR_INVERTED                                 = 0x0000000d,
852    VK_LOGIC_OP_NAND                                        = 0x0000000e,
853    VK_LOGIC_OP_SET                                         = 0x0000000f,
854}
855
856enum VkSystemAllocationScope {
857    VK_SYSTEM_ALLOCATION_SCOPE_COMMAND                      = 0x00000000,
858    VK_SYSTEM_ALLOCATION_SCOPE_OBJECT                       = 0x00000001,
859    VK_SYSTEM_ALLOCATION_SCOPE_CACHE                        = 0x00000002,
860    VK_SYSTEM_ALLOCATION_SCOPE_DEVICE                       = 0x00000003,
861    VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE                     = 0x00000004,
862}
863
864enum VkInternalAllocationType {
865    VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE                  = 0x00000000,
866}
867
868enum VkPhysicalDeviceType {
869    VK_PHYSICAL_DEVICE_TYPE_OTHER                           = 0x00000000,
870    VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU                  = 0x00000001,
871    VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU                    = 0x00000002,
872    VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU                     = 0x00000003,
873    VK_PHYSICAL_DEVICE_TYPE_CPU                             = 0x00000004,
874}
875
876enum VkVertexInputRate {
877    VK_VERTEX_INPUT_RATE_VERTEX                             = 0x00000000,
878    VK_VERTEX_INPUT_RATE_INSTANCE                           = 0x00000001,
879}
880
881/// Vulkan format definitions
882enum VkFormat {
883    VK_FORMAT_UNDEFINED                                     = 0,
884    VK_FORMAT_R4G4_UNORM_PACK8                              = 1,
885    VK_FORMAT_R4G4B4A4_UNORM_PACK16                         = 2,
886    VK_FORMAT_B4G4R4A4_UNORM_PACK16                         = 3,
887    VK_FORMAT_R5G6B5_UNORM_PACK16                           = 4,
888    VK_FORMAT_B5G6R5_UNORM_PACK16                           = 5,
889    VK_FORMAT_R5G5B5A1_UNORM_PACK16                         = 6,
890    VK_FORMAT_B5G5R5A1_UNORM_PACK16                         = 7,
891    VK_FORMAT_A1R5G5B5_UNORM_PACK16                         = 8,
892    VK_FORMAT_R8_UNORM                                      = 9,
893    VK_FORMAT_R8_SNORM                                      = 10,
894    VK_FORMAT_R8_USCALED                                    = 11,
895    VK_FORMAT_R8_SSCALED                                    = 12,
896    VK_FORMAT_R8_UINT                                       = 13,
897    VK_FORMAT_R8_SINT                                       = 14,
898    VK_FORMAT_R8_SRGB                                       = 15,
899    VK_FORMAT_R8G8_UNORM                                    = 16,
900    VK_FORMAT_R8G8_SNORM                                    = 17,
901    VK_FORMAT_R8G8_USCALED                                  = 18,
902    VK_FORMAT_R8G8_SSCALED                                  = 19,
903    VK_FORMAT_R8G8_UINT                                     = 20,
904    VK_FORMAT_R8G8_SINT                                     = 21,
905    VK_FORMAT_R8G8_SRGB                                     = 22,
906    VK_FORMAT_R8G8B8_UNORM                                  = 23,
907    VK_FORMAT_R8G8B8_SNORM                                  = 24,
908    VK_FORMAT_R8G8B8_USCALED                                = 25,
909    VK_FORMAT_R8G8B8_SSCALED                                = 26,
910    VK_FORMAT_R8G8B8_UINT                                   = 27,
911    VK_FORMAT_R8G8B8_SINT                                   = 28,
912    VK_FORMAT_R8G8B8_SRGB                                   = 29,
913    VK_FORMAT_B8G8R8_UNORM                                  = 30,
914    VK_FORMAT_B8G8R8_SNORM                                  = 31,
915    VK_FORMAT_B8G8R8_USCALED                                = 32,
916    VK_FORMAT_B8G8R8_SSCALED                                = 33,
917    VK_FORMAT_B8G8R8_UINT                                   = 34,
918    VK_FORMAT_B8G8R8_SINT                                   = 35,
919    VK_FORMAT_B8G8R8_SRGB                                   = 36,
920    VK_FORMAT_R8G8B8A8_UNORM                                = 37,
921    VK_FORMAT_R8G8B8A8_SNORM                                = 38,
922    VK_FORMAT_R8G8B8A8_USCALED                              = 39,
923    VK_FORMAT_R8G8B8A8_SSCALED                              = 40,
924    VK_FORMAT_R8G8B8A8_UINT                                 = 41,
925    VK_FORMAT_R8G8B8A8_SINT                                 = 42,
926    VK_FORMAT_R8G8B8A8_SRGB                                 = 43,
927    VK_FORMAT_B8G8R8A8_UNORM                                = 44,
928    VK_FORMAT_B8G8R8A8_SNORM                                = 45,
929    VK_FORMAT_B8G8R8A8_USCALED                              = 46,
930    VK_FORMAT_B8G8R8A8_SSCALED                              = 47,
931    VK_FORMAT_B8G8R8A8_UINT                                 = 48,
932    VK_FORMAT_B8G8R8A8_SINT                                 = 49,
933    VK_FORMAT_B8G8R8A8_SRGB                                 = 50,
934    VK_FORMAT_A8B8G8R8_UNORM_PACK32                         = 51,
935    VK_FORMAT_A8B8G8R8_SNORM_PACK32                         = 52,
936    VK_FORMAT_A8B8G8R8_USCALED_PACK32                       = 53,
937    VK_FORMAT_A8B8G8R8_SSCALED_PACK32                       = 54,
938    VK_FORMAT_A8B8G8R8_UINT_PACK32                          = 55,
939    VK_FORMAT_A8B8G8R8_SINT_PACK32                          = 56,
940    VK_FORMAT_A8B8G8R8_SRGB_PACK32                          = 57,
941    VK_FORMAT_A2R10G10B10_UNORM_PACK32                      = 58,
942    VK_FORMAT_A2R10G10B10_SNORM_PACK32                      = 59,
943    VK_FORMAT_A2R10G10B10_USCALED_PACK32                    = 60,
944    VK_FORMAT_A2R10G10B10_SSCALED_PACK32                    = 61,
945    VK_FORMAT_A2R10G10B10_UINT_PACK32                       = 62,
946    VK_FORMAT_A2R10G10B10_SINT_PACK32                       = 63,
947    VK_FORMAT_A2B10G10R10_UNORM_PACK32                      = 64,
948    VK_FORMAT_A2B10G10R10_SNORM_PACK32                      = 65,
949    VK_FORMAT_A2B10G10R10_USCALED_PACK32                    = 66,
950    VK_FORMAT_A2B10G10R10_SSCALED_PACK32                    = 67,
951    VK_FORMAT_A2B10G10R10_UINT_PACK32                       = 68,
952    VK_FORMAT_A2B10G10R10_SINT_PACK32                       = 69,
953    VK_FORMAT_R16_UNORM                                     = 70,
954    VK_FORMAT_R16_SNORM                                     = 71,
955    VK_FORMAT_R16_USCALED                                   = 72,
956    VK_FORMAT_R16_SSCALED                                   = 73,
957    VK_FORMAT_R16_UINT                                      = 74,
958    VK_FORMAT_R16_SINT                                      = 75,
959    VK_FORMAT_R16_SFLOAT                                    = 76,
960    VK_FORMAT_R16G16_UNORM                                  = 77,
961    VK_FORMAT_R16G16_SNORM                                  = 78,
962    VK_FORMAT_R16G16_USCALED                                = 79,
963    VK_FORMAT_R16G16_SSCALED                                = 80,
964    VK_FORMAT_R16G16_UINT                                   = 81,
965    VK_FORMAT_R16G16_SINT                                   = 82,
966    VK_FORMAT_R16G16_SFLOAT                                 = 83,
967    VK_FORMAT_R16G16B16_UNORM                               = 84,
968    VK_FORMAT_R16G16B16_SNORM                               = 85,
969    VK_FORMAT_R16G16B16_USCALED                             = 86,
970    VK_FORMAT_R16G16B16_SSCALED                             = 87,
971    VK_FORMAT_R16G16B16_UINT                                = 88,
972    VK_FORMAT_R16G16B16_SINT                                = 89,
973    VK_FORMAT_R16G16B16_SFLOAT                              = 90,
974    VK_FORMAT_R16G16B16A16_UNORM                            = 91,
975    VK_FORMAT_R16G16B16A16_SNORM                            = 92,
976    VK_FORMAT_R16G16B16A16_USCALED                          = 93,
977    VK_FORMAT_R16G16B16A16_SSCALED                          = 94,
978    VK_FORMAT_R16G16B16A16_UINT                             = 95,
979    VK_FORMAT_R16G16B16A16_SINT                             = 96,
980    VK_FORMAT_R16G16B16A16_SFLOAT                           = 97,
981    VK_FORMAT_R32_UINT                                      = 98,
982    VK_FORMAT_R32_SINT                                      = 99,
983    VK_FORMAT_R32_SFLOAT                                    = 100,
984    VK_FORMAT_R32G32_UINT                                   = 101,
985    VK_FORMAT_R32G32_SINT                                   = 102,
986    VK_FORMAT_R32G32_SFLOAT                                 = 103,
987    VK_FORMAT_R32G32B32_UINT                                = 104,
988    VK_FORMAT_R32G32B32_SINT                                = 105,
989    VK_FORMAT_R32G32B32_SFLOAT                              = 106,
990    VK_FORMAT_R32G32B32A32_UINT                             = 107,
991    VK_FORMAT_R32G32B32A32_SINT                             = 108,
992    VK_FORMAT_R32G32B32A32_SFLOAT                           = 109,
993    VK_FORMAT_R64_UINT                                      = 110,
994    VK_FORMAT_R64_SINT                                      = 111,
995    VK_FORMAT_R64_SFLOAT                                    = 112,
996    VK_FORMAT_R64G64_UINT                                   = 113,
997    VK_FORMAT_R64G64_SINT                                   = 114,
998    VK_FORMAT_R64G64_SFLOAT                                 = 115,
999    VK_FORMAT_R64G64B64_UINT                                = 116,
1000    VK_FORMAT_R64G64B64_SINT                                = 117,
1001    VK_FORMAT_R64G64B64_SFLOAT                              = 118,
1002    VK_FORMAT_R64G64B64A64_UINT                             = 119,
1003    VK_FORMAT_R64G64B64A64_SINT                             = 120,
1004    VK_FORMAT_R64G64B64A64_SFLOAT                           = 121,
1005    VK_FORMAT_B10G11R11_UFLOAT_PACK32                       = 122,
1006    VK_FORMAT_E5B9G9R9_UFLOAT_PACK32                        = 123,
1007    VK_FORMAT_D16_UNORM                                     = 124,
1008    VK_FORMAT_X8_D24_UNORM_PACK32                           = 125,
1009    VK_FORMAT_D32_SFLOAT                                    = 126,
1010    VK_FORMAT_S8_UINT                                       = 127,
1011    VK_FORMAT_D16_UNORM_S8_UINT                             = 128,
1012    VK_FORMAT_D24_UNORM_S8_UINT                             = 129,
1013    VK_FORMAT_D32_SFLOAT_S8_UINT                            = 130,
1014    VK_FORMAT_BC1_RGB_UNORM_BLOCK                           = 131,
1015    VK_FORMAT_BC1_RGB_SRGB_BLOCK                            = 132,
1016    VK_FORMAT_BC1_RGBA_UNORM_BLOCK                          = 133,
1017    VK_FORMAT_BC1_RGBA_SRGB_BLOCK                           = 134,
1018    VK_FORMAT_BC2_UNORM_BLOCK                               = 135,
1019    VK_FORMAT_BC2_SRGB_BLOCK                                = 136,
1020    VK_FORMAT_BC3_UNORM_BLOCK                               = 137,
1021    VK_FORMAT_BC3_SRGB_BLOCK                                = 138,
1022    VK_FORMAT_BC4_UNORM_BLOCK                               = 139,
1023    VK_FORMAT_BC4_SNORM_BLOCK                               = 140,
1024    VK_FORMAT_BC5_UNORM_BLOCK                               = 141,
1025    VK_FORMAT_BC5_SNORM_BLOCK                               = 142,
1026    VK_FORMAT_BC6H_UFLOAT_BLOCK                             = 143,
1027    VK_FORMAT_BC6H_SFLOAT_BLOCK                             = 144,
1028    VK_FORMAT_BC7_UNORM_BLOCK                               = 145,
1029    VK_FORMAT_BC7_SRGB_BLOCK                                = 146,
1030    VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK                       = 147,
1031    VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK                        = 148,
1032    VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK                     = 149,
1033    VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK                      = 150,
1034    VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK                     = 151,
1035    VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK                      = 152,
1036    VK_FORMAT_EAC_R11_UNORM_BLOCK                           = 153,
1037    VK_FORMAT_EAC_R11_SNORM_BLOCK                           = 154,
1038    VK_FORMAT_EAC_R11G11_UNORM_BLOCK                        = 155,
1039    VK_FORMAT_EAC_R11G11_SNORM_BLOCK                        = 156,
1040    VK_FORMAT_ASTC_4x4_UNORM_BLOCK                          = 157,
1041    VK_FORMAT_ASTC_4x4_SRGB_BLOCK                           = 158,
1042    VK_FORMAT_ASTC_5x4_UNORM_BLOCK                          = 159,
1043    VK_FORMAT_ASTC_5x4_SRGB_BLOCK                           = 160,
1044    VK_FORMAT_ASTC_5x5_UNORM_BLOCK                          = 161,
1045    VK_FORMAT_ASTC_5x5_SRGB_BLOCK                           = 162,
1046    VK_FORMAT_ASTC_6x5_UNORM_BLOCK                          = 163,
1047    VK_FORMAT_ASTC_6x5_SRGB_BLOCK                           = 164,
1048    VK_FORMAT_ASTC_6x6_UNORM_BLOCK                          = 165,
1049    VK_FORMAT_ASTC_6x6_SRGB_BLOCK                           = 166,
1050    VK_FORMAT_ASTC_8x5_UNORM_BLOCK                          = 167,
1051    VK_FORMAT_ASTC_8x5_SRGB_BLOCK                           = 168,
1052    VK_FORMAT_ASTC_8x6_UNORM_BLOCK                          = 169,
1053    VK_FORMAT_ASTC_8x6_SRGB_BLOCK                           = 170,
1054    VK_FORMAT_ASTC_8x8_UNORM_BLOCK                          = 171,
1055    VK_FORMAT_ASTC_8x8_SRGB_BLOCK                           = 172,
1056    VK_FORMAT_ASTC_10x5_UNORM_BLOCK                         = 173,
1057    VK_FORMAT_ASTC_10x5_SRGB_BLOCK                          = 174,
1058    VK_FORMAT_ASTC_10x6_UNORM_BLOCK                         = 175,
1059    VK_FORMAT_ASTC_10x6_SRGB_BLOCK                          = 176,
1060    VK_FORMAT_ASTC_10x8_UNORM_BLOCK                         = 177,
1061    VK_FORMAT_ASTC_10x8_SRGB_BLOCK                          = 178,
1062    VK_FORMAT_ASTC_10x10_UNORM_BLOCK                        = 179,
1063    VK_FORMAT_ASTC_10x10_SRGB_BLOCK                         = 180,
1064    VK_FORMAT_ASTC_12x10_UNORM_BLOCK                        = 181,
1065    VK_FORMAT_ASTC_12x10_SRGB_BLOCK                         = 182,
1066    VK_FORMAT_ASTC_12x12_UNORM_BLOCK                        = 183,
1067    VK_FORMAT_ASTC_12x12_SRGB_BLOCK                         = 184,
1068
1069    //@vulkan1_1
1070    VK_FORMAT_G8B8G8R8_422_UNORM                            = 1000156000,
1071    VK_FORMAT_B8G8R8G8_422_UNORM                            = 1000156001,
1072    VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM                     = 1000156002,
1073    VK_FORMAT_G8_B8R8_2PLANE_420_UNORM                      = 1000156003,
1074    VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM                     = 1000156004,
1075    VK_FORMAT_G8_B8R8_2PLANE_422_UNORM                      = 1000156005,
1076    VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM                     = 1000156006,
1077    VK_FORMAT_R10X6_UNORM_PACK16                            = 1000156007,
1078    VK_FORMAT_R10X6G10X6_UNORM_2PACK16                      = 1000156008,
1079    VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16            = 1000156009,
1080    VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16        = 1000156010,
1081    VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16        = 1000156011,
1082    VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16    = 1000156012,
1083    VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16     = 1000156013,
1084    VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16    = 1000156014,
1085    VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16     = 1000156015,
1086    VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16    = 1000156016,
1087    VK_FORMAT_R12X4_UNORM_PACK16                            = 1000156017,
1088    VK_FORMAT_R12X4G12X4_UNORM_2PACK16                      = 1000156018,
1089    VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16            = 1000156019,
1090    VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16        = 1000156020,
1091    VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16        = 1000156021,
1092    VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16    = 1000156022,
1093    VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16     = 1000156023,
1094    VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16    = 1000156024,
1095    VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16     = 1000156025,
1096    VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16    = 1000156026,
1097    VK_FORMAT_G16B16G16R16_422_UNORM                        = 1000156027,
1098    VK_FORMAT_B16G16R16G16_422_UNORM                        = 1000156028,
1099    VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM                  = 1000156029,
1100    VK_FORMAT_G16_B16R16_2PLANE_420_UNORM                   = 1000156030,
1101    VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM                  = 1000156031,
1102    VK_FORMAT_G16_B16R16_2PLANE_422_UNORM                   = 1000156032,
1103    VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM                  = 1000156033,
1104
1105    //@extension("VK_IMG_format_pvrtc") // 28
1106    VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG                   = 1000054000,
1107    VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG                   = 1000054001,
1108    VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG                   = 1000054002,
1109    VK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG                   = 1000054003,
1110    VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG                    = 1000054004,
1111    VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG                    = 1000054005,
1112    VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG                    = 1000054006,
1113    VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG                    = 1000054007,
1114
1115    //@extension("VK_KHR_sampler_ycbcr_conversion") // 157
1116    VK_FORMAT_G8B8G8R8_422_UNORM_KHR                            = 1000156000,
1117    VK_FORMAT_B8G8R8G8_422_UNORM_KHR                            = 1000156001,
1118    VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM_KHR                     = 1000156002,
1119    VK_FORMAT_G8_B8R8_2PLANE_420_UNORM_KHR                      = 1000156003,
1120    VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM_KHR                     = 1000156004,
1121    VK_FORMAT_G8_B8R8_2PLANE_422_UNORM_KHR                      = 1000156005,
1122    VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM_KHR                     = 1000156006,
1123    VK_FORMAT_R10X6_UNORM_PACK16_KHR                            = 1000156007,
1124    VK_FORMAT_R10X6G10X6_UNORM_2PACK16_KHR                      = 1000156008,
1125    VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16_KHR            = 1000156009,
1126    VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16_KHR        = 1000156010,
1127    VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16_KHR        = 1000156011,
1128    VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16_KHR    = 1000156012,
1129    VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16_KHR     = 1000156013,
1130    VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16_KHR    = 1000156014,
1131    VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16_KHR     = 1000156015,
1132    VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16_KHR    = 1000156016,
1133    VK_FORMAT_R12X4_UNORM_PACK16_KHR                            = 1000156017,
1134    VK_FORMAT_R12X4G12X4_UNORM_2PACK16_KHR                      = 1000156018,
1135    VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16_KHR            = 1000156019,
1136    VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16_KHR        = 1000156020,
1137    VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16_KHR        = 1000156021,
1138    VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16_KHR    = 1000156022,
1139    VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16_KHR     = 1000156023,
1140    VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16_KHR    = 1000156024,
1141    VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16_KHR     = 1000156025,
1142    VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16_KHR    = 1000156026,
1143    VK_FORMAT_G16B16G16R16_422_UNORM_KHR                        = 1000156027,
1144    VK_FORMAT_B16G16R16G16_422_UNORM_KHR                        = 1000156028,
1145    VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM_KHR                  = 1000156029,
1146    VK_FORMAT_G16_B16R16_2PLANE_420_UNORM_KHR                   = 1000156030,
1147    VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM_KHR                  = 1000156031,
1148    VK_FORMAT_G16_B16R16_2PLANE_422_UNORM_KHR                   = 1000156032,
1149    VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM_KHR                  = 1000156033,
1150}
1151
1152/// Structure type enumerant
1153enum VkStructureType {
1154    VK_STRUCTURE_TYPE_APPLICATION_INFO                          = 0,
1155    VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO                      = 1,
1156    VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO                  = 2,
1157    VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO                        = 3,
1158    VK_STRUCTURE_TYPE_SUBMIT_INFO                               = 4,
1159    VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO                      = 5,
1160    VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE                       = 6,
1161    VK_STRUCTURE_TYPE_BIND_SPARSE_INFO                          = 7,
1162    VK_STRUCTURE_TYPE_FENCE_CREATE_INFO                         = 8,
1163    VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO                     = 9,
1164    VK_STRUCTURE_TYPE_EVENT_CREATE_INFO                         = 10,
1165    VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO                    = 11,
1166    VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO                        = 12,
1167    VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO                   = 13,
1168    VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO                         = 14,
1169    VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO                    = 15,
1170    VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO                 = 16,
1171    VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO                = 17,
1172    VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO         = 18,
1173    VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO   = 19,
1174    VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO = 20,
1175    VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO   = 21,
1176    VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO       = 22,
1177    VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO  = 23,
1178    VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO    = 24,
1179    VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO  = 25,
1180    VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO    = 26,
1181    VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO        = 27,
1182    VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO             = 28,
1183    VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO              = 29,
1184    VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO               = 30,
1185    VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO                       = 31,
1186    VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO         = 32,
1187    VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO               = 33,
1188    VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO              = 34,
1189    VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET                      = 35,
1190    VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET                       = 36,
1191    VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO                   = 37,
1192    VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO                   = 38,
1193    VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO                  = 39,
1194    VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO              = 40,
1195    VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO           = 41,
1196    VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO                 = 42,
1197    VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO                    = 43,
1198    VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER                     = 44,
1199    VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER                      = 45,
1200    VK_STRUCTURE_TYPE_MEMORY_BARRIER                            = 46,
1201    VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO               = 47,
1202    VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO                 = 48,
1203
1204    //@vulkan1_1
1205    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES       = 1000094000,
1206    VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO                   = 1000157000,
1207    VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO                    = 1000157001,
1208    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES    = 1000083000,
1209    VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS             = 1000127000,
1210    VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO            = 1000127001,
1211    VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO                = 1000060000,
1212    VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO       = 1000060003,
1213    VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO    = 1000060004,
1214    VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO                  = 1000060005,
1215    VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO             = 1000060006,
1216    VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO      = 1000060013,
1217    VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO       = 1000060014,
1218    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES          = 1000070000,
1219    VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO           = 1000070001,
1220    VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2         = 1000146000,
1221    VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2          = 1000146001,
1222    VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2   = 1000146002,
1223    VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2                     = 1000146003,
1224    VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2        = 1000146004,
1225    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2                = 1000059000,
1226    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2              = 1000059001,
1227    VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2                       = 1000059002,
1228    VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2                 = 1000059003,
1229    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2       = 1000059004,
1230    VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2                 = 1000059005,
1231    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2       = 1000059006,
1232    VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2          = 1000059007,
1233    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2            = 1000059008,
1234    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES             = 1000117000,
1235    VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO       = 1000117001,
1236    VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO                          = 1000117002,
1237    VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO = 1000117003,
1238    VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO                 = 1000053000,
1239    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES                = 1000053001,
1240    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES              = 1000053002,
1241    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES         = 1000120000,
1242    VK_STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO                             = 1000145000,
1243    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES         = 1000145001,
1244    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_PROPERTIES       = 1000145002,
1245    VK_STRUCTURE_TYPE_DEVICE_QUEUE_INFO_2                               = 1000145003,
1246    VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO              = 1000156000,
1247    VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO                     = 1000156001,
1248    VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO                      = 1000156002,
1249    VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO              = 1000156003,
1250    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES = 1000156004,
1251    VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES  = 1000156005,
1252    VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO            = 1000085000,
1253    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO        = 1000071000,
1254    VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES                  = 1000071001,
1255    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO              = 1000071002,
1256    VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES                        = 1000071003,
1257    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES                     = 1000071004,
1258    VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO                = 1000072000,
1259    VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO                 = 1000072001,
1260    VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO                       = 1000072002,
1261    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO               = 1000112000,
1262    VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES                         = 1000112001,
1263    VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO                          = 1000113000,
1264    VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO                      = 1000077000,
1265    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO           = 1000076000,
1266    VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES                     = 1000076001,
1267    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES          = 1000168000,
1268    VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT                     = 1000168001,
1269    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETER_FEATURES    = 1000063000,
1270    VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHR             = 1000060007,
1271
1272    //@extension("VK_KHR_swapchain") // 2
1273    VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR                 = 1000001000,
1274    VK_STRUCTURE_TYPE_PRESENT_INFO_KHR                          = 1000001001,
1275    // added as interaction from VK_KHR_device_group / VK 1.1
1276    VK_STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR           = 1000060008,
1277    VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR      = 1000060009,
1278    VK_STRUCTURE_TYPE_ACQUIRE_NEXT_IMAGE_INFO_KHR               = 1000060010,
1279    VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHR             = 1000060011,
1280    VK_STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR    = 1000060012,
1281
1282    //@extension("VK_KHR_display") // 3
1283    VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR              = 1000002000,
1284    VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR           = 1000002001,
1285
1286    //@extension("VK_KHR_display_swapchain") // 4
1287    VK_STRUCTURE_TYPE_DISPLAY_DISPLAY_PRESENT_INFO_KHR          = 1000003000,
1288
1289    //@extension("VK_KHR_xlib_surface") // 5
1290    VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR              = 1000004000,
1291
1292    //@extension("VK_KHR_xcb_surface") // 6
1293    VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR               = 1000005000,
1294
1295    //@extension("VK_KHR_wayland_surface") // 7
1296    VK_STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR           = 1000006000,
1297
1298    //@extension("VK_KHR_mir_surface") // 8
1299    VK_STRUCTURE_TYPE_MIR_SURFACE_CREATE_INFO_KHR               = 1000007000,
1300
1301    //@extension("VK_KHR_android_surface") // 9
1302    VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR           = 1000008000,
1303
1304    //@extension("VK_KHR_win32_surface") // 10
1305    VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR             = 1000009000,
1306
1307    //@extension("VK_ANDROID_native_buffer") // 11
1308    VK_STRUCTURE_TYPE_NATIVE_BUFFER_ANDROID                     = 1000010000,
1309    VK_STRUCTURE_TYPE_SWAPCHAIN_IMAGE_CREATE_INFO_ANDROID       = 1000010001,
1310    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENTATION_PROPERTIES_ANDROID = 1000010002,
1311
1312    //@extension("VK_EXT_debug_report") // 12
1313    VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT     = 1000011000,
1314
1315    //@extension("VK_AMD_rasterization_order") // 19
1316    VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_RASTERIZATION_ORDER_AMD = 1000018000,
1317
1318    //@extension("VK_EXT_debug_marker") // 23
1319    VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT         = 1000022000,
1320    VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_TAG_INFO_EXT          = 1000022001,
1321    VK_STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT              = 1000022002,
1322
1323    //@extension("VK_NV_dedicated_allocation") // 27
1324    VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV = 1000026000,
1325    VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV = 1000026001,
1326    VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV = 1000026002,
1327
1328    //@extension("VK_AMD_texture_gather_bias_lod") // 42
1329    VK_STRUCTURE_TYPE_TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD  = 1000041000,
1330
1331    //@extension("VK_KHR_multiview") // 54
1332    VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO_KHR     = 1000053000,
1333    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES_KHR    = 1000053001,
1334    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES_KHR  = 1000053002,
1335
1336    //@extension("VK_NV_external_memory") // 57
1337    VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV      = 1000056000,
1338    VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_NV            = 1000056001,
1339
1340    //@extension("VK_NV_external_memory_win32") // 58
1341    VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_NV        = 1000057000,
1342    VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_NV        = 1000057001,
1343
1344    //@extension("VK_NV_win32_keyed_mutex") // 59
1345    VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV = 1000058000,
1346
1347    //@extension("VK_KHR_get_physical_device_properties2") // 60
1348    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR            = 1000059000,
1349    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHR          = 1000059001,
1350    VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR                   = 1000059002,
1351    VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2_KHR             = 1000059003,
1352    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2_KHR   = 1000059004,
1353    VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2_KHR             = 1000059005,
1354    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2_KHR   = 1000059006,
1355    VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2_KHR      = 1000059007,
1356    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2_KHR = 1000059008,
1357
1358    //@extension("VK_KHR_device_group") // 61
1359    VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO_KHR            = 1000060000,
1360    VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO_KHR   = 1000060003,
1361    VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO_KHR = 1000060004,
1362    VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO_KHR              = 1000060005,
1363    VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO_KHR         = 1000060006,
1364    VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHR     = 1000060007,
1365    // tokens 08-12 are listed with VK_KHR_swapchain
1366    VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO_KHR  = 1000060013,
1367    VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO_KHR   = 1000060014,
1368
1369    //@extension("VK_EXT_validation_flags") // 62
1370    VK_STRUCTURE_TYPE_VALIDATION_FLAGS_EXT                      = 1000061000,
1371
1372    //@extension("VK_NN_vi_surface") // 63
1373    VK_STRUCTURE_TYPE_VI_SURFACE_CREATE_INFO_NN                 = 1000062000,
1374
1375    //@extension("VK_KHR_device_group_creation") // 71
1376    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES_KHR      = 1000070000,
1377    VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO_KHR       = 1000070001,
1378
1379    //@extension("VK_KHR_external_memory_capabilities") // 72
1380    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO_KHR    = 1000071000,
1381    VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES_KHR      = 1000071001,
1382    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO_KHR  = 1000071002,
1383    VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES_KHR            = 1000071003,
1384    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES_KHR         = 1000071004,
1385
1386    //@extension("VK_KHR_external_memory") // 73
1387    VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO_KHR    = 1000072000,
1388    VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_KHR     = 1000072001,
1389    VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_KHR           = 1000072002,
1390
1391    //@extension("VK_KHR_external_memory_win32") // 74
1392    VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_KHR       = 1000073000,
1393    VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_KHR       = 1000073001,
1394    VK_STRUCTURE_TYPE_MEMORY_WIN32_HANDLE_PROPERTIES_KHR        = 1000073002,
1395
1396    //@extension("VK_KHR_external_memory_fd") // 75
1397    VK_STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR                 = 1000074000,
1398    VK_STRUCTURE_TYPE_MEMORY_FD_PROPERTIES_KHR                  = 1000074001,
1399
1400    //@extension("VK_KHR_win32_keyed_mutex") // 76
1401    VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_KHR    = 1000075000,
1402
1403    //@extension("VK_KHR_external_semaphore_capabilities") // 77
1404    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO_KHR   = 1000076000,
1405    VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES_KHR         = 1000076001,
1406
1407    //@extension("VK_KHR_external_semaphore") // 78
1408    VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO_KHR          = 1000077000,
1409
1410    //@extension("VK_KHR_external_semaphore_win32") // 79
1411    VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR    = 1000078000,
1412    VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR    = 1000078001,
1413    VK_STRUCTURE_TYPE_D3D12_FENCE_SUBMIT_INFO_KHR               = 1000078002,
1414
1415    //@extension("VK_KHR_external_semaphore_fd") // 80
1416    VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_FD_INFO_KHR              = 1000079000,
1417    VK_STRUCTURE_TYPE_SEMAPHORE_GET_FD_INFO_KHR                 = 1000079001,
1418
1419    //@extension("VK_KHR_push_descriptor") // 81
1420    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_KHR    = 1000080000,
1421
1422    //@extension("VK_KHR_16bit_storage") // 84
1423    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES_KHR    = 1000083000,
1424
1425    //@extension("VK_KHR_incremental_present") // 85
1426    VK_STRUCTURE_TYPE_PRESENT_REGIONS_KHR                       = 1000084000,
1427
1428    //@extension("VK_KHR_descriptor_update_template") // 86
1429    VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO_KHR    = 1000085000,
1430
1431    //@extension("VK_NVX_device_generated_commands") // 87
1432    VK_STRUCTURE_TYPE_OBJECT_TABLE_CREATE_INFO_NVX              = 1000086000,
1433    VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NVX  = 1000086001,
1434    VK_STRUCTURE_TYPE_CMD_PROCESS_COMMANDS_INFO_NVX             = 1000086002,
1435    VK_STRUCTURE_TYPE_CMD_RESERVE_SPACE_FOR_COMMANDS_INFO_NVX   = 1000086003,
1436    VK_STRUCTURE_TYPE_DEVICE_GENERATED_COMMANDS_LIMITS_NVX      = 1000086004,
1437    VK_STRUCTURE_TYPE_DEVICE_GENERATED_COMMANDS_FEATURES_NVX    = 1000086005,
1438
1439    //@extension("VK_NV_clip_space_w_scaling") // 88
1440    VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_W_SCALING_STATE_CREATE_INFO_NV  = 1000087000,
1441
1442    //@extension("VK_EXT_display_surface_counter") // 91
1443    VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_EXT                = 1000090000,
1444
1445    //@extension("VK_EXT_display_control") // 92
1446    VK_STRUCTURE_TYPE_DISPLAY_POWER_INFO_EXT                    = 1000091000,
1447    VK_STRUCTURE_TYPE_DEVICE_EVENT_INFO_EXT                     = 1000091001,
1448    VK_STRUCTURE_TYPE_DISPLAY_EVENT_INFO_EXT                    = 1000091002,
1449    VK_STRUCTURE_TYPE_SWAPCHAIN_COUNTER_CREATE_INFO_EXT         = 1000091003,
1450
1451    //@extension("VK_GOOGLE_display_timing") // 93
1452    VK_STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE                 = 1000092000,
1453
1454    //@extension("VK_NVX_multiview_per_view_attributes") // 98
1455    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_ATTRIBUTES_PROPERTIES_NVX  = 1000097000,
1456
1457    //@extension("VK_NV_viewport_swizzle") // 99
1458    VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_SWIZZLE_STATE_CREATE_INFO_NV    = 1000098000,
1459
1460    //@extension("VK_EXT_discard_rectangles") // 100
1461    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT  = 1000099000,
1462    VK_STRUCTURE_TYPE_PIPELINE_DISCARD_RECTANGLE_STATE_CREATE_INFO_EXT  = 1000099001,
1463
1464    //@extension("VK_EXT_conservative_rasterization") // 102
1465    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONSERVATIVE_RASTERIZATION_PROPERTIES_EXT = 1000101000,
1466    VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT = 1000101001,
1467
1468    //@extension("VK_EXT_hdr_metadata") // 106
1469    VK_STRUCTURE_TYPE_HDR_METADATA_EXT                          = 1000105000,
1470
1471    //@extension("VK_KHR_shared_presentable_image") // 112
1472    VK_STRUCTURE_TYPE_SHARED_PRESENT_SURFACE_CAPABILITIES_KHR   = 1000111000,
1473
1474    //@extension("VK_KHR_external_fence_capabilities") // 113
1475    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO_KHR   = 1000112000,
1476    VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES_KHR             = 1000112001,
1477
1478    //@extension("VK_KHR_external_fence") // 114
1479    VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO_KHR              = 1000113000,
1480
1481    //@extension("VK_KHR_external_fence_win32") // 115
1482    VK_STRUCTURE_TYPE_IMPORT_FENCE_WIN32_HANDLE_INFO_KHR        = 1000114000,
1483    VK_STRUCTURE_TYPE_EXPORT_FENCE_WIN32_HANDLE_INFO_KHR        = 1000114001,
1484    VK_STRUCTURE_TYPE_FENCE_GET_WIN32_HANDLE_INFO_KHR           = 1000114002,
1485
1486    //@extension("VK_KHR_external_fence_fd") // 117
1487    VK_STRUCTURE_TYPE_IMPORT_FENCE_FD_INFO_KHR                  = 1000115000,
1488    VK_STRUCTURE_TYPE_FENCE_GET_FD_INFO_KHR                     = 1000115001,
1489
1490    //@extension("VK_KHR_maintenance2") // 118
1491    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES_KHR             = 1000117000,
1492    VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO_KHR       = 1000117001,
1493    VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO_KHR                          = 1000117002,
1494    VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO_KHR = 1000117003,
1495
1496    //@extension("VK_KHR_get_surface_capabilities2") // 120
1497    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR        = 1000119000,
1498    VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR                = 1000119001,
1499    VK_STRUCTURE_TYPE_SURFACE_FORMAT_2_KHR                      = 1000119002,
1500
1501    //@extension("VK_KHR_variable_pointers") // 121
1502    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES_KHR = 1000120000,
1503
1504    //@extension("VK_MVK_ios_surface") // 123
1505    VK_STRUCTURE_TYPE_IOS_SURFACE_CREATE_INFO_MVK               = 1000122000,
1506
1507    //@extension("VK_MVK_macos_surface") // 124
1508    VK_STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK             = 1000123000,
1509
1510    //@extension("VK_KHR_dedicated_allocation") // 128
1511    VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS_KHR         = 1000127000,
1512    VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO_KHR        = 1000127001,
1513
1514    //@extension("VK_EXT_debug_utils") // 129
1515    VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT          = 1000128000,
1516    VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_TAG_INFO_EXT           = 1000128001,
1517    VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT                     = 1000128002,
1518    VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT   = 1000128003,
1519    VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT     = 1000128004,
1520
1521    //@extension("VK_ANDROID_external_memory_android_hardware_buffer") // 130
1522    VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_USAGE_ANDROID             = 1000129000,
1523    VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_PROPERTIES_ANDROID        = 1000129001,
1524    VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_ANDROID = 1000129002,
1525    VK_STRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROID       = 1000129003,
1526    VK_STRUCTURE_TYPE_MEMORY_GET_ANDROID_HARDWARE_BUFFER_INFO_ANDROID   = 1000129004,
1527    VK_STRUCTURE_TYPE_EXTERNAL_FORMAT_ANDROID                           = 1000129005,
1528
1529    //@extension("VK_EXT_sampler_filter_minmax") // 131
1530    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES_EXT = 1000130000,
1531    VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO_EXT = 1000130001,
1532
1533    //@extension("VK_EXT_sample_locations") // 144
1534    VK_STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT                         = 1000143000,
1535    VK_STRUCTURE_TYPE_RENDER_PASS_SAMPLE_LOCATIONS_BEGIN_INFO_EXT       = 1000143001,
1536    VK_STRUCTURE_TYPE_PIPELINE_SAMPLE_LOCATIONS_STATE_CREATE_INFO_EXT   = 1000143002,
1537    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLE_LOCATIONS_PROPERTIES_EXT   = 1000143003,
1538    VK_STRUCTURE_TYPE_MULTISAMPLE_PROPERTIES_EXT                        = 1000143004,
1539
1540    //@extension("VK_KHR_get_memory_requirements2") // 147
1541    VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2_KHR         = 1000146000,
1542    VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2_KHR          = 1000146001,
1543    VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2_KHR   = 1000146002,
1544    VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2_KHR                     = 1000146003,
1545    VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2_KHR        = 1000146004,
1546
1547    //@extension("VK_KHR_image_format_list") // 148
1548    VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO_KHR             = 1000147000,
1549
1550    //@extension("VK_EXT_blend_operation_advanced") // 149
1551    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT = 1000148000,
1552    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT = 1000148001,
1553    VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_ADVANCED_STATE_CREATE_INFO_EXT = 1000148002,
1554
1555    //@extension("VK_NV_fragment_coverage_to_color") // 150
1556    VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_TO_COLOR_STATE_CREATE_INFO_NV = 1000149000,
1557
1558    //@extension("VK_NV_framebuffer_mixed_samples") // 153
1559    VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_MODULATION_STATE_CREATE_INFO_NV = 1000152000,
1560
1561    //@extension("VK_KHR_sampler_ycbcr_conversion") // 157
1562    VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO_KHR              = 1000156000,
1563    VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO_KHR                     = 1000156001,
1564    VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO_KHR                      = 1000156002,
1565    VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO_KHR              = 1000156003,
1566    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES_KHR = 1000156004,
1567    VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES_KHR  = 1000156005,
1568
1569    //@extension("VK_KHR_bind_memory2") // 158
1570    VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO_KHR                       = 1000157000,
1571    VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO_KHR                        = 1000157001,
1572
1573    //@extension("VK_EXT_validation_cache") // 161
1574    VK_STRUCTURE_TYPE_VALIDATION_CACHE_CREATE_INFO_EXT                  = 1000160000,
1575    VK_STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT    = 1000160001,
1576
1577    //@extension("VK_KHR_maintenance3") // 169
1578    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES_KHR      = 1000168000,
1579    VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT_KHR                 = 1000168001,
1580
1581    //@extension("VK_EXT_global_priority") // 175
1582    VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_EXT      = 1000174000,
1583
1584    //@extension("VK_EXT_external_memory_host") // 179
1585    VK_STRUCTURE_TYPE_IMPORT_MEMORY_HOST_POINTER_INFO_EXT                   = 1000178000,
1586    VK_STRUCTURE_TYPE_MEMORY_HOST_POINTER_PROPERTIES_EXT                    = 1000178001,
1587    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT   = 1000178002,
1588}
1589
1590enum VkSubpassContents {
1591    VK_SUBPASS_CONTENTS_INLINE                              = 0x00000000,
1592    VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS           = 0x00000001,
1593}
1594
1595enum VkPipelineCacheHeaderVersion {
1596    VK_PIPELINE_CACHE_HEADER_VERSION_ONE                    = 1,
1597}
1598
1599@lastUnused(-11)
1600/// Error and return codes
1601enum VkResult {
1602    // Return codes for successful operation execution (positive values)
1603    VK_SUCCESS                                              = 0,
1604    VK_NOT_READY                                            = 1,
1605    VK_TIMEOUT                                              = 2,
1606    VK_EVENT_SET                                            = 3,
1607    VK_EVENT_RESET                                          = 4,
1608    VK_INCOMPLETE                                           = 5,
1609
1610    //@extension("VK_KHR_swapchain") // 2
1611    VK_SUBOPTIMAL_KHR                                       = 1000001003,
1612
1613    // Error codes (negative values)
1614    VK_ERROR_OUT_OF_HOST_MEMORY                             = 0xFFFFFFFF, // -1
1615    VK_ERROR_OUT_OF_DEVICE_MEMORY                           = 0xFFFFFFFE, // -2
1616    VK_ERROR_INITIALIZATION_FAILED                          = 0xFFFFFFFD, // -3
1617    VK_ERROR_DEVICE_LOST                                    = 0xFFFFFFFC, // -4
1618    VK_ERROR_MEMORY_MAP_FAILED                              = 0xFFFFFFFB, // -5
1619    VK_ERROR_LAYER_NOT_PRESENT                              = 0xFFFFFFFA, // -6
1620    VK_ERROR_EXTENSION_NOT_PRESENT                          = 0xFFFFFFF9, // -7
1621    VK_ERROR_FEATURE_NOT_PRESENT                            = 0xFFFFFFF8, // -8
1622    VK_ERROR_INCOMPATIBLE_DRIVER                            = 0xFFFFFFF7, // -9
1623    VK_ERROR_TOO_MANY_OBJECTS                               = 0xFFFFFFF6, // -10
1624    VK_ERROR_FORMAT_NOT_SUPPORTED                           = 0xFFFFFFF5, // -11
1625    VK_ERROR_FRAGMENTED_POOL                                = 0xFFFFFFF4, // -12
1626
1627    //@vulkan1_1
1628    VK_ERROR_OUT_OF_POOL_MEMORY                             = 0xC4642878, // -1000069000
1629    VK_ERROR_INVALID_EXTERNAL_HANDLE                        = 0xC4641CBD, // -1000072003
1630
1631    //@extension("VK_KHR_surface") // 1
1632    VK_ERROR_SURFACE_LOST_KHR                               = 0xC4653600, // -1000000000
1633    VK_ERROR_NATIVE_WINDOW_IN_USE_KHR                       = 0xC46535FF, // -1000000001
1634
1635    //@extension("VK_KHR_swapchain") // 2
1636    VK_ERROR_OUT_OF_DATE_KHR                                = 0xC4653214, // -1000001004
1637
1638    //@extension("VK_KHR_display_swapchain") // 4
1639    VK_ERROR_INCOMPATIBLE_DISPLAY_KHR                       = 0xC4652A47, // -1000003001
1640
1641    //@extension("VK_EXT_debug_report") // 12
1642    VK_ERROR_VALIDATION_FAILED_EXT                          = 0xC4650B07, // -1000011001
1643
1644    //@extension("VK_NV_glsl_shader") // 13
1645    VK_ERROR_INVALID_SHADER_NV                              = 0xC4650720, // -1000012000
1646
1647    //@extension("VK_KHR_maintenance1") // 70
1648    VK_ERROR_OUT_OF_POOL_MEMORY_KHR                         = 0xC4642878, // -1000069000
1649
1650    //@extension("VK_EXT_global_priority") // 175
1651    VK_ERROR_NOT_PERMITTED_EXT                              = 0xC4628E4F, // -1000174001
1652
1653    //@extension("VK_KHR_external_memory") // 73
1654    VK_ERROR_INVALID_EXTERNAL_HANDLE_KHR                    = 0xC4641CBD, // -1000072003
1655}
1656
1657enum VkDynamicState {
1658    VK_DYNAMIC_STATE_VIEWPORT                               = 0x00000000,
1659    VK_DYNAMIC_STATE_SCISSOR                                = 0x00000001,
1660    VK_DYNAMIC_STATE_LINE_WIDTH                             = 0x00000002,
1661    VK_DYNAMIC_STATE_DEPTH_BIAS                             = 0x00000003,
1662    VK_DYNAMIC_STATE_BLEND_CONSTANTS                        = 0x00000004,
1663    VK_DYNAMIC_STATE_DEPTH_BOUNDS                           = 0x00000005,
1664    VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK                   = 0x00000006,
1665    VK_DYNAMIC_STATE_STENCIL_WRITE_MASK                     = 0x00000007,
1666    VK_DYNAMIC_STATE_STENCIL_REFERENCE                      = 0x00000008,
1667
1668    //@extension("VK_NV_clip_space_w_scaling") // 88
1669    VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV                  = 1000087000,
1670
1671    //@extension("VK_EXT_discard_rectangles") // 100
1672    VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT                  = 1000099000,
1673
1674    //@extension("VK_EXT_sample_locations") // 144
1675    VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT                   = 1000143000,
1676}
1677
1678enum VkObjectType {
1679    VK_OBJECT_TYPE_UNKNOWN                                  = 0,
1680    VK_OBJECT_TYPE_INSTANCE                                 = 1,
1681    VK_OBJECT_TYPE_PHYSICAL_DEVICE                          = 2,
1682    VK_OBJECT_TYPE_DEVICE                                   = 3,
1683    VK_OBJECT_TYPE_QUEUE                                    = 4,
1684    VK_OBJECT_TYPE_SEMAPHORE                                = 5,
1685    VK_OBJECT_TYPE_COMMAND_BUFFER                           = 6,
1686    VK_OBJECT_TYPE_FENCE                                    = 7,
1687    VK_OBJECT_TYPE_DEVICE_MEMORY                            = 8,
1688    VK_OBJECT_TYPE_BUFFER                                   = 9,
1689    VK_OBJECT_TYPE_IMAGE                                    = 10,
1690    VK_OBJECT_TYPE_EVENT                                    = 11,
1691    VK_OBJECT_TYPE_QUERY_POOL                               = 12,
1692    VK_OBJECT_TYPE_BUFFER_VIEW                              = 13,
1693    VK_OBJECT_TYPE_IMAGE_VIEW                               = 14,
1694    VK_OBJECT_TYPE_SHADER_MODULE                            = 15,
1695    VK_OBJECT_TYPE_PIPELINE_CACHE                           = 16,
1696    VK_OBJECT_TYPE_PIPELINE_LAYOUT                          = 17,
1697    VK_OBJECT_TYPE_RENDER_PASS                              = 18,
1698    VK_OBJECT_TYPE_PIPELINE                                 = 19,
1699    VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT                    = 20,
1700    VK_OBJECT_TYPE_SAMPLER                                  = 21,
1701    VK_OBJECT_TYPE_DESCRIPTOR_POOL                          = 22,
1702    VK_OBJECT_TYPE_DESCRIPTOR_SET                           = 23,
1703    VK_OBJECT_TYPE_FRAMEBUFFER                              = 24,
1704    VK_OBJECT_TYPE_COMMAND_POOL                             = 25,
1705
1706    //@vulkan1_1
1707    VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION                 = 1000156000,
1708    VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE               = 1000085000,
1709
1710    //@extension("VK_KHR_surface") // 1
1711    VK_OBJECT_TYPE_SURFACE_KHR                              = 1000000000,
1712
1713    //@extension("VK_KHR_swapchain") // 2
1714    VK_OBJECT_TYPE_SWAPCHAIN_KHR                            = 1000001000,
1715
1716    //@extension("VK_KHR_display") // 3
1717    VK_OBJECT_TYPE_DISPLAY_KHR                              = 1000002000,
1718    VK_OBJECT_TYPE_DISPLAY_MODE_KHR                         = 1000002001,
1719
1720    //@extension("VK_KHR_debug_report") // 12
1721    VK_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT                = 1000011000,
1722
1723    //@extension("VK_KHR_descriptor_update_template") // 86
1724    VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_KHR           = 1000085000,
1725
1726    //@extension("VK_NVX_device_generated_commands") // 87
1727    VK_OBJECT_TYPE_OBJECT_TABLE_NVX                         = 1000086000,
1728    VK_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NVX             = 1000086001,
1729
1730    //@extension("VK_EXT_debug_utils") // 129
1731    VK_OBJECT_TYPE_DEBUG_UTILS_MESSENGER_EXT                = 1000128000,
1732
1733    //@extension("VK_KHR_sampler_ycbcr_conversion") // 157
1734    VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_KHR             = 1000156000,
1735
1736    //@extension("VK_EXT_validation_cache") // 161
1737    VK_OBJECT_TYPE_VALIDATION_CACHE_EXT                     = 1000160000,
1738}
1739
1740
1741//@vulkan1_1 enums
1742
1743enum VkPointClippingBehavior {
1744    VK_POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES              = 0,
1745    VK_POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY        = 1,
1746}
1747
1748enum VkTessellationDomainOrigin {
1749    VK_TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT                = 0,
1750    VK_TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT                = 1,
1751}
1752
1753enum VkSamplerYcbcrModelConversion {
1754    VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY          = 0,
1755    VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY        = 1,
1756    VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709             = 2,
1757    VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601             = 3,
1758    VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020            = 4,
1759}
1760
1761enum VkSamplerYcbcrRange {
1762    VK_SAMPLER_YCBCR_RANGE_ITU_FULL = 0,
1763    VK_SAMPLER_YCBCR_RANGE_ITU_NARROW = 1,
1764}
1765
1766enum VkChromaLocation {
1767    VK_CHROMA_LOCATION_COSITED_EVEN = 0,
1768    VK_CHROMA_LOCATION_MIDPOINT = 1,
1769}
1770
1771enum VkDescriptorUpdateTemplateType {
1772    VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET = 0,
1773    VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR = 1,
1774}
1775
1776@extension("VK_KHR_surface") // 1
1777enum VkPresentModeKHR {
1778    VK_PRESENT_MODE_IMMEDIATE_KHR                           = 0x00000000,
1779    VK_PRESENT_MODE_MAILBOX_KHR                             = 0x00000001,
1780    VK_PRESENT_MODE_FIFO_KHR                                = 0x00000002,
1781    VK_PRESENT_MODE_FIFO_RELAXED_KHR                        = 0x00000003,
1782
1783    //@extension("VK_KHR_shared_presentable_image") // 112
1784    VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR               = 1000111000,
1785    VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR           = 1000111001,
1786}
1787
1788@extension("VK_KHR_surface") // 1
1789enum VkColorSpaceKHR {
1790    VK_COLOR_SPACE_SRGB_NONLINEAR_KHR                       = 0x00000000,
1791
1792    //@extension("VK_EXT_swapchain_colorspace") // 105
1793    VK_COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT                 = 1000104001,
1794    VK_COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT                 = 1000104002,
1795    VK_COLOR_SPACE_DCI_P3_LINEAR_EXT                        = 1000104003,
1796    VK_COLOR_SPACE_DCI_P3_NONLINEAR_EXT                     = 1000104004,
1797    VK_COLOR_SPACE_BT709_LINEAR_EXT                         = 1000104005,
1798    VK_COLOR_SPACE_BT709_NONLINEAR_EXT                      = 1000104006,
1799    VK_COLOR_SPACE_BT2020_LINEAR_EXT                        = 1000104007,
1800    VK_COLOR_SPACE_HDR10_ST2084_EXT                         = 1000104008,
1801    VK_COLOR_SPACE_DOLBYVISION_EXT                          = 1000104009,
1802    VK_COLOR_SPACE_HDR10_HLG_EXT                            = 1000104010,
1803    VK_COLOR_SPACE_ADOBERGB_LINEAR_EXT                      = 1000104011,
1804    VK_COLOR_SPACE_ADOBERGB_NONLINEAR_EXT                   = 1000104012,
1805    VK_COLOR_SPACE_PASS_THROUGH_EXT                         = 1000104013,
1806    VK_COLOR_SPACE_EXTENDED_SRGB_NONLINEAR_EXT              = 1000104014,
1807}
1808
1809@extension("VK_EXT_debug_report") // 12
1810enum VkDebugReportObjectTypeEXT {
1811    VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT                 = 0,
1812    VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT                = 1,
1813    VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT         = 2,
1814    VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT                  = 3,
1815    VK_DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT                   = 4,
1816    VK_DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT               = 5,
1817    VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT          = 6,
1818    VK_DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT                   = 7,
1819    VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT           = 8,
1820    VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT                  = 9,
1821    VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT                   = 10,
1822    VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT                   = 11,
1823    VK_DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT              = 12,
1824    VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT             = 13,
1825    VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT              = 14,
1826    VK_DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT           = 15,
1827    VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT          = 16,
1828    VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT         = 17,
1829    VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT             = 18,
1830    VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT                = 19,
1831    VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT   = 20,
1832    VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT                 = 21,
1833    VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT         = 22,
1834    VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT          = 23,
1835    VK_DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT             = 24,
1836    VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT            = 25,
1837    VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT             = 26,
1838    VK_DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT           = 27,
1839    VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT_EXT = 28,
1840    VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_KHR_EXT             = 29,
1841    VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_MODE_KHR_EXT        = 30,
1842    VK_DEBUG_REPORT_OBJECT_TYPE_OBJECT_TABLE_NVX_EXT        = 31,
1843    VK_DEBUG_REPORT_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NVX_EXT = 32,
1844
1845    //extension("VK_EXT_validation_cache") // 161
1846    VK_DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT_EXT    = 33,
1847
1848    //extension("VK_KHR_descriptor_update_template") // 86
1849    VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_KHR_EXT = 1000085000,
1850
1851    //@extension("VK_KHR_sampler_ycbcr_conversion") // 157
1852    VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_KHR_EXT = 1000156000,
1853}
1854
1855@extension("VK_AMD_rasterization_order") // 19
1856enum VkRasterizationOrderAMD {
1857    VK_RASTERIZATION_ORDER_STRICT_AMD                       = 0,
1858    VK_RASTERIZATION_ORDER_RELAXED_AMD                      = 1,
1859}
1860
1861@extension("VK_AMD_shader_info") // 43
1862enum VkShaderInfoTypeAMD {
1863    VK_SHADER_INFO_TYPE_STATISTICS_AMD                      = 0,
1864    VK_SHADER_INFO_TYPE_BINARY_AMD                          = 1,
1865    VK_SHADER_INFO_TYPE_DISASSEMBLY_AMD                     = 2,
1866}
1867
1868@extension("VK_EXT_validation_flags") // 62
1869enum VkValidationCheckEXT {
1870    VK_VALIDATION_CHECK_ALL_EXT                             = 0,
1871    VK_VALIDATION_CHECK_SHADERS_EXT                         = 1,
1872}
1873
1874@extension("VK_KHR_descriptor_update_template") // 86
1875enum VkDescriptorUpdateTemplateTypeKHR {
1876    VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET_KHR   = 0,
1877    VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR = 1,
1878}
1879
1880@extension("VK_NVX_device_generated_commands") // 87
1881enum VkIndirectCommandsTokenTypeNVX {
1882    VK_INDIRECT_COMMANDS_TOKEN_TYPE_PIPELINE_NVX            = 0,
1883    VK_INDIRECT_COMMANDS_TOKEN_TYPE_DESCRIPTOR_SET_NVX      = 1,
1884    VK_INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_NVX        = 2,
1885    VK_INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_NVX       = 3,
1886    VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NVX       = 4,
1887    VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_NVX        = 5,
1888    VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NVX                = 6,
1889    VK_INDIRECT_COMMANDS_TOKEN_TYPE_DISPATCH_NVX            = 7,
1890}
1891
1892@extension("VK_NVX_device_generated_commands") // 87
1893enum VkObjectEntryTypeNVX {
1894    VK_OBJECT_ENTRY_TYPE_DESCRIPTOR_SET_NVX                 = 0,
1895    VK_OBJECT_ENTRY_TYPE_PIPELINE_NVX                       = 1,
1896    VK_OBJECT_ENTRY_TYPE_INDEX_BUFFER_NVX                   = 2,
1897    VK_OBJECT_ENTRY_TYPE_VERTEX_BUFFER_NVX                  = 3,
1898    VK_OBJECT_ENTRY_TYPE_PUSH_CONSTANT_NVX                  = 4,
1899}
1900
1901@extension("VK_EXT_display_control") // 92
1902enum VkDisplayPowerStateEXT {
1903    VK_DISPLAY_POWER_STATE_OFF_EXT                          = 0,
1904    VK_DISPLAY_POWER_STATE_SUSPEND_EXT                      = 1,
1905    VK_DISPLAY_POWER_STATE_ON_EXT                           = 2,
1906}
1907
1908@extension("VK_EXT_display_control") // 92
1909enum VkDeviceEventTypeEXT {
1910    VK_DEVICE_EVENT_TYPE_DISPLAY_HOTPLUG_EXT                = 0,
1911}
1912
1913@extension("VK_EXT_display_control") // 92
1914enum VkDisplayEventTypeEXT {
1915    VK_DISPLAY_EVENT_TYPE_FIRST_PIXEL_OUT_EXT               = 0,
1916}
1917
1918@extension("VK_NV_viewport_swizzle") // 99
1919enum VkViewportCoordinateSwizzleNV {
1920    VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_X_NV            = 0,
1921    VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_X_NV            = 1,
1922    VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Y_NV            = 2,
1923    VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Y_NV            = 3,
1924    VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Z_NV            = 4,
1925    VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Z_NV            = 5,
1926    VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_W_NV            = 6,
1927    VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_W_NV            = 7,
1928}
1929
1930@extension("VK_EXT_discard_rectangles") // 100
1931enum VkDiscardRectangleModeEXT {
1932    VK_DISCARD_RECTANGLE_MODE_INCLUSIVE_EXT = 0,
1933    VK_DISCARD_RECTANGLE_MODE_EXCLUSIVE_EXT = 1,
1934}
1935
1936@extension("VK_EXT_conservative_rasterization") // 102
1937enum VkConservativeRasterizationModeEXT {
1938    VK_CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT         = 0,
1939    VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT     = 1,
1940    VK_CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT    = 2,
1941}
1942
1943@extension("VK_KHR_maintenance2") // 118
1944enum VkPointClippingBehaviorKHR {
1945    VK_POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES_KHR          = 0,
1946    VK_POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY_KHR    = 1,
1947}
1948
1949@extension("VK_KHR_maintenance2") // 118
1950enum VkTessellationDomainOriginKHR {
1951    VK_TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT_KHR            = 0,
1952    VK_TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT_KHR            = 1,
1953}
1954
1955@extension("VK_EXT_sampler_filter_minmax") // 131
1956enum VkSamplerReductionModeEXT {
1957    VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_EXT          = 0,
1958    VK_SAMPLER_REDUCTION_MODE_MIN_EXT                       = 1,
1959    VK_SAMPLER_REDUCTION_MODE_MAX_EXT                       = 2,
1960}
1961
1962@extension("VK_EXT_blend_operation_advanced") // 149
1963enum VkBlendOverlapEXT {
1964    VK_BLEND_OVERLAP_UNCORRELATED_EXT                       = 0,
1965    VK_BLEND_OVERLAP_DISJOINT_EXT                           = 1,
1966    VK_BLEND_OVERLAP_CONJOINT_EXT                           = 2,
1967}
1968
1969@extension("VK_NV_framebuffer_mixed_samples") // 153
1970enum VkCoverageModulationModeNV {
1971    VK_COVERAGE_MODULATION_MODE_NONE_NV                     = 0,
1972    VK_COVERAGE_MODULATION_MODE_RGB_NV                      = 1,
1973    VK_COVERAGE_MODULATION_MODE_ALPHA_NV                    = 2,
1974    VK_COVERAGE_MODULATION_MODE_RGBA_NV                     = 3,
1975}
1976
1977@extension("VK_KHR_sampler_ycbcr_conversion") // 157
1978enum VkSamplerYcbcrModelConversionKHR {
1979    VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY_KHR      = 0,
1980    VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY_KHR    = 1,
1981    VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709_KHR         = 2,
1982    VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601_KHR         = 3,
1983    VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020_KHR        = 4,
1984}
1985
1986@extension("VK_KHR_sampler_ycbcr_conversion") // 157
1987enum VkSamplerYcbcrRangeKHR {
1988    VK_SAMPLER_YCBCR_RANGE_ITU_FULL_KHR                     = 0,
1989    VK_SAMPLER_YCBCR_RANGE_ITU_NARROW_KHR                   = 1,
1990}
1991
1992@extension("VK_KHR_sampler_ycbcr_conversion") // 157
1993enum VkChromaLocationKHR {
1994    VK_CHROMA_LOCATION_COSITED_EVEN_KHR                     = 0,
1995    VK_CHROMA_LOCATION_MIDPOINT_KHR                         = 1,
1996}
1997
1998@extension("VK_EXT_validation_cache") // 161
1999enum VkValidationCacheHeaderVersionEXT {
2000    VK_VALIDATION_CACHE_HEADER_VERSION_ONE_EXT              = 1,
2001}
2002
2003@extension("VK_EXT_global_priority") // 175
2004enum VkQueueGlobalPriorityEXT {
2005    VK_QUEUE_GLOBAL_PRIORITY_LOW_EXT                        = 128,
2006    VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_EXT                     = 256,
2007    VK_QUEUE_GLOBAL_PRIORITY_HIGH_EXT                       = 512,
2008    VK_QUEUE_GLOBAL_PRIORITY_REALTIME_EXT                   = 1024,
2009}
2010
2011/////////////////
2012//  Bitfields  //
2013/////////////////
2014
2015/// Queue capabilities
2016type VkFlags VkQueueFlags
2017bitfield VkQueueFlagBits {
2018    VK_QUEUE_GRAPHICS_BIT                                   = 0x00000001,    /// Queue supports graphics operations
2019    VK_QUEUE_COMPUTE_BIT                                    = 0x00000002,    /// Queue supports compute operations
2020    VK_QUEUE_TRANSFER_BIT                                   = 0x00000004,    /// Queue supports transfer operations
2021    VK_QUEUE_SPARSE_BINDING_BIT                             = 0x00000008,    /// Queue supports sparse resource memory management operations
2022
2023    //@vulkan1_1
2024    VK_QUEUE_PROTECTED_BIT                                  = 0x00000010,
2025}
2026
2027/// Memory properties passed into vkAllocMemory().
2028type VkFlags VkMemoryPropertyFlags
2029bitfield VkMemoryPropertyFlagBits {
2030    VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT                     = 0x00000001,
2031    VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT                     = 0x00000002,
2032    VK_MEMORY_PROPERTY_HOST_COHERENT_BIT                    = 0x00000004,
2033    VK_MEMORY_PROPERTY_HOST_CACHED_BIT                      = 0x00000008,
2034    VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT                 = 0x00000010,
2035
2036    //@vulkan1_1
2037    VK_MEMORY_PROPERTY_PROTECTED_BIT                        = 0x00000020,
2038}
2039
2040/// Memory heap flags
2041type VkFlags VkMemoryHeapFlags
2042bitfield VkMemoryHeapFlagBits {
2043    VK_MEMORY_HEAP_DEVICE_LOCAL_BIT                         = 0x00000001,
2044
2045    //@vulkan1_1
2046    VK_MEMORY_HEAP_MULTI_INSTANCE_BIT                       = 0x00000002,
2047
2048    //@extension("VK_KHR_device_group_creation") // 71
2049    VK_MEMORY_HEAP_MULTI_INSTANCE_BIT_KHR                   = 0x00000002,
2050}
2051
2052/// Access flags
2053type VkFlags VkAccessFlags
2054bitfield VkAccessFlagBits {
2055    VK_ACCESS_INDIRECT_COMMAND_READ_BIT                     = 0x00000001,
2056    VK_ACCESS_INDEX_READ_BIT                                = 0x00000002,
2057    VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT                     = 0x00000004,
2058    VK_ACCESS_UNIFORM_READ_BIT                              = 0x00000008,
2059    VK_ACCESS_INPUT_ATTACHMENT_READ_BIT                     = 0x00000010,
2060    VK_ACCESS_SHADER_READ_BIT                               = 0x00000020,
2061    VK_ACCESS_SHADER_WRITE_BIT                              = 0x00000040,
2062    VK_ACCESS_COLOR_ATTACHMENT_READ_BIT                     = 0x00000080,
2063    VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT                    = 0x00000100,
2064    VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT             = 0x00000200,
2065    VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT            = 0x00000400,
2066    VK_ACCESS_TRANSFER_READ_BIT                             = 0x00000800,
2067    VK_ACCESS_TRANSFER_WRITE_BIT                            = 0x00001000,
2068    VK_ACCESS_HOST_READ_BIT                                 = 0x00002000,
2069    VK_ACCESS_HOST_WRITE_BIT                                = 0x00004000,
2070    VK_ACCESS_MEMORY_READ_BIT                               = 0x00008000,
2071    VK_ACCESS_MEMORY_WRITE_BIT                              = 0x00010000,
2072
2073    //@extension("VK_NVX_device_generated_commands") // 87
2074    VK_ACCESS_COMMAND_PROCESS_READ_BIT_NVX                  = 0x00020000,
2075    VK_ACCESS_COMMAND_PROCESS_WRITE_BIT_NVX                 = 0x00040000,
2076
2077    //@extension("VK_EXT_blend_operation_advanced") // 149
2078    VK_ACCESS_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT     = 0x00080000,
2079}
2080
2081/// Buffer usage flags
2082type VkFlags VkBufferUsageFlags
2083bitfield VkBufferUsageFlagBits {
2084    VK_BUFFER_USAGE_TRANSFER_SRC_BIT                        = 0x00000001,    /// Can be used as a source of transfer operations
2085    VK_BUFFER_USAGE_TRANSFER_DST_BIT                        = 0x00000002,    /// Can be used as a destination of transfer operations
2086    VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT                = 0x00000004,    /// Can be used as TBO
2087    VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT                = 0x00000008,    /// Can be used as IBO
2088    VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT                      = 0x00000010,    /// Can be used as UBO
2089    VK_BUFFER_USAGE_STORAGE_BUFFER_BIT                      = 0x00000020,    /// Can be used as SSBO
2090    VK_BUFFER_USAGE_INDEX_BUFFER_BIT                        = 0x00000040,    /// Can be used as source of fixed function index fetch (index buffer)
2091    VK_BUFFER_USAGE_VERTEX_BUFFER_BIT                       = 0x00000080,    /// Can be used as source of fixed function vertex fetch (VBO)
2092    VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT                     = 0x00000100,    /// Can be the source of indirect parameters (e.g. indirect buffer, parameter buffer)
2093}
2094
2095/// Buffer creation flags
2096type VkFlags VkBufferCreateFlags
2097bitfield VkBufferCreateFlagBits {
2098    VK_BUFFER_CREATE_SPARSE_BINDING_BIT                     = 0x00000001,    /// Buffer should support sparse backing
2099    VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT                   = 0x00000002,    /// Buffer should support sparse backing with partial residency
2100    VK_BUFFER_CREATE_SPARSE_ALIASED_BIT                     = 0x00000004,    /// Buffer should support constent data access to physical memory blocks mapped into multiple locations of sparse buffers
2101
2102    //@vulkan1_1
2103    VK_BUFFER_CREATE_PROTECTED_BIT                          = 0x00000008,
2104}
2105
2106/// Shader stage flags
2107type VkFlags VkShaderStageFlags
2108bitfield VkShaderStageFlagBits {
2109    VK_SHADER_STAGE_VERTEX_BIT                              = 0x00000001,
2110    VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT                = 0x00000002,
2111    VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT             = 0x00000004,
2112    VK_SHADER_STAGE_GEOMETRY_BIT                            = 0x00000008,
2113    VK_SHADER_STAGE_FRAGMENT_BIT                            = 0x00000010,
2114    VK_SHADER_STAGE_COMPUTE_BIT                             = 0x00000020,
2115    VK_SHADER_STAGE_ALL_GRAPHICS                            = 0x0000001F,
2116
2117    VK_SHADER_STAGE_ALL                                     = 0x7FFFFFFF,
2118}
2119
2120/// Descriptor pool create flags
2121type VkFlags VkDescriptorPoolCreateFlags
2122bitfield VkDescriptorPoolCreateFlagBits {
2123    VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT       = 0x00000001,
2124}
2125
2126/// Descriptor pool reset flags
2127type VkFlags VkDescriptorPoolResetFlags
2128//bitfield VkDescriptorPoolResetFlagBits {
2129//}
2130
2131/// Image usage flags
2132type VkFlags VkImageUsageFlags
2133bitfield VkImageUsageFlagBits {
2134    VK_IMAGE_USAGE_TRANSFER_SRC_BIT                         = 0x00000001,    /// Can be used as a source of transfer operations
2135    VK_IMAGE_USAGE_TRANSFER_DST_BIT                         = 0x00000002,    /// Can be used as a destination of transfer operations
2136    VK_IMAGE_USAGE_SAMPLED_BIT                              = 0x00000004,    /// Can be sampled from (SAMPLED_IMAGE and COMBINED_IMAGE_SAMPLER descriptor types)
2137    VK_IMAGE_USAGE_STORAGE_BIT                              = 0x00000008,    /// Can be used as storage image (STORAGE_IMAGE descriptor type)
2138    VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT                     = 0x00000010,    /// Can be used as framebuffer color attachment
2139    VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT             = 0x00000020,    /// Can be used as framebuffer depth/stencil attachment
2140    VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT                 = 0x00000040,    /// Image data not needed outside of rendering
2141    VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT                     = 0x00000080,    /// Can be used as framebuffer input attachment
2142}
2143
2144/// Image creation flags
2145type VkFlags VkImageCreateFlags
2146bitfield VkImageCreateFlagBits {
2147    VK_IMAGE_CREATE_SPARSE_BINDING_BIT                      = 0x00000001,    /// Image should support sparse backing
2148    VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT                    = 0x00000002,    /// Image should support sparse backing with partial residency
2149    VK_IMAGE_CREATE_SPARSE_ALIASED_BIT                      = 0x00000004,    /// Image should support constent data access to physical memory blocks mapped into multiple locations of sparse images
2150    VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT                      = 0x00000008,    /// Allows image views to have different format than the base image
2151    VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT                     = 0x00000010,    /// Allows creating image views with cube type from the created image
2152
2153    //@vulkan1_1
2154    VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT                 = 0x00000020,
2155    VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT         = 0x00000040,
2156    VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT         = 0x00000080,
2157    VK_IMAGE_CREATE_EXTENDED_USAGE_BIT                      = 0x00000100,
2158    VK_IMAGE_CREATE_DISJOINT_BIT                            = 0x00000200,
2159    VK_IMAGE_CREATE_ALIAS_BIT                               = 0x00000400,
2160    VK_IMAGE_CREATE_PROTECTED_BIT                           = 0x00000800,
2161
2162    //@extension("VK_KHR_maintenance1") // 70
2163    VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT_KHR             = 0x00000020,
2164
2165    //@extension("VK_KHR_device_group") // 61
2166    VK_IMAGE_CREATE_BIND_SFR_BIT_KHR                        = 0x00000040,
2167
2168    //@extension("VK_KHR_maintenance2") // 118
2169    VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT_KHR     = 0x00000080,
2170    VK_IMAGE_CREATE_EXTENDED_USAGE_BIT_KHR                  = 0x00000100,
2171
2172    //@extension("VK_KHR_sampler_ycbcr_conversion") // 157
2173    VK_IMAGE_CREATE_DISJOINT_BIT_KHR                        = 0x00000200,
2174
2175    //@extension("VK_KHR_bind_memory2") // 158
2176    VK_IMAGE_CREATE_ALIAS_BIT_KHR                           = 0x00000400,
2177
2178    //@extension("VK_EXT_sample_locations") // 144
2179    VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT = 0x00001000,
2180}
2181
2182/// Image view creation flags
2183type VkFlags VkImageViewCreateFlags
2184//bitfield VkImageViewCreateFlagBits {
2185//}
2186
2187/// Pipeline creation flags
2188type VkFlags VkPipelineCreateFlags
2189bitfield VkPipelineCreateFlagBits {
2190    VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT             = 0x00000001,
2191    VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT                = 0x00000002,
2192    VK_PIPELINE_CREATE_DERIVATIVE_BIT                       = 0x00000004,
2193
2194    //@vulkan1_1
2195    VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT     = 0x00000008,
2196    VK_PIPELINE_CREATE_DISPATCH_BASE                        = 0x00000010,
2197
2198    //@extension("VK_KHR_device_group") // 61
2199    VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT_KHR = 0x00000008,
2200    VK_PIPELINE_CREATE_DISPATCH_BASE_KHR                    = 0x00000010,
2201}
2202
2203/// Color component flags
2204type VkFlags VkColorComponentFlags
2205bitfield VkColorComponentFlagBits {
2206    VK_COLOR_COMPONENT_R_BIT                                = 0x00000001,
2207    VK_COLOR_COMPONENT_G_BIT                                = 0x00000002,
2208    VK_COLOR_COMPONENT_B_BIT                                = 0x00000004,
2209    VK_COLOR_COMPONENT_A_BIT                                = 0x00000008,
2210}
2211
2212/// Fence creation flags
2213type VkFlags VkFenceCreateFlags
2214bitfield VkFenceCreateFlagBits {
2215    VK_FENCE_CREATE_SIGNALED_BIT                            = 0x00000001,
2216}
2217
2218/// Semaphore creation flags
2219type VkFlags VkSemaphoreCreateFlags
2220//bitfield VkSemaphoreCreateFlagBits {
2221//}
2222
2223/// Format capability flags
2224type VkFlags VkFormatFeatureFlags
2225bitfield VkFormatFeatureFlagBits {
2226    VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT                     = 0x00000001,    /// Format can be used for sampled images (SAMPLED_IMAGE and COMBINED_IMAGE_SAMPLER descriptor types)
2227    VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT                     = 0x00000002,    /// Format can be used for storage images (STORAGE_IMAGE descriptor type)
2228    VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT              = 0x00000004,    /// Format supports atomic operations in case it's used for storage images
2229    VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT              = 0x00000008,    /// Format can be used for uniform texel buffers (TBOs)
2230    VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT              = 0x00000010,    /// Format can be used for storage texel buffers (IBOs)
2231    VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT       = 0x00000020,    /// Format supports atomic operations in case it's used for storage texel buffers
2232    VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT                     = 0x00000040,    /// Format can be used for vertex buffers (VBOs)
2233    VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT                  = 0x00000080,    /// Format can be used for color attachment images
2234    VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT            = 0x00000100,    /// Format supports blending in case it's used for color attachment images
2235    VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT          = 0x00000200,    /// Format can be used for depth/stencil attachment images
2236    VK_FORMAT_FEATURE_BLIT_SRC_BIT                          = 0x00000400,    /// Format can be used as the source image of blits with vkCommandBlitImage
2237    VK_FORMAT_FEATURE_BLIT_DST_BIT                          = 0x00000800,    /// Format can be used as the destination image of blits with vkCommandBlitImage
2238    VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT       = 0x00001000,
2239
2240    //@vulkan1_1
2241    VK_FORMAT_FEATURE_TRANSFER_SRC_BIT                      = 0x00004000,
2242    VK_FORMAT_FEATURE_TRANSFER_DST_BIT                      = 0x00008000,
2243    VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT                                                   = 0x00020000,
2244    VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT                              = 0x00040000,
2245    VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT             = 0x00080000,
2246    VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT             = 0x00100000,
2247    VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT   = 0x00200000,
2248    VK_FORMAT_FEATURE_DISJOINT_BIT                                                                  = 0x00400000,
2249    VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT                                                    = 0x00800000,
2250
2251    //@extension("VK_IMG_filter_cubic") // 16
2252    VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG    = 0x00002000,
2253
2254    //@extension("VK_KHR_maintenance1") // 70
2255    VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR                  = 0x00004000,
2256    VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR                  = 0x00008000,
2257
2258    //@extension("VK_EXT_sampler_filter_minmax") // 131
2259    VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT_EXT   = 0x00010000,
2260
2261    //@extension("VK_KHR_sampler_ycbcr_conversion") // 157
2262    VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT_KHR                                                   = 0x00020000,
2263    VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT_KHR                              = 0x00040000,
2264    VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT_KHR             = 0x00080000,
2265    VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT_KHR             = 0x00100000,
2266    VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT_KHR   = 0x00200000,
2267    VK_FORMAT_FEATURE_DISJOINT_BIT_KHR                                                                  = 0x00400000,
2268    VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT_KHR                                                    = 0x00800000,
2269}
2270
2271/// Query control flags
2272type VkFlags VkQueryControlFlags
2273bitfield VkQueryControlFlagBits {
2274    VK_QUERY_CONTROL_PRECISE_BIT                            = 0x00000001,
2275}
2276
2277/// Query result flags
2278type VkFlags VkQueryResultFlags
2279bitfield VkQueryResultFlagBits {
2280    VK_QUERY_RESULT_64_BIT                                  = 0x00000001,   /// Results of the queries are written to the destination buffer as 64-bit values
2281    VK_QUERY_RESULT_WAIT_BIT                                = 0x00000002,   /// Results of the queries are waited on before proceeding with the result copy
2282    VK_QUERY_RESULT_WITH_AVAILABILITY_BIT                   = 0x00000004,   /// Besides the results of the query, the availability of the results is also written
2283    VK_QUERY_RESULT_PARTIAL_BIT                             = 0x00000008,   /// Copy the partial results of the query even if the final results aren't available
2284}
2285
2286/// Shader module creation flags
2287type VkFlags VkShaderModuleCreateFlags
2288//bitfield VkShaderModuleCreateFlagBits {
2289//}
2290
2291/// Event creation flags
2292type VkFlags VkEventCreateFlags
2293//bitfield VkEventCreateFlagBits {
2294//}
2295
2296/// Command buffer usage flags
2297type VkFlags VkCommandBufferUsageFlags
2298bitfield VkCommandBufferUsageFlagBits {
2299    VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT             = 0x00000001,
2300    VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT        = 0x00000002,
2301    VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT            = 0x00000004,
2302}
2303
2304/// Pipeline statistics flags
2305type VkFlags VkQueryPipelineStatisticFlags
2306bitfield VkQueryPipelineStatisticFlagBits {
2307    VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT                     = 0x00000001,  /// Optional
2308    VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT                   = 0x00000002,  /// Optional
2309    VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT                   = 0x00000004,  /// Optional
2310    VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT                 = 0x00000008,  /// Optional
2311    VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT                  = 0x00000010,  /// Optional
2312    VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT                        = 0x00000020,  /// Optional
2313    VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT                         = 0x00000040,  /// Optional
2314    VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT                 = 0x00000080,  /// Optional
2315    VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT         = 0x00000100,  /// Optional
2316    VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT  = 0x00000200,  /// Optional
2317    VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT                  = 0x00000400,  /// Optional
2318}
2319
2320/// Memory mapping flags
2321type VkFlags VkMemoryMapFlags
2322//bitfield VkMemoryMapFlagBits {
2323//}
2324
2325/// Bitfield of image aspects
2326type VkFlags VkImageAspectFlags
2327bitfield VkImageAspectFlagBits {
2328    VK_IMAGE_ASPECT_COLOR_BIT                               = 0x00000001,
2329    VK_IMAGE_ASPECT_DEPTH_BIT                               = 0x00000002,
2330    VK_IMAGE_ASPECT_STENCIL_BIT                             = 0x00000004,
2331    VK_IMAGE_ASPECT_METADATA_BIT                            = 0x00000008,
2332
2333    //@vulkan1_1
2334    VK_IMAGE_ASPECT_PLANE_0_BIT                             = 0x00000010,
2335    VK_IMAGE_ASPECT_PLANE_1_BIT                             = 0x00000020,
2336    VK_IMAGE_ASPECT_PLANE_2_BIT                             = 0x00000040,
2337
2338    //@extension("VK_KHR_sampler_ycbcr_conversion") // 157
2339    VK_IMAGE_ASPECT_PLANE_0_BIT_KHR                         = 0x00000010,
2340    VK_IMAGE_ASPECT_PLANE_1_BIT_KHR                         = 0x00000020,
2341    VK_IMAGE_ASPECT_PLANE_2_BIT_KHR                         = 0x00000040,
2342}
2343
2344/// Sparse memory bind flags
2345type VkFlags VkSparseMemoryBindFlags
2346bitfield VkSparseMemoryBindFlagBits {
2347    VK_SPARSE_MEMORY_BIND_METADATA_BIT                      = 0x00000001,
2348}
2349
2350/// Sparse image memory requirements flags
2351type VkFlags VkSparseImageFormatFlags
2352bitfield VkSparseImageFormatFlagBits {
2353    VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT                  = 0x00000001,  /// Image uses a single miptail region for all array slices
2354    VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT                = 0x00000002,  /// Image requires mip levels to be an exact multiple of the sparse iamge block size for non-mip-tail levels.
2355    VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT          = 0x00000004,  /// Image uses a non-standard sparse block size
2356}
2357
2358/// Pipeline stages
2359type VkFlags VkPipelineStageFlags
2360bitfield VkPipelineStageFlagBits {
2361    VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT                       = 0x00000001,  /// Before subsequent commands are processed
2362    VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT                     = 0x00000002,  /// Draw/DispatchIndirect command fetch
2363    VK_PIPELINE_STAGE_VERTEX_INPUT_BIT                      = 0x00000004,  /// Vertex/index fetch
2364    VK_PIPELINE_STAGE_VERTEX_SHADER_BIT                     = 0x00000008,  /// Vertex shading
2365    VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT       = 0x00000010,  /// Tessellation control shading
2366    VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT    = 0x00000020,  /// Tessellation evaluation shading
2367    VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT                   = 0x00000040,  /// Geometry shading
2368    VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT                   = 0x00000080,  /// Fragment shading
2369    VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT              = 0x00000100,  /// Early fragment (depth/stencil) tests
2370    VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT               = 0x00000200,  /// Late fragment (depth/stencil) tests
2371    VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT           = 0x00000400,  /// Color attachment writes
2372    VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT                    = 0x00000800,  /// Compute shading
2373    VK_PIPELINE_STAGE_TRANSFER_BIT                          = 0x00001000,  /// Transfer/copy operations
2374    VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT                    = 0x00002000,
2375    VK_PIPELINE_STAGE_HOST_BIT                              = 0x00004000,  /// Indicates host (CPU) is a source/sink of the dependency
2376
2377    VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT                      = 0x00008000,  /// All stages of the graphics pipeline
2378    VK_PIPELINE_STAGE_ALL_COMMANDS_BIT                      = 0x00010000,  /// All graphics, compute, copy, and transition commands
2379
2380    //@extension("VK_NVX_device_generated_commands") // 87
2381    VK_PIPELINE_STAGE_COMMAND_PROCESS_BIT_NVX               = 0x00020000,
2382}
2383
2384/// Render pass attachment description flags
2385type VkFlags VkAttachmentDescriptionFlags
2386bitfield VkAttachmentDescriptionFlagBits {
2387    VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT                 = 0x00000001,  /// The attachment may alias physical memory of another attachment in the same renderpass
2388}
2389
2390/// Subpass description flags
2391type VkFlags VkSubpassDescriptionFlags
2392bitfield VkSubpassDescriptionFlagBits {
2393    //@extension("VK_NVX_multiview_per_view_attributes") // 98
2394    VK_SUBPASS_DESCRIPTION_PER_VIEW_ATTRIBUTES_BIT_NVX      = 0x00000001,
2395    VK_SUBPASS_DESCRIPTION_PER_VIEW_POSITION_X_ONLY_BIT_NVX = 0x00000002,
2396}
2397
2398/// Command pool creation flags
2399type VkFlags VkCommandPoolCreateFlags
2400bitfield VkCommandPoolCreateFlagBits {
2401    VK_COMMAND_POOL_CREATE_TRANSIENT_BIT                    = 0x00000001,  /// Command buffers have a short lifetime
2402    VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT         = 0x00000002,  /// Command buffers may release their memory individually
2403
2404    //@vulkan1_1
2405    VK_COMMAND_POOL_CREATE_PROTECTED_BIT                    = 0x00000004,
2406}
2407
2408/// Command pool reset flags
2409type VkFlags VkCommandPoolResetFlags
2410bitfield VkCommandPoolResetFlagBits {
2411    VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT             = 0x00000001,  /// Release resources owned by the pool
2412}
2413
2414type VkFlags VkCommandBufferResetFlags
2415bitfield VkCommandBufferResetFlagBits {
2416    VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT           = 0x00000001,  /// Release resources owned by the buffer
2417}
2418
2419type VkFlags VkSampleCountFlags
2420bitfield VkSampleCountFlagBits {
2421    VK_SAMPLE_COUNT_1_BIT                                   = 0x00000001,
2422    VK_SAMPLE_COUNT_2_BIT                                   = 0x00000002,
2423    VK_SAMPLE_COUNT_4_BIT                                   = 0x00000004,
2424    VK_SAMPLE_COUNT_8_BIT                                   = 0x00000008,
2425    VK_SAMPLE_COUNT_16_BIT                                  = 0x00000010,
2426    VK_SAMPLE_COUNT_32_BIT                                  = 0x00000020,
2427    VK_SAMPLE_COUNT_64_BIT                                  = 0x00000040,
2428}
2429
2430type VkFlags VkStencilFaceFlags
2431bitfield VkStencilFaceFlagBits {
2432    VK_STENCIL_FACE_FRONT_BIT                               = 0x00000001,   /// Front face
2433    VK_STENCIL_FACE_BACK_BIT                                = 0x00000002,   /// Back face
2434    VK_STENCIL_FRONT_AND_BACK                               = 0x00000003,
2435}
2436
2437/// Instance creation flags
2438type VkFlags VkInstanceCreateFlags
2439//bitfield VkInstanceCreateFlagBits {
2440//}
2441
2442/// Device creation flags
2443type VkFlags VkDeviceCreateFlags
2444//bitfield VkDeviceCreateFlagBits {
2445//}
2446
2447/// Device queue creation flags
2448type VkFlags VkDeviceQueueCreateFlags
2449@vulkan1_1
2450bitfield VkDeviceQueueCreateFlagBits {
2451    VK_DEVICE_QUEUE_CREATE_PROTECTED_BIT                    = 0x00000001,
2452}
2453
2454/// Query pool creation flags
2455type VkFlags VkQueryPoolCreateFlags
2456//bitfield VkQueryPoolCreateFlagBits {
2457//}
2458
2459/// Buffer view creation flags
2460type VkFlags VkBufferViewCreateFlags
2461//bitfield VkBufferViewCreateFlagBits {
2462//}
2463
2464/// Pipeline cache creation flags
2465type VkFlags VkPipelineCacheCreateFlags
2466//bitfield VkPipelineCacheCreateFlagBits {
2467//}
2468
2469/// Pipeline shader stage creation flags
2470type VkFlags VkPipelineShaderStageCreateFlags
2471//bitfield VkPipelineShaderStageCreateFlagBits {
2472//}
2473
2474/// Descriptor set layout creation flags
2475type VkFlags VkDescriptorSetLayoutCreateFlags
2476bitfield VkDescriptorSetLayoutCreateFlagBits {
2477    //@extension("VK_KHR_push_descriptor") // 81
2478    VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR     = 0x00000001,
2479}
2480
2481/// Pipeline vertex input state creation flags
2482type VkFlags VkPipelineVertexInputStateCreateFlags
2483//bitfield VkPipelineVertexInputStateCreateFlagBits {
2484//}
2485
2486/// Pipeline input assembly state creation flags
2487type VkFlags VkPipelineInputAssemblyStateCreateFlags
2488//bitfield VkPipelineInputAssemblyStateCreateFlagBits {
2489//}
2490
2491/// Tessellation state creation flags
2492type VkFlags VkPipelineTessellationStateCreateFlags
2493//bitfield VkPipelineTessellationStateCreateFlagBits {
2494//}
2495
2496/// Viewport state creation flags
2497type VkFlags VkPipelineViewportStateCreateFlags
2498//bitfield VkPipelineViewportStateCreateFlagBits {
2499//}
2500
2501/// Rasterization state creation flags
2502type VkFlags VkPipelineRasterizationStateCreateFlags
2503//bitfield VkPipelineRasterizationStateCreateFlagBits {
2504//}
2505
2506/// Multisample state creation flags
2507type VkFlags VkPipelineMultisampleStateCreateFlags
2508//bitfield VkPipelineMultisampleStateCreateFlagBits {
2509//}
2510
2511/// Color blend state creation flags
2512type VkFlags VkPipelineColorBlendStateCreateFlags
2513//bitfield VkPipelineColorBlendStateCreateFlagBits {
2514//}
2515
2516/// Depth/stencil state creation flags
2517type VkFlags VkPipelineDepthStencilStateCreateFlags
2518//bitfield VkPipelineDepthStencilStateCreateFlagBits {
2519//}
2520
2521/// Dynamic state creation flags
2522type VkFlags VkPipelineDynamicStateCreateFlags
2523//bitfield VkPipelineDynamicStateCreateFlagBits {
2524//}
2525
2526/// Pipeline layout creation flags
2527type VkFlags VkPipelineLayoutCreateFlags
2528//bitfield VkPipelineLayoutCreateFlagBits {
2529//}
2530
2531/// Sampler creation flags
2532type VkFlags VkSamplerCreateFlags
2533//bitfield VkSamplerCreateFlagBits {
2534//}
2535
2536/// Render pass creation flags
2537type VkFlags VkRenderPassCreateFlags
2538//bitfield VkRenderPassCreateFlagBits {
2539//}
2540
2541/// Framebuffer creation flags
2542type VkFlags VkFramebufferCreateFlags
2543//bitfield VkFramebufferCreateFlagBits {
2544//}
2545
2546/// Dependency flags
2547type VkFlags VkDependencyFlags
2548bitfield VkDependencyFlagBits {
2549    VK_DEPENDENCY_BY_REGION_BIT                             = 0x00000001,
2550
2551    //@vulkan1_1
2552    VK_DEPENDENCY_DEVICE_GROUP_BIT                          = 0x00000004,
2553    VK_DEPENDENCY_VIEW_LOCAL_BIT                            = 0x00000002,
2554
2555    //@extension("VK_KHR_multiview") // 54
2556    VK_DEPENDENCY_VIEW_LOCAL_BIT_KHR                        = 0x00000002,
2557
2558    //@extension("VK_KHR_device_group") // 61
2559    VK_DEPENDENCY_DEVICE_GROUP_BIT_KHR                      = 0x00000004,
2560}
2561
2562/// Cull mode flags
2563type VkFlags VkCullModeFlags
2564bitfield VkCullModeFlagBits {
2565    VK_CULL_MODE_NONE                                       = 0x00000000,
2566    VK_CULL_MODE_FRONT_BIT                                  = 0x00000001,
2567    VK_CULL_MODE_BACK_BIT                                   = 0x00000002,
2568    VK_CULL_MODE_FRONT_AND_BACK                             = 0x00000003,
2569}
2570
2571//@vulkan1_1 flags
2572
2573/// Subgroup feature flags
2574type VkFlags VkSubgroupFeatureFlags
2575bitfield VkSubgroupFeatureFlagBits {
2576    VK_SUBGROUP_FEATURE_BASIC_BIT                           = 0x00000001,
2577    VK_SUBGROUP_FEATURE_VOTE_BIT                            = 0x00000002,
2578    VK_SUBGROUP_FEATURE_ARITHMETIC_BIT                      = 0x00000004,
2579    VK_SUBGROUP_FEATURE_BALLOT_BIT                          = 0x00000008,
2580    VK_SUBGROUP_FEATURE_SHUFFLE_BIT                         = 0x00000010,
2581    VK_SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT                = 0x00000020,
2582    VK_SUBGROUP_FEATURE_CLUSTERED_BIT                       = 0x00000040,
2583    VK_SUBGROUP_FEATURE_QUAD_BIT                            = 0x00000080,
2584}
2585
2586/// Peer memory feature flags
2587type VkFlags VkPeerMemoryFeatureFlags
2588bitfield VkPeerMemoryFeatureFlagBits {
2589    VK_PEER_MEMORY_FEATURE_COPY_SRC_BIT                     = 0x00000001,
2590    VK_PEER_MEMORY_FEATURE_COPY_DST_BIT                     = 0x00000002,
2591    VK_PEER_MEMORY_FEATURE_GENERIC_SRC_BIT                  = 0x00000004,
2592    VK_PEER_MEMORY_FEATURE_GENERIC_DST_BIT                  = 0x00000008,
2593}
2594
2595/// Memory allocation flags
2596type VkFlags VkMemoryAllocateFlags
2597bitfield VkMemoryAllocateFlagBits {
2598    VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT                      = 0x00000001,
2599}
2600
2601type VkFlags VkCommandPoolTrimFlags
2602//bitfield VkCommandPoolTrimFlagBits {
2603//}
2604
2605type VkFlags VkDescriptorUpdateTemplateCreateFlags
2606//bitfield VkDescriptorUpdateTemplateCreateFlagBits {
2607//}
2608
2609/// External memory handle type flags
2610type VkFlags VkExternalMemoryHandleTypeFlags
2611bitfield VkExternalMemoryHandleTypeFlagBits {
2612    VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT            = 0x00000001,
2613    VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT         = 0x00000002,
2614    VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT     = 0x00000004,
2615    VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT        = 0x00000008,
2616    VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT    = 0x00000010,
2617    VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT           = 0x00000020,
2618    VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT       = 0x00000040,
2619
2620    //@extension("VK_EXT_external_memory_host") // 179
2621    VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT              = 0x00000080,
2622    VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT   = 0x00000100,
2623
2624    //@extension("VK_EXT_external_memory_dma_buf") // 126
2625    VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT                      = 0x00000200,
2626
2627    //@extension("VK_ANDROID_external_memory_android_hardware_buffer") // 130
2628    VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID  = 0x00000400,
2629}
2630
2631/// External memory feature flags
2632type VkFlags VkExternalMemoryFeatureFlags
2633bitfield VkExternalMemoryFeatureFlagBits {
2634    VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT           = 0x00000001,
2635    VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT               = 0x00000002,
2636    VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT               = 0x00000004,
2637}
2638
2639/// External fence handle type flags
2640type VkFlags VkExternalFenceHandleTypeFlags
2641bitfield VkExternalFenceHandleTypeFlagBits {
2642    VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT             = 0x00000001,
2643    VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT          = 0x00000002,
2644    VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT      = 0x00000004,
2645    VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT               = 0x00000008,
2646}
2647
2648/// External fence feature flags
2649type VkFlags VkExternalFenceFeatureFlags
2650bitfield VkExternalFenceFeatureFlagBits {
2651    VK_EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT                = 0x00000001,
2652    VK_EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT                = 0x00000002,
2653}
2654
2655/// Fence import flags
2656type VkFlags VkFenceImportFlags
2657bitfield VkFenceImportFlagBits {
2658    VK_FENCE_IMPORT_TEMPORARY_BIT                           = 0x00000001,
2659}
2660
2661/// Semaphore import flags
2662type VkFlags VkSemaphoreImportFlags
2663bitfield VkSemaphoreImportFlagBits {
2664    VK_SEMAPHORE_IMPORT_TEMPORARY_BIT                       = 0x00000001,
2665}
2666
2667/// External semaphore handle type flags
2668type VkFlags VkExternalSemaphoreHandleTypeFlags
2669bitfield VkExternalSemaphoreHandleTypeFlagBits {
2670    VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT         = 0x00000001,
2671    VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT      = 0x00000002,
2672    VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT  = 0x00000004,
2673    VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT       = 0x00000008,
2674    VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT           = 0x00000010,
2675}
2676
2677/// External semaphore feature flags
2678type VkFlags VkExternalSemaphoreFeatureFlags
2679bitfield VkExternalSemaphoreFeatureFlagBits {
2680    VK_EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT            = 0x00000001,
2681    VK_EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT            = 0x00000002,
2682}
2683
2684@extension("VK_KHR_surface") // 1
2685type VkFlags VkSurfaceTransformFlagsKHR
2686@extension("VK_KHR_surface") // 1
2687bitfield VkSurfaceTransformFlagBitsKHR {
2688    VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR                       = 0x00000001,
2689    VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR                      = 0x00000002,
2690    VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR                     = 0x00000004,
2691    VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR                     = 0x00000008,
2692    VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_BIT_KHR              = 0x00000010,
2693    VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_90_BIT_KHR    = 0x00000020,
2694    VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_180_BIT_KHR   = 0x00000040,
2695    VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_270_BIT_KHR   = 0x00000080,
2696    VK_SURFACE_TRANSFORM_INHERIT_BIT_KHR                        = 0x00000100,
2697}
2698
2699@extension("VK_KHR_surface") // 1
2700type VkFlags VkCompositeAlphaFlagsKHR
2701@extension("VK_KHR_surface") // 1
2702bitfield VkCompositeAlphaFlagBitsKHR {
2703    VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR                       = 0x00000001,
2704    VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR               = 0x00000002,
2705    VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR              = 0x00000004,
2706    VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR                      = 0x00000008,
2707}
2708
2709@extension("VK_KHR_swapchain") // 2
2710type VkFlags VkSwapchainCreateFlagsKHR
2711@extension("VK_KHR_swapchain") // 2
2712bitfield VkSwapchainCreateFlagBitsKHR {
2713    //@vulkan1_1
2714    VK_SWAPCHAIN_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR = 0x00000001,
2715    VK_SWAPCHAIN_CREATE_PROTECTED_BIT_KHR                   = 0x00000002,
2716}
2717
2718@vulkan1_1
2719@extension("VK_KHR_swapchain") // 2
2720type VkFlags VkDeviceGroupPresentModeFlagsKHR
2721@vulkan1_1
2722@extension("VK_KHR_swapchain") // 2
2723bitfield VkDeviceGroupPresentModeFlagBitsKHR {
2724    VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR              = 0x00000001,
2725    VK_DEVICE_GROUP_PRESENT_MODE_REMOTE_BIT_KHR             = 0x00000002,
2726    VK_DEVICE_GROUP_PRESENT_MODE_SUM_BIT_KHR                = 0x00000004,
2727    VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_MULTI_DEVICE_BIT_KHR = 0x00000008,
2728}
2729
2730@extension("VK_KHR_display") // 3
2731type VkFlags VkDisplayPlaneAlphaFlagsKHR
2732@extension("VK_KHR_display") // 3
2733bitfield VkDisplayPlaneAlphaFlagBitsKHR {
2734    VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR                   = 0x00000001,
2735    VK_DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR                   = 0x00000002,
2736    VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_BIT_KHR                = 0x00000004,
2737    VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_PREMULTIPLIED_BIT_KHR  = 0x00000008,
2738}
2739
2740@extension("VK_KHR_display") // 3
2741type VkFlags VkDisplaySurfaceCreateFlagsKHR
2742//@extension("VK_KHR_display") // 3
2743//bitfield VkDisplaySurfaceCreateFlagBitsKHR {
2744//}
2745
2746@extension("VK_KHR_display") // 3
2747type VkFlags VkDisplayModeCreateFlagsKHR
2748//@extension("VK_KHR_display") // 3
2749//bitfield VkDisplayModeCreateFlagBitsKHR {
2750//}
2751
2752@extension("VK_KHR_xlib_surface") // 5
2753type VkFlags VkXlibSurfaceCreateFlagsKHR
2754//@extension("VK_KHR_xlib_surface") // 5
2755//bitfield VkXlibSurfaceCreateFlagBitsKHR {
2756//}
2757
2758@extension("VK_KHR_xcb_surface") // 6
2759type VkFlags VkXcbSurfaceCreateFlagsKHR
2760//@extension("VK_KHR_xcb_surface") // 6
2761//bitfield VkXcbSurfaceCreateFlagBitsKHR {
2762//}
2763
2764@extension("VK_KHR_wayland_surface") // 7
2765type VkFlags VkWaylandSurfaceCreateFlagsKHR
2766//@extension("VK_KHR_wayland_surface") // 7
2767//bitfield VkWaylandSurfaceCreateFlagBitsKHR {
2768//}
2769
2770@extension("VK_KHR_mir_surface") // 8
2771type VkFlags VkMirSurfaceCreateFlagsKHR
2772//@extension("VK_KHR_mir_surface") // 8
2773//bitfield VkMirSurfaceCreateFlagBitsKHR {
2774//}
2775
2776@extension("VK_KHR_android_surface") // 9
2777type VkFlags VkAndroidSurfaceCreateFlagsKHR
2778//@extension("VK_KHR_android_surface") // 9
2779//bitfield VkAndroidSurfaceCreateFlagBitsKHR {
2780//}
2781
2782@extension("VK_KHR_win32_surface") // 10
2783type VkFlags VkWin32SurfaceCreateFlagsKHR
2784//@extension("VK_KHR_win32_surface") // 10
2785//bitfield VkWin32SurfaceCreateFlagBitsKHR {
2786//}
2787
2788@extension("VK_ANDROID_native_buffer") // 11
2789type VkFlags VkSwapchainImageUsageFlagsANDROID
2790@extension("VK_ANDROID_native_buffer") // 11
2791bitfield VkSwapchainImageUsageFlagBitsANDROID {
2792    VK_SWAPCHAIN_IMAGE_USAGE_FLAGS_SHARED_BIT_ANDROID = 0x00000001,
2793}
2794
2795@extension("VK_EXT_debug_report") // 12
2796type VkFlags VkDebugReportFlagsEXT
2797@extension("VK_EXT_debug_report") // 12
2798bitfield VkDebugReportFlagBitsEXT {
2799    VK_DEBUG_REPORT_INFORMATION_BIT_EXT                     = 0x00000001,
2800    VK_DEBUG_REPORT_WARNING_BIT_EXT                         = 0x00000002,
2801    VK_DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT             = 0x00000004,
2802    VK_DEBUG_REPORT_ERROR_BIT_EXT                           = 0x00000008,
2803    VK_DEBUG_REPORT_DEBUG_BIT_EXT                           = 0x00000010,
2804}
2805
2806@extension("VK_NV_external_memory_capabilities") // 56
2807type VkFlags VkExternalMemoryHandleTypeFlagsNV
2808@extension("VK_NV_external_memory_capabilities") // 56
2809bitfield VkExternalMemoryHandleTypeFlagBitsNV {
2810    VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_NV      = 0x00000001,
2811    VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_NV  = 0x00000002,
2812    VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_BIT_NV       = 0x00000004,
2813    VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_KMT_BIT_NV   = 0x00000008,
2814}
2815
2816@extension("VK_NV_external_memory_capabilities") // 56
2817type VkFlags VkExternalMemoryFeatureFlagsNV
2818@extension("VK_NV_external_memory_capabilities") // 56
2819bitfield VkExternalMemoryFeatureFlagBitsNV {
2820    VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_NV        = 0x00000001,
2821    VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_NV            = 0x00000002,
2822    VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_NV            = 0x00000004,
2823}
2824
2825@extension("VK_KHR_device_group") // 61
2826type VkFlags VkPeerMemoryFeatureFlagsKHR
2827@extension("VK_KHR_device_group") // 61
2828bitfield VkPeerMemoryFeatureFlagBitsKHR {
2829    VK_PEER_MEMORY_FEATURE_COPY_SRC_BIT_KHR                 = 0x00000001,
2830    VK_PEER_MEMORY_FEATURE_COPY_DST_BIT_KHR                 = 0x00000002,
2831    VK_PEER_MEMORY_FEATURE_GENERIC_SRC_BIT_KHR              = 0x00000004,
2832    VK_PEER_MEMORY_FEATURE_GENERIC_DST_BIT_KHR              = 0x00000008,
2833}
2834
2835@extension("VK_KHR_device_group") // 61
2836type VkFlags VkMemoryAllocateFlagsKHR
2837@extension("VK_KHR_device_group") // 61
2838bitfield VkMemoryAllocateFlagBitsKHR {
2839    VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT_KHR                  = 0x00000001,
2840}
2841
2842@extension("VK_NN_vi_surface") // 63
2843type VkFlags VkViSurfaceCreateFlagsNN
2844//@extension("VK_NN_vi_surface") // 63
2845//bitfield VkViSurfaceCreateFlagBitsNN {
2846//}
2847
2848@extension("VK_KHR_maintenance1") // 70
2849type VkFlags VkCommandPoolTrimFlagsKHR
2850//@extension("VK_KHR_maintenance1") // 70
2851//bitfield VkCommandPoolTrimFlagBitsKHR {
2852//}
2853
2854@extension("VK_KHR_external_memory_capabilities") // 72
2855type VkFlags VkExternalMemoryHandleTypeFlagsKHR
2856@extension("VK_KHR_external_memory_capabilities") // 72
2857bitfield VkExternalMemoryHandleTypeFlagBitsKHR {
2858    VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT_KHR            = 0x00000001,
2859    VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR         = 0x00000002,
2860    VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR     = 0x00000004,
2861    VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT_KHR        = 0x00000008,
2862    VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT_KHR    = 0x00000010,
2863    VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT_KHR           = 0x00000020,
2864    VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT_KHR       = 0x00000040,
2865}
2866
2867@extension("VK_KHR_external_memory_capabilities") // 72
2868type VkFlags VkExternalMemoryFeatureFlagsKHR
2869@extension("VK_KHR_external_memory_capabilities") // 72
2870bitfield VkExternalMemoryFeatureFlagBitsKHR {
2871    VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_KHR           = 0x00000001,
2872    VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_KHR               = 0x00000002,
2873    VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_KHR               = 0x00000004,
2874}
2875
2876@extension("VK_KHR_external_semaphore_capabilities") // 77
2877type VkFlags VkExternalSemaphoreHandleTypeFlagsKHR
2878@extension("VK_KHR_external_semaphore_capabilities") // 77
2879bitfield VkExternalSemaphoreHandleTypeFlagBitsKHR {
2880    VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT_KHR         = 0x00000001
2881    VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR      = 0x00000002
2882    VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR  = 0x00000004
2883    VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT_KHR       = 0x00000008
2884    VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_FENCE_FD_BIT_KHR          = 0x00000010
2885}
2886
2887@extension("VK_KHR_external_semaphore_capabilities") // 77
2888type VkFlags VkExternalSemaphoreFeatureFlagsKHR
2889@extension("VK_KHR_external_semaphore_capabilities") // 77
2890bitfield VkExternalSemaphoreFeatureFlagBitsKHR {
2891    VK_EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT_KHR            = 0x00000001,
2892    VK_EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT_KHR            = 0x00000002,
2893}
2894
2895@extension("VK_KHR_external_semaphore") // 78
2896type VkFlags VkSemaphoreImportFlagsKHR
2897@extension("VK_KHR_external_semaphore") // 78
2898bitfield VkSemaphoreImportFlagBitsKHR {
2899    VK_SEMAPHORE_IMPORT_TEMPORARY_BIT_KHR                       = 0x00000001,
2900}
2901
2902@extension("VK_KHR_descriptor_update_template") // 86
2903type VkFlags VkDescriptorUpdateTemplateCreateFlagsKHR
2904//@extension("VK_KHR_descriptor_update_template") // 86
2905//bitfield VkDescriptorUpdateTemplateCreateFlagBitsKHR {
2906//}
2907
2908@extension("VK_NVX_device_generated_commands") // 87
2909type VkFlags VkIndirectCommandsLayoutUsageFlagsNVX
2910@extension("VK_NVX_device_generated_commands") // 87
2911bitfield VkIndirectCommandsLayoutUsageFlagBitsNVX {
2912    VK_INDIRECT_COMMANDS_LAYOUT_USAGE_UNORDERED_SEQUENCES_BIT_NVX   = 0x00000001,
2913    VK_INDIRECT_COMMANDS_LAYOUT_USAGE_SPARSE_SEQUENCES_BIT_NVX      = 0x00000002,
2914    VK_INDIRECT_COMMANDS_LAYOUT_USAGE_EMPTY_EXECUTIONS_BIT_NVX      = 0x00000004,
2915    VK_INDIRECT_COMMANDS_LAYOUT_USAGE_INDEXED_SEQUENCES_BIT_NVX     = 0x00000008,
2916}
2917
2918@extension("VK_NVX_device_generated_commands") // 87
2919type VkFlags VkObjectEntryUsageFlagsNVX
2920@extension("VK_NVX_device_generated_commands") // 87
2921bitfield VkObjectEntryUsageFlagBitsNVX {
2922    VK_OBJECT_ENTRY_USAGE_GRAPHICS_BIT_NVX                  = 0x00000001,
2923    VK_OBJECT_ENTRY_USAGE_COMPUTE_BIT_NVX                   = 0x00000002,
2924}
2925
2926@extension("VK_EXT_display_surface_counter") // 91
2927type VkFlags VkSurfaceCounterFlagsEXT
2928@extension("VK_EXT_display_surface_counter") // 91
2929bitfield VkSurfaceCounterFlagBitsEXT {
2930    VK_SURFACE_COUNTER_VBLANK_EXT                           = 0x00000001,
2931}
2932
2933@extension("VK_NV_viewport_swizzle") // 99
2934type VkFlags VkPipelineViewportSwizzleStateCreateFlagsNV
2935//@extension("VK_NV_viewport_swizzle") // 99
2936//bitfield VkPipelineViewportSwizzleStateCreateFlagBitsNV {
2937//}
2938
2939@extension("VK_EXT_discard_rectangles") // 100
2940type VkFlags VkPipelineDiscardRectangleStateCreateFlagsEXT
2941//@extension("VK_EXT_discard_rectangles") // 100
2942//bitfield VkPipelineDiscardRectangleStateCreateFlagBitsEXT {
2943//}
2944
2945@extension("VK_EXT_conservative_rasterization") // 102
2946type VkFlags VkPipelineRasterizationConservativeStateCreateFlagsEXT
2947//@extension("VK_EXT_conservative_rasterization") // 102
2948//bitfield VkPipelineRasterizationConservativeStateCreateFlagBitsEXT {
2949//}
2950
2951@extension("VK_KHR_external_fence_capabilities") // 113
2952type VkFlags VkExternalFenceHandleTypeFlagsKHR
2953@extension("VK_KHR_external_fence_capabilities") // 113
2954bitfield VkExternalFenceHandleTypeFlagBitsKHR {
2955    VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT_KHR         = 0x00000001,
2956    VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR      = 0x00000002,
2957    VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR  = 0x00000004,
2958    VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT_KHR           = 0x00000008,
2959}
2960
2961@extension("VK_KHR_external_fence_capabilities") // 113
2962type VkFlags VkExternalFenceFeatureFlagsKHR
2963@extension("VK_KHR_external_fence_capabilities") // 113
2964bitfield VkExternalFenceFeatureFlagBitsKHR {
2965    VK_EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT_KHR            = 0x00000001,
2966    VK_EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT_KHR            = 0x00000002,
2967}
2968
2969@extension("VK_KHR_external_fence") // 114
2970type VkFlags VkFenceImportFlagsKHR
2971@extension("VK_KHR_external_fence") // 114
2972bitfield VkFenceImportFlagBitsKHR {
2973    VK_FENCE_IMPORT_TEMPORARY_BIT_KHR                       = 0x00000001,
2974}
2975
2976@extension("VK_MVK_ios_surface") // 123
2977type VkFlags VkIOSSurfaceCreateFlagsMVK
2978//@extension("VK_MVK_ios_surface") // 123
2979//bitfield VkIOSSurfaceCreateFlagBitsMVK {
2980//}
2981
2982@extension("VK_MVK_macos_surface") // 124
2983type VkFlags VkMacOSSurfaceCreateFlagsMVK
2984//@extension("VK_MVK_macos_surface") // 124
2985//bitfield VkMacOSSurfaceCreateFlagBitsMVK {
2986//}
2987
2988@extension("VK_EXT_debug_utils") // 129
2989type VkFlags VkDebugUtilsMessengerCallbackDataFlagsEXT
2990//@extension("VK_EXT_debug_utils") // 129
2991//bitfield VkDebugUtilsMessengerCallbackDataFlagBitsEXT {
2992//}
2993
2994@extension("VK_EXT_debug_utils") // 129
2995type VkFlags VkDebugUtilsMessengerCreateFlagsEXT
2996//@extension("VK_EXT_debug_utils") // 129
2997//bitfield VkDebugUtilsMessengerCreateFlagBitsEXT {
2998//}
2999
3000@extension("VK_EXT_debug_utils") // 129
3001type VkFlags VkDebugUtilsMessageSeverityFlagsEXT
3002@extension("VK_EXT_debug_utils") // 129
3003bitfield VkDebugUtilsMessageSeverityFlagBitsEXT {
3004    VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT = 0x00000001,
3005    VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT    = 0x00000010,
3006    VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT = 0x00000100,
3007    VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT   = 0x00001000,
3008}
3009
3010@extension("VK_EXT_debug_utils") // 129
3011type VkFlags VkDebugUtilsMessageTypeFlagsEXT
3012@extension("VK_EXT_debug_utils") // 129
3013bitfield VkDebugUtilsMessageTypeFlagBitsEXT {
3014    VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT     = 0x00000001,
3015    VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT  = 0x00000002,
3016    VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT = 0x00000004,
3017}
3018
3019@extension("VK_NV_fragment_coverage_to_color") // 150
3020type VkFlags VkPipelineCoverageToColorStateCreateFlagsNV
3021@extension("VK_NV_fragment_coverage_to_color") // 150
3022//bitfield VkPipelineCoverageToColorStateCreateFlagBitsNV {
3023//}
3024
3025@extension("VK_NV_framebuffer_mixed_samples") // 153
3026type VkFlags VkPipelineCoverageModulationStateCreateFlagsNV
3027@extension("VK_NV_framebuffer_mixed_samples") // 153
3028//bitfield VkPipelineCoverageModulationStateCreateFlagBitsNV {
3029//}
3030
3031@extension("VK_EXT_validation_cache") // 161
3032type VkFlags VkValidationCacheCreateFlagsEXT
3033@extension("VK_EXT_validation_cache") // 161
3034//bitfield VkValidationCacheCreateFlagBitsEXT {
3035//}
3036
3037//////////////////
3038//  Structures  //
3039//////////////////
3040
3041class VkOffset2D {
3042    s32                                         x
3043    s32                                         y
3044}
3045
3046class VkOffset3D {
3047    s32                                         x
3048    s32                                         y
3049    s32                                         z
3050}
3051
3052class VkExtent2D {
3053    u32                                         width
3054    u32                                         height
3055}
3056
3057class VkExtent3D {
3058    u32                                         width
3059    u32                                         height
3060    u32                                         depth
3061}
3062
3063class VkViewport {
3064    f32                                         x
3065    f32                                         y
3066    f32                                         width
3067    f32                                         height
3068    f32                                         minDepth
3069    f32                                         maxDepth
3070}
3071
3072class VkRect2D {
3073    VkOffset2D                                  offset
3074    VkExtent2D                                  extent
3075}
3076
3077class VkClearRect {
3078    VkRect2D                                    rect
3079    u32                                         baseArrayLayer
3080    u32                                         layerCount
3081}
3082
3083class VkComponentMapping {
3084    VkComponentSwizzle                          r
3085    VkComponentSwizzle                          g
3086    VkComponentSwizzle                          b
3087    VkComponentSwizzle                          a
3088}
3089
3090class VkPhysicalDeviceProperties {
3091    u32                                         apiVersion
3092    u32                                         driverVersion
3093    u32                                         vendorID
3094    u32                                         deviceID
3095    VkPhysicalDeviceType                        deviceType
3096    char[VK_MAX_PHYSICAL_DEVICE_NAME_SIZE]      deviceName
3097    u8[VK_UUID_SIZE]                            pipelineCacheUUID
3098    VkPhysicalDeviceLimits                      limits
3099    VkPhysicalDeviceSparseProperties            sparseProperties
3100}
3101
3102class VkExtensionProperties {
3103    char[VK_MAX_EXTENSION_NAME_SIZE]            extensionName      /// extension name
3104    u32                                         specVersion        /// version of the extension specification implemented
3105}
3106
3107class VkLayerProperties {
3108    char[VK_MAX_EXTENSION_NAME_SIZE]            layerName               /// layer name
3109    u32                                         specVersion             /// version of the layer specification implemented
3110    u32                                         implementationVersion   /// build or release version of the layer's library
3111    char[VK_MAX_DESCRIPTION_SIZE]               description             /// Free-form description of the layer
3112}
3113
3114class VkSubmitInfo {
3115    VkStructureType                             sType              /// Type of structure. Should be VK_STRUCTURE_TYPE_SUBMIT_INFO
3116    const void*                                 pNext              /// Next structure in chain
3117    u32                                         waitSemaphoreCount
3118    const VkSemaphore*                          pWaitSemaphores
3119    const VkPipelineStageFlags*                 pWaitDstStageMask
3120    u32                                         commandBufferCount
3121    const VkCommandBuffer*                      pCommandBuffers
3122    u32                                         signalSemaphoreCount
3123    const VkSemaphore*                          pSignalSemaphores
3124}
3125
3126class VkApplicationInfo {
3127    VkStructureType                             sType              /// Type of structure. Should be VK_STRUCTURE_TYPE_APPLICATION_INFO
3128    const void*                                 pNext              /// Next structure in chain
3129    const char*                                 pApplicationName
3130    u32                                         applicationVersion
3131    const char*                                 pEngineName
3132    u32                                         engineVersion
3133    u32                                         apiVersion
3134}
3135
3136class VkAllocationCallbacks {
3137    void*                                       pUserData
3138    PFN_vkAllocationFunction                    pfnAllocation
3139    PFN_vkReallocationFunction                  pfnReallocation
3140    PFN_vkFreeFunction                          pfnFree
3141    PFN_vkInternalAllocationNotification        pfnInternalAllocation
3142    PFN_vkInternalFreeNotification              pfnInternalFree
3143}
3144
3145class VkDeviceQueueCreateInfo {
3146    VkStructureType                             sStype                    /// Should be VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO
3147    const void*                                 pNext                     /// Pointer to next structure
3148    VkDeviceQueueCreateFlags                    flags
3149    u32                                         queueFamilyIndex
3150    u32                                         queueCount
3151    const f32*                                  pQueuePriorities
3152}
3153
3154class VkDeviceCreateInfo {
3155    VkStructureType                             sType                      /// Should be VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO
3156    const void*                                 pNext                      /// Pointer to next structure
3157    VkDeviceCreateFlags                         flags
3158    u32                                         queueCreateInfoCount
3159    const VkDeviceQueueCreateInfo*              pQueueCreateInfos
3160    u32                                         enabledLayerCount
3161    const char* const*                          ppEnabledLayerNames        /// Ordered list of layer names to be enabled
3162    u32                                         enabledExtensionCount
3163    const char* const*                          ppEnabledExtensionNames
3164    const VkPhysicalDeviceFeatures*             pEnabledFeatures
3165}
3166
3167class VkInstanceCreateInfo {
3168    VkStructureType                             sType                      /// Should be VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO
3169    const void*                                 pNext                      /// Pointer to next structure
3170    VkInstanceCreateFlags                       flags
3171    const VkApplicationInfo*                    pApplicationInfo
3172    u32                                         enabledLayerCount
3173    const char* const*                          ppEnabledLayerNames        /// Ordered list of layer names to be enabled
3174    u32                                         enabledExtensionCount
3175    const char* const*                          ppEnabledExtensionNames    /// Extension names to be enabled
3176}
3177
3178class VkQueueFamilyProperties {
3179    VkQueueFlags                                queueFlags                 /// Queue flags
3180    u32                                         queueCount
3181    u32                                         timestampValidBits
3182    VkExtent3D                                  minImageTransferGranularity
3183}
3184
3185class VkPhysicalDeviceMemoryProperties {
3186    u32                                         memoryTypeCount
3187    VkMemoryType[VK_MAX_MEMORY_TYPES]           memoryTypes
3188    u32                                         memoryHeapCount
3189    VkMemoryHeap[VK_MAX_MEMORY_HEAPS]           memoryHeaps
3190}
3191
3192class VkMemoryAllocateInfo {
3193    VkStructureType                             sType                      /// Must be VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO
3194    const void*                                 pNext                      /// Pointer to next structure
3195    VkDeviceSize                                allocationSize             /// Size of memory allocation
3196    u32                                         memoryTypeIndex            /// Index of the of the memory type to allocate from
3197}
3198
3199class VkMemoryRequirements {
3200    VkDeviceSize                                size                       /// Specified in bytes
3201    VkDeviceSize                                alignment                  /// Specified in bytes
3202    u32                                         memoryTypeBits             /// Bitfield of the allowed memory type indices into memoryTypes[] for this object
3203}
3204
3205class VkSparseImageFormatProperties {
3206    VkImageAspectFlagBits                       aspectMask
3207    VkExtent3D                                  imageGranularity
3208    VkSparseImageFormatFlags                    flags
3209}
3210
3211class VkSparseImageMemoryRequirements {
3212    VkSparseImageFormatProperties               formatProperties
3213    u32                                         imageMipTailFirstLod
3214    VkDeviceSize                                imageMipTailSize           /// Specified in bytes, must be a multiple of image block size / alignment
3215    VkDeviceSize                                imageMipTailOffset         /// Specified in bytes, must be a multiple of image block size / alignment
3216    VkDeviceSize                                imageMipTailStride         /// Specified in bytes, must be a multiple of image block size / alignment
3217}
3218
3219class VkMemoryType {
3220    VkMemoryPropertyFlags                       propertyFlags              /// Memory properties of this memory type
3221    u32                                         heapIndex                  /// Index of the memory heap allocations of this memory type are taken from
3222}
3223
3224class VkMemoryHeap {
3225    VkDeviceSize                                size                       /// Available memory in the heap
3226    VkMemoryHeapFlags                           flags                      /// Flags for the heap
3227}
3228
3229class VkMappedMemoryRange {
3230    VkStructureType                             sType                      /// Must be VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE
3231    const void*                                 pNext                      /// Pointer to next structure
3232    VkDeviceMemory                              memory                     /// Mapped memory object
3233    VkDeviceSize                                offset                     /// Offset within the mapped memory the range starts from
3234    VkDeviceSize                                size                       /// Size of the range within the mapped memory
3235}
3236
3237class VkFormatProperties {
3238    VkFormatFeatureFlags                        linearTilingFeatures       /// Format features in case of linear tiling
3239    VkFormatFeatureFlags                        optimalTilingFeatures      /// Format features in case of optimal tiling
3240    VkFormatFeatureFlags                        bufferFeatures             /// Format features supported by buffers
3241}
3242
3243class VkImageFormatProperties {
3244    VkExtent3D                                  maxExtent                  /// max image dimensions for this resource type
3245    u32                                         maxMipLevels               /// max number of mipmap levels for this resource type
3246    u32                                         maxArrayLayers             /// max array layers for this resource type
3247    VkSampleCountFlags                          sampleCounts               /// supported sample counts for this resource type
3248    VkDeviceSize                                maxResourceSize            /// max size (in bytes) of this resource type
3249}
3250
3251class VkDescriptorImageInfo {
3252    VkSampler                                   sampler
3253    VkImageView                                 imageView
3254    VkImageLayout                               imageLayout
3255}
3256
3257class VkDescriptorBufferInfo {
3258    VkBuffer                                    buffer                     /// Buffer used for this descriptor when the descriptor is UNIFORM_BUFFER[_DYNAMIC]
3259    VkDeviceSize                                offset                     /// Base offset from buffer start in bytes to update in the descriptor set.
3260    VkDeviceSize                                range                      /// Size in bytes of the buffer resource for this descriptor update.
3261}
3262
3263class VkWriteDescriptorSet {
3264    VkStructureType                             sType                      /// Must be VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET
3265    const void*                                 pNext                      /// Pointer to next structure
3266    VkDescriptorSet                             dstSet                     /// Destination descriptor set
3267    u32                                         dstBinding                 /// Binding within the destination descriptor set to write
3268    u32                                         dstArrayElement            /// Array element within the destination binding to write
3269    u32                                         descriptorCount            /// Number of descriptors to write (determines the size of the array pointed by <pDescriptors>)
3270    VkDescriptorType                            descriptorType             /// Descriptor type to write (determines which fields of the array pointed by <pDescriptors> are going to be used)
3271    const VkDescriptorImageInfo*                pImageInfo
3272    const VkDescriptorBufferInfo*               pBufferInfo
3273    const VkBufferView*                         pTexelBufferView
3274}
3275
3276class VkCopyDescriptorSet {
3277    VkStructureType                             sType                      /// Must be VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET
3278    const void*                                 pNext                      /// Pointer to next structure
3279    VkDescriptorSet                             srcSet                     /// Source descriptor set
3280    u32                                         srcBinding                 /// Binding within the source descriptor set to copy from
3281    u32                                         srcArrayElement            /// Array element within the source binding to copy from
3282    VkDescriptorSet                             dstSet                     /// Destination descriptor set
3283    u32                                         dstBinding                 /// Binding within the destination descriptor set to copy to
3284    u32                                         dstArrayElement            /// Array element within the destination binding to copy to
3285    u32                                         descriptorCount            /// Number of descriptors to copy
3286}
3287
3288class VkBufferCreateInfo {
3289    VkStructureType                             sType                      /// Must be VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO
3290    const void*                                 pNext                      /// Pointer to next structure.
3291    VkBufferCreateFlags                         flags                      /// Buffer creation flags
3292    VkDeviceSize                                size                       /// Specified in bytes
3293    VkBufferUsageFlags                          usage                      /// Buffer usage flags
3294    VkSharingMode                               sharingMode
3295    u32                                         queueFamilyIndexCount
3296    const u32*                                  pQueueFamilyIndices
3297}
3298
3299class VkBufferViewCreateInfo {
3300    VkStructureType                             sType                      /// Must be VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO
3301    const void*                                 pNext                      /// Pointer to next structure.
3302    VkBufferViewCreateFlags                     flags
3303    VkBuffer                                    buffer
3304    VkFormat                                    format                     /// Optionally specifies format of elements
3305    VkDeviceSize                                offset                     /// Specified in bytes
3306    VkDeviceSize                                range                      /// View size specified in bytes
3307}
3308
3309class VkImageSubresource {
3310    VkImageAspectFlagBits                       aspectMask
3311    u32                                         mipLevel
3312    u32                                         arrayLayer
3313}
3314
3315class VkImageSubresourceRange {
3316    VkImageAspectFlags                          aspectMask
3317    u32                                         baseMipLevel
3318    u32                                         levelCount
3319    u32                                         baseArrayLayer
3320    u32                                         layerCount
3321}
3322
3323class VkMemoryBarrier {
3324    VkStructureType                             sType                      /// Must be VK_STRUCTURE_TYPE_MEMORY_BARRIER
3325    const void*                                 pNext                      /// Pointer to next structure.
3326    VkAccessFlags                               srcAccessMask
3327    VkAccessFlags                               dstAccessMask
3328}
3329
3330class VkBufferMemoryBarrier {
3331    VkStructureType                             sType                      /// Must be VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER
3332    const void*                                 pNext                      /// Pointer to next structure.
3333    VkAccessFlags                               srcAccessMask
3334    VkAccessFlags                               dstAccessMask
3335    u32                                         srcQueueFamilyIndex        /// Queue family to transition ownership from
3336    u32                                         dstQueueFamilyIndex        /// Queue family to transition ownership to
3337    VkBuffer                                    buffer                     /// Buffer to sync
3338    VkDeviceSize                                offset                     /// Offset within the buffer to sync
3339    VkDeviceSize                                size                       /// Amount of bytes to sync
3340}
3341
3342class VkImageMemoryBarrier {
3343    VkStructureType                             sType                      /// Must be VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER
3344    const void*                                 pNext                      /// Pointer to next structure.
3345    VkAccessFlags                               srcAccessMask
3346    VkAccessFlags                               dstAccessMask
3347    VkImageLayout                               oldLayout                  /// Current layout of the image
3348    VkImageLayout                               newLayout                  /// New layout to transition the image to
3349    u32                                         srcQueueFamilyIndex        /// Queue family to transition ownership from
3350    u32                                         dstQueueFamilyIndex        /// Queue family to transition ownership to
3351    VkImage                                     image                      /// Image to sync
3352    VkImageSubresourceRange                     subresourceRange           /// Subresource range to sync
3353}
3354
3355class VkImageCreateInfo {
3356    VkStructureType                             sType                      /// Must be VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO
3357    const void*                                 pNext                      /// Pointer to next structure.
3358    VkImageCreateFlags                          flags                      /// Image creation flags
3359    VkImageType                                 imageType
3360    VkFormat                                    format
3361    VkExtent3D                                  extent
3362    u32                                         mipLevels
3363    u32                                         arrayLayers
3364    VkSampleCountFlagBits                       samples
3365    VkImageTiling                               tiling
3366    VkImageUsageFlags                           usage                      /// Image usage flags
3367    VkSharingMode                               sharingMode                /// Cross-queue-family sharing mode
3368    u32                                         queueFamilyIndexCount      /// Number of queue families to share across
3369    const u32*                                  pQueueFamilyIndices        /// Array of queue family indices to share across
3370    VkImageLayout                               initialLayout              /// Initial image layout for all subresources
3371}
3372
3373class VkSubresourceLayout {
3374    VkDeviceSize                                offset                 /// Specified in bytes
3375    VkDeviceSize                                size                   /// Specified in bytes
3376    VkDeviceSize                                rowPitch               /// Specified in bytes
3377    VkDeviceSize                                arrayPitch             /// Specified in bytes
3378    VkDeviceSize                                depthPitch             /// Specified in bytes
3379}
3380
3381class VkImageViewCreateInfo {
3382    VkStructureType                             sType                  /// Must be VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO
3383    const void*                                 pNext                  /// Pointer to next structure
3384    VkImageViewCreateFlags                      flags
3385    VkImage                                     image
3386    VkImageViewType                             viewType
3387    VkFormat                                    format
3388    VkComponentMapping                          components
3389    VkImageSubresourceRange                     subresourceRange
3390}
3391
3392class VkBufferCopy {
3393    VkDeviceSize                                srcOffset              /// Specified in bytes
3394    VkDeviceSize                                dstOffset              /// Specified in bytes
3395    VkDeviceSize                                size                   /// Specified in bytes
3396}
3397
3398class VkSparseMemoryBind {
3399    VkDeviceSize                                resourceOffset        /// Specified in bytes
3400    VkDeviceSize                                size                  /// Specified in bytes
3401    VkDeviceMemory                              memory
3402    VkDeviceSize                                memoryOffset          /// Specified in bytes
3403    VkSparseMemoryBindFlags                     flags
3404}
3405
3406class VkSparseImageMemoryBind {
3407    VkImageSubresource                          subresource
3408    VkOffset3D                                  offset
3409    VkExtent3D                                  extent
3410    VkDeviceMemory                              memory
3411    VkDeviceSize                                memoryOffset          /// Specified in bytes
3412    VkSparseMemoryBindFlags                     flags
3413}
3414
3415class VkSparseBufferMemoryBindInfo {
3416    VkBuffer                                    buffer
3417    u32                                         bindCount
3418    const VkSparseMemoryBind*                   pBinds
3419}
3420
3421class VkSparseImageOpaqueMemoryBindInfo {
3422    VkImage                                     image
3423    u32                                         bindCount
3424    const VkSparseMemoryBind*                   pBinds
3425}
3426
3427class VkSparseImageMemoryBindInfo {
3428    VkImage                                     image
3429    u32                                         bindCount
3430    const VkSparseMemoryBind*                   pBinds
3431}
3432
3433class VkBindSparseInfo {
3434    VkStructureType                             sType                 /// Must be VK_STRUCTURE_TYPE_BIND_SPARSE_INFO
3435    const void*                                 pNext
3436    u32                                         waitSemaphoreCount
3437    const VkSemaphore*                          pWaitSemaphores
3438    u32                                         numBufferBinds
3439    const VkSparseBufferMemoryBindInfo*         pBufferBinds
3440    u32                                         numImageOpaqueBinds
3441    const VkSparseImageOpaqueMemoryBindInfo*    pImageOpaqueBinds
3442    u32                                         numImageBinds
3443    const VkSparseImageMemoryBindInfo*          pImageBinds
3444    u32                                         signalSemaphoreCount
3445    const VkSemaphore*                          pSignalSemaphores
3446}
3447
3448class VkImageSubresourceLayers {
3449    VkImageAspectFlags                          aspectMask
3450    u32                                         mipLevel
3451    u32                                         baseArrayLayer
3452    u32                                         layerCount
3453}
3454
3455class VkImageCopy {
3456    VkImageSubresourceLayers                    srcSubresource
3457    VkOffset3D                                  srcOffset             /// Specified in pixels for both compressed and uncompressed images
3458    VkImageSubresourceLayers                    dstSubresource
3459    VkOffset3D                                  dstOffset             /// Specified in pixels for both compressed and uncompressed images
3460    VkExtent3D                                  extent                /// Specified in pixels for both compressed and uncompressed images
3461}
3462
3463class VkImageBlit {
3464    VkImageSubresourceLayers                    srcSubresource
3465    VkOffset3D[2]                               srcOffsets
3466    VkImageSubresourceLayers                    dstSubresource
3467    VkOffset3D[2]                               dstOffsets
3468}
3469
3470class VkBufferImageCopy {
3471    VkDeviceSize                                bufferOffset           /// Specified in bytes
3472    u32                                         bufferRowLength        /// Specified in texels
3473    u32                                         bufferImageHeight
3474    VkImageSubresourceLayers                    imageSubresource
3475    VkOffset3D                                  imageOffset            /// Specified in pixels for both compressed and uncompressed images
3476    VkExtent3D                                  imageExtent            /// Specified in pixels for both compressed and uncompressed images
3477}
3478
3479class VkImageResolve {
3480    VkImageSubresourceLayers                    srcSubresource
3481    VkOffset3D                                  srcOffset
3482    VkImageSubresourceLayers                    dstSubresource
3483    VkOffset3D                                  dstOffset
3484    VkExtent3D                                  extent
3485}
3486
3487class VkShaderModuleCreateInfo {
3488    VkStructureType                             sType                  /// Must be VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO
3489    const void*                                 pNext                  /// Pointer to next structure
3490    VkShaderModuleCreateFlags                   flags                  /// Reserved
3491    platform.size_t                             codeSize               /// Specified in bytes
3492    const u32*                                  pCode                  /// Binary code of size codeSize
3493}
3494
3495class VkDescriptorSetLayoutBinding {
3496    u32                                         binding
3497    VkDescriptorType                            descriptorType     /// Type of the descriptors in this binding
3498    u32                                         descriptorCount    /// Number of descriptors in this binding
3499    VkShaderStageFlags                          stageFlags         /// Shader stages this binding is visible to
3500    const VkSampler*                            pImmutableSamplers /// Immutable samplers (used if descriptor type is SAMPLER or COMBINED_IMAGE_SAMPLER, is either NULL or contains <count> number of elements)
3501}
3502
3503class VkDescriptorSetLayoutCreateInfo {
3504    VkStructureType                             sType              /// Must be VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO
3505    const void*                                 pNext              /// Pointer to next structure
3506    VkDescriptorSetLayoutCreateFlags            flags
3507    u32                                         bindingCount       /// Number of bindings in the descriptor set layout
3508    const VkDescriptorSetLayoutBinding*         pBindings          /// Array of descriptor set layout bindings
3509}
3510
3511class VkDescriptorPoolSize {
3512    VkDescriptorType                            type
3513    u32                                         descriptorCount
3514}
3515
3516class VkDescriptorPoolCreateInfo {
3517    VkStructureType                             sType              /// Must be VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO
3518    const void*                                 pNext              /// Pointer to next structure
3519    VkDescriptorPoolCreateFlags                 flags
3520    u32                                         maxSets
3521    u32                                         poolSizeCount
3522    const VkDescriptorPoolSize*                 pPoolSizes
3523}
3524
3525class VkDescriptorSetAllocateInfo {
3526    VkStructureType                             sType              /// Must be VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO
3527    const void*                                 pNext              /// Pointer to next structure
3528    VkDescriptorPool                            descriptorPool
3529    u32                                         setCount
3530    const VkDescriptorSetLayout*                pSetLayouts
3531}
3532
3533class VkSpecializationMapEntry {
3534    u32                                         constantID         /// The SpecConstant ID specified in the BIL
3535    u32                                         offset             /// Offset of the value in the data block
3536    platform.size_t                             size               /// Size in bytes of the SpecConstant
3537}
3538
3539class VkSpecializationInfo {
3540    u32                                         mapEntryCount      /// Number of entries in the map
3541    const VkSpecializationMapEntry*             pMapEntries        /// Array of map entries
3542    platform.size_t                             dataSize           /// Size in bytes of pData
3543    const void*                                 pData              /// Pointer to SpecConstant data
3544}
3545
3546class VkPipelineShaderStageCreateInfo {
3547    VkStructureType                             sType              /// Must be VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO
3548    const void*                                 pNext              /// Pointer to next structure
3549    VkPipelineShaderStageCreateFlags            flags
3550    VkShaderStageFlagBits                       stage
3551    VkShaderModule                              module
3552    const char*                                 pName
3553    const VkSpecializationInfo*                 pSpecializationInfo
3554}
3555
3556class VkComputePipelineCreateInfo {
3557    VkStructureType                             sType              /// Must be VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO
3558    const void*                                 pNext              /// Pointer to next structure
3559    VkPipelineCreateFlags                       flags              /// Pipeline creation flags
3560    VkPipelineShaderStageCreateInfo             stage
3561    VkPipelineLayout                            layout             /// Interface layout of the pipeline
3562    VkPipeline                                  basePipelineHandle /// If VK_PIPELINE_CREATE_DERIVATIVE_BIT is set and this value is nonzero, it specifies the handle of the base pipeline this is a derivative of
3563    s32                                         basePipelineIndex  /// If VK_PIPELINE_CREATE_DERIVATIVE_BIT is set and this value is not -1, it specifies an index into pCreateInfos of the base pipeline this is a derivative of
3564}
3565
3566class VkVertexInputBindingDescription {
3567    u32                                         binding               /// Vertex buffer binding id
3568    u32                                         stride                /// Distance between vertices in bytes (0 = no advancement)
3569    VkVertexInputRate                           inputRate             /// Rate at which binding is incremented
3570}
3571
3572class VkVertexInputAttributeDescription {
3573    u32                                         location              /// location of the shader vertex attrib
3574    u32                                         binding               /// Vertex buffer binding id
3575    VkFormat                                    format                /// format of source data
3576    u32                                         offset                /// Offset of first element in bytes from base of vertex
3577}
3578
3579class VkPipelineVertexInputStateCreateInfo {
3580    VkStructureType                             sType                           /// Should be VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO
3581    const void*                                 pNext                           /// Pointer to next structure
3582    VkPipelineVertexInputStateCreateFlags       flags
3583    u32                                         vertexBindingDescriptionCount   /// number of bindings
3584    const VkVertexInputBindingDescription*      pVertexBindingDescriptions
3585    u32                                         vertexAttributeDescriptionCount /// number of attributes
3586    const VkVertexInputAttributeDescription*    pVertexAttributeDescriptions
3587}
3588
3589class VkPipelineInputAssemblyStateCreateInfo {
3590    VkStructureType                             sType      /// Must be VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO
3591    const void*                                 pNext      /// Pointer to next structure
3592    VkPipelineInputAssemblyStateCreateFlags     flags
3593    VkPrimitiveTopology                         topology
3594    VkBool32                                    primitiveRestartEnable
3595}
3596
3597class VkPipelineTessellationStateCreateInfo {
3598    VkStructureType                             sType      /// Must be VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO
3599    const void*                                 pNext      /// Pointer to next structure
3600    VkPipelineTessellationStateCreateFlags      flags
3601    u32                                         patchControlPoints
3602}
3603
3604class VkPipelineViewportStateCreateInfo {
3605    VkStructureType                             sType      /// Must be VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO
3606    const void*                                 pNext      /// Pointer to next structure
3607    VkPipelineViewportStateCreateFlags          flags
3608    u32                                         viewportCount
3609    const VkViewport*                           pViewports
3610    u32                                         scissorCount
3611    const VkRect2D*                             pScissors
3612}
3613
3614class VkPipelineRasterizationStateCreateInfo {
3615    VkStructureType                             sType      /// Must be VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO
3616    const void*                                 pNext      /// Pointer to next structure
3617    VkPipelineRasterizationStateCreateFlags     flags
3618    VkBool32                                    depthClampEnable
3619    VkBool32                                    rasterizerDiscardEnable
3620    VkPolygonMode                               polygonMode                   /// optional (GL45)
3621    VkCullModeFlags                             cullMode
3622    VkFrontFace                                 frontFace
3623    VkBool32                                    depthBiasEnable
3624    f32                                         depthBiasConstantFactor
3625    f32                                         depthBiasClamp
3626    f32                                         depthBiasSlopeFactor
3627    f32                                         lineWidth
3628}
3629
3630class VkPipelineMultisampleStateCreateInfo {
3631    VkStructureType                             sType      /// Must be VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
3632    const void*                                 pNext      /// Pointer to next structure
3633    VkPipelineMultisampleStateCreateFlags       flags
3634    VkSampleCountFlagBits                       rasterizationSamples       /// Number of samples used for rasterization
3635    VkBool32                                    sampleShadingEnable        /// optional (GL45)
3636    f32                                         minSampleShading           /// optional (GL45)
3637    const VkSampleMask*                         pSampleMask
3638    VkBool32                                    alphaToCoverageEnable
3639    VkBool32                                    alphaToOneEnable
3640}
3641
3642class VkPipelineColorBlendAttachmentState {
3643    VkBool32                                    blendEnable
3644    VkBlendFactor                               srcColorBlendFactor
3645    VkBlendFactor                               dstColorBlendFactor
3646    VkBlendOp                                   colorBlendOp
3647    VkBlendFactor                               srcAlphaBlendFactor
3648    VkBlendFactor                               dstAlphaBlendFactor
3649    VkBlendOp                                   alphaBlendOp
3650    VkColorComponentFlags                       colorWriteMask
3651}
3652
3653class VkPipelineColorBlendStateCreateInfo {
3654    VkStructureType                             sType      /// Must be VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO
3655    const void*                                 pNext      /// Pointer to next structure
3656    VkPipelineColorBlendStateCreateFlags        flags
3657    VkBool32                                    logicOpEnable
3658    VkLogicOp                                   logicOp
3659    u32                                         attachmentCount    /// # of pAttachments
3660    const VkPipelineColorBlendAttachmentState*  pAttachments
3661    f32[4]                                      blendConstants
3662}
3663
3664class VkStencilOpState {
3665    VkStencilOp                                 failOp
3666    VkStencilOp                                 passOp
3667    VkStencilOp                                 depthFailOp
3668    VkCompareOp                                 compareOp
3669    u32                                         compareMask
3670    u32                                         writeMask
3671    u32                                         reference
3672}
3673
3674class VkPipelineDepthStencilStateCreateInfo {
3675    VkStructureType                             sType      /// Must be VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO
3676    const void*                                 pNext      /// Pointer to next structure
3677    VkPipelineDepthStencilStateCreateFlags      flags
3678    VkBool32                                    depthTestEnable
3679    VkBool32                                    depthWriteEnable
3680    VkCompareOp                                 depthCompareOp
3681    VkBool32                                    depthBoundsTestEnable  /// optional (depth_bounds_test)
3682    VkBool32                                    stencilTestEnable
3683    VkStencilOpState                            front
3684    VkStencilOpState                            back
3685    f32                                         minDepthBounds
3686    f32                                         maxDepthBounds
3687}
3688
3689class VkPipelineDynamicStateCreateInfo {
3690    VkStructureType                             sType      /// Must be VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO
3691    const void*                                 pNext      /// Pointer to next structure
3692    VkPipelineDynamicStateCreateFlags           flags
3693    u32                                         dynamicStateCount
3694    const VkDynamicState*                       pDynamicStates
3695}
3696
3697class VkGraphicsPipelineCreateInfo {
3698    VkStructureType                                 sType               /// Must be VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO
3699    const void*                                     pNext               /// Pointer to next structure
3700    VkPipelineCreateFlags                           flags               /// Pipeline creation flags
3701    u32                                             stageCount
3702    const VkPipelineShaderStageCreateInfo*          pStages             /// One entry for each active shader stage
3703    const VkPipelineVertexInputStateCreateInfo*     pVertexInputState
3704    const VkPipelineInputAssemblyStateCreateInfo*   pInputAssemblyState
3705    const VkPipelineTessellationStateCreateInfo*    pTessellationState
3706    const VkPipelineViewportStateCreateInfo*        pViewportState
3707    const VkPipelineRasterizationStateCreateInfo*   pRasterizationState
3708    const VkPipelineMultisampleStateCreateInfo*     pMultisampleState
3709    const VkPipelineDepthStencilStateCreateInfo*    pDepthStencilState
3710    const VkPipelineColorBlendStateCreateInfo*      pColorBlendState
3711    const VkPipelineDynamicStateCreateInfo*         pDynamicState
3712    VkPipelineLayout                                layout              /// Interface layout of the pipeline
3713    VkRenderPass                                    renderPass
3714    u32                                             subpass
3715    VkPipeline                                      basePipelineHandle  /// If VK_PIPELINE_CREATE_DERIVATIVE_BIT is set and this value is nonzero, it specifies the handle of the base pipeline this is a derivative of
3716    s32                                             basePipelineIndex   /// If VK_PIPELINE_CREATE_DERIVATIVE_BIT is set and this value is not -1, it specifies an index into pCreateInfos of the base pipeline this is a derivative of
3717}
3718
3719class VkPipelineCacheCreateInfo {
3720    VkStructureType                             sType                 /// Must be VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO
3721    const void*                                 pNext                 /// Pointer to next structure
3722    VkPipelineCacheCreateFlags                  flags
3723    platform.size_t                             initialDataSize       /// Size of initial data to populate cache, in bytes
3724    const void*                                 pInitialData          /// Initial data to populate cache
3725}
3726
3727class VkPushConstantRange {
3728    VkShaderStageFlags                          stageFlags   /// Which stages use the range
3729    u32                                         offset       /// Start of the range, in bytes
3730    u32                                         size        /// Length of the range, in bytes
3731}
3732
3733class VkPipelineLayoutCreateInfo {
3734    VkStructureType                             sType                   /// Must be VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO
3735    const void*                                 pNext                   /// Pointer to next structure
3736    VkPipelineLayoutCreateFlags                 flags
3737    u32                                         descriptorSetCount      /// Number of descriptor sets interfaced by the pipeline
3738    const VkDescriptorSetLayout*                pSetLayouts             /// Array of <setCount> number of descriptor set layout objects defining the layout of the
3739    u32                                         pushConstantRangeCount  /// Number of push-constant ranges used by the pipeline
3740    const VkPushConstantRange*                  pPushConstantRanges     /// Array of pushConstantRangeCount number of ranges used by various shader stages
3741}
3742
3743class VkSamplerCreateInfo {
3744    VkStructureType                             sType          /// Must be VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO
3745    const void*                                 pNext          /// Pointer to next structure
3746    VkSamplerCreateFlags                        flags
3747    VkFilter                                    magFilter      /// Filter mode for magnification
3748    VkFilter                                    minFilter      /// Filter mode for minifiation
3749    VkSamplerMipmapMode                         mipmapMode     /// Mipmap selection mode
3750    VkSamplerAddressMode                        addressModeU
3751    VkSamplerAddressMode                        addressModeV
3752    VkSamplerAddressMode                        addressModeW
3753    f32                                         mipLodBias
3754    VkBool32                                    anisotropyEnable
3755    f32                                         maxAnisotropy
3756    VkBool32                                    compareEnable
3757    VkCompareOp                                 compareOp
3758    f32                                         minLod
3759    f32                                         maxLod
3760    VkBorderColor                               borderColor
3761    VkBool32                                    unnormalizedCoordinates
3762}
3763
3764class VkCommandPoolCreateInfo {
3765    VkStructureType                             sType            /// Must be VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO
3766    const void*                                 pNext            /// Pointer to next structure
3767    VkCommandPoolCreateFlags                    flags            /// Command pool creation flags
3768    u32                                         queueFamilyIndex
3769}
3770
3771class VkCommandBufferAllocateInfo {
3772    VkStructureType                             sType      /// Must be VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO
3773    const void*                                 pNext      /// Pointer to next structure
3774    VkCommandPool                               commandPool
3775    VkCommandBufferLevel                        level
3776    u32                                         commandBufferCount
3777}
3778
3779class VkCommandBufferInheritanceInfo {
3780    VkStructureType                             sType       /// Must be VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO
3781    const void*                                 pNext       /// Pointer to next structure
3782    VkRenderPass                                renderPass  /// Render pass for secondary command buffers
3783    u32                                         subpass
3784    VkFramebuffer                               framebuffer /// Framebuffer for secondary command buffers
3785    VkBool32                                    occlusionQueryEnable
3786    VkQueryControlFlags                         queryFlags
3787    VkQueryPipelineStatisticFlags               pipelineStatistics
3788}
3789
3790class VkCommandBufferBeginInfo {
3791    VkStructureType                             sType       /// Must be VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO
3792    const void*                                 pNext       /// Pointer to next structure
3793    VkCommandBufferUsageFlags                   flags       /// Command buffer usage flags
3794    const VkCommandBufferInheritanceInfo*       pInheritanceInfo
3795}
3796
3797class VkRenderPassBeginInfo {
3798    VkStructureType                             sType       /// Must be VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO
3799    const void*                                 pNext       /// Pointer to next structure
3800    VkRenderPass                                renderPass
3801    VkFramebuffer                               framebuffer
3802    VkRect2D                                    renderArea
3803    u32                                         clearValueCount
3804    const VkClearValue*                         pClearValues
3805}
3806
3807@union
3808/// Union allowing specification of floating point, integer, or unsigned integer color data. Actual value selected is based on image/attachment being cleared.
3809class VkClearColorValue {
3810    f32[4]                                      float32
3811    s32[4]                                      int32
3812    u32[4]                                      uint32
3813}
3814
3815class VkClearDepthStencilValue {
3816    f32                                         depth
3817    u32                                         stencil
3818}
3819
3820@union
3821/// Union allowing specification of color, depth, and stencil color values. Actual value selected is based on attachment being cleared.
3822class VkClearValue {
3823    VkClearColorValue                           color
3824    VkClearDepthStencilValue                    depthStencil
3825}
3826
3827class VkClearAttachment {
3828    VkImageAspectFlags                          aspectMask
3829    u32                                         colorAttachment
3830    VkClearValue                                clearValue
3831}
3832
3833class VkAttachmentDescription {
3834    VkAttachmentDescriptionFlags                flags
3835    VkFormat                                    format
3836    VkSampleCountFlagBits                       samples
3837    VkAttachmentLoadOp                          loadOp          /// Load op for color or depth data
3838    VkAttachmentStoreOp                         storeOp         /// Store op for color or depth data
3839    VkAttachmentLoadOp                          stencilLoadOp   /// Load op for stencil data
3840    VkAttachmentStoreOp                         stencilStoreOp  /// Store op for stencil data
3841    VkImageLayout                               initialLayout
3842    VkImageLayout                               finalLayout
3843}
3844
3845class VkAttachmentReference {
3846    u32                                         attachment
3847    VkImageLayout                               layout
3848}
3849
3850class VkSubpassDescription {
3851    VkSubpassDescriptionFlags                   flags
3852    VkPipelineBindPoint                         pipelineBindPoint  /// Must be VK_PIPELINE_BIND_POINT_GRAPHICS for now
3853    u32                                         inputAttachmentCount
3854    const VkAttachmentReference*                pInputAttachments
3855    u32                                         colorAttachmentCount
3856    const VkAttachmentReference*                pColorAttachments
3857    const VkAttachmentReference*                pResolveAttachments
3858    const VkAttachmentReference*                pDepthStencilAttachment
3859    u32                                         preserveAttachmentCount
3860    const u32*                                  pPreserveAttachments
3861}
3862
3863class VkSubpassDependency {
3864    u32                                         srcSubpass
3865    u32                                         dstSubpass
3866    VkPipelineStageFlags                        srcStageMask
3867    VkPipelineStageFlags                        dstStageMask
3868    VkAccessFlags                               srcAccessMask
3869    VkAccessFlags                               dstAccessMask
3870    VkDependencyFlags                           dependencyFlags
3871}
3872
3873class VkRenderPassCreateInfo {
3874    VkStructureType                             sType      /// Must be VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO
3875    const void*                                 pNext      /// Pointer to next structure
3876    VkRenderPassCreateFlags                     flags
3877    u32                                         attachmentCount
3878    const VkAttachmentDescription*              pAttachments
3879    u32                                         subpassCount
3880    const VkSubpassDescription*                 pSubpasses
3881    u32                                         dependencyCount
3882    const VkSubpassDependency*                  pDependencies
3883}
3884
3885class VkEventCreateInfo {
3886    VkStructureType                             sType      /// Must be VK_STRUCTURE_TYPE_EVENT_CREATE_INFO
3887    const void*                                 pNext      /// Pointer to next structure
3888    VkEventCreateFlags                          flags      /// Event creation flags
3889}
3890
3891class VkFenceCreateInfo {
3892    VkStructureType                             sType      /// Must be VK_STRUCTURE_TYPE_FENCE_CREATE_INFO
3893    const void*                                 pNext      /// Pointer to next structure
3894    VkFenceCreateFlags                          flags      /// Fence creation flags
3895}
3896
3897class VkPhysicalDeviceFeatures {
3898    VkBool32                                    robustBufferAccess                        /// out of bounds buffer accesses are well defined
3899    VkBool32                                    fullDrawIndexUint32                       /// full 32-bit range of indices for indexed draw calls
3900    VkBool32                                    imageCubeArray                            /// image views which are arrays of cube maps
3901    VkBool32                                    independentBlend                          /// blending operations are controlled per-attachment
3902    VkBool32                                    geometryShader                            /// geometry stage
3903    VkBool32                                    tessellationShader                        /// tessellation control and evaluation stage
3904    VkBool32                                    sampleRateShading                         /// per-sample shading and interpolation
3905    VkBool32                                    dualSrcBlend                              /// blend operations which take two sources
3906    VkBool32                                    logicOp                                   /// logic operations
3907    VkBool32                                    multiDrawIndirect                         /// multi draw indirect
3908    VkBool32                                    drawIndirectFirstInstance
3909    VkBool32                                    depthClamp                                /// depth clamping
3910    VkBool32                                    depthBiasClamp                            /// depth bias clamping
3911    VkBool32                                    fillModeNonSolid                          /// point and wireframe fill modes
3912    VkBool32                                    depthBounds                               /// depth bounds test
3913    VkBool32                                    wideLines                                 /// lines with width greater than 1
3914    VkBool32                                    largePoints                               /// points with size greater than 1
3915    VkBool32                                    alphaToOne                                /// The fragment alpha channel can be forced to maximum representable alpha value
3916    VkBool32                                    multiViewport
3917    VkBool32                                    samplerAnisotropy
3918    VkBool32                                    textureCompressionETC2                    /// ETC texture compression formats
3919    VkBool32                                    textureCompressionASTC_LDR                /// ASTC LDR texture compression formats
3920    VkBool32                                    textureCompressionBC                      /// BC1-7 texture compressed formats
3921    VkBool32                                    occlusionQueryPrecise
3922    VkBool32                                    pipelineStatisticsQuery                   /// pipeline statistics query
3923    VkBool32                                    vertexPipelineStoresAndAtomics
3924    VkBool32                                    fragmentStoresAndAtomics
3925    VkBool32                                    shaderTessellationAndGeometryPointSize
3926    VkBool32                                    shaderImageGatherExtended                 /// texture gather with run-time values and independent offsets
3927    VkBool32                                    shaderStorageImageExtendedFormats         /// the extended set of formats can be used for storage images
3928    VkBool32                                    shaderStorageImageMultisample             /// multisample images can be used for storage images
3929    VkBool32                                    shaderStorageImageReadWithoutFormat
3930    VkBool32                                    shaderStorageImageWriteWithoutFormat
3931    VkBool32                                    shaderUniformBufferArrayDynamicIndexing   /// arrays of uniform buffers can be accessed with dynamically uniform indices
3932    VkBool32                                    shaderSampledImageArrayDynamicIndexing    /// arrays of sampled images can be accessed with dynamically uniform indices
3933    VkBool32                                    shaderStorageBufferArrayDynamicIndexing   /// arrays of storage buffers can be accessed with dynamically uniform indices
3934    VkBool32                                    shaderStorageImageArrayDynamicIndexing    /// arrays of storage images can be accessed with dynamically uniform indices
3935    VkBool32                                    shaderClipDistance                        /// clip distance in shaders
3936    VkBool32                                    shaderCullDistance                        /// cull distance in shaders
3937    VkBool32                                    shaderFloat64                             /// 64-bit floats (doubles) in shaders
3938    VkBool32                                    shaderInt64                               /// 64-bit integers in shaders
3939    VkBool32                                    shaderInt16                               /// 16-bit integers in shaders
3940    VkBool32                                    shaderResourceResidency                   /// shader can use texture operations that return resource residency information (requires sparseNonResident support)
3941    VkBool32                                    shaderResourceMinLod                      /// shader can use texture operations that specify minimum resource LOD
3942    VkBool32                                    sparseBinding                             /// Sparse resources support: Resource memory can be managed at opaque page level rather than object level
3943    VkBool32                                    sparseResidencyBuffer                     /// Sparse resources support: GPU can access partially resident buffers
3944    VkBool32                                    sparseResidencyImage2D                    /// Sparse resources support: GPU can access partially resident 2D (non-MSAA non-DepthStencil) images
3945    VkBool32                                    sparseResidencyImage3D                    /// Sparse resources support: GPU can access partially resident 3D images
3946    VkBool32                                    sparseResidency2Samples                   /// Sparse resources support: GPU can access partially resident MSAA 2D images with 2 samples
3947    VkBool32                                    sparseResidency4Samples                   /// Sparse resources support: GPU can access partially resident MSAA 2D images with 4 samples
3948    VkBool32                                    sparseResidency8Samples                   /// Sparse resources support: GPU can access partially resident MSAA 2D images with 8 samples
3949    VkBool32                                    sparseResidency16Samples                  /// Sparse resources support: GPU can access partially resident MSAA 2D images with 16 samples
3950    VkBool32                                    sparseResidencyAliased                    /// Sparse resources support: GPU can correctly access data aliased into multiple locations (opt-in)
3951    VkBool32                                    variableMultisampleRate
3952    VkBool32                                    inheritedQueries
3953}
3954
3955class VkPhysicalDeviceLimits {
3956    /// resource maximum sizes
3957    u32                                         maxImageDimension1D                       /// max 1D image dimension
3958    u32                                         maxImageDimension2D                       /// max 2D image dimension
3959    u32                                         maxImageDimension3D                       /// max 3D image dimension
3960    u32                                         maxImageDimensionCube                     /// max cubemap image dimension
3961    u32                                         maxImageArrayLayers                       /// max layers for image arrays
3962    u32                                         maxTexelBufferElements
3963    u32                                         maxUniformBufferRange                     /// max uniform buffer size (bytes)
3964    u32                                         maxStorageBufferRange                     /// max storage buffer size (bytes)
3965    u32                                         maxPushConstantsSize                      /// max size of the push constants pool (bytes)
3966    /// memory limits
3967    u32                                         maxMemoryAllocationCount                  /// max number of device memory allocations supported
3968    u32                                         maxSamplerAllocationCount
3969    VkDeviceSize                                bufferImageGranularity                    /// Granularity (in bytes) at which buffers and images can be bound to adjacent memory for simultaneous usage
3970    VkDeviceSize                                sparseAddressSpaceSize                    /// Total address space available for sparse allocations (bytes)
3971    /// descriptor set limits
3972    u32                                         maxBoundDescriptorSets                    /// max number of descriptors sets that can be bound to a pipeline
3973    u32                                         maxPerStageDescriptorSamplers             /// max num of samplers allowed per-stage in a descriptor set
3974    u32                                         maxPerStageDescriptorUniformBuffers       /// max num of uniform buffers allowed per-stage in a descriptor set
3975    u32                                         maxPerStageDescriptorStorageBuffers       /// max num of storage buffers allowed per-stage in a descriptor set
3976    u32                                         maxPerStageDescriptorSampledImages        /// max num of sampled images allowed per-stage in a descriptor set
3977    u32                                         maxPerStageDescriptorStorageImages        /// max num of storage images allowed per-stage in a descriptor set
3978    u32                                         maxPerStageDescriptorInputAttachments
3979    u32                                         maxPerStageResources
3980    u32                                         maxDescriptorSetSamplers                  /// max num of samplers allowed in all stages in a descriptor set
3981    u32                                         maxDescriptorSetUniformBuffers            /// max num of uniform buffers allowed in all stages in a descriptor set
3982    u32                                         maxDescriptorSetUniformBuffersDynamic     /// max num of dynamic uniform buffers allowed in all stages in a descriptor set
3983    u32                                         maxDescriptorSetStorageBuffers            /// max num of storage buffers allowed in all stages in a descriptor set
3984    u32                                         maxDescriptorSetStorageBuffersDynamic     /// max num of dynamic storage buffers allowed in all stages in a descriptor set
3985    u32                                         maxDescriptorSetSampledImages             /// max num of sampled images allowed in all stages in a descriptor set
3986    u32                                         maxDescriptorSetStorageImages             /// max num of storage images allowed in all stages in a descriptor set
3987    u32                                         maxDescriptorSetInputAttachments
3988    /// vertex stage limits
3989    u32                                         maxVertexInputAttributes                  /// max num of vertex input attribute slots
3990    u32                                         maxVertexInputBindings                    /// max num of vertex input binding slots
3991    u32                                         maxVertexInputAttributeOffset             /// max vertex input attribute offset added to vertex buffer offset
3992    u32                                         maxVertexInputBindingStride               /// max vertex input binding stride
3993    u32                                         maxVertexOutputComponents                 /// max num of output components written by vertex shader
3994    /// tessellation control stage limits
3995    u32                                         maxTessellationGenerationLevel                  /// max level supported by tess primitive generator
3996    u32                                         maxTessellationPatchSize                        /// max patch size (vertices)
3997    u32                                         maxTessellationControlPerVertexInputComponents  /// max num of input components per-vertex in TCS
3998    u32                                         maxTessellationControlPerVertexOutputComponents /// max num of output components per-vertex in TCS
3999    u32                                         maxTessellationControlPerPatchOutputComponents  /// max num of output components per-patch in TCS
4000    u32                                         maxTessellationControlTotalOutputComponents     /// max total num of per-vertex and per-patch output components in TCS
4001    u32                                         maxTessellationEvaluationInputComponents        /// max num of input components per vertex in TES
4002    u32                                         maxTessellationEvaluationOutputComponents       /// max num of output components per vertex in TES
4003    /// geometry stage limits
4004    u32                                         maxGeometryShaderInvocations              /// max invocation count supported in geometry shader
4005    u32                                         maxGeometryInputComponents                /// max num of input components read in geometry stage
4006    u32                                         maxGeometryOutputComponents               /// max num of output components written in geometry stage
4007    u32                                         maxGeometryOutputVertices                 /// max num of vertices that can be emitted in geometry stage
4008    u32                                         maxGeometryTotalOutputComponents          /// max total num of components (all vertices) written in geometry stage
4009    /// fragment stage limits
4010    u32                                         maxFragmentInputComponents                /// max num of input compontents read in fragment stage
4011    u32                                         maxFragmentOutputAttachments              /// max num of output attachments written in fragment stage
4012    u32                                         maxFragmentDualSrcAttachments             /// max num of output attachments written when using dual source blending
4013    u32                                         maxFragmentCombinedOutputResources        /// max total num of storage buffers, storage images and output buffers
4014    /// compute stage limits
4015    u32                                         maxComputeSharedMemorySize                /// max total storage size of work group local storage (bytes)
4016    u32[3]                                      maxComputeWorkGroupCount                  /// max num of compute work groups that may be dispatched by a single command (x,y,z)
4017    u32                                         maxComputeWorkGroupInvocations            /// max total compute invocations in a single local work group
4018    u32[3]                                      maxComputeWorkGroupSize                   /// max local size of a compute work group (x,y,z)
4019
4020    u32                                         subPixelPrecisionBits                     /// num bits of subpixel precision in screen x and y
4021    u32                                         subTexelPrecisionBits                     /// num bits of subtexel precision
4022    u32                                         mipmapPrecisionBits                       /// num bits of mipmap precision
4023
4024    u32                                         maxDrawIndexedIndexValue                  /// max index value for indexed draw calls (for 32-bit indices)
4025    u32                                         maxDrawIndirectCount
4026
4027    f32                                         maxSamplerLodBias                         /// max absolute sampler level of detail bias
4028    f32                                         maxSamplerAnisotropy                      /// max degree of sampler anisotropy
4029
4030    u32                                         maxViewports                              /// max number of active viewports
4031    u32[2]                                      maxViewportDimensions                     /// max viewport dimensions (x,y)
4032    f32[2]                                      viewportBoundsRange                       /// viewport bounds range (min,max)
4033    u32                                         viewportSubPixelBits                      /// num bits of subpixel precision for viewport
4034
4035    platform.size_t                             minMemoryMapAlignment                     /// min required alignment of pointers returned by MapMemory (bytes)
4036    VkDeviceSize                                minTexelBufferOffsetAlignment             /// min required alignment for texel buffer offsets (bytes)
4037    VkDeviceSize                                minUniformBufferOffsetAlignment           /// min required alignment for uniform buffer sizes and offsets (bytes)
4038    VkDeviceSize                                minStorageBufferOffsetAlignment           /// min required alignment for storage buffer offsets (bytes)
4039
4040    s32                                         minTexelOffset                            /// min texel offset for OpTextureSampleOffset
4041    u32                                         maxTexelOffset                            /// max texel offset for OpTextureSampleOffset
4042    s32                                         minTexelGatherOffset                      /// min texel offset for OpTextureGatherOffset
4043    u32                                         maxTexelGatherOffset                      /// max texel offset for OpTextureGatherOffset
4044    f32                                         minInterpolationOffset                    /// furthest negative offset for interpolateAtOffset
4045    f32                                         maxInterpolationOffset                    /// furthest positive offset for interpolateAtOffset
4046    u32                                         subPixelInterpolationOffsetBits           /// num of subpixel bits for interpolateAtOffset
4047
4048    u32                                         maxFramebufferWidth                       /// max width for a framebuffer
4049    u32                                         maxFramebufferHeight                      /// max height for a framebuffer
4050    u32                                         maxFramebufferLayers                      /// max layer count for a layered framebuffer
4051    VkSampleCountFlags                          framebufferColorSampleCounts
4052    VkSampleCountFlags                          framebufferDepthSampleCounts
4053    VkSampleCountFlags                          framebufferStencilSampleCounts
4054    VkSampleCountFlags                          framebufferNoAttachmentSampleCounts
4055    u32                                         maxColorAttachments                       /// max num of framebuffer color attachments
4056
4057    VkSampleCountFlags                          sampledImageColorSampleCounts
4058    VkSampleCountFlags                          sampledImageIntegerSampleCounts
4059    VkSampleCountFlags                          sampledImageDepthSampleCounts
4060    VkSampleCountFlags                          sampledImageStencilSampleCounts
4061    VkSampleCountFlags                          storageImageSampleCounts
4062    u32                                         maxSampleMaskWords                        /// max num of sample mask words
4063    VkBool32                                    timestampComputeAndGraphics
4064
4065    f32                                         timestampPeriod
4066
4067    u32                                         maxClipDistances                          /// max number of clip distances
4068    u32                                         maxCullDistances                          /// max number of cull distances
4069    u32                                         maxCombinedClipAndCullDistances           /// max combined number of user clipping
4070
4071    u32                                         discreteQueuePriorities
4072
4073    f32[2]                                      pointSizeRange                            /// range (min,max) of supported point sizes
4074    f32[2]                                      lineWidthRange                            /// range (min,max) of supported line widths
4075    f32                                         pointSizeGranularity                      /// granularity of supported point sizes
4076    f32                                         lineWidthGranularity                      /// granularity of supported line widths
4077    VkBool32                                    strictLines
4078    VkBool32                                    standardSampleLocations
4079
4080    VkDeviceSize                                optimalBufferCopyOffsetAlignment
4081    VkDeviceSize                                optimalBufferCopyRowPitchAlignment
4082    VkDeviceSize                                nonCoherentAtomSize
4083}
4084
4085class VkPhysicalDeviceSparseProperties {
4086    VkBool32                                    residencyStandard2DBlockShape             /// Sparse resources support: GPU will access all 2D (single sample) sparse resources using the standard block shapes (based on pixel format)
4087    VkBool32                                    residencyStandard2DMultisampleBlockShape  /// Sparse resources support: GPU will access all 2D (multisample) sparse resources using the standard block shapes (based on pixel format)
4088    VkBool32                                    residencyStandard3DBlockShape             /// Sparse resources support: GPU will access all 3D sparse resources using the standard block shapes (based on pixel format)
4089    VkBool32                                    residencyAlignedMipSize                   /// Sparse resources support: Images with mip-level dimensions that are NOT a multiple of the block size will be placed in the mip tail
4090    VkBool32                                    residencyNonResidentStrict                /// Sparse resources support: GPU can safely access non-resident regions of a resource, all reads return as if data is 0, writes are discarded
4091}
4092
4093class VkSemaphoreCreateInfo {
4094    VkStructureType                             sType      /// Must be VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO
4095    const void*                                 pNext      /// Pointer to next structure
4096    VkSemaphoreCreateFlags                      flags      /// Semaphore creation flags
4097}
4098
4099class VkQueryPoolCreateInfo {
4100    VkStructureType                             sType              /// Must be VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO
4101    const void*                                 pNext              /// Pointer to next structure
4102    VkQueryPoolCreateFlags                      flags
4103    VkQueryType                                 queryType
4104    u32                                         queryCount
4105    VkQueryPipelineStatisticFlags               pipelineStatistics /// Optional
4106}
4107
4108class VkFramebufferCreateInfo {
4109    VkStructureType                             sType  /// Must be VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO
4110    const void*                                 pNext  /// Pointer to next structure
4111    VkFramebufferCreateFlags                    flags
4112    VkRenderPass                                renderPass
4113    u32                                         attachmentCount
4114    const VkImageView*                          pAttachments
4115    u32                                         width
4116    u32                                         height
4117    u32                                         layers
4118}
4119
4120class VkDrawIndirectCommand {
4121    u32                                         vertexCount
4122    u32                                         instanceCount
4123    u32                                         firstVertex
4124    u32                                         firstInstance
4125}
4126
4127class VkDrawIndexedIndirectCommand {
4128    u32                                         indexCount
4129    u32                                         instanceCount
4130    u32                                         firstIndex
4131    s32                                         vertexOffset
4132    u32                                         firstInstance
4133}
4134
4135class VkDispatchIndirectCommand {
4136    u32                                         x
4137    u32                                         y
4138    u32                                         z
4139}
4140
4141//@vulkan1_1 structures
4142
4143class VkPhysicalDeviceSubgroupProperties {
4144    VkStructureType                             sType
4145    void*                                       pNext
4146    u32                                         subgroupSize
4147    VkShaderStageFlags                          supportedStages
4148    VkSubgroupFeatureFlags                      supportedOperations
4149    VkBool32                                    quadOperationsInAllStages
4150}
4151
4152class VkBindBufferMemoryInfo {
4153    VkStructureType    sType
4154    const void*        pNext
4155    VkBuffer           buffer
4156    VkDeviceMemory     memory
4157    VkDeviceSize       memoryOffset
4158}
4159
4160class VkBindImageMemoryInfo {
4161    VkStructureType    sType
4162    const void*        pNext
4163    VkImage            image
4164    VkDeviceMemory     memory
4165    VkDeviceSize       memoryOffset
4166}
4167
4168class VkPhysicalDevice16BitStorageFeatures {
4169    VkStructureType    sType
4170    void*              pNext
4171    VkBool32           storageBuffer16BitAccess
4172    VkBool32           uniformAndStorageBuffer16BitAccess
4173    VkBool32           storagePushConstant16
4174    VkBool32           storageInputOutput16
4175}
4176
4177class VkMemoryDedicatedRequirements {
4178    VkStructureType    sType
4179    void*              pNext
4180    VkBool32           prefersDedicatedAllocation
4181    VkBool32           requiresDedicatedAllocation
4182}
4183
4184class VkMemoryDedicatedAllocateInfo {
4185    VkStructureType    sType
4186    const void*        pNext
4187    VkImage            image
4188    VkBuffer           buffer
4189}
4190
4191class VkMemoryAllocateFlagsInfo {
4192    VkStructureType          sType
4193    const void*              pNext
4194    VkMemoryAllocateFlags    flags
4195    u32                      deviceMask
4196}
4197
4198class VkDeviceGroupRenderPassBeginInfo {
4199    VkStructureType    sType
4200    const void*        pNext
4201    u32                deviceMask
4202    u32                deviceRenderAreaCount
4203    const VkRect2D*    pDeviceRenderAreas
4204}
4205
4206class VkDeviceGroupCommandBufferBeginInfo {
4207    VkStructureType    sType
4208    const void*        pNext
4209    u32                deviceMask
4210}
4211
4212class VkDeviceGroupSubmitInfo {
4213    VkStructureType             sType
4214    const void*                 pNext
4215    u32                         waitSemaphoreCount
4216    const u32*                  pWaitSemaphoreDeviceIndices
4217    u32                         commandBufferCount
4218    const u32*                  pCommandBufferDeviceMasks
4219    u32                         signalSemaphoreCount
4220    const u32*                  pSignalSemaphoreDeviceIndices
4221}
4222
4223class VkDeviceGroupBindSparseInfo {
4224    VkStructureType    sType
4225    const void*        pNext
4226    u32                resourceDeviceIndex
4227    u32                memoryDeviceIndex
4228}
4229
4230class VkBindBufferMemoryDeviceGroupInfo {
4231    VkStructureType                     sType
4232    const void*                         pNext
4233    u32                                 deviceIndexCount
4234    const u32*                          pDeviceIndices
4235}
4236
4237class VkBindImageMemoryDeviceGroupInfo {
4238    VkStructureType                     sType
4239    const void*                         pNext
4240    u32                                 deviceIndexCount
4241    const u32*                          pDeviceIndices
4242    u32                                 splitInstanceBindRegionCount
4243    const VkRect2D*                     pSplitInstanceBindRegions
4244}
4245
4246class VkPhysicalDeviceGroupProperties {
4247    VkStructureType                             sType
4248    void*                                       pNext
4249    u32                                         physicalDeviceCount
4250    VkPhysicalDevice[VK_MAX_DEVICE_GROUP_SIZE]  physicalDevices
4251    VkBool32                                    subsetAllocation
4252}
4253
4254class VkDeviceGroupDeviceCreateInfo {
4255    VkStructureType            sType
4256    const void*                pNext
4257    u32                        physicalDeviceCount
4258    const VkPhysicalDevice*    pPhysicalDevices
4259}
4260
4261class VkBufferMemoryRequirementsInfo2 {
4262    VkStructureType    sType
4263    const void*        pNext
4264    VkBuffer           buffer
4265}
4266
4267class VkImageMemoryRequirementsInfo2 {
4268    VkStructureType    sType
4269    const void*        pNext
4270    VkImage            image
4271}
4272
4273class VkImageSparseMemoryRequirementsInfo2 {
4274    VkStructureType    sType
4275    const void*        pNext
4276    VkImage            image
4277}
4278
4279class VkMemoryRequirements2 {
4280    VkStructureType         sType
4281    void*                   pNext
4282    VkMemoryRequirements    memoryRequirements
4283}
4284
4285class VkSparseImageMemoryRequirements2 {
4286    VkStructureType                    sType
4287    void*                              pNext
4288    VkSparseImageMemoryRequirements    memoryRequirements
4289}
4290
4291class VkPhysicalDeviceFeatures2 {
4292    VkStructureType             sType
4293    void*                       pNext
4294    VkPhysicalDeviceFeatures    features
4295}
4296
4297class VkPhysicalDeviceProperties2 {
4298    VkStructureType               sType
4299    void*                         pNext
4300    VkPhysicalDeviceProperties    properties
4301}
4302
4303class VkFormatProperties2 {
4304    VkStructureType       sType
4305    void*                 pNext
4306    VkFormatProperties    formatProperties
4307}
4308
4309class VkImageFormatProperties2 {
4310    VkStructureType            sType
4311    void*                      pNext
4312    VkImageFormatProperties    imageFormatProperties
4313}
4314
4315class VkPhysicalDeviceImageFormatInfo2 {
4316    VkStructureType       sType
4317    const void*           pNext
4318    VkFormat              format
4319    VkImageType           type
4320    VkImageTiling         tiling
4321    VkImageUsageFlags     usage
4322    VkImageCreateFlags    flags
4323}
4324
4325class VkQueueFamilyProperties2 {
4326    VkStructureType            sType
4327    void*                      pNext
4328    VkQueueFamilyProperties    queueFamilyProperties
4329}
4330
4331class VkPhysicalDeviceMemoryProperties2 {
4332    VkStructureType                     sType
4333    void*                               pNext
4334    VkPhysicalDeviceMemoryProperties    memoryProperties
4335}
4336
4337class VkSparseImageFormatProperties2 {
4338    VkStructureType                  sType
4339    void*                            pNext
4340    VkSparseImageFormatProperties    properties
4341}
4342
4343class VkPhysicalDeviceSparseImageFormatInfo2 {
4344    VkStructureType          sType
4345    const void*              pNext
4346    VkFormat                 format
4347    VkImageType              type
4348    VkSampleCountFlagBits    samples
4349    VkImageUsageFlags        usage
4350    VkImageTiling            tiling
4351}
4352
4353class VkPhysicalDevicePointClippingProperties {
4354    VkStructureType            sType
4355    void*                      pNext
4356    VkPointClippingBehavior    pointClippingBehavior
4357}
4358
4359class VkInputAttachmentAspectReference {
4360    u32                   subpass
4361    u32                   inputAttachmentIndex
4362    VkImageAspectFlags    aspectMask
4363}
4364
4365class VkRenderPassInputAttachmentAspectCreateInfo {
4366    VkStructureType                            sType
4367    const void*                                pNext
4368    u32                                        aspectReferenceCount
4369    const VkInputAttachmentAspectReference*    pAspectReferences
4370}
4371
4372class VkImageViewUsageCreateInfo {
4373    VkStructureType      sType
4374    const void*          pNext
4375    VkImageUsageFlags    usage
4376}
4377
4378class VkPipelineTessellationDomainOriginStateCreateInfo {
4379    VkStructureType               sType
4380    const void*                   pNext
4381    VkTessellationDomainOrigin    domainOrigin
4382}
4383
4384class VkRenderPassMultiviewCreateInfo {
4385    VkStructureType    sType
4386    const void*        pNext
4387    u32                subpassCount
4388    const u32*         pViewMasks
4389    u32                dependencyCount
4390    const s32*         pViewOffsets
4391    u32                correlationMaskCount
4392    const u32*         pCorrelationMasks
4393}
4394
4395class VkPhysicalDeviceMultiviewFeatures {
4396    VkStructureType    sType
4397    void*              pNext
4398    VkBool32           multiview
4399    VkBool32           multiviewGeometryShader
4400    VkBool32           multiviewTessellationShader
4401}
4402
4403class VkPhysicalDeviceMultiviewProperties {
4404    VkStructureType    sType
4405    void*              pNext
4406    u32                maxMultiviewViewCount
4407    u32                maxMultiviewInstanceIndex
4408}
4409
4410class VkPhysicalDeviceVariablePointerFeatures {
4411    VkStructureType    sType
4412    void*              pNext
4413    VkBool32           variablePointersStorageBuffer
4414    VkBool32           variablePointers
4415}
4416
4417class VkPhysicalDeviceProtectedMemoryFeatures {
4418    VkStructureType    sType
4419    void*              pNext
4420    VkBool32           protectedMemory
4421}
4422
4423class VkPhysicalDeviceProtectedMemoryProperties {
4424    VkStructureType    sType
4425    void*              pNext
4426    VkBool32           protectedNoFault
4427}
4428
4429class VkDeviceQueueInfo2 {
4430    VkStructureType             sType
4431    const void*                 pNext
4432    VkDeviceQueueCreateFlags    flags
4433    u32                         queueFamilyIndex
4434    u32                         queueIndex
4435}
4436
4437class VkProtectedSubmitInfo {
4438    VkStructureType    sType
4439    const void*        pNext
4440    VkBool32           protectedSubmit
4441}
4442
4443class VkSamplerYcbcrConversionCreateInfo {
4444    VkStructureType                  sType
4445    const void*                      pNext
4446    VkFormat                         format
4447    VkSamplerYcbcrModelConversion    ycbcrModel
4448    VkSamplerYcbcrRange              ycbcrRange
4449    VkComponentMapping               components
4450    VkChromaLocation                 xChromaOffset
4451    VkChromaLocation                 yChromaOffset
4452    VkFilter                         chromaFilter
4453    VkBool32                         forceExplicitReconstruction
4454}
4455
4456class VkSamplerYcbcrConversionInfo {
4457    VkStructureType             sType
4458    const void*                 pNext
4459    VkSamplerYcbcrConversion    conversion
4460}
4461
4462class VkBindImagePlaneMemoryInfo {
4463    VkStructureType          sType
4464    const void*              pNext
4465    VkImageAspectFlagBits    planeAspect
4466}
4467
4468class VkImagePlaneMemoryRequirementsInfo {
4469    VkStructureType          sType
4470    const void*              pNext
4471    VkImageAspectFlagBits    planeAspect
4472}
4473
4474class VkPhysicalDeviceSamplerYcbcrConversionFeatures {
4475    VkStructureType    sType
4476    void*              pNext
4477    VkBool32           samplerYcbcrConversion
4478}
4479
4480class VkSamplerYcbcrConversionImageFormatProperties {
4481    VkStructureType    sType
4482    void*              pNext
4483    u32                combinedImageSamplerDescriptorCount
4484}
4485
4486class VkDescriptorUpdateTemplateEntry {
4487    u32                                 dstBinding
4488    u32                                 dstArrayElement
4489    u32                                 descriptorCount
4490    VkDescriptorType                    descriptorType
4491    platform.size_t                     offset
4492    platform.size_t                     stride
4493}
4494
4495class VkDescriptorUpdateTemplateCreateInfo {
4496    VkStructureType                           sType
4497    void*                                     pNext
4498    VkDescriptorUpdateTemplateCreateFlags     flags
4499    u32                                       descriptorUpdateEntryCount
4500    const VkDescriptorUpdateTemplateEntry*    pDescriptorUpdateEntries
4501    VkDescriptorUpdateTemplateType            templateType
4502    VkDescriptorSetLayout                     descriptorSetLayout
4503    VkPipelineBindPoint                       pipelineBindPoint
4504    VkPipelineLayout                          pipelineLayout
4505    u32                                       set
4506}
4507
4508class VkExternalMemoryProperties {
4509    VkExternalMemoryFeatureFlags       externalMemoryFeatures
4510    VkExternalMemoryHandleTypeFlags    exportFromImportedHandleTypes
4511    VkExternalMemoryHandleTypeFlags    compatibleHandleTypes
4512}
4513
4514class VkPhysicalDeviceExternalImageFormatInfo {
4515    VkStructureType                       sType
4516    const void*                           pNext
4517    VkExternalMemoryHandleTypeFlagBits    handleType
4518}
4519
4520class VkExternalImageFormatProperties {
4521    VkStructureType               sType
4522    void*                         pNext
4523    VkExternalMemoryProperties    externalMemoryProperties
4524}
4525
4526class VkPhysicalDeviceExternalBufferInfo {
4527    VkStructureType                       sType
4528    const void*                           pNext
4529    VkBufferCreateFlags                   flags
4530    VkBufferUsageFlags                    usage
4531    VkExternalMemoryHandleTypeFlagBits    handleType
4532}
4533
4534class VkExternalBufferProperties {
4535    VkStructureType               sType
4536    void*                         pNext
4537    VkExternalMemoryProperties    externalMemoryProperties
4538}
4539
4540class VkPhysicalDeviceIDProperties {
4541    VkStructureType    sType
4542    void*              pNext
4543    u8[VK_UUID_SIZE]   deviceUUID
4544    u8[VK_UUID_SIZE]   driverUUID
4545    u8[VK_LUID_SIZE]   deviceLUID
4546    u32                deviceNodeMask
4547    VkBool32           deviceLUIDValid
4548}
4549
4550class VkExternalMemoryImageCreateInfo {
4551    VkStructureType                    sType
4552    const void*                        pNext
4553    VkExternalMemoryHandleTypeFlags    handleTypes
4554}
4555
4556class VkExternalMemoryBufferCreateInfo {
4557    VkStructureType                    sType
4558    const void*                        pNext
4559    VkExternalMemoryHandleTypeFlags    handleTypes
4560}
4561
4562class VkExportMemoryAllocateInfo {
4563    VkStructureType                    sType
4564    const void*                        pNext
4565    VkExternalMemoryHandleTypeFlags    handleTypes
4566}
4567
4568class VkPhysicalDeviceExternalFenceInfo {
4569    VkStructureType                      sType
4570    const void*                          pNext
4571    VkExternalFenceHandleTypeFlagBits    handleType
4572}
4573
4574class VkExternalFenceProperties {
4575    VkStructureType                   sType
4576    void*                             pNext
4577    VkExternalFenceHandleTypeFlags    exportFromImportedHandleTypes
4578    VkExternalFenceHandleTypeFlags    compatibleHandleTypes
4579    VkExternalFenceFeatureFlags       externalFenceFeatures
4580}
4581
4582class VkExportFenceCreateInfo {
4583    VkStructureType                   sType
4584    const void*                       pNext
4585    VkExternalFenceHandleTypeFlags    handleTypes
4586}
4587
4588class VkExportSemaphoreCreateInfo {
4589    VkStructureType                       sType
4590    const void*                           pNext
4591    VkExternalSemaphoreHandleTypeFlags    handleTypes
4592}
4593
4594class VkPhysicalDeviceExternalSemaphoreInfo {
4595    VkStructureType                          sType
4596    const void*                              pNext
4597    VkExternalSemaphoreHandleTypeFlagBits    handleType
4598}
4599
4600class VkExternalSemaphoreProperties {
4601    VkStructureType                       sType
4602    void*                                 pNext
4603    VkExternalSemaphoreHandleTypeFlags    exportFromImportedHandleTypes
4604    VkExternalSemaphoreHandleTypeFlags    compatibleHandleTypes
4605    VkExternalSemaphoreFeatureFlags       externalSemaphoreFeatures
4606}
4607
4608class VkPhysicalDeviceMaintenance3Properties {
4609    VkStructureType    sType
4610    void*              pNext
4611    u32                maxPerSetDescriptors
4612    VkDeviceSize       maxMemoryAllocationSize
4613}
4614
4615class VkDescriptorSetLayoutSupport {
4616    VkStructureType    sType
4617    void*              pNext
4618    VkBool32           supported
4619}
4620
4621class VkPhysicalDeviceShaderDrawParameterFeatures {
4622    VkStructureType    sType
4623    void*              pNext
4624    VkBool32           shaderDrawParameters
4625}
4626
4627
4628@extension("VK_KHR_surface") // 1
4629class VkSurfaceCapabilitiesKHR {
4630    u32                                         minImageCount
4631    u32                                         maxImageCount
4632    VkExtent2D                                  currentExtent
4633    VkExtent2D                                  minImageExtent
4634    VkExtent2D                                  maxImageExtent
4635    u32                                         maxImageArrayLayers
4636    VkSurfaceTransformFlagsKHR                  supportedTransforms
4637    VkSurfaceTransformFlagBitsKHR               currentTransform
4638    VkCompositeAlphaFlagsKHR                    supportedCompositeAlpha
4639    VkImageUsageFlags                           supportedUsageFlags
4640}
4641
4642@extension("VK_KHR_surface") // 1
4643class VkSurfaceFormatKHR {
4644    VkFormat                                    format
4645    VkColorSpaceKHR                             colorSpace
4646}
4647
4648@extension("VK_KHR_swapchain") // 2
4649class VkSwapchainCreateInfoKHR {
4650    VkStructureType                             sType
4651    const void*                                 pNext
4652    VkSwapchainCreateFlagsKHR                   flags
4653    VkSurfaceKHR                                surface
4654    u32                                         minImageCount
4655    VkFormat                                    imageFormat
4656    VkColorSpaceKHR                             imageColorSpace
4657    VkExtent2D                                  imageExtent
4658    u32                                         imageArrayLayers
4659    VkImageUsageFlags                           imageUsage
4660    VkSharingMode                               sharingMode
4661    u32                                         queueFamilyIndexCount
4662    const u32*                                  pQueueFamilyIndices
4663    VkSurfaceTransformFlagBitsKHR               preTransform
4664    VkCompositeAlphaFlagBitsKHR                 compositeAlpha
4665    VkPresentModeKHR                            presentMode
4666    VkBool32                                    clipped
4667    VkSwapchainKHR                              oldSwapchain
4668}
4669
4670@extension("VK_KHR_swapchain") // 2
4671class VkPresentInfoKHR {
4672    VkStructureType                             sType
4673    const void*                                 pNext
4674    u32                                         waitSemaphoreCount
4675    const VkSemaphore*                          pWaitSemaphores
4676    u32                                         swapchainCount
4677    const VkSwapchainKHR*                       pSwapchains
4678    const u32*                                  pImageIndices
4679    VkResult*                                   pResults
4680}
4681
4682@vulkan1_1
4683@extension("VK_KHR_swapchain") // 2
4684class VkImageSwapchainCreateInfoKHR {
4685    VkStructureType                             sType
4686    const void*                                 pNext
4687    VkSwapchainKHR                              swapchain
4688}
4689
4690@vulkan1_1
4691@extension("VK_KHR_swapchain") // 2
4692class VkBindImageMemorySwapchainInfoKHR {
4693    VkStructureType                             sType
4694    const void*                                 pNext
4695    VkSwapchainKHR                              swapchain
4696    u32                                         imageIndex
4697}
4698
4699@vulkan1_1
4700@extension("VK_KHR_swapchain") // 2
4701class VkAcquireNextImageInfoKHR {
4702    VkStructureType                             sType
4703    const void*                                 pNext
4704    VkSwapchainKHR                              swapchain
4705    u64                                         timeout
4706    VkSemaphore                                 semaphore
4707    VkFence                                     fence
4708    u32                                         deviceMask
4709}
4710
4711@vulkan1_1
4712@extension("VK_KHR_swapchain") // 2
4713class VkDeviceGroupPresentCapabilitiesKHR {
4714    VkStructureType                             sType
4715    const void*                                 pNext
4716    u32[VK_MAX_DEVICE_GROUP_SIZE]               presentMask
4717    VkDeviceGroupPresentModeFlagsKHR            modes
4718}
4719
4720@vulkan1_1
4721@extension("VK_KHR_swapchain") // 2
4722class VkDeviceGroupPresentInfoKHR {
4723    VkStructureType                             sType
4724    const void*                                 pNext
4725    u32                                         swapchainCount
4726    const u32*                                  pDeviceMasks
4727    VkDeviceGroupPresentModeFlagBitsKHR         mode
4728}
4729
4730@vulkan1_1
4731@extension("VK_KHR_swapchain") // 2
4732class VkDeviceGroupSwapchainCreateInfoKHR {
4733    VkStructureType                             sType
4734    const void*                                 pNext
4735    VkDeviceGroupPresentModeFlagsKHR            modes
4736}
4737
4738@extension("VK_KHR_display") // 3
4739class VkDisplayPropertiesKHR {
4740    VkDisplayKHR                                display
4741    const char*                                 displayName
4742    VkExtent2D                                  physicalDimensions
4743    VkExtent2D                                  physicalResolution
4744    VkSurfaceTransformFlagsKHR                  supportedTransforms
4745    VkBool32                                    planeReorderPossible
4746    VkBool32                                    persistentContent
4747}
4748
4749@extension("VK_KHR_display") // 3
4750class VkDisplayModeParametersKHR {
4751    VkExtent2D                                  visibleRegion
4752    u32                                         refreshRate
4753}
4754
4755@extension("VK_KHR_display") // 3
4756class VkDisplayModePropertiesKHR {
4757    VkDisplayModeKHR                            displayMode
4758    VkDisplayModeParametersKHR                  parameters
4759}
4760
4761@extension("VK_KHR_display") // 3
4762class VkDisplayModeCreateInfoKHR {
4763    VkStructureType                             sType
4764    const void*                                 pNext
4765    VkDisplayModeCreateFlagsKHR                 flags
4766    VkDisplayModeParametersKHR                  parameters
4767}
4768
4769@extension("VK_KHR_display") // 3
4770class VkDisplayPlanePropertiesKHR {
4771    VkDisplayKHR                                currentDisplay
4772    u32                                         currentStackIndex
4773}
4774
4775@extension("VK_KHR_display") // 3
4776class VkDisplayPlaneCapabilitiesKHR {
4777    VkDisplayPlaneAlphaFlagsKHR                 supportedAlpha
4778    VkOffset2D                                  minSrcPosition
4779    VkOffset2D                                  maxSrcPosition
4780    VkExtent2D                                  minSrcExtent
4781    VkExtent2D                                  maxSrcExtent
4782    VkOffset2D                                  minDstPosition
4783    VkOffset2D                                  maxDstPosition
4784    VkExtent2D                                  minDstExtent
4785    VkExtent2D                                  maxDstExtent
4786}
4787
4788@extension("VK_KHR_display") // 3
4789class VkDisplaySurfaceCreateInfoKHR {
4790    VkStructureType                             sType
4791    const void*                                 pNext
4792    VkDisplaySurfaceCreateFlagsKHR              flags
4793    VkDisplayModeKHR                            displayMode
4794    u32                                         planeIndex
4795    u32                                         planeStackIndex
4796    VkSurfaceTransformFlagBitsKHR               transform
4797    f32                                         globalAlpha
4798    VkDisplayPlaneAlphaFlagBitsKHR              alphaMode
4799    VkExtent2D                                  imageExtent
4800}
4801
4802@extension("VK_KHR_display_swapchain") // 4
4803class VkDisplayPresentInfoKHR {
4804    VkStructureType                             sType
4805    const void*                                 pNext
4806    VkRect2D                                    srcRect
4807    VkRect2D                                    dstRect
4808    VkBool32                                    persistent
4809}
4810
4811@extension("VK_KHR_xlib_surface") // 5
4812class VkXlibSurfaceCreateInfoKHR {
4813    VkStructureType                             sType
4814    const void*                                 pNext
4815    VkXlibSurfaceCreateFlagsKHR                 flags
4816    platform.Display*                           dpy
4817    platform.Window                             window
4818}
4819
4820@extension("VK_KHR_xcb_surface") // 6
4821class VkXcbSurfaceCreateInfoKHR {
4822    VkStructureType                             sType
4823    const void*                                 pNext
4824    VkXcbSurfaceCreateFlagsKHR                  flags
4825    platform.xcb_connection_t*                  connection
4826    platform.xcb_window_t                       window
4827}
4828
4829@extension("VK_KHR_wayland_surface") // 7
4830class VkWaylandSurfaceCreateInfoKHR {
4831    VkStructureType                             sType
4832    const void*                                 pNext
4833    VkWaylandSurfaceCreateFlagsKHR              flags
4834    platform.wl_display*                        display
4835    platform.wl_surface*                        surface
4836}
4837
4838@extension("VK_KHR_mir_surface") // 8
4839class VkMirSurfaceCreateInfoKHR {
4840    VkStructureType                             sType
4841    const void*                                 pNext
4842    VkMirSurfaceCreateFlagsKHR                  flags
4843    platform.MirConnection*                     connection
4844    platform.MirSurface*                        mirSurface
4845}
4846
4847@extension("VK_KHR_android_surface") // 9
4848class VkAndroidSurfaceCreateInfoKHR {
4849    VkStructureType                             sType
4850    const void*                                 pNext
4851    VkAndroidSurfaceCreateFlagsKHR              flags
4852    platform.ANativeWindow*                     window
4853}
4854
4855@extension("VK_KHR_win32_surface") // 10
4856class VkWin32SurfaceCreateInfoKHR {
4857    VkStructureType                             sType
4858    const void*                                 pNext
4859    VkWin32SurfaceCreateFlagsKHR                flags
4860    platform.HINSTANCE                          hinstance
4861    platform.HWND                               hwnd
4862}
4863
4864@extension("VK_ANDROID_native_buffer") // 11
4865@internal class Gralloc1Usage {
4866    u64                                         consumer
4867    u64                                         producer
4868}
4869
4870@extension("VK_ANDROID_native_buffer") // 11
4871class VkNativeBufferANDROID {
4872    VkStructureType                             sType
4873    const void*                                 pNext
4874    platform.buffer_handle_t                    handle
4875    s32                                         stride
4876    s32                                         format
4877    s32                                         usage
4878    Gralloc1Usage                               usage2
4879}
4880
4881@extension("VK_ANDROID_native_buffer") // 11
4882class VkSwapchainImageCreateInfoANDROID {
4883    VkStructureType                             sType
4884    const void*                                 pNext
4885    VkSwapchainImageUsageFlagsANDROID           flags
4886}
4887
4888@extension("VK_ANDROID_native_buffer") // 11
4889class VkPhysicalDevicePresentationPropertiesANDROID {
4890    VkStructureType                             sType
4891    void*                                       pNext
4892    VkBool32                                    sharedImage
4893}
4894
4895@extension("VK_EXT_debug_report") // 12
4896class VkDebugReportCallbackCreateInfoEXT {
4897    VkStructureType                             sType
4898    const void*                                 pNext
4899    VkDebugReportFlagsEXT                       flags
4900    PFN_vkDebugReportCallbackEXT                pfnCallback
4901    void*                                       pUserData
4902}
4903
4904@extension("VK_AMD_rasterization_order") // 19
4905class VkPipelineRasterizationStateRasterizationOrderAMD {
4906    VkStructureType                             sType
4907    const void*                                 pNext
4908    VkRasterizationOrderAMD                     rasterizationOrder
4909}
4910
4911@extension("VK_EXT_debug_marker") // 23
4912class VkDebugMarkerObjectNameInfoEXT {
4913    VkStructureType                             sType
4914    const void*                                 pNext
4915    VkDebugReportObjectTypeEXT                  objectType
4916    u64                                         object
4917    const char*                                 pObjectName
4918}
4919
4920@extension("VK_EXT_debug_marker") // 23
4921class VkDebugMarkerObjectTagInfoEXT {
4922    VkStructureType                             sType
4923    const void*                                 pNext
4924    VkDebugReportObjectTypeEXT                  objectType
4925    u64                                         object
4926    u64                                         tagName
4927    platform.size_t                             tagSize
4928    const void*                                 pTag
4929}
4930
4931@extension("VK_EXT_debug_marker") // 23
4932class VkDebugMarkerMarkerInfoEXT {
4933    VkStructureType                             sType
4934    const void*                                 pNext
4935    const char*                                 pMarkerName
4936    f32[4]                                      color
4937}
4938
4939@extension("VK_NV_dedicated_allocation") // 27
4940class VkDedicatedAllocationImageCreateInfoNV {
4941    VkStructureType                             sType
4942    const void*                                 pNext
4943    VkBool32                                    dedicatedAllocation
4944}
4945
4946@extension("VK_NV_dedicated_allocation") // 27
4947class VkDedicatedAllocationBufferCreateInfoNV {
4948    VkStructureType                             sType
4949    const void*                                 pNext
4950    VkBool32                                    dedicatedAllocation
4951}
4952
4953@extension("VK_NV_dedicated_allocation") // 27
4954class VkDedicatedAllocationMemoryAllocateInfoNV {
4955    VkStructureType                             sType
4956    const void*                                 pNext
4957    VkImage                                     image
4958    VkBuffer                                    buffer
4959}
4960
4961@extension("VK_AMD_texture_gather_bias_lod") // 42
4962class VkTextureLODGatherFormatPropertiesAMD {
4963    VkStructureType                             sType
4964    void*                                       pNext
4965    VkBool32                                    supportsTextureGatherLODBiasAMD
4966}
4967
4968@extension("VK_AMD_shader_info") // 43
4969class VkShaderResourceUsageAMD {
4970    u32                                         numUsedVgprs
4971    u32                                         numUsedSgprs
4972    u32                                         ldsSizePerLocalWorkGroup
4973    platform.size_t                             ldsUsageSizeInBytes
4974    platform.size_t                             scratchMemUsageInBytes
4975}
4976
4977@extension("VK_AMD_shader_info") // 43
4978class VkShaderStatisticsInfoAMD {
4979    VkShaderStageFlags                          shaderStageMask
4980    VkShaderResourceUsageAMD                    resourceUsage
4981    u32                                         numPhysicalVgprs
4982    u32                                         numPhysicalSgprs
4983    u32                                         numAvailableVgprs
4984    u32                                         numAvailableSgprs
4985    u32[3]                                      computeWorkGroupSize
4986}
4987
4988@extension("VK_KHR_multiview") // 54
4989class VkRenderPassMultiviewCreateInfoKHR {
4990    VkStructureType                             sType
4991    const void*                                 pNext
4992    u32                                         subpassCount
4993    const u32*                                  pViewMasks
4994    u32                                         dependencyCount
4995    const s32*                                  pViewOffsets
4996    u32                                         correlationMaskCount
4997    const u32*                                  pCorrelationMasks
4998}
4999
5000@extension("VK_KHR_multiview") // 54
5001class VkPhysicalDeviceMultiviewFeaturesKHR {
5002    VkStructureType                             sType
5003    void*                                       pNext
5004    VkBool32                                    multiview
5005    VkBool32                                    multiviewGeometryShader
5006    VkBool32                                    multiviewTessellationShader
5007}
5008
5009@extension("VK_KHR_multiview") // 54
5010class VkPhysicalDeviceMultiviewPropertiesKHR {
5011    VkStructureType                             sType
5012    void*                                       pNext
5013    u32                                         maxMultiviewViewCount
5014    u32                                         maxMultiviewInstanceIndex
5015}
5016
5017@extension("VK_NV_external_memory_capabilities") // 56
5018class VkExternalImageFormatPropertiesNV {
5019    VkImageFormatProperties                     imageFormatProperties
5020    VkExternalMemoryFeatureFlagsNV              externalMemoryFeatures
5021    VkExternalMemoryHandleTypeFlagsNV           exportFromImportedHandleTypes
5022    VkExternalMemoryHandleTypeFlagsNV           compatibleHandleTypes
5023}
5024
5025@extension("VK_NV_external_memory") // 57
5026class VkExternalMemoryImageCreateInfoNV {
5027    VkStructureType                             sType
5028    const void*                                 pNext
5029    VkExternalMemoryHandleTypeFlagsNV           handleTypes
5030}
5031
5032@extension("VK_NV_external_memory") // 57
5033class VkExportMemoryAllocateInfoNV {
5034    VkStructureType                             sType
5035    const void*                                 pNext
5036    VkExternalMemoryHandleTypeFlagsNV           handleTypes
5037}
5038
5039@extension("VK_NV_external_memory_win32") // 58
5040class VkImportMemoryWin32HandleInfoNV {
5041    VkStructureType                             sType
5042    const void*                                 pNext
5043    VkExternalMemoryHandleTypeFlagsNV           handleType
5044    platform.HANDLE                             handle
5045}
5046
5047@extension("VK_NV_external_memory_win32") // 58
5048class VkExportMemoryWin32HandleInfoNV {
5049    VkStructureType                             sType
5050    const void*                                 pNext
5051    const platform.SECURITY_ATTRIBUTES*         pAttributes
5052    platform.DWORD                              dwAccess
5053}
5054
5055@extension("VK_NV_win32_keyed_mutex") // 59
5056class VkWin32KeyedMutexAcquireReleaseInfoNV {
5057    VkStructureType                             sType
5058    const void*                                 pNext
5059    u32                                         acquireCount
5060    const VkDeviceMemory*                       pAcquireSyncs
5061    const u64*                                  pAcquireKeys
5062    const u32*                                  pAcquireTimeoutMilliseconds
5063    u32                                         releaseCount
5064    const VkDeviceMemory*                       pReleaseSyncs
5065    const u64*                                  pReleaseKeys
5066}
5067
5068@extension("VK_KHR_get_physical_device_properties2") // 60
5069class VkPhysicalDeviceFeatures2KHR {
5070    VkStructureType                             sType
5071    void*                                       pNext
5072    VkPhysicalDeviceFeatures                    features
5073}
5074
5075@extension("VK_KHR_get_physical_device_properties2") // 60
5076class VkPhysicalDeviceProperties2KHR {
5077    VkStructureType                             sType
5078    void*                                       pNext
5079    VkPhysicalDeviceProperties                  properties
5080}
5081
5082@extension("VK_KHR_get_physical_device_properties2") // 60
5083class VkFormatProperties2KHR {
5084    VkStructureType                             sType
5085    void*                                       pNext
5086    VkFormatProperties                          formatProperties
5087}
5088
5089@extension("VK_KHR_get_physical_device_properties2") // 60
5090class VkImageFormatProperties2KHR {
5091    VkStructureType                             sType
5092    void*                                       pNext
5093    VkImageFormatProperties                     imageFormatProperties
5094}
5095
5096@extension("VK_KHR_get_physical_device_properties2") // 60
5097class VkPhysicalDeviceImageFormatInfo2KHR {
5098    VkStructureType                             sType
5099    const void*                                 pNext
5100    VkFormat                                    format
5101    VkImageType                                 type
5102    VkImageTiling                               tiling
5103    VkImageUsageFlags                           usage
5104    VkImageCreateFlags                          flags
5105}
5106
5107@extension("VK_KHR_get_physical_device_properties2") // 60
5108class VkQueueFamilyProperties2KHR {
5109    VkStructureType                             sType
5110    void*                                       pNext
5111    VkQueueFamilyProperties                     queueFamilyProperties
5112}
5113
5114@extension("VK_KHR_get_physical_device_properties2") // 60
5115class VkPhysicalDeviceMemoryProperties2KHR {
5116    VkStructureType                             sType
5117    void*                                       pNext
5118    VkPhysicalDeviceMemoryProperties            memoryProperties
5119}
5120
5121@extension("VK_KHR_get_physical_device_properties2") // 60
5122class VkSparseImageFormatProperties2KHR {
5123    VkStructureType                             sType
5124    void*                                       pNext
5125    VkSparseImageFormatProperties               properties
5126}
5127
5128@extension("VK_KHR_get_physical_device_properties2") // 60
5129class VkPhysicalDeviceSparseImageFormatInfo2KHR {
5130    VkStructureType                             sType
5131    const void*                                 pNext
5132    VkFormat                                    format
5133    VkImageType                                 type
5134    VkSampleCountFlagBits                       samples
5135    VkImageUsageFlags                           usage
5136    VkImageTiling                               tiling
5137}
5138
5139@extension("VK_KHR_device_group") // 61
5140class VkMemoryAllocateFlagsInfoKHR {
5141    VkStructureType                             sType
5142    const void*                                 pNext
5143    VkMemoryAllocateFlagsKHR                    flags
5144    u32                                         deviceMask
5145}
5146
5147@extension("VK_KHR_device_group") // 61
5148class VkBindBufferMemoryDeviceGroupInfoKHR {
5149    VkStructureType                             sType
5150    const void*                                 pNext
5151    u32                                         deviceIndexCount
5152    const u32*                                  pDeviceIndices
5153}
5154
5155@extension("VK_KHR_device_group") // 61
5156class VkBindImageMemoryDeviceGroupInfoKHR {
5157    VkStructureType                             sType
5158    const void*                                 pNext
5159    u32                                         deviceIndexCount
5160    const u32*                                  pDeviceIndices
5161    u32                                         SFRRectCount
5162    const VkRect2D*                             pSFRRects
5163}
5164
5165@extension("VK_KHR_device_group") // 61
5166class VkDeviceGroupRenderPassBeginInfoKHR {
5167    VkStructureType                             sType
5168    const void*                                 pNext
5169    u32                                         deviceMask
5170    u32                                         deviceRenderAreaCount
5171    const VkRect2D*                             pDeviceRenderAreas
5172}
5173
5174@extension("VK_KHR_device_group") // 61
5175class VkDeviceGroupCommandBufferBeginInfoKHR {
5176    VkStructureType                             sType
5177    const void*                                 pNext
5178    u32                                         deviceMask
5179}
5180
5181@extension("VK_KHR_device_group") // 61
5182class VkDeviceGroupSubmitInfoKHR {
5183    VkStructureType                             sType
5184    const void*                                 pNext
5185    u32                                         waitSemaphoreCount
5186    const u32*                                  pWaitSemaphoreDeviceIndices
5187    u32                                         commandBufferCount
5188    const u32*                                  pCommandBufferDeviceMasks
5189    u32                                         signalSemaphoreCount
5190    const u32*                                  pSignalSemaphoreDeviceIndices
5191}
5192
5193@extension("VK_KHR_device_group") // 61
5194class VkDeviceGroupBindSparseInfoKHR {
5195    VkStructureType                             sType
5196    const void*                                 pNext
5197    u32                                         resourceDeviceIndex
5198    u32                                         memoryDeviceIndex
5199}
5200
5201@extension("VK_EXT_validation_flags") // 62
5202class VkValidationFlagsEXT {
5203    VkStructureType                             sType
5204    const void*                                 pNext
5205    u32                                         disabledValidationCheckCount
5206    VkValidationCheckEXT*                       pDisabledValidationChecks
5207}
5208
5209@extension("VK_NN_vi_surface") // 63
5210class VkViSurfaceCreateInfoNN {
5211    VkStructureType                             sType
5212    const void*                                 pNext
5213    VkViSurfaceCreateFlagsNN                    flags
5214    void*                                       window
5215}
5216
5217@extension("VK_KHR_device_group_creation") // 71
5218class VkPhysicalDeviceGroupPropertiesKHR {
5219    VkStructureType                                 sType
5220    void*                                           pNext
5221    u32                                             physicalDeviceCount
5222    VkPhysicalDevice[VK_MAX_DEVICE_GROUP_SIZE]      physicalDevices
5223    VkBool32                                        subsetAllocation
5224}
5225
5226@extension("VK_KHR_device_group_creation") // 71
5227class VkDeviceGroupDeviceCreateInfoKHR {
5228    VkStructureType                             sType
5229    const void*                                 pNext
5230    u32                                         physicalDeviceCount
5231    const VkPhysicalDevice*                     pPhysicalDevices
5232}
5233
5234@extension("VK_KHR_external_memory_capabilities") // 72
5235class VkExternalMemoryPropertiesKHR {
5236    VkExternalMemoryFeatureFlagsKHR             externalMemoryFeatures
5237    VkExternalMemoryHandleTypeFlagsKHR          exportFromImportedHandleTypes
5238    VkExternalMemoryHandleTypeFlagsKHR          compatibleHandleTypes
5239}
5240
5241@extension("VK_KHR_external_memory_capabilities") // 72
5242class VkPhysicalDeviceExternalImageFormatInfoKHR {
5243    VkStructureType                             sType
5244    const void*                                 pNext
5245    VkExternalMemoryHandleTypeFlagBitsKHR       handleType
5246}
5247
5248@extension("VK_KHR_external_memory_capabilities") // 72
5249class VkExternalImageFormatPropertiesKHR {
5250    VkStructureType                             sType
5251    void*                                       pNext
5252    VkExternalMemoryPropertiesKHR               externalMemoryProperties
5253}
5254
5255@extension("VK_KHR_external_memory_capabilities") // 72
5256class VkPhysicalDeviceExternalBufferInfoKHR {
5257    VkStructureType                             sType
5258    const void*                                 pNext
5259    VkBufferCreateFlags                         flags
5260    VkBufferUsageFlags                          usage
5261    VkExternalMemoryHandleTypeFlagBitsKHR       handleType
5262}
5263
5264@extension("VK_KHR_external_memory_capabilities") // 72
5265class VkExternalBufferPropertiesKHR {
5266    VkStructureType                             sType
5267    void*                                       pNext
5268    VkExternalMemoryPropertiesKHR               externalMemoryProperties
5269}
5270
5271@extension("VK_KHR_external_memory_capabilities") // 72
5272class VkPhysicalDeviceIDPropertiesKHR {
5273    VkStructureType                             sType
5274    void*                                       pNext
5275    u8[VK_UUID_SIZE]                            deviceUUID
5276    u8[VK_UUID_SIZE]                            driverUUID
5277    u8[VK_LUID_SIZE]                            deviceLUID
5278    u32                                         deviceNodeMask
5279    VkBool32                                    deviceLUIDValid
5280}
5281
5282@extension("VK_KHR_external_memory") // 73
5283class VkExternalMemoryImageCreateInfoKHR {
5284    VkStructureType                             sType
5285    const void*                                 pNext
5286    VkExternalMemoryHandleTypeFlagsKHR          handleTypes
5287}
5288
5289@extension("VK_KHR_external_memory") // 73
5290class VkExternalMemoryBufferCreateInfoKHR {
5291    VkStructureType                             sType
5292    const void*                                 pNext
5293    VkExternalMemoryHandleTypeFlagsKHR          handleTypes
5294}
5295
5296@extension("VK_KHR_external_memory") // 73
5297class VkExportMemoryAllocateInfoKHR {
5298    VkStructureType                             sType
5299    const void*                                 pNext
5300    VkExternalMemoryHandleTypeFlagsKHR          handleTypes
5301}
5302
5303@extension("VK_KHR_external_memory_win32") // 74
5304class VkImportMemoryWin32HandleInfoKHR {
5305    VkStructureType                             sType
5306    const void*                                 pNext
5307    VkExternalMemoryHandleTypeFlagBitsKHR       handleType
5308    platform.HANDLE                             handle
5309    platform.LPCWSTR                            name
5310}
5311
5312@extension("VK_KHR_external_memory_win32") // 74
5313class VkExportMemoryWin32HandleInfoKHR {
5314    VkStructureType                             sType
5315    const void*                                 pNext
5316    const platform.SECURITY_ATTRIBUTES*         pAttributes
5317    platform.DWORD                              dwAccess
5318    platform.LPCWSTR                            name
5319}
5320
5321@extension("VK_KHR_external_memory_win32") // 74
5322class VkMemoryWin32HandlePropertiesKHR {
5323    VkStructureType                             sType
5324    void*                                       pNext
5325    u32                                         memoryTypeBits
5326}
5327
5328@extension("VK_KHR_external_memory_win32") // 74
5329class VkMemoryGetWin32HandleInfoKHR {
5330    VkStructureType                             sType
5331    void*                                       pNext
5332    VkDeviceMemory                              memory
5333    VkExternalMemoryHandleTypeFlagBitsKHR       handleType
5334}
5335
5336@extension("VK_KHR_external_memory_fd") // 75
5337class VkImportMemoryFdInfoKHR {
5338    VkStructureType                             sType
5339    const void*                                 pNext
5340    VkExternalMemoryHandleTypeFlagBitsKHR       handleType
5341    int                                         fd
5342}
5343
5344@extension("VK_KHR_external_memory_fd") // 75
5345class VkMemoryFdPropertiesKHR {
5346    VkStructureType                             sType
5347    void*                                       pNext
5348    u32                                         memoryTypeBits
5349}
5350
5351@extension("VK_KHR_external_memory_fd") // 75
5352class VkMemoryGetFdInfoKHR {
5353    VkStructureType                             sType
5354    void*                                       pNext
5355    VkDeviceMemory                              memory
5356    VkExternalMemoryHandleTypeFlagBitsKHR       handleType
5357}
5358
5359@extension("VK_KHR_win32_keyed_mutex") // 76
5360class VkWin32KeyedMutexAcquireReleaseInfoKHR {
5361    VkStructureType                             sType
5362    const void*                                 pNext
5363    u32                                         acquireCount
5364    const VkDeviceMemory*                       pAcquireSyncs
5365    const u64*                                  pAcquireKeys
5366    const u32*                                  pAcquireTimeouts
5367    u32                                         releaseCount
5368    const VkDeviceMemory*                       pReleaseSyncs
5369    const u64*                                  pReleaseKeys
5370}
5371
5372@extension("VK_KHR_external_semaphore_capabilities") // 77
5373class VkPhysicalDeviceExternalSemaphoreInfoKHR {
5374    VkStructureType                             sType
5375    const void*                                 pNext
5376    VkExternalSemaphoreHandleTypeFlagBitsKHR    handleType
5377}
5378
5379@extension("VK_KHR_external_semaphore_capabilities") // 77
5380class VkExternalSemaphorePropertiesKHR {
5381    VkStructureType                             sType
5382    void*                                       pNext
5383    VkExternalSemaphoreHandleTypeFlagsKHR       exportFromImportedHandleTypes
5384    VkExternalSemaphoreHandleTypeFlagsKHR       compatibleHandleTypes
5385    VkExternalSemaphoreFeatureFlagsKHR          externalSemaphoreFeatures
5386}
5387
5388@extension("VK_KHR_external_semaphore") // 78
5389class VkExportSemaphoreCreateInfoKHR {
5390    VkStructureType                             sType
5391    const void*                                 pNext
5392    VkExternalSemaphoreHandleTypeFlagsKHR       handleTypes
5393}
5394
5395@extension("VK_KHR_external_semaphore_win32") // 79
5396class VkImportSemaphoreWin32HandleInfoKHR {
5397    VkStructureType                             sType
5398    const void*                                 pNext
5399    VkSemaphore                                 semaphore
5400    VkSemaphoreImportFlagsKHR                   flags
5401    VkExternalSemaphoreHandleTypeFlagsKHR       handleType
5402    platform.HANDLE                             handle
5403    platform.LPCWSTR                            name
5404}
5405
5406@extension("VK_KHR_external_semaphore_win32") // 79
5407class VkExportSemaphoreWin32HandleInfoKHR {
5408    VkStructureType                             sType
5409    const void*                                 pNext
5410    const platform.SECURITY_ATTRIBUTES*         pAttributes
5411    platform.DWORD                              dwAccess
5412    platform.LPCWSTR                            name
5413}
5414
5415@extension("VK_KHR_external_semaphore_win32") // 79
5416class VkD3D12FenceSubmitInfoKHR {
5417    VkStructureType                             sType
5418    const void*                                 pNext
5419    u32                                         waitSemaphoreValuesCount
5420    const u64*                                  pWaitSemaphoreValues
5421    u32                                         signalSemaphoreValuesCount
5422    const u64*                                  pSignalSemaphoreValues
5423}
5424
5425@extension("VK_KHR_external_semaphore_win32") // 79
5426class VkSemaphoreGetWin32HandleInfoKHR {
5427    VkStructureType                             sType
5428    const void*                                 pNext
5429    VkSemaphore                                 semaphore
5430    VkExternalSemaphoreHandleTypeFlagBitsKHR    handleType
5431}
5432
5433@extension("VK_KHR_external_semaphore_fd") // 80
5434class VkImportSemaphoreFdInfoKHR {
5435    VkStructureType                             sType
5436    const void*                                 pNext
5437    VkSemaphore                                 semaphore
5438    VkSemaphoreImportFlagsKHR                   flags
5439    VkExternalSemaphoreHandleTypeFlagBitsKHR    handleType
5440    s32                                         fd
5441}
5442
5443@extension("VK_KHR_external_semaphore_fd") // 80
5444class VkSemaphoreGetFdInfoKHR {
5445    VkStructureType                             sType
5446    const void*                                 pNext
5447    VkSemaphore                                 semaphore
5448    VkExternalSemaphoreHandleTypeFlagBitsKHR    handleType
5449}
5450
5451@extension("VK_KHR_push_descriptor") // 81
5452class VkPhysicalDevicePushDescriptorPropertiesKHR {
5453    VkStructureType                             sType
5454    void*                                       pNext
5455    u32                                         maxPushDescriptors
5456}
5457
5458@extension("VK_KHR_16bit_storage") // 84
5459class VkPhysicalDevice16BitStorageFeaturesKHR {
5460    VkStructureType                             sType
5461    void*                                       pNext
5462    VkBool32                                    storageBuffer16BitAccess
5463    VkBool32                                    uniformAndStorageBuffer16BitAccess
5464    VkBool32                                    storagePushConstant16
5465    VkBool32                                    storageInputOutput16
5466}
5467
5468@extension("VK_KHR_incremental_present") // 85
5469class VkRectLayerKHR {
5470    VkOffset2D                                  offset
5471    VkExtent2D                                  extent
5472    u32                                         layer
5473}
5474
5475@extension("VK_KHR_incremental_present") // 85
5476class VkPresentRegionKHR {
5477    u32                                         rectangleCount
5478    const VkRectLayerKHR*                       pRectangles
5479}
5480
5481@extension("VK_KHR_incremental_present") // 85
5482class VkPresentRegionsKHR {
5483    VkStructureType                             sType
5484    const void*                                 pNext
5485    u32                                         swapchainCount
5486    const VkPresentRegionKHR*                   pRegions
5487}
5488
5489@extension("VK_KHR_descriptor_update_template") // 86
5490class VkDescriptorUpdateTemplateEntryKHR {
5491    u32                                         dstBinding
5492    u32                                         dstArrayElement
5493    u32                                         descriptorCount
5494    VkDescriptorType                            descriptorType
5495    platform.size_t                             offset
5496    platform.size_t                             stride
5497}
5498
5499@extension("VK_KHR_descriptor_update_template") // 86
5500class VkDescriptorUpdateTemplateCreateInfoKHR {
5501    VkStructureType                              sType
5502    void*                                        pNext
5503    VkDescriptorUpdateTemplateCreateFlagsKHR     flags
5504    u32                                          descriptorUpdateEntryCount
5505    const VkDescriptorUpdateTemplateEntryKHR*    pDescriptorUpdateEntries
5506    VkDescriptorUpdateTemplateTypeKHR            templateType
5507    VkDescriptorSetLayout                        descriptorSetLayout
5508    VkPipelineBindPoint                          pipelineBindPoint
5509    VkPipelineLayout                             pipelineLayout
5510    u32                                          set
5511}
5512
5513@extension("VK_NVX_device_generated_commands") // 87
5514class VkDeviceGeneratedCommandsFeaturesNVX {
5515    VkStructureType                             sType
5516    const void*                                 pNext
5517    VkBool32                                    computeBindingPointSupport
5518}
5519
5520@extension("VK_NVX_device_generated_commands") // 87
5521class VkDeviceGeneratedCommandsLimitsNVX {
5522    VkStructureType                             sType
5523    const void*                                 pNext
5524    u32                                         maxIndirectCommandsLayoutTokenCount
5525    u32                                         maxObjectEntryCounts
5526    u32                                         minSequenceCountBufferOffsetAlignment
5527    u32                                         minSequenceIndexBufferOffsetAlignment
5528    u32                                         minCommandsTokenBufferOffsetAlignment
5529}
5530
5531@extension("VK_NVX_device_generated_commands") // 87
5532class VkIndirectCommandsTokenNVX {
5533    VkIndirectCommandsTokenTypeNVX              tokenType
5534    VkBuffer                                    buffer
5535    VkDeviceSize                                offset
5536}
5537
5538@extension("VK_NVX_device_generated_commands") // 87
5539class VkIndirectCommandsLayoutTokenNVX {
5540    VkIndirectCommandsTokenTypeNVX              tokenType
5541    u32                                         bindingUnit
5542    u32                                         dynamicCount
5543    u32                                         divisor
5544}
5545
5546@extension("VK_NVX_device_generated_commands") // 87
5547class VkIndirectCommandsLayoutCreateInfoNVX {
5548    VkStructureType                             sType
5549    const void*                                 pNext
5550    VkPipelineBindPoint                         pipelineBindPoint
5551    VkIndirectCommandsLayoutUsageFlagsNVX       flags
5552    u32                                         tokenCount
5553    const VkIndirectCommandsLayoutTokenNVX*     pTokens
5554}
5555
5556@extension("VK_NVX_device_generated_commands") // 87
5557class VkCmdProcessCommandsInfoNVX {
5558    VkStructureType                             sType
5559    const void*                                 pNext
5560    VkObjectTableNVX                            objectTable
5561    VkIndirectCommandsLayoutNVX                 indirectCommandsLayout
5562    u32                                         indirectCommandsTokenCount
5563    const VkIndirectCommandsTokenNVX*           pIndirectCommandsTokens
5564    u32                                         maxSequencesCount
5565    VkCommandBuffer                             targetCommandBuffer
5566    VkBuffer                                    sequencesCountBuffer
5567    VkDeviceSize                                sequencesCountOffset
5568    VkBuffer                                    sequencesIndexBuffer
5569    VkDeviceSize                                sequencesIndexOffset
5570}
5571
5572@extension("VK_NVX_device_generated_commands") // 87
5573class VkCmdReserveSpaceForCommandsInfoNVX {
5574    VkStructureType                             sType
5575    const void*                                 pNext
5576    VkObjectTableNVX                            objectTable
5577    VkIndirectCommandsLayoutNVX                 indirectCommandsLayout
5578    u32                                         maxSequencesCount
5579}
5580
5581@extension("VK_NVX_device_generated_commands") // 87
5582class VkObjectTableCreateInfoNVX {
5583    VkStructureType                             sType
5584    const void*                                 pNext
5585    u32                                         objectCount
5586    const VkObjectEntryTypeNVX*                 pObjectEntryTypes
5587    const u32*                                  pObjectEntryCounts
5588    const VkObjectEntryUsageFlagsNVX*           pObjectEntryUsageFlags
5589    u32                                         maxUniformBuffersPerDescriptor
5590    u32                                         maxStorageBuffersPerDescriptor
5591    u32                                         maxStorageImagesPerDescriptor
5592    u32                                         maxSampledImagesPerDescriptor
5593    u32                                         maxPipelineLayouts
5594}
5595
5596@extension("VK_NVX_device_generated_commands") // 87
5597class VkObjectTableEntryNVX {
5598    VkObjectEntryTypeNVX                        type
5599    VkObjectEntryUsageFlagsNVX                  flags
5600}
5601
5602@extension("VK_NVX_device_generated_commands") // 87
5603class VkObjectTablePipelineEntryNVX {
5604    VkObjectEntryTypeNVX                        type
5605    VkObjectEntryUsageFlagsNVX                  flags
5606    VkPipeline                                  pipeline
5607}
5608
5609@extension("VK_NVX_device_generated_commands") // 87
5610class VkObjectTableDescriptorSetEntryNVX {
5611    VkObjectEntryTypeNVX                        type
5612    VkObjectEntryUsageFlagsNVX                  flags
5613    VkPipelineLayout                            pipelineLayout
5614    VkDescriptorSet                             descriptorSet
5615}
5616
5617@extension("VK_NVX_device_generated_commands") // 87
5618class VkObjectTableVertexBufferEntryNVX {
5619    VkObjectEntryTypeNVX                        type
5620    VkObjectEntryUsageFlagsNVX                  flags
5621    VkBuffer                                    buffer
5622}
5623
5624@extension("VK_NVX_device_generated_commands") // 87
5625class VkObjectTableIndexBufferEntryNVX {
5626    VkObjectEntryTypeNVX                        type
5627    VkObjectEntryUsageFlagsNVX                  flags
5628    VkBuffer                                    buffer
5629    VkIndexType                                 indexType
5630}
5631
5632@extension("VK_NVX_device_generated_commands") // 87
5633class VkObjectTablePushConstantEntryNVX {
5634    VkObjectEntryTypeNVX                        type
5635    VkObjectEntryUsageFlagsNVX                  flags
5636    VkPipelineLayout                            pipelineLayout
5637    VkShaderStageFlags                          stageFlags
5638}
5639
5640@extension("VK_NV_clip_space_w_scaling") // 88
5641class VkViewportWScalingNV {
5642    f32                                         xcoeff
5643    f32                                         ycoeff
5644}
5645
5646@extension("VK_NV_clip_space_w_scaling") // 88
5647class VkPipelineViewportWScalingStateCreateInfoNV {
5648    VkStructureType                             sType
5649    const void*                                 pNext
5650    VkBool32                                    viewportWScalingEnable
5651    u32                                         viewportCount
5652    const VkViewportWScalingNV*                 pViewportWScalings
5653}
5654
5655@extension("VK_EXT_display_surface_counter") // 91
5656class VkSurfaceCapabilities2EXT {
5657    VkStructureType                             sType
5658    void*                                       pNext
5659    u32                                         minImageCount
5660    u32                                         maxImageCount
5661    VkExtent2D                                  currentExtent
5662    VkExtent2D                                  minImageExtent
5663    VkExtent2D                                  maxImageExtent
5664    u32                                         maxImageArrayLayers
5665    VkSurfaceTransformFlagsKHR                  supportedTransforms
5666    VkSurfaceTransformFlagBitsKHR               currentTransform
5667    VkCompositeAlphaFlagsKHR                    supportedCompositeAlpha
5668    VkImageUsageFlags                           supportedUsageFlags
5669    VkSurfaceCounterFlagsEXT                    supportedSurfaceCounters
5670}
5671
5672@extension("VK_EXT_display_control") // 92
5673class VkDisplayPowerInfoEXT {
5674    VkStructureType                             sType
5675    const void*                                 pNext
5676    VkDisplayPowerStateEXT                      powerState
5677}
5678
5679@extension("VK_EXT_display_control") // 92
5680class VkDeviceEventInfoEXT {
5681    VkStructureType                             sType
5682    const void*                                 pNext
5683    VkDeviceEventTypeEXT                        deviceEvent
5684}
5685
5686@extension("VK_EXT_display_control") // 92
5687class VkDisplayEventInfoEXT {
5688    VkStructureType                             sType
5689    const void*                                 pNext
5690    VkDisplayEventTypeEXT                       displayEvent
5691}
5692
5693@extension("VK_EXT_display_control") // 92
5694class VkSwapchainCounterCreateInfoEXT {
5695    VkStructureType                             sType
5696    const void*                                 pNext
5697    VkSurfaceCounterFlagsEXT                    surfaceCounters
5698}
5699
5700@extension("VK_GOOGLE_display_timing") // 93
5701class VkRefreshCycleDurationGOOGLE {
5702    u64                                             refreshDuration
5703}
5704
5705@extension("VK_GOOGLE_display_timing") // 93
5706class VkPastPresentationTimingGOOGLE {
5707    u32                                             presentID
5708    u64                                             desiredPresentTime
5709    u64                                             actualPresentTime
5710    u64                                             earliestPresentTime
5711    u64                                             presentMargin
5712}
5713
5714@extension("VK_GOOGLE_display_timing") // 93
5715class VkPresentTimeGOOGLE {
5716    u32                                             presentID
5717    u64                                             desiredPresentTime
5718}
5719
5720@extension("VK_GOOGLE_display_timing") // 93
5721class VkPresentTimesInfoGOOGLE {
5722    VkStructureType                                 sType
5723    const void*                                     pNext
5724    u32                                             swapchainCount
5725    const VkPresentTimeGOOGLE*                      pTimes
5726}
5727
5728@extension("VK_NVX_multiview_per_view_attributes") // 98
5729class VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX {
5730    VkStructureType                             sType
5731    void*                                       pNext
5732    VkBool32                                    perViewPositionAllComponents
5733}
5734
5735@extension("VK_NV_viewport_swizzle") // 99
5736class VkViewportSwizzleNV {
5737    VkViewportCoordinateSwizzleNV               x
5738    VkViewportCoordinateSwizzleNV               y
5739    VkViewportCoordinateSwizzleNV               z
5740    VkViewportCoordinateSwizzleNV               w
5741}
5742
5743@extension("VK_NV_viewport_swizzle") // 99
5744class VkPipelineViewportSwizzleStateCreateInfoNV {
5745    VkStructureType                             sType
5746    const void*                                 pNext
5747    VkPipelineViewportSwizzleStateCreateFlagsNV flags
5748    u32                                         viewportCount
5749    const VkViewportSwizzleNV*                  pViewportSwizzles
5750}
5751
5752@extension("VK_EXT_discard_rectangles") // 100
5753class VkPhysicalDeviceDiscardRectanglePropertiesEXT {
5754    VkStructureType                             sType
5755    void*                                       pNext
5756    u32                                         maxDiscardRectangles
5757}
5758
5759@extension("VK_EXT_discard_rectangles") // 100
5760class VkPipelineDiscardRectangleStateCreateInfoEXT {
5761    VkStructureType                                 sType
5762    const void*                                     pNext
5763    VkPipelineDiscardRectangleStateCreateFlagsEXT   flags
5764    VkDiscardRectangleModeEXT                       discardRectangleMode
5765    u32                                             discardRectangleCount
5766    const VkRect2D*                                 pDiscardRectangles
5767}
5768
5769@extension("VK_EXT_conservative_rasterization") // 102
5770class VkPhysicalDeviceConservativeRasterizationPropertiesEXT {
5771    VkStructureType                                 sType
5772    void*                                           pNext
5773    f32                                             primitiveOverestimationSize
5774    f32                                             maxExtraPrimitiveOverestimationSize
5775    f32                                             extraPrimitiveOverestimationSizeGranularity
5776    VkBool32                                        primitiveUnderestimation
5777    VkBool32                                        conservativePointAndLineRasterization
5778    VkBool32                                        degenerateTrianglesRasterized
5779    VkBool32                                        degenerateLinesRasterized
5780    VkBool32                                        fullyCoveredFragmentShaderInputVariable
5781    VkBool32                                        conservativeRasterizationPostDepthCoverage
5782}
5783
5784@extension("VK_EXT_conservative_rasterization") // 102
5785class VkPipelineRasterizationConservativeStateCreateInfoEXT {
5786    VkStructureType                                           sType
5787    const void*                                               pNext
5788    VkPipelineRasterizationConservativeStateCreateFlagsEXT    flags
5789    VkConservativeRasterizationModeEXT                        conservativeRasterizationMode
5790    f32                                                       extraPrimitiveOverestimationSize
5791}
5792
5793@extension("VK_EXT_hdr_metadata") // 106
5794class VkXYColorEXT {
5795    f32                                             x
5796    f32                                             y
5797}
5798
5799@extension("VK_EXT_hdr_metadata") // 106
5800class VkHdrMetadataEXT {
5801    VkStructureType                                 sType
5802    const void*                                     pNext
5803    VkXYColorEXT                                    displayPrimaryRed
5804    VkXYColorEXT                                    displayPrimaryGreen
5805    VkXYColorEXT                                    displayPrimaryBlue
5806    VkXYColorEXT                                    whitePoint
5807    f32                                             maxLuminance
5808    f32                                             minLuminance
5809    f32                                             maxContentLightLevel
5810    f32                                             maxFrameAverageLightLevel
5811}
5812
5813@extension("VK_KHR_shared_presentable_image") // 112
5814class VkSharedPresentSurfaceCapabilitiesKHR {
5815    VkStructureType                                 sType
5816    const void*                                     pNext
5817    VkImageUsageFlags                               sharedPresentSupportedUsageFlags
5818}
5819
5820@extension("VK_KHR_external_fence_capabilities") // 113
5821class VkPhysicalDeviceExternalFenceInfoKHR {
5822    VkStructureType                                 sType
5823    const void*                                     pNext
5824    VkExternalFenceHandleTypeFlagBitsKHR            handleType
5825}
5826
5827@extension("VK_KHR_external_fence_capabilities") // 113
5828class VkExternalFencePropertiesKHR {
5829    VkStructureType                                 sType
5830    void*                                           pNext
5831    VkExternalFenceHandleTypeFlagsKHR               exportFromImportedHandleTypes
5832    VkExternalFenceHandleTypeFlagsKHR               compatibleHandleTypes
5833    VkExternalFenceFeatureFlagsKHR                  externalFenceFeatures
5834}
5835
5836@extension("VK_KHR_external_fence") // 114
5837class VkExportFenceCreateInfoKHR {
5838    VkStructureType                                 sType
5839    const void*                                     pNext
5840    VkExternalFenceHandleTypeFlagsKHR               handleTypes
5841}
5842
5843@extension("VK_KHR_external_fence_win32") // 115
5844class VkImportFenceWin32HandleInfoKHR {
5845    VkStructureType                                 sType
5846    const void*                                     pNext
5847    VkFence                                         fence
5848    VkFenceImportFlagsKHR                           flags
5849    VkExternalFenceHandleTypeFlagBitsKHR            handleType
5850    platform.HANDLE                                 handle
5851    platform.LPCWSTR                                name
5852}
5853
5854@extension("VK_KHR_external_fence_win32") // 115
5855class VkExportFenceWin32HandleInfoKHR {
5856    VkStructureType                                 sType
5857    const void*                                     pNext
5858    const platform.SECURITY_ATTRIBUTES*             pAttributes
5859    platform.DWORD                                  dwAccess
5860    platform.LPCWSTR                                name
5861}
5862
5863@extension("VK_KHR_external_fence_win32") // 115
5864class VkFenceGetWin32HandleInfoKHR {
5865    VkStructureType                                 sType
5866    const void*                                     pNext
5867    VkFence                                         fence
5868    VkExternalFenceHandleTypeFlagBitsKHR            handleType
5869}
5870
5871@extension("VK_KHR_external_fence_fd") // 116
5872class VkImportFenceFdInfoKHR {
5873    VkStructureType                                 sType
5874    const void*                                     pNext
5875    VkFence                                         fence
5876    VkFenceImportFlagsKHR                           flags
5877    VkExternalFenceHandleTypeFlagBitsKHR            handleType
5878    int                                             fd
5879}
5880
5881@extension("VK_KHR_external_fence_fd") // 116
5882class VkFenceGetFdInfoKHR {
5883    VkStructureType                                 sType
5884    const void*                                     pNext
5885    VkFence                                         fence
5886    VkExternalFenceHandleTypeFlagBitsKHR            handleType
5887}
5888
5889@extension("VK_KHR_maintenance2") // 118
5890class VkPhysicalDevicePointClippingPropertiesKHR {
5891    VkStructureType                                 sType
5892    void*                                           pNext
5893    VkPointClippingBehaviorKHR                      pointClippingBehavior
5894}
5895
5896@extension("VK_KHR_maintenance2") // 118
5897class VkInputAttachmentAspectReferenceKHR {
5898    u32                                             subpass
5899    u32                                             inputAttachmentIndex
5900    VkImageAspectFlags                              aspectMask
5901}
5902
5903@extension("VK_KHR_maintenance2") // 118
5904class VkRenderPassInputAttachmentAspectCreateInfoKHR {
5905    VkStructureType                                 sType
5906    const void*                                     pNext
5907    u32                                             aspectReferenceCount
5908    const VkInputAttachmentAspectReferenceKHR*      pAspectReferences
5909}
5910
5911@extension("VK_KHR_maintenance2") // 118
5912class VkImageViewUsageCreateInfoKHR {
5913    VkStructureType                                 sType
5914    const void*                                     pNext
5915    VkImageUsageFlags                               usage
5916}
5917
5918@extension("VK_KHR_maintenance2") // 118
5919class VkPipelineTessellationDomainOriginStateCreateInfoKHR {
5920    VkStructureType                                 sType
5921    const void*                                     pNext
5922    VkTessellationDomainOriginKHR                   domainOrigin
5923}
5924
5925@extension("VK_KHR_get_surface_capabilities2") // 120
5926class VkPhysicalDeviceSurfaceInfo2KHR {
5927    VkStructureType                                 sType
5928    const void*                                     pNext
5929    VkSurfaceKHR                                    surface
5930}
5931
5932@extension("VK_KHR_get_surface_capabilities2") // 120
5933class VkSurfaceCapabilities2KHR {
5934    VkStructureType                                 sType
5935    void*                                           pNext
5936    VkSurfaceCapabilitiesKHR                        surfaceCapabilities
5937}
5938
5939@extension("VK_KHR_get_surface_capabilities2") // 120
5940class VkSurfaceFormat2KHR {
5941    VkStructureType                                 sType
5942    void*                                           pNext
5943    VkSurfaceFormatKHR                              surfaceFormat
5944}
5945
5946@extension("VK_KHR_variable_pointers") // 121
5947class VkPhysicalDeviceVariablePointerFeaturesKHR {
5948    VkStructureType                                 sType
5949    void*                                           pNext
5950    VkBool32                                        variablePointersStorageBuffer
5951    VkBool32                                        variablePointers
5952}
5953
5954@extension("VK_MVK_ios_surface") // 123
5955class VkIOSSurfaceCreateInfoMVK {
5956    VkStructureType                                 sType
5957    const void*                                     pNext
5958    VkIOSSurfaceCreateFlagsMVK                      flags
5959    const void*                                     pView
5960}
5961
5962@extension("VK_MVK_macos_surface") // 124
5963class VkMacOSSurfaceCreateInfoMVK {
5964    VkStructureType                                 sType
5965    const void*                                     pNext
5966    VkMacOSSurfaceCreateFlagsMVK                    flags
5967    const void*                                     pView
5968}
5969
5970@extension("VK_KHR_dedicated_allocation") // 128
5971class VkMemoryDedicatedRequirementsKHR {
5972    VkStructureType                                 sType
5973    void*                                           pNext
5974    VkBool32                                        prefersDedicatedAllocation
5975    VkBool32                                        requiresDedicatedAllocation
5976}
5977
5978@extension("VK_KHR_dedicated_allocation") // 128
5979class VkMemoryDedicatedAllocateInfoKHR {
5980    VkStructureType                                 sType
5981    const void*                                     pNext
5982    VkImage                                         image
5983    VkBuffer                                        buffer
5984}
5985
5986@extension("VK_EXT_debug_utils") // 129
5987class VkDebugUtilsObjectNameInfoEXT {
5988    VkStructureType                                 sType
5989    const void*                                     pNext
5990    VkObjectType                                    objectType
5991    u64                                             objectHandle
5992    const char*                                     pObjectName
5993}
5994
5995@extension("VK_EXT_debug_utils") // 129
5996class VkDebugUtilsObjectTagInfoEXT {
5997    VkStructureType                                 sType
5998    const void*                                     pNext
5999    VkObjectType                                    objectType
6000    u64                                             objectHandle
6001    u64                                             tagName
6002    platform.size_t                                 tagSize
6003    const void*                                     pTag
6004}
6005
6006@extension("VK_EXT_debug_utils") // 129
6007class VkDebugUtilsLabelEXT {
6008    VkStructureType                                 sType
6009    const void*                                     pNext
6010    const char*                                     pLabelName
6011    f32[4]                                          color
6012}
6013
6014@extension("VK_EXT_debug_utils") // 129
6015class VkDebugUtilsMessengerCallbackDataEXT {
6016    VkStructureType                                 sType
6017    const void*                                     pNext
6018    VkDebugUtilsMessengerCallbackDataFlagsEXT       flags
6019    const char*                                     pMessageIdName
6020    s32                                             messageIdNumber
6021    const char*                                     pMessage
6022    u32                                             queueLabelCount
6023    VkDebugUtilsLabelEXT*                           pQueueLabels
6024    u32                                             cmdBufLabelCount
6025    VkDebugUtilsLabelEXT*                           pCmdBufLabels
6026    u32                                             objectCount
6027    VkDebugUtilsObjectNameInfoEXT*                  pObjects
6028}
6029
6030@extension("VK_EXT_debug_utils") // 129
6031class VkDebugUtilsMessengerCreateInfoEXT {
6032    VkStructureType                                 sType
6033    const void*                                     pNext
6034    VkDebugUtilsMessengerCreateFlagsEXT             flags
6035    VkDebugUtilsMessageSeverityFlagsEXT             messageSeverity
6036    VkDebugUtilsMessageTypeFlagsEXT                 messageType
6037    PFN_vkDebugUtilsMessengerCallbackEXT            pfnUserCallback
6038    void*                                           pUserData
6039}
6040
6041@extension("VK_ANDROID_external_memory_android_hardware_buffer") // 131
6042class VkAndroidHardwareBufferUsageANDROID {
6043    VkStructureType                                 sType
6044    void*                                           pNext
6045    u64                                             androidHardwareBufferUsage
6046}
6047
6048@extension("VK_ANDROID_external_memory_android_hardware_buffer") // 130
6049class VkAndroidHardwareBufferPropertiesANDROID {
6050    VkStructureType                                 sType
6051    void*                                           pNext
6052    VkDeviceSize                                    allocationSize
6053    u32                                             memoryTypeBits
6054}
6055
6056@extension("VK_ANDROID_external_memory_android_hardware_buffer") // 130
6057class VkAndroidHardwareBufferFormatPropertiesANDROID {
6058    VkStructureType                                 sType
6059    void*                                           pNext
6060    VkFormat                                        format
6061    u64                                             externalFormat
6062    VkFormatFeatureFlags                            formatFeatures
6063    VkComponentMapping                              samplerYcbcrConversionComponents
6064    VkSamplerYcbcrModelConversion                   suggestedYcbcrModel
6065    VkSamplerYcbcrRange                             suggestedYcbcrRange
6066    VkChromaLocation                                suggestedXChromaOffset
6067    VkChromaLocation                                suggestedYChromaOffset
6068}
6069
6070@extension("VK_ANDROID_external_memory_android_hardware_buffer") // 130
6071class VkImportAndroidHardwareBufferInfoANDROID {
6072    VkStructureType                                 sType
6073    const void*                                     pNext
6074    platform.AHardwareBuffer*                       buffer
6075}
6076
6077@extension("VK_ANDROID_external_memory_android_hardware_buffer") // 130
6078class VkMemoryGetAndroidHardwareBufferInfoANDROID {
6079    VkStructureType                                 sType
6080    const void*                                     pNext
6081    VkDeviceMemory                                  memory
6082}
6083
6084@extension("VK_ANDROID_external_memory_android_hardware_buffer") // 130
6085class VkExternalFormatANDROID {
6086    VkStructureType                                 sType
6087    void*                                           pNext
6088    u64                                             externalFormat
6089}
6090
6091@extension("VK_EXT_sampler_filter_minmax") // 131
6092class VkSamplerReductionModeCreateInfoEXT {
6093    VkStructureType                                 sType
6094    const void*                                     pNext
6095    VkSamplerReductionModeEXT                       reductionMode
6096}
6097
6098@extension("VK_EXT_sampler_filter_minmax") // 131
6099class VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT {
6100    VkStructureType                                 sType
6101    void*                                           pNext
6102    VkBool32                                        filterMinmaxSingleComponentFormats
6103    VkBool32                                        filterMinmaxImageComponentMapping
6104}
6105
6106@extension("VK_EXT_sample_locations") // 144
6107class VkSampleLocationEXT {
6108    f32                                             x
6109    f32                                             y
6110}
6111
6112@extension("VK_EXT_sample_locations") // 144
6113class VkSampleLocationsInfoEXT {
6114    VkStructureType                                 sType
6115    const void*                                     pNext
6116    VkSampleCountFlagBits                           sampleLocationsPerPixel
6117    VkExtent2D                                      sampleLocationGridSize
6118    u32                                             sampleLocationsCount
6119    const VkSampleLocationEXT*                      pSampleLocations
6120}
6121
6122@extension("VK_EXT_sample_locations") // 144
6123class VkAttachmentSampleLocationsEXT {
6124    u32                                             attachmentIndex
6125    VkSampleLocationsInfoEXT                        sampleLocationsInfo
6126}
6127
6128@extension("VK_EXT_sample_locations") // 144
6129class VkSubpassSampleLocationsEXT {
6130    u32                                             subpassIndex
6131    VkSampleLocationsInfoEXT                        sampleLocationsInfo
6132}
6133
6134@extension("VK_EXT_sample_locations") // 144
6135class VkRenderPassSampleLocationsBeginInfoEXT {
6136    VkStructureType                                 sType
6137    const void*                                     pNext
6138    u32                                             attachmentInitialSampleLocationsCount
6139    const VkAttachmentSampleLocationsEXT*           pAttachmentInitialSampleLocations
6140    u32                                             postSubpassSampleLocationsCount
6141    const VkSubpassSampleLocationsEXT*              pPostSubpassSampleLocations
6142}
6143
6144@extension("VK_EXT_sample_locations") // 144
6145class VkPipelineSampleLocationsStateCreateInfoEXT {
6146    VkStructureType                                 sType
6147    const void*                                     pNext
6148    VkBool32                                        sampleLocationsEnable
6149    VkSampleLocationsInfoEXT                        sampleLocationsInfo
6150}
6151
6152@extension("VK_EXT_sample_locations") // 144
6153class VkPhysicalDeviceSampleLocationsPropertiesEXT {
6154    VkStructureType                                 sType
6155    void*                                           pNext
6156    VkSampleCountFlags                              sampleLocationSampleCounts
6157    VkExtent2D                                      maxSampleLocationGridSize
6158    f32[2]                                          sampleLocationCoordinateRange
6159    u32                                             sampleLocationSubPixelBits
6160    VkBool32                                        variableSampleLocations
6161}
6162
6163@extension("VK_EXT_sample_locations") // 144
6164class VkMultisamplePropertiesEXT {
6165    VkStructureType                                 sType
6166    void*                                           pNext
6167    VkExtent2D                                      maxSampleLocationGridSize
6168}
6169
6170@extension("VK_KHR_get_memory_requirements2") // 147
6171class VkBufferMemoryRequirementsInfo2KHR {
6172    VkStructureType                                 sType
6173    const void*                                     pNext
6174    VkBuffer                                        buffer
6175}
6176
6177@extension("VK_KHR_get_memory_requirements2") // 147
6178class VkImageMemoryRequirementsInfo2KHR {
6179    VkStructureType                                 sType
6180    const void*                                     pNext
6181    VkImage                                         image
6182}
6183
6184@extension("VK_KHR_get_memory_requirements2") // 147
6185class VkImageSparseMemoryRequirementsInfo2KHR {
6186    VkStructureType                                 sType
6187    const void*                                     pNext
6188    VkImage                                         image
6189}
6190
6191@extension("VK_KHR_get_memory_requirements2") // 147
6192class VkMemoryRequirements2KHR {
6193    VkStructureType                                 sType
6194    void*                                           pNext
6195    VkMemoryRequirements                            memoryRequirements
6196}
6197
6198@extension("VK_KHR_get_memory_requirements2") // 147
6199class VkSparseImageMemoryRequirements2KHR {
6200    VkStructureType                                 sType
6201    void*                                           pNext
6202    VkSparseImageMemoryRequirements                 memoryRequirements
6203}
6204
6205@extension("VK_KHR_image_format_list") // 148
6206class VkImageFormatListCreateInfoKHR {
6207    VkStructureType                                 sType
6208    const void*                                     pNext
6209    u32                                             viewFormatCount
6210    const VkFormat*                                 pViewFormats
6211}
6212
6213@extension("VK_EXT_blend_operation_advanced") // 149
6214class VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT {
6215    VkStructureType                                 sType
6216    void*                                           pNext
6217    VkBool32                                        advancedBlendCoherentOperations
6218}
6219
6220@extension("VK_EXT_blend_operation_advanced") // 149
6221class VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT {
6222    VkStructureType                                 sType
6223    void*                                           pNext
6224    u32                                             advancedBlendMaxColorAttachments
6225    VkBool32                                        advancedBlendIndependentBlend
6226    VkBool32                                        advancedBlendNonPremultipliedSrcColor
6227    VkBool32                                        advancedBlendNonPremultipliedDstColor
6228    VkBool32                                        advancedBlendCorrelatedOverlap
6229    VkBool32                                        advancedBlendAllOperations
6230}
6231
6232@extension("VK_EXT_blend_operation_advanced") // 149
6233class VkPipelineColorBlendAdvancedStateCreateInfoEXT {
6234    VkStructureType                                 sType
6235    const void*                                     pNext
6236    VkBool32                                        srcPremultiplied
6237    VkBool32                                        dstPremultiplied
6238    VkBlendOverlapEXT                               blendOverlap
6239}
6240
6241@extension("VK_NV_fragment_coverage_to_color") // 150
6242class VkPipelineCoverageToColorStateCreateInfoNV {
6243    VkStructureType                                 sType
6244    const void*                                     pNext
6245    VkPipelineCoverageToColorStateCreateFlagsNV     flags
6246    VkBool32                                        coverageToColorEnable
6247    u32                                             coverageToColorLocation
6248}
6249
6250@extension("VK_NV_framebuffer_mixed_samples") // 153
6251class VkPipelineCoverageModulationStateCreateInfoNV {
6252    VkStructureType                                 sType
6253    const void*                                     pNext
6254    VkPipelineCoverageModulationStateCreateFlagsNV  flags
6255    VkCoverageModulationModeNV                      coverageModulationMode
6256    VkBool32                                        coverageModulationTableEnable
6257    u32                                             coverageModulationTableCount
6258    const f32*                                      pCoverageModulationTable
6259}
6260
6261@extension("VK_KHR_sampler_ycbcr_conversion") // 157
6262class VkSamplerYcbcrConversionCreateInfoKHR {
6263    VkStructureType                                 sType
6264    const void*                                     pNext
6265    VkFormat                                        format
6266    VkSamplerYcbcrModelConversionKHR                ycbcrModel
6267    VkSamplerYcbcrRangeKHR                          ycbcrRange
6268    VkComponentMapping                              components
6269    VkChromaLocationKHR                             xChromaOffset
6270    VkChromaLocationKHR                             yChromaOffset
6271    VkFilter                                        chromaFilter
6272    VkBool32                                        forceExplicitReconstruction
6273}
6274
6275@extension("VK_KHR_sampler_ycbcr_conversion") // 157
6276class VkSamplerYcbcrConversionInfoKHR {
6277    VkStructureType                                 sType
6278    const void*                                     pNext
6279    VkSamplerYcbcrConversionKHR                     conversion
6280}
6281
6282@extension("VK_KHR_sampler_ycbcr_conversion") // 157
6283class VkBindImagePlaneMemoryInfoKHR {
6284    VkStructureType                                 sType
6285    const void*                                     pNext
6286    VkImageAspectFlagBits                           planeAspect
6287}
6288
6289@extension("VK_KHR_sampler_ycbcr_conversion") // 157
6290class VkImagePlaneMemoryRequirementsInfoKHR {
6291    VkStructureType                                 sType
6292    const void*                                     pNext
6293    VkImageAspectFlagBits                           planeAspect
6294}
6295
6296@extension("VK_KHR_sampler_ycbcr_conversion") // 157
6297class VkPhysicalDeviceSamplerYcbcrConversionFeaturesKHR {
6298    VkStructureType                                 sType
6299    void*                                           pNext
6300    VkBool32                                        samplerYcbcrConversion
6301}
6302
6303@extension("VK_KHR_sampler_ycbcr_conversion") // 157
6304class VkSamplerYcbcrConversionImageFormatPropertiesKHR {
6305    VkStructureType                                 sType
6306    void*                                           pNext
6307    u32                                             combinedImageSamplerDescriptorCount
6308}
6309
6310@extension("VK_KHR_bind_memory2") // 158
6311class VkBindBufferMemoryInfoKHR {
6312    VkStructureType                                 sType
6313    const void*                                     pNext
6314    VkBuffer                                        buffer
6315    VkDeviceMemory                                  memory
6316    VkDeviceSize                                    memoryOffset
6317}
6318
6319@extension("VK_KHR_bind_memory2") // 158
6320class VkBindImageMemoryInfoKHR {
6321    VkStructureType                                 sType
6322    const void*                                     pNext
6323    VkImage                                         image
6324    VkDeviceMemory                                  memory
6325    VkDeviceSize                                    memoryOffset
6326}
6327
6328@extension("VK_EXT_validation_cache") // 161
6329class VkValidationCacheCreateInfoEXT {
6330    VkStructureType                                 sType
6331    const void*                                     pNext
6332    VkValidationCacheCreateFlagsEXT                 flags
6333    platform.size_t                                 initialDataSize
6334    const void*                                     pInitialData
6335}
6336
6337@extension("VK_EXT_validation_cache") // 161
6338class VkShaderModuleValidationCacheCreateInfoEXT {
6339    VkStructureType                                 sType
6340    const void*                                     pNext
6341    VkValidationCacheEXT                            validationCache
6342}
6343
6344@extension("VK_KHR_maintenance3") // 169
6345class VkPhysicalDeviceMaintenance3PropertiesKHR {
6346    VkStructureType                                 sType
6347    void*                                           pNext
6348    u32                                             maxPerSetDescriptors
6349    VkDeviceSize                                    maxMemoryAllocationSize
6350}
6351
6352@extension("VK_KHR_maintenance3") // 169
6353class VkDescriptorSetLayoutSupportKHR {
6354    VkStructureType                                 sType
6355    void*                                           pNext
6356    VkBool32                                        supported
6357}
6358
6359@extension("VK_EXT_global_priority") // 175
6360class VkDeviceQueueGlobalPriorityCreateInfoEXT {
6361    VkStructureType                                 sType
6362    const void*                                     pNext
6363    VkQueueGlobalPriorityEXT                        globalPriority
6364}
6365
6366@extension("VK_EXT_external_memory_host") // 179
6367class VkImportMemoryHostPointerInfoEXT {
6368    VkStructureType                                 sType
6369    const void*                                     pNext
6370    VkExternalMemoryHandleTypeFlagBits              handleType
6371    void*                                           pHostPointer
6372}
6373
6374@extension("VK_EXT_external_memory_host") // 179
6375class VkMemoryHostPointerPropertiesEXT {
6376    VkStructureType                                 sType
6377    void*                                           pNext
6378    u32                                             memoryTypeBits
6379}
6380
6381@extension("VK_EXT_external_memory_host") // 179
6382class VkPhysicalDeviceExternalMemoryHostPropertiesEXT {
6383    VkStructureType                                 sType
6384    void*                                           pNext
6385    VkDeviceSize                                    minImportedHostPointerAlignment
6386}
6387
6388
6389////////////////
6390//  Commands  //
6391////////////////
6392
6393// Function pointers. TODO: add support for function pointers.
6394
6395@external type void* PFN_vkVoidFunction
6396@pfn cmd void vkVoidFunction() {
6397}
6398
6399@external type void* PFN_vkAllocationFunction
6400@pfn cmd void* vkAllocationFunction(
6401        void*                                       pUserData,
6402        platform.size_t                             size,
6403        platform.size_t                             alignment,
6404        VkSystemAllocationScope                     allocationScope) {
6405    return ?
6406}
6407
6408@external type void* PFN_vkReallocationFunction
6409@pfn cmd void* vkReallocationFunction(
6410        void*                                       pUserData,
6411        void*                                       pOriginal,
6412        platform.size_t                             size,
6413        platform.size_t                             alignment,
6414        VkSystemAllocationScope                     allocationScope) {
6415    return ?
6416}
6417
6418@external type void* PFN_vkFreeFunction
6419@pfn cmd void vkFreeFunction(
6420        void*                                       pUserData,
6421        void*                                       pMemory) {
6422}
6423
6424@external type void* PFN_vkInternalAllocationNotification
6425@pfn cmd void vkInternalAllocationNotification(
6426        void*                                       pUserData,
6427        platform.size_t                             size,
6428        VkInternalAllocationType                    allocationType,
6429        VkSystemAllocationScope                     allocationScope) {
6430}
6431
6432@external type void* PFN_vkInternalFreeNotification
6433@pfn cmd void vkInternalFreeNotification(
6434        void*                                       pUserData,
6435        platform.size_t                             size,
6436        VkInternalAllocationType                    allocationType,
6437        VkSystemAllocationScope                     allocationScope) {
6438}
6439
6440// Global functions
6441
6442@threadSafety("system")
6443cmd VkResult vkCreateInstance(
6444        const VkInstanceCreateInfo*                 pCreateInfo,
6445        const VkAllocationCallbacks*                pAllocator,
6446        VkInstance*                                 pInstance) {
6447    assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO)
6448
6449    instance := ?
6450    pInstance[0] = instance
6451    State.Instances[instance] = new!InstanceObject()
6452
6453    layers := pCreateInfo.ppEnabledLayerNames[0:pCreateInfo.enabledLayerCount]
6454    extensions := pCreateInfo.ppEnabledExtensionNames[0:pCreateInfo.enabledExtensionCount]
6455
6456    return ?
6457}
6458
6459@threadSafety("system")
6460cmd void vkDestroyInstance(
6461        VkInstance                                  instance,
6462        const VkAllocationCallbacks*                pAllocator) {
6463    instanceObject := GetInstance(instance)
6464
6465    State.Instances[instance] = null
6466}
6467
6468@threadSafety("system")
6469cmd VkResult vkEnumeratePhysicalDevices(
6470        VkInstance                                  instance,
6471        u32*                                        pPhysicalDeviceCount,
6472        VkPhysicalDevice*                           pPhysicalDevices) {
6473    instanceObject := GetInstance(instance)
6474
6475    physicalDeviceCount := as!u32(?)
6476    pPhysicalDeviceCount[0] = physicalDeviceCount
6477    physicalDevices := pPhysicalDevices[0:physicalDeviceCount]
6478
6479    for i in (0 .. physicalDeviceCount) {
6480        physicalDevice := ?
6481        physicalDevices[i] = physicalDevice
6482        if !(physicalDevice in State.PhysicalDevices) {
6483            State.PhysicalDevices[physicalDevice] = new!PhysicalDeviceObject(instance: instance)
6484        }
6485    }
6486
6487    return ?
6488}
6489
6490cmd PFN_vkVoidFunction vkGetDeviceProcAddr(
6491        VkDevice                                    device,
6492        const char*                                 pName) {
6493    if device != NULL_HANDLE {
6494        device := GetDevice(device)
6495    }
6496
6497    return ?
6498}
6499
6500cmd PFN_vkVoidFunction vkGetInstanceProcAddr(
6501        VkInstance                                  instance,
6502        const char*                                 pName) {
6503    if instance != NULL_HANDLE {
6504        instanceObject := GetInstance(instance)
6505    }
6506
6507    return ?
6508}
6509
6510cmd void vkGetPhysicalDeviceProperties(
6511        VkPhysicalDevice                            physicalDevice,
6512        VkPhysicalDeviceProperties*                 pProperties) {
6513    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
6514
6515    properties := ?
6516    pProperties[0] = properties
6517}
6518
6519cmd void vkGetPhysicalDeviceQueueFamilyProperties(
6520        VkPhysicalDevice                            physicalDevice,
6521        u32*                                        pQueueFamilyPropertyCount,
6522        VkQueueFamilyProperties*                    pQueueFamilyProperties) {
6523    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
6524    // TODO: Figure out how to express fetch-count-or-properties
6525    // This version fails 'apic validate' with 'fence not allowed in
6526    // *semantic.Branch'. Other attempts have failed with the same or other
6527    // errors.
6528    // if pQueueFamilyProperties != null {
6529    //     queuesProperties := pQueueFamilyProperties[0:pCount[0]]
6530    //     for i in (0 .. pCount[0]) {
6531    //         queueProperties := as!VkQueueFamilyProperties(?)
6532    //         queuesProperties[i] = queueProperties
6533    //    }
6534    // } else {
6535    //     count := ?
6536    //     pCount[0] = count
6537    // }
6538}
6539
6540cmd void vkGetPhysicalDeviceMemoryProperties(
6541        VkPhysicalDevice                            physicalDevice,
6542        VkPhysicalDeviceMemoryProperties*           pMemoryProperties) {
6543    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
6544
6545    memoryProperties := ?
6546    pMemoryProperties[0] = memoryProperties
6547}
6548
6549cmd void vkGetPhysicalDeviceFeatures(
6550        VkPhysicalDevice                            physicalDevice,
6551        VkPhysicalDeviceFeatures*                   pFeatures) {
6552    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
6553
6554    features := ?
6555    pFeatures[0] = features
6556}
6557
6558cmd void vkGetPhysicalDeviceFormatProperties(
6559        VkPhysicalDevice                            physicalDevice,
6560        VkFormat                                    format,
6561        VkFormatProperties*                         pFormatProperties) {
6562    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
6563
6564    formatProperties := ?
6565    pFormatProperties[0] = formatProperties
6566}
6567
6568cmd VkResult vkGetPhysicalDeviceImageFormatProperties(
6569        VkPhysicalDevice                            physicalDevice,
6570        VkFormat                                    format,
6571        VkImageType                                 type,
6572        VkImageTiling                               tiling,
6573        VkImageUsageFlags                           usage,
6574        VkImageCreateFlags                          flags,
6575        VkImageFormatProperties*                    pImageFormatProperties) {
6576    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
6577
6578    imageFormatProperties := ?
6579    pImageFormatProperties[0] = imageFormatProperties
6580
6581    return ?
6582}
6583
6584
6585// Device functions
6586
6587@threadSafety("system")
6588cmd VkResult vkCreateDevice(
6589        VkPhysicalDevice                            physicalDevice,
6590        const VkDeviceCreateInfo*                   pCreateInfo,
6591        const VkAllocationCallbacks*                pAllocator,
6592        VkDevice*                                   pDevice) {
6593    assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO)
6594    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
6595
6596    device := ?
6597    pDevice[0] = device
6598    State.Devices[device] = new!DeviceObject(physicalDevice: physicalDevice)
6599
6600    return ?
6601}
6602
6603@threadSafety("system")
6604cmd void vkDestroyDevice(
6605        VkDevice                                    device,
6606        const VkAllocationCallbacks*                pAllocator) {
6607    deviceObject := GetDevice(device)
6608
6609    State.Devices[device] = null
6610}
6611
6612
6613// Extension discovery functions
6614
6615cmd VkResult vkEnumerateInstanceLayerProperties(
6616        u32*                                        pPropertyCount,
6617        VkLayerProperties*                          pProperties) {
6618    count := as!u32(?)
6619    pPropertyCount[0] = count
6620
6621    properties := pProperties[0:count]
6622    for i in (0 .. count) {
6623        property := ?
6624        properties[i] = property
6625    }
6626
6627    return ?
6628}
6629
6630cmd VkResult vkEnumerateInstanceExtensionProperties(
6631        const char*                                 pLayerName,
6632        u32*                                        pPropertyCount,
6633        VkExtensionProperties*                      pProperties) {
6634    count := as!u32(?)
6635    pPropertyCount[0] = count
6636
6637    properties := pProperties[0:count]
6638    for i in (0 .. count) {
6639        property := ?
6640        properties[i] = property
6641    }
6642
6643    return ?
6644}
6645
6646cmd VkResult vkEnumerateDeviceLayerProperties(
6647        VkPhysicalDevice                            physicalDevice,
6648        u32*                                        pPropertyCount,
6649        VkLayerProperties*                          pProperties) {
6650    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
6651    count := as!u32(?)
6652    pPropertyCount[0] = count
6653
6654    properties := pProperties[0:count]
6655    for i in (0 .. count) {
6656        property := ?
6657        properties[i] = property
6658    }
6659
6660    return ?
6661}
6662
6663cmd VkResult vkEnumerateDeviceExtensionProperties(
6664        VkPhysicalDevice                            physicalDevice,
6665        const char*                                 pLayerName,
6666        u32*                                        pPropertyCount,
6667        VkExtensionProperties*                      pProperties) {
6668    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
6669
6670    count := as!u32(?)
6671    pPropertyCount[0] = count
6672
6673    properties := pProperties[0:count]
6674    for i in (0 .. count) {
6675        property := ?
6676        properties[i] = property
6677    }
6678
6679    return ?
6680}
6681
6682
6683// Queue functions
6684
6685@threadSafety("system")
6686cmd void vkGetDeviceQueue(
6687        VkDevice                                    device,
6688        u32                                         queueFamilyIndex,
6689        u32                                         queueIndex,
6690        VkQueue*                                    pQueue) {
6691    deviceObject := GetDevice(device)
6692
6693    queue := ?
6694    pQueue[0] = queue
6695
6696    if !(queue in State.Queues) {
6697        State.Queues[queue] = new!QueueObject(device: device)
6698    }
6699}
6700
6701@threadSafety("app")
6702cmd VkResult vkQueueSubmit(
6703        VkQueue                                     queue,
6704        u32                                         submitCount,
6705        const VkSubmitInfo*                         pSubmits,
6706        VkFence                                     fence) {
6707    queueObject := GetQueue(queue)
6708
6709    if fence != NULL_HANDLE {
6710        fenceObject := GetFence(fence)
6711        assert(fenceObject.device == queueObject.device)
6712    }
6713
6714    // commandBuffers := pcommandBuffers[0:commandBufferCount]
6715    // for i in (0 .. commandBufferCount) {
6716    //    commandBuffer := commandBuffers[i]
6717    //    commandBufferObject := GetCommandBuffer(commandBuffer)
6718    //    assert(commandBufferObject.device == queueObject.device)
6719    //
6720    //    validate("QueueCheck", commandBufferObject.queueFlags in queueObject.flags,
6721    //        "vkQueueSubmit: enqueued commandBuffer requires missing queue capabilities.")
6722    // }
6723
6724    return ?
6725}
6726
6727@threadSafety("system")
6728cmd VkResult vkQueueWaitIdle(
6729        VkQueue                                     queue) {
6730    queueObject := GetQueue(queue)
6731
6732    return ?
6733}
6734
6735@threadSafety("system")
6736cmd VkResult vkDeviceWaitIdle(
6737        VkDevice                                    device) {
6738    deviceObject := GetDevice(device)
6739
6740    return ?
6741}
6742
6743
6744// Memory functions
6745
6746@threadSafety("system")
6747cmd VkResult vkAllocateMemory(
6748        VkDevice                                    device,
6749        const VkMemoryAllocateInfo*                 pAllocateInfo,
6750        const VkAllocationCallbacks*                pAllocator,
6751        VkDeviceMemory*                             pMemory) {
6752    assert(pAllocateInfo.sType == VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO)
6753    deviceObject := GetDevice(device)
6754
6755    memory := ?
6756    pMemory[0] = memory
6757    State.DeviceMemories[memory] = new!DeviceMemoryObject(
6758        device: device,
6759        allocationSize: pAllocateInfo[0].allocationSize)
6760
6761    return ?
6762}
6763
6764@threadSafety("system")
6765cmd void vkFreeMemory(
6766        VkDevice                                    device,
6767        VkDeviceMemory                              memory,
6768        const VkAllocationCallbacks*                pAllocator) {
6769    deviceObject := GetDevice(device)
6770    memoryObject := GetDeviceMemory(memory)
6771    assert(memoryObject.device == device)
6772
6773    // Check that no objects are still bound before freeing.
6774    validate("MemoryCheck", len(memoryObject.boundObjects) == 0,
6775        "vkFreeMemory: objects still bound")
6776    validate("MemoryCheck", len(memoryObject.boundCommandBuffers) == 0,
6777        "vkFreeMemory: commandBuffers still bound")
6778    State.DeviceMemories[memory] = null
6779}
6780
6781@threadSafety("app")
6782cmd VkResult vkMapMemory(
6783        VkDevice                                    device,
6784        VkDeviceMemory                              memory,
6785        VkDeviceSize                                offset,
6786        VkDeviceSize                                size,
6787        VkMemoryMapFlags                            flags,
6788        void**                                      ppData) {
6789    deviceObject := GetDevice(device)
6790    memoryObject := GetDeviceMemory(memory)
6791    assert(memoryObject.device == device)
6792
6793    assert(flags == as!VkMemoryMapFlags(0))
6794    assert((offset + size) <= memoryObject.allocationSize)
6795
6796    return ?
6797}
6798
6799@threadSafety("app")
6800cmd void vkUnmapMemory(
6801        VkDevice                                    device,
6802        VkDeviceMemory                              memory) {
6803    deviceObject := GetDevice(device)
6804    memoryObject := GetDeviceMemory(memory)
6805    assert(memoryObject.device == device)
6806}
6807
6808cmd VkResult vkFlushMappedMemoryRanges(
6809        VkDevice                                    device,
6810        u32                                         memoryRangeCount
6811        const VkMappedMemoryRange*                  pMemoryRanges) {
6812    deviceObject := GetDevice(device)
6813
6814    memoryRanges := pMemoryRanges[0:memoryRangeCount]
6815    for i in (0 .. memoryRangeCount) {
6816        memoryRange := memoryRanges[i]
6817        memoryObject := GetDeviceMemory(memoryRange.memory)
6818        assert(memoryObject.device == device)
6819        assert((memoryRange.offset + memoryRange.size) <= memoryObject.allocationSize)
6820    }
6821
6822    return ?
6823}
6824
6825cmd VkResult vkInvalidateMappedMemoryRanges(
6826        VkDevice                                    device,
6827        u32                                         memoryRangeCount,
6828        const VkMappedMemoryRange*                  pMemoryRanges) {
6829    deviceObject := GetDevice(device)
6830
6831    memoryRanges := pMemoryRanges[0:memoryRangeCount]
6832    for i in (0 .. memoryRangeCount) {
6833        memoryRange := memoryRanges[i]
6834        memoryObject := GetDeviceMemory(memoryRange.memory)
6835        assert(memoryObject.device == device)
6836        assert((memoryRange.offset + memoryRange.size) <= memoryObject.allocationSize)
6837    }
6838
6839    return ?
6840}
6841
6842
6843// Memory management API functions
6844
6845cmd void vkGetDeviceMemoryCommitment(
6846        VkDevice                                    device,
6847        VkDeviceMemory                              memory,
6848        VkDeviceSize*                               pCommittedMemoryInBytes) {
6849    deviceObject := GetDevice(device)
6850
6851    if memory != NULL_HANDLE {
6852        memoryObject := GetDeviceMemory(memory)
6853        assert(memoryObject.device == device)
6854    }
6855
6856    committedMemoryInBytes := ?
6857    pCommittedMemoryInBytes[0] = committedMemoryInBytes
6858}
6859
6860cmd void vkGetBufferMemoryRequirements(
6861        VkDevice                                    device,
6862        VkBuffer                                    buffer,
6863        VkMemoryRequirements*                       pMemoryRequirements) {
6864    deviceObject := GetDevice(device)
6865    bufferObject := GetBuffer(buffer)
6866    assert(bufferObject.device == device)
6867}
6868
6869cmd VkResult vkBindBufferMemory(
6870        VkDevice                                    device,
6871        VkBuffer                                    buffer,
6872        VkDeviceMemory                              memory,
6873        VkDeviceSize                                memoryOffset) {
6874    deviceObject := GetDevice(device)
6875    bufferObject := GetBuffer(buffer)
6876    assert(bufferObject.device == device)
6877
6878    // Unbind buffer from previous memory object, if not VK_NULL_HANDLE.
6879    if bufferObject.memory != NULL_HANDLE {
6880        memoryObject := GetDeviceMemory(bufferObject.memory)
6881        memoryObject.boundObjects[as!u64(buffer)] = null
6882    }
6883
6884    // Bind buffer to given memory object, if not VK_NULL_HANDLE.
6885    if memory != NULL_HANDLE {
6886        memoryObject := GetDeviceMemory(memory)
6887        assert(memoryObject.device == device)
6888        memoryObject.boundObjects[as!u64(buffer)] = memoryOffset
6889    }
6890    bufferObject.memory = memory
6891    bufferObject.memoryOffset = memoryOffset
6892
6893    return ?
6894}
6895
6896cmd void vkGetImageMemoryRequirements(
6897        VkDevice                                    device,
6898        VkImage                                     image,
6899        VkMemoryRequirements*                       pMemoryRequirements) {
6900    deviceObject := GetDevice(device)
6901    imageObject := GetImage(image)
6902    assert(imageObject.device == device)
6903}
6904
6905cmd VkResult vkBindImageMemory(
6906        VkDevice                                    device,
6907        VkImage                                     image,
6908        VkDeviceMemory                              memory,
6909        VkDeviceSize                                memoryOffset) {
6910    deviceObject := GetDevice(device)
6911    imageObject := GetImage(image)
6912    assert(imageObject.device == device)
6913
6914    // Unbind image from previous memory object, if not VK_NULL_HANDLE.
6915    if imageObject.memory != NULL_HANDLE {
6916        memoryObject := GetDeviceMemory(imageObject.memory)
6917        memoryObject.boundObjects[as!u64(image)] = null
6918    }
6919
6920    // Bind image to given memory object, if not VK_NULL_HANDLE.
6921    if memory != NULL_HANDLE {
6922        memoryObject := GetDeviceMemory(memory)
6923        assert(memoryObject.device == device)
6924        memoryObject.boundObjects[as!u64(image)] = memoryOffset
6925    }
6926    imageObject.memory = memory
6927    imageObject.memoryOffset = memoryOffset
6928
6929    return ?
6930}
6931
6932cmd void vkGetImageSparseMemoryRequirements(
6933        VkDevice                                    device,
6934        VkImage                                     image,
6935        u32*                                        pSparseMemoryRequirementCount,
6936        VkSparseImageMemoryRequirements*            pSparseMemoryRequirements) {
6937    deviceObject := GetDevice(device)
6938    imageObject := GetImage(image)
6939    assert(imageObject.device == device)
6940}
6941
6942cmd void vkGetPhysicalDeviceSparseImageFormatProperties(
6943        VkPhysicalDevice                            physicalDevice,
6944        VkFormat                                    format,
6945        VkImageType                                 type,
6946        VkSampleCountFlagBits                       samples,
6947        VkImageUsageFlags                           usage,
6948        VkImageTiling                               tiling,
6949        u32*                                        pPropertyCount,
6950        VkSparseImageFormatProperties*              pProperties) {
6951    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
6952}
6953
6954cmd VkResult vkQueueBindSparse(
6955        VkQueue                                     queue,
6956        u32                                         bindInfoCount,
6957        const VkBindSparseInfo*                     pBindInfo,
6958        VkFence                                     fence) {
6959    queueObject := GetQueue(queue)
6960
6961    return ?
6962}
6963
6964
6965// Fence functions
6966
6967@threadSafety("system")
6968cmd VkResult vkCreateFence(
6969        VkDevice                                    device,
6970        const VkFenceCreateInfo*                    pCreateInfo,
6971        const VkAllocationCallbacks*                pAllocator,
6972        VkFence*                                    pFence) {
6973    assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_FENCE_CREATE_INFO)
6974    deviceObject := GetDevice(device)
6975
6976    fence := ?
6977    pFence[0] = fence
6978    State.Fences[fence] = new!FenceObject(
6979        device: device, signaled: (pCreateInfo.flags == as!VkFenceCreateFlags(VK_FENCE_CREATE_SIGNALED_BIT)))
6980
6981    return ?
6982}
6983
6984@threadSafety("system")
6985cmd void vkDestroyFence(
6986        VkDevice                                    device,
6987        VkFence                                     fence,
6988        const VkAllocationCallbacks*                pAllocator) {
6989    deviceObject := GetDevice(device)
6990    fenceObject := GetFence(fence)
6991    assert(fenceObject.device == device)
6992
6993    State.Fences[fence] = null
6994}
6995
6996@threadSafety("system")
6997cmd VkResult vkResetFences(
6998        VkDevice                                    device,
6999        u32                                         fenceCount,
7000        const VkFence*                              pFences) {
7001    deviceObject := GetDevice(device)
7002
7003    fences := pFences[0:fenceCount]
7004    for i in (0 .. fenceCount) {
7005        fence := fences[i]
7006        fenceObject := GetFence(fence)
7007        assert(fenceObject.device == device)
7008        fenceObject.signaled = false
7009    }
7010
7011    return ?
7012}
7013
7014@threadSafety("system")
7015cmd VkResult vkGetFenceStatus(
7016        VkDevice                                    device,
7017        VkFence                                     fence) {
7018    deviceObject := GetDevice(device)
7019    fenceObject := GetFence(fence)
7020    assert(fenceObject.device == device)
7021
7022    return ?
7023}
7024
7025@threadSafety("system")
7026cmd VkResult vkWaitForFences(
7027        VkDevice                                    device,
7028        u32                                         fenceCount,
7029        const VkFence*                              pFences,
7030        VkBool32                                    waitAll,
7031        u64                                         timeout) {  /// timeout in nanoseconds
7032    deviceObject := GetDevice(device)
7033
7034    fences := pFences[0:fenceCount]
7035    for i in (0 .. fenceCount) {
7036        fence := fences[i]
7037        fenceObject := GetFence(fence)
7038        assert(fenceObject.device == device)
7039    }
7040
7041    return ?
7042}
7043
7044
7045// Queue semaphore functions
7046
7047@threadSafety("system")
7048cmd VkResult vkCreateSemaphore(
7049        VkDevice                                    device,
7050        const VkSemaphoreCreateInfo*                pCreateInfo,
7051        const VkAllocationCallbacks*                pAllocator,
7052        VkSemaphore*                                pSemaphore) {
7053    assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO)
7054    deviceObject := GetDevice(device)
7055
7056    semaphore := ?
7057    pSemaphore[0] = semaphore
7058    State.Semaphores[semaphore] = new!SemaphoreObject(device: device)
7059
7060    return ?
7061}
7062
7063@threadSafety("system")
7064cmd void vkDestroySemaphore(
7065        VkDevice                                    device,
7066        VkSemaphore                                 semaphore,
7067        const VkAllocationCallbacks*                pAllocator) {
7068    deviceObject := GetDevice(device)
7069    semaphoreObject := GetSemaphore(semaphore)
7070    assert(semaphoreObject.device == device)
7071
7072    State.Semaphores[semaphore] = null
7073}
7074
7075
7076// Event functions
7077
7078@threadSafety("system")
7079cmd VkResult vkCreateEvent(
7080        VkDevice                                    device,
7081        const VkEventCreateInfo*                    pCreateInfo,
7082        const VkAllocationCallbacks*                pAllocator,
7083        VkEvent*                                    pEvent) {
7084    assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_EVENT_CREATE_INFO)
7085    deviceObject := GetDevice(device)
7086
7087    event := ?
7088    pEvent[0] = event
7089    State.Events[event] = new!EventObject(device: device)
7090
7091    return ?
7092}
7093
7094@threadSafety("system")
7095cmd void vkDestroyEvent(
7096        VkDevice                                    device,
7097        VkEvent                                     event,
7098        const VkAllocationCallbacks*                pAllocator) {
7099    deviceObject := GetDevice(device)
7100    eventObject := GetEvent(event)
7101    assert(eventObject.device == device)
7102
7103    State.Events[event] = null
7104}
7105
7106@threadSafety("system")
7107cmd VkResult vkGetEventStatus(
7108        VkDevice                                    device,
7109        VkEvent                                     event) {
7110    deviceObject := GetDevice(device)
7111    eventObject := GetEvent(event)
7112    assert(eventObject.device == device)
7113
7114    return ?
7115}
7116
7117@threadSafety("system")
7118cmd VkResult vkSetEvent(
7119        VkDevice                                    device,
7120        VkEvent                                     event) {
7121    deviceObject := GetDevice(device)
7122    eventObject := GetEvent(event)
7123    assert(eventObject.device == device)
7124
7125    return ?
7126}
7127
7128@threadSafety("system")
7129cmd VkResult vkResetEvent(
7130        VkDevice                                    device,
7131        VkEvent                                     event) {
7132    deviceObject := GetDevice(device)
7133    eventObject := GetEvent(event)
7134    assert(eventObject.device == device)
7135
7136    return ?
7137}
7138
7139
7140// Query functions
7141
7142@threadSafety("system")
7143cmd VkResult vkCreateQueryPool(
7144        VkDevice                                    device,
7145        const VkQueryPoolCreateInfo*                pCreateInfo,
7146        const VkAllocationCallbacks*                pAllocator,
7147        VkQueryPool*                                pQueryPool) {
7148    assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO)
7149    deviceObject := GetDevice(device)
7150
7151    queryPool := ?
7152    pQueryPool[0] = queryPool
7153    State.QueryPools[queryPool] = new!QueryPoolObject(device: device)
7154
7155    return ?
7156}
7157
7158@threadSafety("system")
7159cmd void vkDestroyQueryPool(
7160        VkDevice                                    device,
7161        VkQueryPool                                 queryPool,
7162        const VkAllocationCallbacks*                pAllocator) {
7163    deviceObject := GetDevice(device)
7164    queryPoolObject := GetQueryPool(queryPool)
7165    assert(queryPoolObject.device == device)
7166
7167    State.QueryPools[queryPool] = null
7168}
7169
7170@threadSafety("system")
7171cmd VkResult vkGetQueryPoolResults(
7172        VkDevice                                    device,
7173        VkQueryPool                                 queryPool,
7174        u32                                         firstQuery,
7175        u32                                         queryCount,
7176        platform.size_t                             dataSize,
7177        void*                                       pData,
7178        VkDeviceSize                                stride,
7179        VkQueryResultFlags                          flags) {
7180    deviceObject := GetDevice(device)
7181    queryPoolObject := GetQueryPool(queryPool)
7182    assert(queryPoolObject.device == device)
7183
7184    data := pData[0:dataSize]
7185
7186    return ?
7187}
7188
7189// Buffer functions
7190
7191@threadSafety("system")
7192cmd VkResult vkCreateBuffer(
7193        VkDevice                                    device,
7194        const VkBufferCreateInfo*                   pCreateInfo,
7195        const VkAllocationCallbacks*                pAllocator,
7196        VkBuffer*                                   pBuffer) {
7197    assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO)
7198    deviceObject := GetDevice(device)
7199
7200    buffer := ?
7201    pBuffer[0] = buffer
7202    State.Buffers[buffer] = new!BufferObject(device: device)
7203
7204    return ?
7205}
7206
7207@threadSafety("system")
7208cmd void vkDestroyBuffer(
7209        VkDevice                                    device,
7210        VkBuffer                                    buffer,
7211        const VkAllocationCallbacks*                pAllocator) {
7212    deviceObject := GetDevice(device)
7213    bufferObject := GetBuffer(buffer)
7214    assert(bufferObject.device == device)
7215
7216    assert(bufferObject.memory == 0)
7217    State.Buffers[buffer] = null
7218}
7219
7220
7221// Buffer view functions
7222
7223@threadSafety("system")
7224cmd VkResult vkCreateBufferView(
7225        VkDevice                                    device,
7226        const VkBufferViewCreateInfo*               pCreateInfo,
7227        const VkAllocationCallbacks*                pAllocator,
7228        VkBufferView*                               pView) {
7229    assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO)
7230    deviceObject := GetDevice(device)
7231
7232    bufferObject := GetBuffer(pCreateInfo.buffer)
7233    assert(bufferObject.device == device)
7234
7235    view := ?
7236    pView[0] = view
7237    State.BufferViews[view] = new!BufferViewObject(device: device, buffer: pCreateInfo.buffer)
7238
7239    return ?
7240}
7241
7242@threadSafety("system")
7243cmd void vkDestroyBufferView(
7244        VkDevice                                    device,
7245        VkBufferView                                bufferView,
7246        const VkAllocationCallbacks*                pAllocator) {
7247    deviceObject := GetDevice(device)
7248    bufferViewObject := GetBufferView(bufferView)
7249    assert(bufferViewObject.device == device)
7250
7251    State.BufferViews[bufferView] = null
7252}
7253
7254
7255// Image functions
7256
7257@threadSafety("system")
7258cmd VkResult vkCreateImage(
7259        VkDevice                                    device,
7260        const VkImageCreateInfo*                    pCreateInfo,
7261        const VkAllocationCallbacks*                pAllocator,
7262        VkImage*                                    pImage) {
7263    assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO)
7264    deviceObject := GetDevice(device)
7265
7266    image := ?
7267    pImage[0] = image
7268    State.Images[image] = new!ImageObject(device: device)
7269
7270    return ?
7271}
7272
7273@threadSafety("system")
7274cmd void vkDestroyImage(
7275        VkDevice                                    device,
7276        VkImage                                     image,
7277        const VkAllocationCallbacks*                pAllocator) {
7278    deviceObject := GetDevice(device)
7279    imageObject := GetImage(image)
7280    assert(imageObject.device == device)
7281
7282    assert(imageObject.memory == 0)
7283    State.Images[image] = null
7284}
7285
7286cmd void vkGetImageSubresourceLayout(
7287        VkDevice                                    device,
7288        VkImage                                     image,
7289        const VkImageSubresource*                   pSubresource,
7290        VkSubresourceLayout*                        pLayout) {
7291    deviceObject := GetDevice(device)
7292    imageObject := GetImage(image)
7293    assert(imageObject.device == device)
7294}
7295
7296
7297// Image view functions
7298
7299@threadSafety("system")
7300cmd VkResult vkCreateImageView(
7301        VkDevice                                    device,
7302        const VkImageViewCreateInfo*                pCreateInfo,
7303        const VkAllocationCallbacks*                pAllocator,
7304        VkImageView*                                pView) {
7305    assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO)
7306    deviceObject := GetDevice(device)
7307
7308    imageObject := GetImage(pCreateInfo.image)
7309    assert(imageObject.device == device)
7310
7311    view := ?
7312    pView[0] = view
7313    State.ImageViews[view] = new!ImageViewObject(device: device, image: pCreateInfo.image)
7314
7315    return ?
7316}
7317
7318@threadSafety("system")
7319cmd void vkDestroyImageView(
7320        VkDevice                                    device,
7321        VkImageView                                 imageView,
7322        const VkAllocationCallbacks*                pAllocator) {
7323    deviceObject := GetDevice(device)
7324    imageViewObject := GetImageView(imageView)
7325    assert(imageViewObject.device == device)
7326
7327    State.ImageViews[imageView] = null
7328}
7329
7330
7331// Shader functions
7332
7333cmd VkResult vkCreateShaderModule(
7334        VkDevice                                    device,
7335        const VkShaderModuleCreateInfo*             pCreateInfo,
7336        const VkAllocationCallbacks*                pAllocator,
7337        VkShaderModule*                             pShaderModule) {
7338    assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO)
7339    deviceObject := GetDevice(device)
7340
7341    shaderModule := ?
7342    pShaderModule[0] = shaderModule
7343    State.ShaderModules[shaderModule] = new!ShaderModuleObject(device: device)
7344
7345    return ?
7346}
7347
7348cmd void vkDestroyShaderModule(
7349        VkDevice                                    device,
7350        VkShaderModule                              shaderModule,
7351        const VkAllocationCallbacks*                pAllocator) {
7352    deviceObject := GetDevice(device)
7353    shaderModuleObject := GetShaderModule(shaderModule)
7354    assert(shaderModuleObject.device == device)
7355
7356    State.ShaderModules[shaderModule] = null
7357}
7358
7359
7360// Pipeline functions
7361
7362cmd VkResult vkCreatePipelineCache(
7363        VkDevice                                    device,
7364        const VkPipelineCacheCreateInfo*            pCreateInfo,
7365        const VkAllocationCallbacks*                pAllocator,
7366        VkPipelineCache*                            pPipelineCache) {
7367    assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO)
7368    deviceObject := GetDevice(device)
7369
7370    pipelineCache := ?
7371    pPipelineCache[0] = pipelineCache
7372    State.PipelineCaches[pipelineCache] = new!PipelineCacheObject(device: device)
7373
7374    return ?
7375}
7376
7377cmd void vkDestroyPipelineCache(
7378        VkDevice                                    device,
7379        VkPipelineCache                             pipelineCache,
7380        const VkAllocationCallbacks*                pAllocator) {
7381    deviceObject := GetDevice(device)
7382    pipelineCacheObject := GetPipelineCache(pipelineCache)
7383    assert(pipelineCacheObject.device == device)
7384
7385    State.PipelineCaches[pipelineCache] = null
7386}
7387
7388cmd VkResult vkGetPipelineCacheData(
7389        VkDevice                                    device,
7390        VkPipelineCache                             pipelineCache,
7391        platform.size_t*                            pDataSize,
7392        void*                                       pData) {
7393    deviceObject := GetDevice(device)
7394    pipelineCacheObject := GetPipelineCache(pipelineCache)
7395    assert(pipelineCacheObject.device == device)
7396
7397    return ?
7398}
7399
7400cmd VkResult vkMergePipelineCaches(
7401        VkDevice                                    device,
7402        VkPipelineCache                             dstCache,
7403        u32                                         srcCacheCount,
7404        const VkPipelineCache*                      pSrcCaches) {
7405    deviceObject := GetDevice(device)
7406    dstCacheObject := GetPipelineCache(dstCache)
7407    assert(dstCacheObject.device == device)
7408
7409    srcCaches := pSrcCaches[0:srcCacheCount]
7410    for i in (0 .. srcCacheCount) {
7411        srcCache := srcCaches[i]
7412        srcCacheObject := GetPipelineCache(srcCache)
7413        assert(srcCacheObject.device == device)
7414    }
7415
7416    return ?
7417}
7418
7419cmd VkResult vkCreateGraphicsPipelines(
7420        VkDevice                                    device,
7421        VkPipelineCache                             pipelineCache,
7422        u32                                         createInfoCount,
7423        const VkGraphicsPipelineCreateInfo*         pCreateInfos,
7424        const VkAllocationCallbacks*                pAllocator,
7425        VkPipeline*                                 pPipelines) {
7426    deviceObject := GetDevice(device)
7427    if pipelineCache != NULL_HANDLE {
7428        pipelineCacheObject := GetPipelineCache(pipelineCache)
7429        assert(pipelineCacheObject.device == device)
7430    }
7431
7432    createInfos := pCreateInfos[0:createInfoCount]
7433    pipelines := pPipelines[0:createInfoCount]
7434    for i in (0 .. createInfoCount) {
7435        pipeline := ?
7436        pipelines[i] = pipeline
7437        State.Pipelines[pipeline] = new!PipelineObject(device: device)
7438    }
7439
7440    return ?
7441}
7442
7443cmd VkResult vkCreateComputePipelines(
7444        VkDevice                                    device,
7445        VkPipelineCache                             pipelineCache,
7446        u32                                         createInfoCount,
7447        const VkComputePipelineCreateInfo*          pCreateInfos,
7448        const VkAllocationCallbacks*                pAllocator,
7449        VkPipeline*                                 pPipelines) {
7450    deviceObject := GetDevice(device)
7451    if pipelineCache != NULL_HANDLE {
7452        pipelineCacheObject := GetPipelineCache(pipelineCache)
7453        assert(pipelineCacheObject.device == device)
7454    }
7455
7456    createInfos := pCreateInfos[0:createInfoCount]
7457    pipelines := pPipelines[0:createInfoCount]
7458    for i in (0 .. createInfoCount) {
7459        pipeline := ?
7460        pipelines[i] = pipeline
7461        State.Pipelines[pipeline] = new!PipelineObject(device: device)
7462    }
7463
7464    return ?
7465}
7466
7467@threadSafety("system")
7468cmd void vkDestroyPipeline(
7469        VkDevice                                    device,
7470        VkPipeline                                  pipeline,
7471        const VkAllocationCallbacks*                pAllocator) {
7472    deviceObject := GetDevice(device)
7473    pipelineObjects := GetPipeline(pipeline)
7474    assert(pipelineObjects.device == device)
7475
7476    State.Pipelines[pipeline] = null
7477}
7478
7479
7480// Pipeline layout functions
7481
7482@threadSafety("system")
7483cmd VkResult vkCreatePipelineLayout(
7484        VkDevice                                    device,
7485        const VkPipelineLayoutCreateInfo*           pCreateInfo,
7486        const VkAllocationCallbacks*                pAllocator,
7487        VkPipelineLayout*                           pPipelineLayout) {
7488    assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO)
7489    deviceObject := GetDevice(device)
7490
7491    pipelineLayout := ?
7492    pPipelineLayout[0] = pipelineLayout
7493    State.PipelineLayouts[pipelineLayout] = new!PipelineLayoutObject(device: device)
7494
7495    return ?
7496}
7497
7498@threadSafety("system")
7499cmd void vkDestroyPipelineLayout(
7500        VkDevice                                    device,
7501        VkPipelineLayout                            pipelineLayout,
7502        const VkAllocationCallbacks*                pAllocator) {
7503    deviceObject := GetDevice(device)
7504    pipelineLayoutObjects := GetPipelineLayout(pipelineLayout)
7505    assert(pipelineLayoutObjects.device == device)
7506
7507    State.PipelineLayouts[pipelineLayout] = null
7508}
7509
7510
7511// Sampler functions
7512
7513@threadSafety("system")
7514cmd VkResult vkCreateSampler(
7515        VkDevice                                    device,
7516        const VkSamplerCreateInfo*                  pCreateInfo,
7517        const VkAllocationCallbacks*                pAllocator,
7518        VkSampler*                                  pSampler) {
7519    assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO)
7520    deviceObject := GetDevice(device)
7521
7522    sampler := ?
7523    pSampler[0] = sampler
7524    State.Samplers[sampler] = new!SamplerObject(device: device)
7525
7526    return ?
7527}
7528
7529@threadSafety("system")
7530cmd void vkDestroySampler(
7531        VkDevice                                    device,
7532        VkSampler                                   sampler,
7533        const VkAllocationCallbacks*                pAllocator) {
7534    deviceObject := GetDevice(device)
7535    samplerObject := GetSampler(sampler)
7536    assert(samplerObject.device == device)
7537
7538    State.Samplers[sampler] = null
7539}
7540
7541
7542// Descriptor set functions
7543
7544@threadSafety("system")
7545cmd VkResult vkCreateDescriptorSetLayout(
7546        VkDevice                                    device,
7547        const VkDescriptorSetLayoutCreateInfo*      pCreateInfo,
7548        const VkAllocationCallbacks*                pAllocator,
7549        VkDescriptorSetLayout*                      pSetLayout) {
7550    assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO)
7551    deviceObject := GetDevice(device)
7552
7553    setLayout := ?
7554    pSetLayout[0] = setLayout
7555    State.DescriptorSetLayouts[setLayout] = new!DescriptorSetLayoutObject(device: device)
7556
7557    return ?
7558}
7559
7560@threadSafety("system")
7561cmd void vkDestroyDescriptorSetLayout(
7562        VkDevice                                    device,
7563        VkDescriptorSetLayout                       descriptorSetLayout,
7564        const VkAllocationCallbacks*                pAllocator) {
7565    deviceObject := GetDevice(device)
7566    descriptorSetLayoutObject := GetDescriptorSetLayout(descriptorSetLayout)
7567    assert(descriptorSetLayoutObject.device == device)
7568
7569    State.DescriptorSetLayouts[descriptorSetLayout] = null
7570}
7571
7572@threadSafety("system")
7573cmd VkResult vkCreateDescriptorPool(
7574        VkDevice                                    device,
7575        const VkDescriptorPoolCreateInfo*           pCreateInfo,
7576        const VkAllocationCallbacks*                pAllocator,
7577        VkDescriptorPool*                           pDescriptorPool) {
7578    assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO)
7579    deviceObject := GetDevice(device)
7580
7581    descriptorPool := ?
7582    pDescriptorPool[0] = descriptorPool
7583    State.DescriptorPools[descriptorPool] = new!DescriptorPoolObject(device: device)
7584
7585    return ?
7586}
7587
7588@threadSafety("system")
7589cmd void vkDestroyDescriptorPool(
7590        VkDevice                                    device,
7591        VkDescriptorPool                            descriptorPool,
7592        const VkAllocationCallbacks*                pAllocator) {
7593    deviceObject := GetDevice(device)
7594    descriptorPoolObject := GetDescriptorPool(descriptorPool)
7595    assert(descriptorPoolObject.device == device)
7596
7597    State.DescriptorPools[descriptorPool] = null
7598}
7599
7600@threadSafety("app")
7601cmd VkResult vkResetDescriptorPool(
7602        VkDevice                                    device,
7603        VkDescriptorPool                            descriptorPool,
7604        VkDescriptorPoolResetFlags                  flags) {
7605    deviceObject := GetDevice(device)
7606    descriptorPoolObject := GetDescriptorPool(descriptorPool)
7607    assert(descriptorPoolObject.device == device)
7608
7609    return ?
7610}
7611
7612@threadSafety("app")
7613cmd VkResult vkAllocateDescriptorSets(
7614        VkDevice                                    device,
7615        const VkDescriptorSetAllocateInfo*          pAllocateInfo,
7616        VkDescriptorSet*                            pDescriptorSets) {
7617    deviceObject := GetDevice(device)
7618    allocInfo := pAllocateInfo[0]
7619    descriptorPoolObject := GetDescriptorPool(allocInfo.descriptorPool)
7620
7621    setLayouts := allocInfo.pSetLayouts[0:allocInfo.setCount]
7622    for i in (0 .. allocInfo.setCount) {
7623        setLayout := setLayouts[i]
7624        setLayoutObject := GetDescriptorSetLayout(setLayout)
7625        assert(setLayoutObject.device == device)
7626    }
7627
7628    descriptorSets := pDescriptorSets[0:allocInfo.setCount]
7629    for i in (0 .. allocInfo.setCount) {
7630        descriptorSet := ?
7631        descriptorSets[i] = descriptorSet
7632        State.DescriptorSets[descriptorSet] = new!DescriptorSetObject(device: device)
7633    }
7634
7635    return ?
7636}
7637
7638cmd VkResult vkFreeDescriptorSets(
7639        VkDevice                                    device,
7640        VkDescriptorPool                            descriptorPool,
7641        u32                                         descriptorSetCount,
7642        const VkDescriptorSet*                      pDescriptorSets) {
7643    deviceObject := GetDevice(device)
7644    descriptorPoolObject := GetDescriptorPool(descriptorPool)
7645
7646    descriptorSets := pDescriptorSets[0:descriptorSetCount]
7647    for i in (0 .. descriptorSetCount) {
7648        descriptorSet := descriptorSets[i]
7649        descriptorSetObject := GetDescriptorSet(descriptorSet)
7650        assert(descriptorSetObject.device == device)
7651        State.DescriptorSets[descriptorSet] = null
7652    }
7653
7654    return ?
7655}
7656
7657cmd void vkUpdateDescriptorSets(
7658        VkDevice                                    device,
7659        u32                                         descriptorWriteCount,
7660        const VkWriteDescriptorSet*                 pDescriptorWrites,
7661        u32                                         descriptorCopyCount,
7662        const VkCopyDescriptorSet*                  pDescriptorCopies) {
7663    deviceObject := GetDevice(device)
7664
7665    descriptorWrites := pDescriptorWrites[0:descriptorWriteCount]
7666    for i in (0 .. descriptorWriteCount) {
7667        descriptorWrite := descriptorWrites[i]
7668        descriptorWriteObject := GetDescriptorSet(descriptorWrite.dstSet)
7669        assert(descriptorWriteObject.device == device)
7670    }
7671
7672    descriptorCopies := pDescriptorCopies[0:descriptorCopyCount]
7673    for i in (0 .. descriptorCopyCount) {
7674        descriptorCopy := descriptorCopies[i]
7675        descriptorCopyObject := GetDescriptorSet(descriptorCopy.dstSet)
7676        assert(descriptorCopyObject.device == device)
7677    }
7678}
7679
7680
7681// Framebuffer functions
7682
7683@threadSafety("system")
7684cmd VkResult vkCreateFramebuffer(
7685        VkDevice                                    device,
7686        const VkFramebufferCreateInfo*              pCreateInfo,
7687        const VkAllocationCallbacks*                pAllocator,
7688        VkFramebuffer*                              pFramebuffer) {
7689    assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO)
7690    deviceObject := GetDevice(device)
7691
7692    framebuffer := ?
7693    pFramebuffer[0] = framebuffer
7694    State.Framebuffers[framebuffer] = new!FramebufferObject(device: device)
7695
7696    return ?
7697}
7698
7699@threadSafety("system")
7700cmd void vkDestroyFramebuffer(
7701        VkDevice                                    device,
7702        VkFramebuffer                               framebuffer,
7703        const VkAllocationCallbacks*                pAllocator) {
7704    deviceObject := GetDevice(device)
7705    framebufferObject := GetFramebuffer(framebuffer)
7706    assert(framebufferObject.device == device)
7707
7708    State.Framebuffers[framebuffer] = null
7709}
7710
7711
7712// Renderpass functions
7713
7714@threadSafety("system")
7715cmd VkResult vkCreateRenderPass(
7716        VkDevice                                    device,
7717        const VkRenderPassCreateInfo*               pCreateInfo,
7718        const VkAllocationCallbacks*                pAllocator,
7719        VkRenderPass*                               pRenderPass) {
7720    assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO)
7721    deviceObject := GetDevice(device)
7722
7723    renderpass := ?
7724    pRenderPass[0] = renderpass
7725    State.RenderPasses[renderpass] = new!RenderPassObject(device: device)
7726
7727    return ?
7728}
7729
7730@threadSafety("system")
7731cmd void vkDestroyRenderPass(
7732        VkDevice                                    device,
7733        VkRenderPass                                renderPass,
7734        const VkAllocationCallbacks*                pAllocator) {
7735    deviceObject := GetDevice(device)
7736    renderPassObject := GetRenderPass(renderPass)
7737    assert(renderPassObject.device == device)
7738
7739    State.RenderPasses[renderPass] = null
7740}
7741
7742cmd void vkGetRenderAreaGranularity(
7743        VkDevice                                    device,
7744        VkRenderPass                                renderPass,
7745        VkExtent2D*                                 pGranularity) {
7746    deviceObject := GetDevice(device)
7747    renderPassObject := GetRenderPass(renderPass)
7748
7749    granularity := ?
7750    pGranularity[0] = granularity
7751}
7752
7753// Command pool functions
7754
7755cmd VkResult vkCreateCommandPool(
7756        VkDevice                                    device,
7757        const VkCommandPoolCreateInfo*              pCreateInfo,
7758        const VkAllocationCallbacks*                pAllocator,
7759        VkCommandPool*                              pCommandPool) {
7760    assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO)
7761    deviceObject := GetDevice(device)
7762
7763    commandPool := ?
7764    pCommandPool[0] = commandPool
7765    State.CommandPools[commandPool] = new!CommandPoolObject(device: device)
7766
7767    return ?
7768}
7769
7770cmd void vkDestroyCommandPool(
7771        VkDevice                                    device,
7772        VkCommandPool                               commandPool,
7773        const VkAllocationCallbacks*                pAllocator) {
7774    deviceObject := GetDevice(device)
7775    commandPoolObject := GetCommandPool(commandPool)
7776    assert(commandPoolObject.device == device)
7777
7778    State.CommandPools[commandPool] = null
7779}
7780
7781cmd VkResult vkResetCommandPool(
7782        VkDevice                                    device,
7783        VkCommandPool                               commandPool,
7784        VkCommandPoolResetFlags                     flags) {
7785    deviceObject := GetDevice(device)
7786    commandPoolObject := GetCommandPool(commandPool)
7787    assert(commandPoolObject.device == device)
7788
7789    return ?
7790}
7791
7792// Command buffer functions
7793
7794macro void bindCommandBuffer(VkCommandBuffer commandBuffer, any obj, VkDeviceMemory memory) {
7795    memoryObject := GetDeviceMemory(memory)
7796    memoryObject.boundCommandBuffers[commandBuffer] = commandBuffer
7797
7798    commandBufferObject := GetCommandBuffer(commandBuffer)
7799    commandBufferObject.boundObjects[as!u64(obj)] = memory
7800}
7801
7802macro void unbindCommandBuffer(VkCommandBuffer commandBuffer, any obj, VkDeviceMemory memory) {
7803    memoryObject := GetDeviceMemory(memory)
7804    memoryObject.boundCommandBuffers[commandBuffer] = null
7805
7806    commandBufferObject := GetCommandBuffer(commandBuffer)
7807    commandBufferObject.boundObjects[as!u64(obj)] = null
7808}
7809
7810@threadSafety("system")
7811cmd VkResult vkAllocateCommandBuffers(
7812        VkDevice                                    device,
7813        const VkCommandBufferAllocateInfo*          pAllocateInfo,
7814        VkCommandBuffer*                            pCommandBuffers) {
7815    assert(pAllocateInfo[0].sType == VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO)
7816
7817    count := pAllocateInfo[0].commandBufferCount
7818    commandBuffers := pCommandBuffers[0:count]
7819    for i in (0 .. count) {
7820        commandBuffer := ?
7821        commandBuffers[i] = commandBuffer
7822        State.CommandBuffers[commandBuffer] = new!CommandBufferObject(device: device)
7823    }
7824
7825    return ?
7826}
7827
7828@threadSafety("system")
7829cmd void vkFreeCommandBuffers(
7830        VkDevice                                    device,
7831        VkCommandPool                               commandPool,
7832        u32                                         commandBufferCount,
7833        const VkCommandBuffer*                      pCommandBuffers) {
7834    deviceObject := GetDevice(device)
7835
7836    commandBuffers := pCommandBuffers[0:commandBufferCount]
7837    for i in (0 .. commandBufferCount) {
7838        commandBufferObject := GetCommandBuffer(commandBuffers[i])
7839        assert(commandBufferObject.device == device)
7840        // TODO: iterate over boundObjects and clear memory bindings
7841        State.CommandBuffers[commandBuffers[i]] = null
7842    }
7843}
7844
7845@threadSafety("app")
7846cmd VkResult vkBeginCommandBuffer(
7847        VkCommandBuffer                             commandBuffer,
7848        const VkCommandBufferBeginInfo*             pBeginInfo) {
7849    assert(pBeginInfo.sType == VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO)
7850    commandBufferObject := GetCommandBuffer(commandBuffer)
7851
7852    // TODO: iterate over boundObjects and clear memory bindings
7853
7854    return ?
7855}
7856
7857@threadSafety("app")
7858cmd VkResult vkEndCommandBuffer(
7859        VkCommandBuffer                             commandBuffer) {
7860    commandBufferObject := GetCommandBuffer(commandBuffer)
7861
7862    return ?
7863}
7864
7865@threadSafety("app")
7866cmd VkResult vkResetCommandBuffer(
7867        VkCommandBuffer                             commandBuffer,
7868        VkCommandBufferResetFlags                   flags) {
7869    commandBufferObject := GetCommandBuffer(commandBuffer)
7870
7871    // TODO: iterate over boundObjects and clear memory bindings
7872
7873    return ?
7874}
7875
7876
7877// Command buffer building functions
7878
7879@threadSafety("app")
7880cmd void vkCmdBindPipeline(
7881        VkCommandBuffer                             commandBuffer,
7882        VkPipelineBindPoint                         pipelineBindPoint,
7883        VkPipeline                                  pipeline) {
7884    commandBufferObject := GetCommandBuffer(commandBuffer)
7885    pipelineObject := GetPipeline(pipeline)
7886    assert(commandBufferObject.device == pipelineObject.device)
7887
7888    queue := switch (pipelineBindPoint) {
7889        case VK_PIPELINE_BIND_POINT_COMPUTE:  VK_QUEUE_COMPUTE_BIT
7890        case VK_PIPELINE_BIND_POINT_GRAPHICS: VK_QUEUE_GRAPHICS_BIT
7891    }
7892    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, queue)
7893}
7894
7895@threadSafety("app")
7896cmd void vkCmdSetViewport(
7897        VkCommandBuffer                             commandBuffer,
7898        u32                                         firstViewport,
7899        u32                                         viewportCount,
7900        const VkViewport*                           pViewports) {
7901    commandBufferObject := GetCommandBuffer(commandBuffer)
7902    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
7903}
7904
7905@threadSafety("app")
7906cmd void vkCmdSetScissor(
7907        VkCommandBuffer                             commandBuffer,
7908        u32                                         firstScissor,
7909        u32                                         scissorCount,
7910        const VkRect2D*                             pScissors) {
7911    commandBufferObject := GetCommandBuffer(commandBuffer)
7912    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
7913}
7914
7915@threadSafety("app")
7916cmd void vkCmdSetLineWidth(
7917        VkCommandBuffer                             commandBuffer,
7918        f32                                         lineWidth) {
7919    commandBufferObject := GetCommandBuffer(commandBuffer)
7920    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
7921}
7922
7923@threadSafety("app")
7924cmd void vkCmdSetDepthBias(
7925        VkCommandBuffer                             commandBuffer,
7926        f32                                         depthBiasConstantFactor,
7927        f32                                         depthBiasClamp,
7928        f32                                         depthBiasSlopeFactor) {
7929    commandBufferObject := GetCommandBuffer(commandBuffer)
7930    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
7931}
7932
7933@threadSafety("app")
7934cmd void vkCmdSetBlendConstants(
7935        VkCommandBuffer                             commandBuffer,
7936        // TODO(jessehall): apic only supports 'const' on pointer types. Using
7937        // an annotation as a quick hack to pass this to the template without
7938        // having to modify the AST and semantic model.
7939        @readonly f32[4]                            blendConstants) {
7940    commandBufferObject := GetCommandBuffer(commandBuffer)
7941    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
7942}
7943
7944@threadSafety("app")
7945cmd void vkCmdSetDepthBounds(
7946        VkCommandBuffer                             commandBuffer,
7947        f32                                         minDepthBounds,
7948        f32                                         maxDepthBounds) {
7949    commandBufferObject := GetCommandBuffer(commandBuffer)
7950    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
7951}
7952
7953@threadSafety("app")
7954cmd void vkCmdSetStencilCompareMask(
7955        VkCommandBuffer                             commandBuffer,
7956        VkStencilFaceFlags                          faceMask,
7957        u32                                         compareMask) {
7958    commandBufferObject := GetCommandBuffer(commandBuffer)
7959    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
7960}
7961
7962@threadSafety("app")
7963cmd void vkCmdSetStencilWriteMask(
7964        VkCommandBuffer                             commandBuffer,
7965        VkStencilFaceFlags                          faceMask,
7966        u32                                         writeMask) {
7967    commandBufferObject := GetCommandBuffer(commandBuffer)
7968    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
7969}
7970
7971@threadSafety("app")
7972cmd void vkCmdSetStencilReference(
7973        VkCommandBuffer                             commandBuffer,
7974        VkStencilFaceFlags                          faceMask,
7975        u32                                         reference) {
7976    commandBufferObject := GetCommandBuffer(commandBuffer)
7977    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
7978}
7979
7980@threadSafety("app")
7981cmd void vkCmdBindDescriptorSets(
7982        VkCommandBuffer                             commandBuffer,
7983        VkPipelineBindPoint                         pipelineBindPoint,
7984        VkPipelineLayout                            layout,
7985        u32                                         firstSet,
7986        u32                                         descriptorSetCount,
7987        const VkDescriptorSet*                      pDescriptorSets,
7988        u32                                         dynamicOffsetCount,
7989        const u32*                                  pDynamicOffsets) {
7990    commandBufferObject := GetCommandBuffer(commandBuffer)
7991
7992    descriptorSets := pDescriptorSets[0:descriptorSetCount]
7993    for i in (0 .. descriptorSetCount) {
7994        descriptorSet := descriptorSets[i]
7995        descriptorSetObject := GetDescriptorSet(descriptorSet)
7996        assert(commandBufferObject.device == descriptorSetObject.device)
7997    }
7998
7999    dynamicOffsets := pDynamicOffsets[0:dynamicOffsetCount]
8000    for i in (0 .. dynamicOffsetCount) {
8001        dynamicOffset := dynamicOffsets[i]
8002    }
8003
8004    queue := switch (pipelineBindPoint) {
8005        case VK_PIPELINE_BIND_POINT_COMPUTE:  VK_QUEUE_COMPUTE_BIT
8006        case VK_PIPELINE_BIND_POINT_GRAPHICS: VK_QUEUE_GRAPHICS_BIT
8007    }
8008    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, queue)
8009}
8010
8011@threadSafety("app")
8012cmd void vkCmdBindIndexBuffer(
8013        VkCommandBuffer                             commandBuffer,
8014        VkBuffer                                    buffer,
8015        VkDeviceSize                                offset,
8016        VkIndexType                                 indexType) {
8017    commandBufferObject := GetCommandBuffer(commandBuffer)
8018    bufferObject := GetBuffer(buffer)
8019    assert(commandBufferObject.device == bufferObject.device)
8020
8021    bindCommandBuffer(commandBuffer, buffer, bufferObject.memory)
8022
8023    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
8024}
8025
8026@threadSafety("app")
8027cmd void vkCmdBindVertexBuffers(
8028        VkCommandBuffer                             commandBuffer,
8029        u32                                         firstBinding,
8030        u32                                         bindingCount,
8031        const VkBuffer*                             pBuffers,
8032        const VkDeviceSize*                         pOffsets) {
8033    commandBufferObject := GetCommandBuffer(commandBuffer)
8034
8035    // TODO: check if not [firstBinding:firstBinding+bindingCount]
8036    buffers := pBuffers[0:bindingCount]
8037    offsets := pOffsets[0:bindingCount]
8038    for i in (0 .. bindingCount) {
8039        buffer := buffers[i]
8040        offset := offsets[i]
8041        bufferObject := GetBuffer(buffer)
8042        assert(commandBufferObject.device == bufferObject.device)
8043
8044        bindCommandBuffer(commandBuffer, buffer, bufferObject.memory)
8045    }
8046
8047    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
8048}
8049
8050@threadSafety("app")
8051cmd void vkCmdDraw(
8052        VkCommandBuffer                             commandBuffer,
8053        u32                                         vertexCount,
8054        u32                                         instanceCount,
8055        u32                                         firstVertex,
8056        u32                                         firstInstance) {
8057    commandBufferObject := GetCommandBuffer(commandBuffer)
8058
8059    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
8060}
8061
8062@threadSafety("app")
8063cmd void vkCmdDrawIndexed(
8064        VkCommandBuffer                             commandBuffer,
8065        u32                                         indexCount,
8066        u32                                         instanceCount,
8067        u32                                         firstIndex,
8068        s32                                         vertexOffset,
8069        u32                                         firstInstance) {
8070    commandBufferObject := GetCommandBuffer(commandBuffer)
8071
8072    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
8073}
8074
8075@threadSafety("app")
8076cmd void vkCmdDrawIndirect(
8077        VkCommandBuffer                             commandBuffer,
8078        VkBuffer                                    buffer,
8079        VkDeviceSize                                offset,
8080        u32                                         drawCount,
8081        u32                                         stride) {
8082    commandBufferObject := GetCommandBuffer(commandBuffer)
8083    bufferObject := GetBuffer(buffer)
8084    assert(commandBufferObject.device == bufferObject.device)
8085
8086    bindCommandBuffer(commandBuffer, buffer, bufferObject.memory)
8087
8088    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
8089}
8090
8091@threadSafety("app")
8092cmd void vkCmdDrawIndexedIndirect(
8093        VkCommandBuffer                             commandBuffer,
8094        VkBuffer                                    buffer,
8095        VkDeviceSize                                offset,
8096        u32                                         drawCount,
8097        u32                                         stride) {
8098    commandBufferObject := GetCommandBuffer(commandBuffer)
8099    bufferObject := GetBuffer(buffer)
8100    assert(commandBufferObject.device == bufferObject.device)
8101
8102    bindCommandBuffer(commandBuffer, buffer, bufferObject.memory)
8103
8104    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
8105}
8106
8107@threadSafety("app")
8108cmd void vkCmdDispatch(
8109        VkCommandBuffer                             commandBuffer,
8110        u32                                         groupCountX,
8111        u32                                         groupCountY,
8112        u32                                         groupCountZ) {
8113    commandBufferObject := GetCommandBuffer(commandBuffer)
8114
8115    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_COMPUTE_BIT)
8116}
8117
8118@threadSafety("app")
8119cmd void vkCmdDispatchIndirect(
8120        VkCommandBuffer                             commandBuffer,
8121        VkBuffer                                    buffer,
8122        VkDeviceSize                                offset) {
8123    commandBufferObject := GetCommandBuffer(commandBuffer)
8124    bufferObject := GetBuffer(buffer)
8125    assert(commandBufferObject.device == bufferObject.device)
8126
8127    bindCommandBuffer(commandBuffer, buffer, bufferObject.memory)
8128
8129    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_COMPUTE_BIT)
8130}
8131
8132@threadSafety("app")
8133cmd void vkCmdCopyBuffer(
8134        VkCommandBuffer                             commandBuffer,
8135        VkBuffer                                    srcBuffer,
8136        VkBuffer                                    dstBuffer,
8137        u32                                         regionCount,
8138        const VkBufferCopy*                         pRegions) {
8139    commandBufferObject := GetCommandBuffer(commandBuffer)
8140    srcBufferObject := GetBuffer(srcBuffer)
8141    dstBufferObject := GetBuffer(dstBuffer)
8142    assert(commandBufferObject.device == srcBufferObject.device)
8143    assert(commandBufferObject.device == dstBufferObject.device)
8144
8145    regions := pRegions[0:regionCount]
8146    for i in (0 .. regionCount) {
8147        region := regions[i]
8148    }
8149
8150    bindCommandBuffer(commandBuffer, srcBuffer, srcBufferObject.memory)
8151    bindCommandBuffer(commandBuffer, dstBuffer, dstBufferObject.memory)
8152
8153    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_TRANSFER_BIT)
8154}
8155
8156@threadSafety("app")
8157cmd void vkCmdCopyImage(
8158        VkCommandBuffer                             commandBuffer,
8159        VkImage                                     srcImage,
8160        VkImageLayout                               srcImageLayout,
8161        VkImage                                     dstImage,
8162        VkImageLayout                               dstImageLayout,
8163        u32                                         regionCount,
8164        const VkImageCopy*                          pRegions) {
8165    commandBufferObject := GetCommandBuffer(commandBuffer)
8166    srcImageObject := GetImage(srcImage)
8167    dstImageObject := GetImage(dstImage)
8168    assert(commandBufferObject.device == srcImageObject.device)
8169    assert(commandBufferObject.device == dstImageObject.device)
8170
8171    regions := pRegions[0:regionCount]
8172    for i in (0 .. regionCount) {
8173        region := regions[i]
8174    }
8175
8176    bindCommandBuffer(commandBuffer, srcImage, srcImageObject.memory)
8177    bindCommandBuffer(commandBuffer, dstImage, dstImageObject.memory)
8178
8179    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_TRANSFER_BIT)
8180}
8181
8182@threadSafety("app")
8183cmd void vkCmdBlitImage(
8184        VkCommandBuffer                             commandBuffer,
8185        VkImage                                     srcImage,
8186        VkImageLayout                               srcImageLayout,
8187        VkImage                                     dstImage,
8188        VkImageLayout                               dstImageLayout,
8189        u32                                         regionCount,
8190        const VkImageBlit*                          pRegions,
8191        VkFilter                                    filter) {
8192    commandBufferObject := GetCommandBuffer(commandBuffer)
8193    srcImageObject := GetImage(srcImage)
8194    dstImageObject := GetImage(dstImage)
8195    assert(commandBufferObject.device == srcImageObject.device)
8196    assert(commandBufferObject.device == dstImageObject.device)
8197
8198    regions := pRegions[0:regionCount]
8199    for i in (0 .. regionCount) {
8200        region := regions[i]
8201    }
8202
8203    bindCommandBuffer(commandBuffer, srcImage, srcImageObject.memory)
8204    bindCommandBuffer(commandBuffer, dstImage, dstImageObject.memory)
8205
8206    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
8207}
8208
8209@threadSafety("app")
8210cmd void vkCmdCopyBufferToImage(
8211        VkCommandBuffer                             commandBuffer,
8212        VkBuffer                                    srcBuffer,
8213        VkImage                                     dstImage,
8214        VkImageLayout                               dstImageLayout,
8215        u32                                         regionCount,
8216        const VkBufferImageCopy*                    pRegions) {
8217    commandBufferObject := GetCommandBuffer(commandBuffer)
8218    srcBufferObject := GetBuffer(srcBuffer)
8219    dstImageObject := GetImage(dstImage)
8220    assert(commandBufferObject.device == srcBufferObject.device)
8221    assert(commandBufferObject.device == dstImageObject.device)
8222
8223    regions := pRegions[0:regionCount]
8224    for i in (0 .. regionCount) {
8225        region := regions[i]
8226    }
8227
8228    bindCommandBuffer(commandBuffer, srcBuffer, srcBufferObject.memory)
8229    bindCommandBuffer(commandBuffer, dstImage, dstImageObject.memory)
8230
8231    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_TRANSFER_BIT)
8232}
8233
8234@threadSafety("app")
8235cmd void vkCmdCopyImageToBuffer(
8236        VkCommandBuffer                             commandBuffer,
8237        VkImage                                     srcImage,
8238        VkImageLayout                               srcImageLayout,
8239        VkBuffer                                    dstBuffer,
8240        u32                                         regionCount,
8241        const VkBufferImageCopy*                    pRegions) {
8242    commandBufferObject := GetCommandBuffer(commandBuffer)
8243    srcImageObject := GetImage(srcImage)
8244    dstBufferObject := GetBuffer(dstBuffer)
8245    assert(commandBufferObject.device == srcImageObject.device)
8246    assert(commandBufferObject.device == dstBufferObject.device)
8247
8248    regions := pRegions[0:regionCount]
8249    for i in (0 .. regionCount) {
8250        region := regions[i]
8251    }
8252
8253    bindCommandBuffer(commandBuffer, srcImage, srcImageObject.memory)
8254    bindCommandBuffer(commandBuffer, dstBuffer, dstBufferObject.memory)
8255
8256    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_TRANSFER_BIT)
8257}
8258
8259@threadSafety("app")
8260cmd void vkCmdUpdateBuffer(
8261        VkCommandBuffer                             commandBuffer,
8262        VkBuffer                                    dstBuffer,
8263        VkDeviceSize                                dstOffset,
8264        VkDeviceSize                                dataSize,
8265        const void*                                 pData) {
8266    commandBufferObject := GetCommandBuffer(commandBuffer)
8267    dstBufferObject := GetBuffer(dstBuffer)
8268    assert(commandBufferObject.device == dstBufferObject.device)
8269
8270    data := pData[0:dataSize]
8271
8272    bindCommandBuffer(commandBuffer, dstBuffer, dstBufferObject.memory)
8273
8274    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_TRANSFER_BIT)
8275}
8276
8277@threadSafety("app")
8278cmd void vkCmdFillBuffer(
8279        VkCommandBuffer                             commandBuffer,
8280        VkBuffer                                    dstBuffer,
8281        VkDeviceSize                                dstOffset,
8282        VkDeviceSize                                size,
8283        u32                                         data) {
8284    commandBufferObject := GetCommandBuffer(commandBuffer)
8285    dstBufferObject := GetBuffer(dstBuffer)
8286    assert(commandBufferObject.device == dstBufferObject.device)
8287
8288    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_TRANSFER_BIT)
8289}
8290
8291@threadSafety("app")
8292cmd void vkCmdClearColorImage(
8293        VkCommandBuffer                             commandBuffer,
8294        VkImage                                     image,
8295        VkImageLayout                               imageLayout,
8296        const VkClearColorValue*                    pColor,
8297        u32                                         rangeCount,
8298        const VkImageSubresourceRange*              pRanges) {
8299    commandBufferObject := GetCommandBuffer(commandBuffer)
8300    imageObject := GetImage(image)
8301    assert(commandBufferObject.device == imageObject.device)
8302
8303    ranges := pRanges[0:rangeCount]
8304    for i in (0 .. rangeCount) {
8305        range := ranges[i]
8306    }
8307
8308    bindCommandBuffer(commandBuffer, image, imageObject.memory)
8309
8310    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
8311}
8312
8313@threadSafety("app")
8314cmd void vkCmdClearDepthStencilImage(
8315        VkCommandBuffer                             commandBuffer,
8316        VkImage                                     image,
8317        VkImageLayout                               imageLayout,
8318        const VkClearDepthStencilValue*             pDepthStencil,
8319        u32                                         rangeCount,
8320        const VkImageSubresourceRange*              pRanges) {
8321    commandBufferObject := GetCommandBuffer(commandBuffer)
8322    imageObject := GetImage(image)
8323    assert(commandBufferObject.device == imageObject.device)
8324
8325    ranges := pRanges[0:rangeCount]
8326    for i in (0 .. rangeCount) {
8327        range := ranges[i]
8328    }
8329
8330    bindCommandBuffer(commandBuffer, image, imageObject.memory)
8331
8332    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
8333}
8334
8335@threadSafety("app")
8336cmd void vkCmdClearAttachments(
8337        VkCommandBuffer                             commandBuffer,
8338        u32                                         attachmentCount,
8339        const VkClearAttachment*                    pAttachments,
8340        u32                                         rectCount,
8341        const VkClearRect*                          pRects) {
8342    commandBufferObject := GetCommandBuffer(commandBuffer)
8343
8344    rects := pRects[0:rectCount]
8345    for i in (0 .. rectCount) {
8346        rect := rects[i]
8347    }
8348
8349    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
8350}
8351
8352@threadSafety("app")
8353cmd void vkCmdResolveImage(
8354        VkCommandBuffer                             commandBuffer,
8355        VkImage                                     srcImage,
8356        VkImageLayout                               srcImageLayout,
8357        VkImage                                     dstImage,
8358        VkImageLayout                               dstImageLayout,
8359        u32                                         regionCount,
8360        const VkImageResolve*                       pRegions) {
8361    commandBufferObject := GetCommandBuffer(commandBuffer)
8362    srcImageObject := GetImage(srcImage)
8363    dstImageObject := GetImage(dstImage)
8364    assert(commandBufferObject.device == srcImageObject.device)
8365    assert(commandBufferObject.device == dstImageObject.device)
8366
8367    regions := pRegions[0:regionCount]
8368    for i in (0 .. regionCount) {
8369        region := regions[i]
8370    }
8371
8372    bindCommandBuffer(commandBuffer, srcImage, srcImageObject.memory)
8373    bindCommandBuffer(commandBuffer, dstImage, dstImageObject.memory)
8374
8375    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
8376}
8377
8378@threadSafety("app")
8379cmd void vkCmdSetEvent(
8380        VkCommandBuffer                             commandBuffer,
8381        VkEvent                                     event,
8382        VkPipelineStageFlags                        stageMask) {
8383    commandBufferObject := GetCommandBuffer(commandBuffer)
8384    eventObject := GetEvent(event)
8385    assert(commandBufferObject.device == eventObject.device)
8386}
8387
8388@threadSafety("app")
8389cmd void vkCmdResetEvent(
8390        VkCommandBuffer                             commandBuffer,
8391        VkEvent                                     event,
8392        VkPipelineStageFlags                        stageMask) {
8393    commandBufferObject := GetCommandBuffer(commandBuffer)
8394    eventObject := GetEvent(event)
8395    assert(commandBufferObject.device == eventObject.device)
8396}
8397
8398@threadSafety("app")
8399cmd void vkCmdWaitEvents(
8400        VkCommandBuffer                             commandBuffer,
8401        u32                                         eventCount,
8402        const VkEvent*                              pEvents,
8403        VkPipelineStageFlags                        srcStageMask,
8404        VkPipelineStageFlags                        dstStageMask,
8405        u32                                         memoryBarrierCount,
8406        const VkMemoryBarrier*                      pMemoryBarriers,
8407        u32                                         bufferMemoryBarrierCount,
8408        const VkBufferMemoryBarrier*                pBufferMemoryBarriers,
8409        u32                                         imageMemoryBarrierCount,
8410        const VkImageMemoryBarrier*                 pImageMemoryBarriers) {
8411    commandBufferObject := GetCommandBuffer(commandBuffer)
8412
8413    events := pEvents[0:eventCount]
8414    for i in (0 .. eventCount) {
8415        event := events[i]
8416        eventObject := GetEvent(event)
8417        assert(commandBufferObject.device == eventObject.device)
8418    }
8419
8420    memoryBarriers := pMemoryBarriers[0:memoryBarrierCount]
8421    for i in (0 .. memoryBarrierCount) {
8422        memoryBarrier := memoryBarriers[i]
8423    }
8424    bufferMemoryBarriers := pBufferMemoryBarriers[0:bufferMemoryBarrierCount]
8425    for i in (0 .. bufferMemoryBarrierCount) {
8426        bufferMemoryBarrier := bufferMemoryBarriers[i]
8427        bufferObject := GetBuffer(bufferMemoryBarrier.buffer)
8428        assert(bufferObject.device == commandBufferObject.device)
8429    }
8430    imageMemoryBarriers := pImageMemoryBarriers[0:imageMemoryBarrierCount]
8431    for i in (0 .. imageMemoryBarrierCount) {
8432        imageMemoryBarrier := imageMemoryBarriers[i]
8433        imageObject := GetImage(imageMemoryBarrier.image)
8434        assert(imageObject.device == commandBufferObject.device)
8435    }
8436}
8437
8438@threadSafety("app")
8439cmd void vkCmdPipelineBarrier(
8440        VkCommandBuffer                             commandBuffer,
8441        VkPipelineStageFlags                        srcStageMask,
8442        VkPipelineStageFlags                        dstStageMask,
8443        VkDependencyFlags                           dependencyFlags,
8444        u32                                         memoryBarrierCount,
8445        const VkMemoryBarrier*                      pMemoryBarriers,
8446        u32                                         bufferMemoryBarrierCount,
8447        const VkBufferMemoryBarrier*                pBufferMemoryBarriers,
8448        u32                                         imageMemoryBarrierCount,
8449        const VkImageMemoryBarrier*                 pImageMemoryBarriers) {
8450    commandBufferObject := GetCommandBuffer(commandBuffer)
8451
8452    memoryBarriers := pMemoryBarriers[0:memoryBarrierCount]
8453    for i in (0 .. memoryBarrierCount) {
8454        memoryBarrier := memoryBarriers[i]
8455    }
8456    bufferMemoryBarriers := pBufferMemoryBarriers[0:bufferMemoryBarrierCount]
8457    for i in (0 .. bufferMemoryBarrierCount) {
8458        bufferMemoryBarrier := bufferMemoryBarriers[i]
8459        bufferObject := GetBuffer(bufferMemoryBarrier.buffer)
8460        assert(bufferObject.device == commandBufferObject.device)
8461    }
8462    imageMemoryBarriers := pImageMemoryBarriers[0:imageMemoryBarrierCount]
8463    for i in (0 .. imageMemoryBarrierCount) {
8464        imageMemoryBarrier := imageMemoryBarriers[i]
8465        imageObject := GetImage(imageMemoryBarrier.image)
8466        assert(imageObject.device == commandBufferObject.device)
8467    }
8468}
8469
8470@threadSafety("app")
8471cmd void vkCmdBeginQuery(
8472        VkCommandBuffer                             commandBuffer,
8473        VkQueryPool                                 queryPool,
8474        u32                                         query,
8475        VkQueryControlFlags                         flags) {
8476    commandBufferObject := GetCommandBuffer(commandBuffer)
8477    queryPoolObject := GetQueryPool(queryPool)
8478    assert(commandBufferObject.device == queryPoolObject.device)
8479}
8480
8481@threadSafety("app")
8482cmd void vkCmdEndQuery(
8483        VkCommandBuffer                             commandBuffer,
8484        VkQueryPool                                 queryPool,
8485        u32                                         query) {
8486    commandBufferObject := GetCommandBuffer(commandBuffer)
8487    queryPoolObject := GetQueryPool(queryPool)
8488    assert(commandBufferObject.device == queryPoolObject.device)
8489}
8490
8491@threadSafety("app")
8492cmd void vkCmdResetQueryPool(
8493        VkCommandBuffer                             commandBuffer,
8494        VkQueryPool                                 queryPool,
8495        u32                                         firstQuery,
8496        u32                                         queryCount) {
8497    commandBufferObject := GetCommandBuffer(commandBuffer)
8498    queryPoolObject := GetQueryPool(queryPool)
8499    assert(commandBufferObject.device == queryPoolObject.device)
8500}
8501
8502@threadSafety("app")
8503cmd void vkCmdWriteTimestamp(
8504        VkCommandBuffer                             commandBuffer,
8505        VkPipelineStageFlagBits                     pipelineStage,
8506        VkQueryPool                                 queryPool,
8507        u32                                         query) {
8508    commandBufferObject := GetCommandBuffer(commandBuffer)
8509    queryPoolObject := GetQueryPool(queryPool)
8510    assert(commandBufferObject.device == queryPoolObject.device)
8511}
8512
8513@threadSafety("app")
8514cmd void vkCmdCopyQueryPoolResults(
8515        VkCommandBuffer                             commandBuffer,
8516        VkQueryPool                                 queryPool,
8517        u32                                         firstQuery,
8518        u32                                         queryCount,
8519        VkBuffer                                    dstBuffer,
8520        VkDeviceSize                                dstOffset,
8521        VkDeviceSize                                stride,
8522        VkQueryResultFlags                          flags) {
8523    commandBufferObject := GetCommandBuffer(commandBuffer)
8524    queryPoolObject := GetQueryPool(queryPool)
8525    dstBufferObject := GetBuffer(dstBuffer)
8526    assert(commandBufferObject.device == queryPoolObject.device)
8527    assert(commandBufferObject.device == dstBufferObject.device)
8528}
8529
8530cmd void vkCmdPushConstants(
8531        VkCommandBuffer                             commandBuffer,
8532        VkPipelineLayout                            layout,
8533        VkShaderStageFlags                          stageFlags,
8534        u32                                         offset,
8535        u32                                         size,
8536        const void*                                 pValues) {
8537    commandBufferObject := GetCommandBuffer(commandBuffer)
8538    layoutObject := GetPipelineLayout(layout)
8539    assert(commandBufferObject.device == layoutObject.device)
8540}
8541
8542@threadSafety("app")
8543cmd void vkCmdBeginRenderPass(
8544        VkCommandBuffer                             commandBuffer,
8545        const VkRenderPassBeginInfo*                pRenderPassBegin,
8546        VkSubpassContents                           contents) {
8547    commandBufferObject := GetCommandBuffer(commandBuffer)
8548    renderPassObject := GetRenderPass(pRenderPassBegin.renderPass)
8549    framebufferObject := GetFramebuffer(pRenderPassBegin.framebuffer)
8550    assert(commandBufferObject.device == renderPassObject.device)
8551    assert(commandBufferObject.device == framebufferObject.device)
8552
8553    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
8554}
8555
8556cmd void vkCmdNextSubpass(
8557        VkCommandBuffer                             commandBuffer,
8558        VkSubpassContents                           contents) {
8559    commandBufferObject := GetCommandBuffer(commandBuffer)
8560}
8561
8562@threadSafety("app")
8563cmd void vkCmdEndRenderPass(
8564        VkCommandBuffer                             commandBuffer) {
8565    commandBufferObject := GetCommandBuffer(commandBuffer)
8566
8567    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
8568}
8569
8570cmd void vkCmdExecuteCommands(
8571        VkCommandBuffer                             commandBuffer,
8572        u32                                         commandBufferCount,
8573        const VkCommandBuffer*                      pCommandBuffers) {
8574    commandBufferObject := GetCommandBuffer(commandBuffer)
8575
8576    commandBuffers := pCommandBuffers[0:commandBufferCount]
8577    for i in (0 .. commandBufferCount) {
8578        secondaryCommandBuffer := commandBuffers[i]
8579        secondaryCommandBufferObject := GetCommandBuffer(secondaryCommandBuffer)
8580        assert(commandBufferObject.device == secondaryCommandBufferObject.device)
8581    }
8582}
8583
8584//@vulkan1_1 functions
8585
8586@vulkan1_1
8587cmd VkResult vkEnumerateInstanceVersion(
8588        u32*                                            pApiVersion) {
8589    return ?
8590}
8591
8592@vulkan1_1
8593cmd VkResult vkBindBufferMemory2(
8594        VkDevice                                        device,
8595        u32                                             bindInfoCount,
8596        const VkBindBufferMemoryInfo*                   pBindInfos) {
8597    return ?
8598}
8599
8600@vulkan1_1
8601cmd VkResult vkBindImageMemory2(
8602        VkDevice                                        device,
8603        u32                                             bindInfoCount,
8604        const VkBindImageMemoryInfo*                    pBindInfos) {
8605    return ?
8606}
8607
8608@vulkan1_1
8609cmd void vkGetDeviceGroupPeerMemoryFeatures(
8610        VkDevice                                    device,
8611        u32                                         heapIndex,
8612        u32                                         localDeviceIndex,
8613        u32                                         remoteDeviceIndex,
8614        VkPeerMemoryFeatureFlags*                   pPeerMemoryFeatures) {
8615}
8616
8617@vulkan1_1
8618cmd void vkCmdSetDeviceMask(
8619        VkCommandBuffer                             commandBuffer,
8620        u32                                         deviceMask) {
8621}
8622
8623@vulkan1_1
8624cmd void vkCmdDispatchBase(
8625        VkCommandBuffer                             commandBuffer,
8626        u32                                         baseGroupX,
8627        u32                                         baseGroupY,
8628        u32                                         baseGroupZ,
8629        u32                                         groupCountX,
8630        u32                                         groupCountY,
8631        u32                                         groupCountZ) {
8632}
8633
8634@threadSafety("system")
8635@vulkan1_1
8636cmd VkResult vkEnumeratePhysicalDeviceGroups(
8637        VkInstance                                  instance,
8638        u32*                                        pPhysicalDeviceGroupCount,
8639        VkPhysicalDeviceGroupProperties*            pPhysicalDeviceGroupProperties) {
8640    instanceObject := GetInstance(instance)
8641
8642    physicalDeviceGroupCount := as!u32(?)
8643    pPhysicalDeviceGroupCount[0] = physicalDeviceGroupCount
8644    physicalDevices := pPhysicalDeviceGroupProperties[0:physicalDeviceGroupCount]
8645
8646    for i in (0 .. physicalDeviceGroupCount) {
8647        physicalDevice := ?
8648        physicalDevices[i] = physicalDevice
8649        if !(physicalDevice in State.PhysicalDevices) {
8650            State.PhysicalDevices[physicalDevice] = new!PhysicalDeviceObject(instance: instance)
8651        }
8652    }
8653
8654    return ?
8655}
8656
8657@vulkan1_1
8658cmd void vkGetImageMemoryRequirements2(
8659        VkDevice                                    device,
8660        const VkImageMemoryRequirementsInfo2*       pInfo,
8661        VkMemoryRequirements2*                      pMemoryRequirements) {
8662}
8663
8664@vulkan1_1
8665cmd void vkGetBufferMemoryRequirements2(
8666        VkDevice                                    device,
8667        const VkBufferMemoryRequirementsInfo2*      pInfo,
8668        VkMemoryRequirements2*                      pMemoryRequirements) {
8669}
8670
8671@vulkan1_1
8672cmd void vkGetImageSparseMemoryRequirements2(
8673        VkDevice                                        device,
8674        const VkImageSparseMemoryRequirementsInfo2*     pInfo,
8675        u32*                                            pSparseMemoryRequirementCount,
8676        VkSparseImageMemoryRequirements2*               pSparseMemoryRequirements) {
8677}
8678
8679@vulkan1_1
8680cmd void vkGetPhysicalDeviceFeatures2(
8681        VkPhysicalDevice                            physicalDevice,
8682        VkPhysicalDeviceFeatures2*                  pFeatures) {
8683}
8684
8685@vulkan1_1
8686cmd void vkGetPhysicalDeviceProperties2(
8687        VkPhysicalDevice                            physicalDevice,
8688        VkPhysicalDeviceProperties2*                pProperties) {
8689}
8690
8691@vulkan1_1
8692cmd void vkGetPhysicalDeviceFormatProperties2(
8693        VkPhysicalDevice                            physicalDevice,
8694        VkFormat                                    format,
8695        VkFormatProperties2*                        pFormatProperties) {
8696}
8697
8698@vulkan1_1
8699cmd VkResult vkGetPhysicalDeviceImageFormatProperties2(
8700        VkPhysicalDevice                            physicalDevice,
8701        const VkPhysicalDeviceImageFormatInfo2*     pImageFormatInfo,
8702        VkImageFormatProperties2*                   pImageFormatProperties) {
8703    return ?
8704}
8705
8706@vulkan1_1
8707cmd void vkGetPhysicalDeviceQueueFamilyProperties2(
8708        VkPhysicalDevice                            physicalDevice,
8709        u32*                                        pQueueFamilyPropertyCount,
8710        VkQueueFamilyProperties2*                   pQueueFamilyProperties) {
8711}
8712
8713@vulkan1_1
8714cmd void vkGetPhysicalDeviceMemoryProperties2(
8715        VkPhysicalDevice                            physicalDevice,
8716        VkPhysicalDeviceMemoryProperties2*          pMemoryProperties) {
8717}
8718
8719@vulkan1_1
8720cmd void vkGetPhysicalDeviceSparseImageFormatProperties2(
8721        VkPhysicalDevice                                    physicalDevice,
8722        const VkPhysicalDeviceSparseImageFormatInfo2*       pFormatInfo,
8723        u32*                                                pPropertyCount,
8724        VkSparseImageFormatProperties2*                     pProperties) {
8725}
8726
8727@vulkan1_1
8728cmd void vkTrimCommandPool(
8729        VkDevice                                    device,
8730        VkCommandPool                               commandPool,
8731        VkCommandPoolTrimFlags                      flags) {
8732}
8733
8734
8735@vulkan1_1
8736cmd void vkGetDeviceQueue2(
8737        VkDevice                                    device,
8738        const VkDeviceQueueInfo2*                   pQueueInfo,
8739        VkQueue*                                    pQueue) {
8740    deviceObject := GetDevice(device)
8741
8742    queue := ?
8743    pQueue[0] = queue
8744
8745    if !(queue in State.Queues) {
8746        State.Queues[queue] = new!QueueObject(device: device)
8747    }
8748}
8749
8750@vulkan1_1
8751cmd VkResult vkCreateSamplerYcbcrConversion(
8752        VkDevice                                        device,
8753        const VkSamplerYcbcrConversionCreateInfo*       pCreateInfo,
8754        const VkAllocationCallbacks*                    pAllocator,
8755        VkSamplerYcbcrConversion*                       pYcbcrConversion) {
8756    return ?
8757}
8758
8759@vulkan1_1
8760cmd void vkDestroySamplerYcbcrConversion(
8761        VkDevice                                        device,
8762        VkSamplerYcbcrConversion                        ycbcrConversion,
8763        const VkAllocationCallbacks*                    pAllocator) {
8764}
8765
8766@vulkan1_1
8767cmd VkResult vkCreateDescriptorUpdateTemplate(
8768        VkDevice                                    device,
8769        const VkDescriptorUpdateTemplateCreateInfo* pCreateInfo,
8770        const VkAllocationCallbacks*                pAllocator,
8771        VkDescriptorUpdateTemplate*                 pDescriptorUpdateTemplate) {
8772    return ?
8773}
8774
8775@vulkan1_1
8776cmd void vkDestroyDescriptorUpdateTemplate(
8777        VkDevice                                    device,
8778        VkDescriptorUpdateTemplate                  descriptorUpdateTemplate,
8779        const VkAllocationCallbacks*                pAllocator) {
8780}
8781
8782@vulkan1_1
8783cmd void vkUpdateDescriptorSetWithTemplate(
8784        VkDevice                                    device,
8785        VkDescriptorSet                             descriptorSet,
8786        VkDescriptorUpdateTemplate                  descriptorUpdateTemplate,
8787        const void*                                 pData) {
8788}
8789
8790@vulkan1_1
8791cmd void vkGetPhysicalDeviceExternalBufferProperties(
8792        VkPhysicalDevice                                physicalDevice,
8793        const VkPhysicalDeviceExternalBufferInfo*       pExternalBufferInfo,
8794        VkExternalBufferProperties*                     pExternalBufferProperties) {
8795}
8796
8797@vulkan1_1
8798cmd void vkGetPhysicalDeviceExternalFenceProperties(
8799        VkPhysicalDevice                            physicalDevice,
8800        const VkPhysicalDeviceExternalFenceInfo*    pExternalFenceInfo,
8801        VkExternalFenceProperties*                  pExternalFenceProperties) {
8802}
8803
8804@vulkan1_1
8805cmd void vkGetPhysicalDeviceExternalSemaphoreProperties(
8806        VkPhysicalDevice                                physicalDevice,
8807        const VkPhysicalDeviceExternalSemaphoreInfo*    pExternalSemaphoreInfo,
8808        VkExternalSemaphoreProperties*                  pExternalSemaphoreProperties) {
8809}
8810
8811@vulkan1_1
8812cmd void vkGetDescriptorSetLayoutSupport(
8813        VkDevice                                    device,
8814        const VkDescriptorSetLayoutCreateInfo*      pCreateInfo,
8815        VkDescriptorSetLayoutSupport*               pSupport) {
8816}
8817
8818
8819@extension("VK_KHR_surface") // 1
8820cmd void vkDestroySurfaceKHR(
8821        VkInstance                                  instance,
8822        VkSurfaceKHR                                surface,
8823        const VkAllocationCallbacks*                pAllocator) {
8824    instanceObject := GetInstance(instance)
8825    surfaceObject := GetSurface(surface)
8826    assert(surfaceObject.instance == instance)
8827
8828    State.Surfaces[surface] = null
8829}
8830
8831@extension("VK_KHR_surface") // 1
8832cmd VkResult vkGetPhysicalDeviceSurfaceSupportKHR(
8833        VkPhysicalDevice                            physicalDevice,
8834        u32                                         queueFamilyIndex,
8835        VkSurfaceKHR                                surface,
8836        VkBool32*                                   pSupported) {
8837    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
8838
8839    return ?
8840}
8841
8842@extension("VK_KHR_surface") // 1
8843cmd VkResult vkGetPhysicalDeviceSurfaceCapabilitiesKHR(
8844        VkPhysicalDevice                            physicalDevice,
8845        VkSurfaceKHR                                surface,
8846        VkSurfaceCapabilitiesKHR*                   pSurfaceCapabilities) {
8847    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
8848
8849    surfaceCapabilities := ?
8850    pSurfaceCapabilities[0] = surfaceCapabilities
8851
8852    return ?
8853}
8854
8855@extension("VK_KHR_surface") // 1
8856cmd VkResult vkGetPhysicalDeviceSurfaceFormatsKHR(
8857        VkPhysicalDevice                            physicalDevice,
8858        VkSurfaceKHR                                surface,
8859        u32*                                        pSurfaceFormatCount,
8860        VkSurfaceFormatKHR*                         pSurfaceFormats) {
8861    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
8862
8863    count := as!u32(?)
8864    pSurfaceFormatCount[0] = count
8865    surfaceFormats := pSurfaceFormats[0:count]
8866
8867    for i in (0 .. count) {
8868        surfaceFormat := ?
8869        surfaceFormats[i] = surfaceFormat
8870    }
8871
8872    return ?
8873}
8874
8875@extension("VK_KHR_surface") // 1
8876cmd VkResult vkGetPhysicalDeviceSurfacePresentModesKHR(
8877        VkPhysicalDevice                            physicalDevice,
8878        VkSurfaceKHR                                surface,
8879        u32*                                        pPresentModeCount,
8880        VkPresentModeKHR*                           pPresentModes) {
8881    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
8882
8883    count := as!u32(?)
8884    pPresentModeCount[0] = count
8885    presentModes := pPresentModes[0:count]
8886
8887    for i in (0 .. count) {
8888        presentMode := ?
8889        presentModes[i] = presentMode
8890    }
8891
8892    return ?
8893}
8894
8895@extension("VK_KHR_swapchain") // 2
8896cmd VkResult vkCreateSwapchainKHR(
8897        VkDevice                                 device,
8898        const VkSwapchainCreateInfoKHR*          pCreateInfo,
8899        const VkAllocationCallbacks*             pAllocator,
8900        VkSwapchainKHR*                          pSwapchain) {
8901    assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR)
8902    deviceObject := GetDevice(device)
8903
8904    swapchain := ?
8905    pSwapchain[0] = swapchain
8906    State.Swapchains[swapchain] = new!SwapchainObject(device: device)
8907
8908    return ?
8909}
8910
8911@extension("VK_KHR_swapchain") // 2
8912cmd void vkDestroySwapchainKHR(
8913        VkDevice                                 device,
8914        VkSwapchainKHR                           swapchain,
8915        const VkAllocationCallbacks*             pAllocator) {
8916    deviceObject := GetDevice(device)
8917    swapchainObject := GetSwapchain(swapchain)
8918    assert(swapchainObject.device == device)
8919
8920    State.Swapchains[swapchain] = null
8921}
8922
8923@extension("VK_KHR_swapchain") // 2
8924cmd VkResult vkGetSwapchainImagesKHR(
8925        VkDevice                                 device,
8926        VkSwapchainKHR                           swapchain,
8927        u32*                                     pSwapchainImageCount,
8928        VkImage*                                 pSwapchainImages) {
8929    deviceObject := GetDevice(device)
8930
8931    count := as!u32(?)
8932    pSwapchainImageCount[0] = count
8933    swapchainImages := pSwapchainImages[0:count]
8934
8935    for i in (0 .. count) {
8936        swapchainImage := ?
8937        swapchainImages[i] = swapchainImage
8938        State.Images[swapchainImage] = new!ImageObject(device: device)
8939    }
8940
8941    return ?
8942}
8943
8944@extension("VK_KHR_swapchain") // 2
8945cmd VkResult vkAcquireNextImageKHR(
8946        VkDevice                                 device,
8947        VkSwapchainKHR                           swapchain,
8948        u64                                      timeout,
8949        VkSemaphore                              semaphore,
8950        VkFence                                  fence,
8951        u32*                                     pImageIndex) {
8952    deviceObject := GetDevice(device)
8953    swapchainObject := GetSwapchain(swapchain)
8954
8955    imageIndex := ?
8956    pImageIndex[0] = imageIndex
8957
8958    return ?
8959}
8960
8961@extension("VK_KHR_swapchain") // 2
8962cmd VkResult vkQueuePresentKHR(
8963        VkQueue                                  queue,
8964        const VkPresentInfoKHR*                  pPresentInfo) {
8965    queueObject := GetQueue(queue)
8966
8967    presentInfo := ?
8968    pPresentInfo[0] = presentInfo
8969
8970    return ?
8971}
8972
8973@vulkan1_1
8974@extension("VK_KHR_swapchain") // 2
8975cmd VkResult vkGetDeviceGroupPresentCapabilitiesKHR(
8976        VkDevice                                    device,
8977        VkDeviceGroupPresentCapabilitiesKHR*        pDeviceGroupPresentCapabilities) {
8978    return ?
8979}
8980
8981@vulkan1_1
8982@extension("VK_KHR_swapchain") // 2
8983cmd VkResult vkGetDeviceGroupSurfacePresentModesKHR(
8984        VkDevice                                    device,
8985        VkSurfaceKHR                                surface,
8986        VkDeviceGroupPresentModeFlagsKHR*           pModes) {
8987    return ?
8988}
8989
8990@vulkan1_1
8991@extension("VK_KHR_swapchain") // 2
8992cmd VkResult vkGetPhysicalDevicePresentRectanglesKHR(
8993        VkPhysicalDevice                            physicalDevice,
8994        VkSurfaceKHR                                surface,
8995        u32*                                        pRectCount,
8996        VkRect2D*                                   pRects) {
8997    return ?
8998}
8999
9000@vulkan1_1
9001@extension("VK_KHR_swapchain") // 2
9002cmd VkResult vkAcquireNextImage2KHR(
9003        VkDevice                                    device,
9004        const VkAcquireNextImageInfoKHR*            pAcquireInfo,
9005        u32*                                        pImageIndex) {
9006    return ?
9007}
9008
9009@extension("VK_KHR_display") // 3
9010cmd VkResult vkGetPhysicalDeviceDisplayPropertiesKHR(
9011        VkPhysicalDevice                        physicalDevice,
9012        u32*                                    pPropertyCount,
9013        VkDisplayPropertiesKHR*                 pProperties) {
9014    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
9015    return ?
9016}
9017
9018@extension("VK_KHR_display") // 3
9019cmd VkResult vkGetPhysicalDeviceDisplayPlanePropertiesKHR(
9020        VkPhysicalDevice                        physicalDevice,
9021        u32*                                    pPropertyCount,
9022        VkDisplayPlanePropertiesKHR*            pProperties) {
9023    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
9024    return ?
9025}
9026
9027@extension("VK_KHR_display") // 3
9028cmd VkResult vkGetDisplayPlaneSupportedDisplaysKHR(
9029        VkPhysicalDevice                        physicalDevice,
9030        u32                                     planeIndex,
9031        u32*                                    pDisplayCount,
9032        VkDisplayKHR*                           pDisplays) {
9033    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
9034    return ?
9035}
9036
9037@extension("VK_KHR_display") // 3
9038cmd VkResult vkGetDisplayModePropertiesKHR(
9039        VkPhysicalDevice                        physicalDevice,
9040        VkDisplayKHR                            display,
9041        u32*                                    pPropertyCount,
9042        VkDisplayModePropertiesKHR*             pProperties) {
9043    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
9044    return ?
9045}
9046
9047@extension("VK_KHR_display") // 3
9048cmd VkResult vkCreateDisplayModeKHR(
9049        VkPhysicalDevice                        physicalDevice,
9050        VkDisplayKHR                            display,
9051        const VkDisplayModeCreateInfoKHR*       pCreateInfo,
9052        const VkAllocationCallbacks*            pAllocator,
9053        VkDisplayModeKHR*                       pMode) {
9054    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
9055    return ?
9056}
9057
9058@extension("VK_KHR_display") // 3
9059cmd VkResult vkGetDisplayPlaneCapabilitiesKHR(
9060        VkPhysicalDevice                        physicalDevice,
9061        VkDisplayModeKHR                        mode,
9062        u32                                     planeIndex,
9063        VkDisplayPlaneCapabilitiesKHR*          pCapabilities) {
9064    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
9065    return ?
9066}
9067
9068@extension("VK_KHR_display") // 3
9069cmd VkResult vkCreateDisplayPlaneSurfaceKHR(
9070        VkInstance                              instance,
9071        const VkDisplaySurfaceCreateInfoKHR*    pCreateInfo,
9072        const VkAllocationCallbacks*            pAllocator,
9073        VkSurfaceKHR*                           pSurface) {
9074    return ?
9075}
9076
9077@extension("VK_KHR_display_swapchain") // 4
9078cmd VkResult vkCreateSharedSwapchainsKHR(
9079        VkDevice                                device,
9080        u32                                     swapchainCount,
9081        const VkSwapchainCreateInfoKHR*         pCreateInfos,
9082        const VkAllocationCallbacks*            pAllocator,
9083        VkSwapchainKHR*                         pSwapchains) {
9084    return ?
9085}
9086
9087@extension("VK_KHR_xlib_surface") // 5
9088cmd VkResult vkCreateXlibSurfaceKHR(
9089        VkInstance                              instance,
9090        const VkXlibSurfaceCreateInfoKHR*       pCreateInfo,
9091        const VkAllocationCallbacks*            pAllocator,
9092        VkSurfaceKHR*                           pSurface) {
9093    instanceObject := GetInstance(instance)
9094    return ?
9095}
9096
9097@extension("VK_KHR_xlib_surface") // 5
9098cmd VkBool32 vkGetPhysicalDeviceXlibPresentationSupportKHR(
9099        VkPhysicalDevice                        physicalDevice,
9100        u32                                     queueFamilyIndex,
9101        platform.Display*                       dpy,
9102        platform.VisualID                       visualID) {
9103    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
9104    return ?
9105}
9106
9107@extension("VK_KHR_xcb_surface") // 6
9108cmd VkResult vkCreateXcbSurfaceKHR(
9109        VkInstance                              instance,
9110        const VkXcbSurfaceCreateInfoKHR*        pCreateInfo,
9111        const VkAllocationCallbacks*            pAllocator,
9112        VkSurfaceKHR*                           pSurface) {
9113    instanceObject := GetInstance(instance)
9114    return ?
9115}
9116
9117@extension("VK_KHR_xcb_surface") // 6
9118cmd VkBool32 vkGetPhysicalDeviceXcbPresentationSupportKHR(
9119        VkPhysicalDevice                        physicalDevice,
9120        u32                                     queueFamilyIndex,
9121        platform.xcb_connection_t*              connection,
9122        platform.xcb_visualid_t                 visual_id) {
9123    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
9124    return ?
9125}
9126
9127@extension("VK_KHR_wayland_surface") // 7
9128cmd VkResult vkCreateWaylandSurfaceKHR(
9129        VkInstance                              instance,
9130        const VkWaylandSurfaceCreateInfoKHR*    pCreateInfo,
9131        const VkAllocationCallbacks*            pAllocator,
9132        VkSurfaceKHR*                           pSurface) {
9133    instanceObject := GetInstance(instance)
9134    return ?
9135}
9136
9137@extension("VK_KHR_wayland_surface") // 7
9138cmd VkBool32 vkGetPhysicalDeviceWaylandPresentationSupportKHR(
9139        VkPhysicalDevice                        physicalDevice,
9140        u32                                     queueFamilyIndex,
9141        platform.wl_display*                    display) {
9142    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
9143    return ?
9144}
9145
9146@extension("VK_KHR_mir_surface") // 8
9147cmd VkResult vkCreateMirSurfaceKHR(
9148        VkInstance                              instance,
9149        const VkMirSurfaceCreateInfoKHR*        pCreateInfo,
9150        const VkAllocationCallbacks*            pAllocator,
9151        VkSurfaceKHR*                           pSurface) {
9152    instanceObject := GetInstance(instance)
9153    return ?
9154}
9155
9156@extension("VK_KHR_mir_surface") // 8
9157cmd VkBool32 vkGetPhysicalDeviceMirPresentationSupportKHR(
9158        VkPhysicalDevice                        physicalDevice,
9159        u32                                     queueFamilyIndex,
9160        platform.MirConnection*                 connection) {
9161    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
9162    return ?
9163}
9164
9165@extension("VK_KHR_android_surface") // 9
9166cmd VkResult vkCreateAndroidSurfaceKHR(
9167        VkInstance                              instance,
9168        const VkAndroidSurfaceCreateInfoKHR*    pCreateInfo,
9169        const VkAllocationCallbacks*            pAllocator,
9170        VkSurfaceKHR*                           pSurface) {
9171    instanceObject := GetInstance(instance)
9172    return ?
9173}
9174
9175@extension("VK_KHR_win32_surface") // 10
9176cmd VkResult vkCreateWin32SurfaceKHR(
9177        VkInstance                              instance,
9178        const VkWin32SurfaceCreateInfoKHR*      pCreateInfo,
9179        const VkAllocationCallbacks*            pAllocator,
9180        VkSurfaceKHR*                           pSurface) {
9181    instanceObject := GetInstance(instance)
9182    return ?
9183}
9184
9185@extension("VK_KHR_win32_surface") // 10
9186cmd VkResult vkGetPhysicalDeviceWin32PresentationSupportKHR(
9187        VkPhysicalDevice                        physicalDevice,
9188        u32                                     queueFamilyIndex) {
9189    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
9190    return ?
9191}
9192
9193@extension("VK_ANDROID_native_buffer") // 11
9194@optional
9195cmd VkResult vkGetSwapchainGrallocUsageANDROID(
9196        VkDevice                                device,
9197        VkFormat                                format,
9198        VkImageUsageFlags                       imageUsage,
9199        s32*                                    grallocUsage) {
9200    return ?
9201}
9202
9203@extension("VK_ANDROID_native_buffer") // 11
9204@optional
9205cmd VkResult vkGetSwapchainGrallocUsage2ANDROID(
9206        VkDevice                                device,
9207        VkFormat                                format,
9208        VkImageUsageFlags                       imageUsage,
9209        VkSwapchainImageUsageFlagsANDROID       swapchainImageUsage,
9210        u64*                                    grallocConsumerUsage,
9211        u64*                                    grallocProducerUsage) {
9212    return ?
9213}
9214
9215@extension("VK_ANDROID_native_buffer") // 11
9216cmd VkResult vkAcquireImageANDROID(
9217        VkDevice                                device,
9218        VkImage                                 image,
9219        int                                     nativeFenceFd,
9220        VkSemaphore                             semaphore,
9221        VkFence                                 fence) {
9222    return ?
9223}
9224
9225@extension("VK_ANDROID_native_buffer") // 11
9226cmd VkResult vkQueueSignalReleaseImageANDROID(
9227        VkQueue                                 queue,
9228        u32                                     waitSemaphoreCount,
9229        const VkSemaphore*                      pWaitSemaphores,
9230        VkImage                                 image,
9231        int*                                    pNativeFenceFd) {
9232    return ?
9233}
9234
9235@extension("VK_EXT_debug_report") // 12
9236@external type void* PFN_vkDebugReportCallbackEXT
9237@extension("VK_EXT_debug_report") // 12
9238@pfn cmd VkBool32 vkDebugReportCallbackEXT(
9239        VkDebugReportFlagsEXT                   flags,
9240        VkDebugReportObjectTypeEXT              objectType,
9241        u64                                     object,
9242        platform.size_t                         location,
9243        s32                                     messageCode,
9244        const char*                             pLayerPrefix,
9245        const char*                             pMessage,
9246        void*                                   pUserData) {
9247    return ?
9248}
9249
9250@extension("VK_EXT_debug_report") // 12
9251cmd VkResult vkCreateDebugReportCallbackEXT(
9252        VkInstance                                  instance,
9253        const VkDebugReportCallbackCreateInfoEXT*   pCreateInfo,
9254        const VkAllocationCallbacks*                pAllocator,
9255        VkDebugReportCallbackEXT*                   pCallback) {
9256    return ?
9257}
9258
9259@extension("VK_EXT_debug_report") // 12
9260cmd void vkDestroyDebugReportCallbackEXT(
9261        VkInstance                                  instance,
9262        VkDebugReportCallbackEXT                    callback,
9263        const VkAllocationCallbacks*                pAllocator) {
9264}
9265
9266@extension("VK_EXT_debug_report") // 12
9267cmd void vkDebugReportMessageEXT(
9268        VkInstance                                  instance,
9269        VkDebugReportFlagsEXT                       flags,
9270        VkDebugReportObjectTypeEXT                  objectType,
9271        u64                                         object,
9272        platform.size_t                             location,
9273        s32                                         messageCode,
9274        const char*                                 pLayerPrefix,
9275        const char*                                 pMessage) {
9276}
9277
9278@extension("VK_EXT_debug_marker") // 23
9279cmd VkResult vkDebugMarkerSetObjectTagEXT(
9280        VkDevice                                    device,
9281        const VkDebugMarkerObjectTagInfoEXT*        pTagInfo) {
9282    return ?
9283}
9284
9285@extension("VK_EXT_debug_marker") // 23
9286cmd VkResult vkDebugMarkerSetObjectNameEXT(
9287        VkDevice                                    device,
9288        const VkDebugMarkerObjectNameInfoEXT*       pNameInfo) {
9289    return ?
9290}
9291
9292@extension("VK_EXT_debug_marker") // 23
9293cmd void vkCmdDebugMarkerBeginEXT(
9294        VkCommandBuffer                             commandBuffer,
9295        const VkDebugMarkerMarkerInfoEXT*           pMarkerInfo) {
9296}
9297
9298@extension("VK_EXT_debug_marker") // 23
9299cmd void vkCmdDebugMarkerEndEXT(
9300        VkCommandBuffer                             commandBuffer) {
9301}
9302
9303@extension("VK_EXT_debug_marker") // 23
9304cmd void vkCmdDebugMarkerInsertEXT(
9305        VkCommandBuffer                             commandBuffer,
9306        const VkDebugMarkerMarkerInfoEXT*           pMarkerInfo) {
9307}
9308
9309@extension("VK_AMD_draw_indirect_count") // 34
9310cmd void vkCmdDrawIndirectCountAMD(
9311        VkCommandBuffer                             commandBuffer,
9312        VkBuffer                                    buffer,
9313        VkDeviceSize                                offset,
9314        VkBuffer                                    countBuffer,
9315        VkDeviceSize                                countBufferOffset,
9316        u32                                         maxDrawCount,
9317        u32                                         stride) {
9318}
9319
9320@extension("VK_AMD_draw_indirect_count") // 34
9321cmd void vkCmdDrawIndexedIndirectCountAMD(
9322        VkCommandBuffer                             commandBuffer,
9323        VkBuffer                                    buffer,
9324        VkDeviceSize                                offset,
9325        VkBuffer                                    countBuffer,
9326        VkDeviceSize                                countBufferOffset,
9327        u32                                         maxDrawCount,
9328        u32                                         stride) {
9329}
9330
9331@extension("VK_AMD_shader_info") // 43
9332cmd VkResult vkGetShaderInfoAMD(
9333        VkDevice                                    device,
9334        VkPipeline                                  pipeline,
9335        VkShaderStageFlagBits                       shaderStage,
9336        VkShaderInfoTypeAMD                         infoType,
9337        platform.size_t*                            pInfoSize,
9338        void*                                       pInfo) {
9339    return ?
9340}
9341
9342@extension("VK_NV_external_memory_capabilities") // 56
9343cmd VkResult vkGetPhysicalDeviceExternalImageFormatPropertiesNV(
9344        VkPhysicalDevice                            physicalDevice,
9345        VkFormat                                    format,
9346        VkImageType                                 type,
9347        VkImageTiling                               tiling,
9348        VkImageUsageFlags                           usage,
9349        VkImageCreateFlags                          flags,
9350        VkExternalMemoryHandleTypeFlagsNV           externalHandleType,
9351        VkExternalImageFormatPropertiesNV*          pExternalImageFormatProperties) {
9352    return ?
9353}
9354
9355@extension("VK_NV_external_memory_win32") // 58
9356cmd VkResult vkGetMemoryWin32HandleNV(
9357        VkDevice                                    device,
9358        VkDeviceMemory                              memory,
9359        VkExternalMemoryHandleTypeFlagsNV           handleType,
9360        platform.HANDLE*                            pHandle) {
9361    return ?
9362}
9363
9364@extension("VK_KHR_get_physical_device_properties2") // 60
9365cmd void vkGetPhysicalDeviceFeatures2KHR(
9366        VkPhysicalDevice                            physicalDevice,
9367        VkPhysicalDeviceFeatures2KHR*               pFeatures) {
9368}
9369
9370@extension("VK_KHR_get_physical_device_properties2") // 60
9371cmd void vkGetPhysicalDeviceProperties2KHR(
9372        VkPhysicalDevice                            physicalDevice,
9373        VkPhysicalDeviceProperties2KHR*             pProperties) {
9374}
9375
9376@extension("VK_KHR_get_physical_device_properties2") // 60
9377cmd void vkGetPhysicalDeviceFormatProperties2KHR(
9378        VkPhysicalDevice                            physicalDevice,
9379        VkFormat                                    format,
9380        VkFormatProperties2KHR*                     pFormatProperties) {
9381}
9382
9383@extension("VK_KHR_get_physical_device_properties2") // 60
9384cmd VkResult vkGetPhysicalDeviceImageFormatProperties2KHR(
9385        VkPhysicalDevice                            physicalDevice,
9386        const VkPhysicalDeviceImageFormatInfo2KHR*  pImageFormatInfo,
9387        VkImageFormatProperties2KHR*                pImageFormatProperties) {
9388    return ?
9389}
9390
9391@extension("VK_KHR_get_physical_device_properties2") // 60
9392cmd void vkGetPhysicalDeviceQueueFamilyProperties2KHR(
9393        VkPhysicalDevice                            physicalDevice,
9394        u32*                                        pQueueFamilyPropertyCount,
9395        VkQueueFamilyProperties2KHR*                pQueueFamilyProperties) {
9396}
9397
9398@extension("VK_KHR_get_physical_device_properties2") // 60
9399cmd void vkGetPhysicalDeviceMemoryProperties2KHR(
9400        VkPhysicalDevice                            physicalDevice,
9401        VkPhysicalDeviceMemoryProperties2KHR*       pMemoryProperties) {
9402}
9403
9404@extension("VK_KHR_get_physical_device_properties2") // 60
9405cmd void vkGetPhysicalDeviceSparseImageFormatProperties2KHR(
9406        VkPhysicalDevice                                    physicalDevice,
9407        const VkPhysicalDeviceSparseImageFormatInfo2KHR*    pFormatInfo,
9408        u32*                                                pPropertyCount,
9409        VkSparseImageFormatProperties2KHR*                  pProperties) {
9410}
9411
9412@extension("VK_KHR_device_group") // 61
9413cmd void vkGetDeviceGroupPeerMemoryFeaturesKHR(
9414        VkDevice                                    device,
9415        u32                                         heapIndex,
9416        u32                                         localDeviceIndex,
9417        u32                                         remoteDeviceIndex,
9418        VkPeerMemoryFeatureFlagsKHR*                pPeerMemoryFeatures) {
9419}
9420
9421@extension("VK_KHR_device_group") // 61
9422cmd void vkCmdSetDeviceMaskKHR(
9423        VkCommandBuffer                             commandBuffer,
9424        u32                                         deviceMask) {
9425}
9426
9427
9428@extension("VK_KHR_device_group") // 61
9429cmd void vkCmdDispatchBaseKHR(
9430        VkCommandBuffer                             commandBuffer,
9431        u32                                         baseGroupX,
9432        u32                                         baseGroupY,
9433        u32                                         baseGroupZ,
9434        u32                                         groupCountX,
9435        u32                                         groupCountY,
9436        u32                                         groupCountZ) {
9437}
9438
9439@extension("VK_NN_vi_surface") // 63
9440cmd VkResult vkCreateViSurfaceNN(
9441        VkInstance                                  instance,
9442        const VkViSurfaceCreateInfoNN*              pCreateInfo,
9443        const VkAllocationCallbacks*                pAllocator,
9444        VkSurfaceKHR*                               pSurface) {
9445    return ?
9446}
9447
9448@extension("VK_KHR_maintenance1") // 70
9449cmd void vkTrimCommandPoolKHR(
9450        VkDevice                                    device,
9451        VkCommandPool                               commandPool,
9452        VkCommandPoolTrimFlagsKHR                   flags) {
9453}
9454
9455@extension("VK_KHR_device_group_creation") // 71
9456@threadSafety("system")
9457cmd VkResult vkEnumeratePhysicalDeviceGroupsKHR(
9458        VkInstance                                  instance,
9459        u32*                                        pPhysicalDeviceGroupCount,
9460        VkPhysicalDeviceGroupPropertiesKHR*         pPhysicalDeviceGroupProperties) {
9461    instanceObject := GetInstance(instance)
9462
9463    physicalDeviceGroupCount := as!u32(?)
9464    pPhysicalDeviceGroupCount[0] = physicalDeviceGroupCount
9465    physicalDevices := pPhysicalDeviceGroupProperties[0:physicalDeviceGroupCount]
9466
9467    for i in (0 .. physicalDeviceGroupCount) {
9468        physicalDevice := ?
9469        physicalDevices[i] = physicalDevice
9470        if !(physicalDevice in State.PhysicalDevices) {
9471            State.PhysicalDevices[physicalDevice] = new!PhysicalDeviceObject(instance: instance)
9472        }
9473    }
9474
9475    return ?
9476}
9477
9478@extension("VK_KHR_external_memory_capabilities") // 72
9479cmd void vkGetPhysicalDeviceExternalBufferPropertiesKHR(
9480        VkPhysicalDevice                                physicalDevice,
9481        const VkPhysicalDeviceExternalBufferInfoKHR*    pExternalBufferInfo,
9482        VkExternalBufferPropertiesKHR*                  pExternalBufferProperties) {
9483}
9484
9485@extension("VK_KHR_external_memory_win32") // 74
9486cmd VkResult vkGetMemoryWin32HandleKHR(
9487        VkDevice                                    device,
9488        const VkMemoryGetWin32HandleInfoKHR*        pGetWin32HandleInfo,
9489        platform.HANDLE*                            pHandle) {
9490    return ?
9491}
9492
9493@extension("VK_KHR_external_memory_win32") // 74
9494cmd VkResult vkGetMemoryWin32HandlePropertiesKHR(
9495        VkDevice                                    device,
9496        VkExternalMemoryHandleTypeFlagBitsKHR       handleType,
9497        platform.HANDLE                             handle,
9498        VkMemoryWin32HandlePropertiesKHR*           pMemoryWin32HandleProperties) {
9499    return ?
9500}
9501
9502@extension("VK_KHR_external_memory_fd") // 75
9503cmd VkResult vkGetMemoryFdKHR(
9504        VkDevice                                    device,
9505        const VkMemoryGetFdInfoKHR*                 pGetFdInfo,
9506        s32*                                        pFd) {
9507    return ?
9508}
9509
9510@extension("VK_KHR_external_memory_fd") // 75
9511cmd VkResult vkGetMemoryFdPropertiesKHR(
9512        VkDevice                                    device,
9513        VkExternalMemoryHandleTypeFlagBitsKHR       handleType,
9514        s32                                         fd,
9515        VkMemoryFdPropertiesKHR*                    pMemoryFdProperties) {
9516    return ?
9517}
9518
9519@extension("VK_KHR_external_semaphore_capabilities") // 77
9520cmd void vkGetPhysicalDeviceExternalSemaphorePropertiesKHR(
9521        VkPhysicalDevice                            physicalDevice,
9522        const VkPhysicalDeviceExternalSemaphoreInfoKHR* pExternalSemaphoreInfo,
9523        VkExternalSemaphorePropertiesKHR*           pExternalSemaphoreProperties) {
9524}
9525
9526@extension("VK_KHR_external_semaphore_win32") // 79
9527cmd VkResult vkImportSemaphoreWin32HandleKHR(
9528        VkDevice                                    device,
9529        const VkImportSemaphoreWin32HandleInfoKHR*  pImportSemaphoreWin32HandleInfo) {
9530    return ?
9531}
9532
9533@extension("VK_KHR_external_semaphore_win32") // 79
9534cmd VkResult vkGetSemaphoreWin32HandleKHR(
9535        VkDevice                                    device,
9536        const VkSemaphoreGetWin32HandleInfoKHR*     pGetWin32HandleInfo,
9537        platform.HANDLE*                            pHandle) {
9538    return ?
9539}
9540
9541@extension("VK_KHR_external_semaphore_fd") // 80
9542cmd VkResult vkImportSemaphoreFdKHR(
9543        VkDevice                                    device,
9544        const VkImportSemaphoreFdInfoKHR*           pImportSemaphoreFdInfo) {
9545    return ?
9546}
9547
9548@extension("VK_KHR_external_semaphore_fd") // 80
9549cmd VkResult vkGetSemaphoreFdKHR(
9550        VkDevice                                    device,
9551        const VkSemaphoreGetFdInfoKHR*              pGetFdInfo,
9552        s32*                                        pFd) {
9553    return ?
9554}
9555
9556@extension("VK_KHR_push_descriptor") // 81
9557cmd void vkCmdPushDescriptorSetKHR(
9558        VkCommandBuffer                             commandBuffer,
9559        VkPipelineBindPoint                         pipelineBindPoint,
9560        VkPipelineLayout                            layout,
9561        u32                                         set,
9562        u32                                         descriptorWriteCount,
9563        const VkWriteDescriptorSet*                 pDescriptorWrites) {
9564}
9565
9566@extension("VK_KHR_descriptor_update_template") // 86
9567cmd VkResult vkCreateDescriptorUpdateTemplateKHR(
9568        VkDevice                                    device,
9569        const VkDescriptorUpdateTemplateCreateInfoKHR* pCreateInfo,
9570        const VkAllocationCallbacks*                pAllocator,
9571        VkDescriptorUpdateTemplateKHR*              pDescriptorUpdateTemplate) {
9572    return ?
9573}
9574
9575@extension("VK_KHR_descriptor_update_template") // 86
9576cmd void vkDestroyDescriptorUpdateTemplateKHR(
9577        VkDevice                                    device,
9578        VkDescriptorUpdateTemplateKHR               descriptorUpdateTemplate,
9579        const VkAllocationCallbacks*                pAllocator) {
9580}
9581
9582@extension("VK_KHR_descriptor_update_template") // 86
9583cmd void vkUpdateDescriptorSetWithTemplateKHR(
9584        VkDevice                                    device,
9585        VkDescriptorSet                             descriptorSet,
9586        VkDescriptorUpdateTemplateKHR               descriptorUpdateTemplate,
9587        const void*                                 pData) {
9588}
9589
9590@extension("VK_KHR_descriptor_update_template") // 86
9591cmd void vkCmdPushDescriptorSetWithTemplateKHR(
9592        VkCommandBuffer                             commandBuffer,
9593        VkDescriptorUpdateTemplateKHR               descriptorUpdateTemplate,
9594        VkPipelineLayout                            layout,
9595        u32                                         set,
9596        const void*                                 pData) {
9597}
9598
9599@extension("VK_NVX_device_generated_commands") // 87
9600cmd void vkCmdProcessCommandsNVX(
9601        VkCommandBuffer                             commandBuffer,
9602        const VkCmdProcessCommandsInfoNVX*          pProcessCommandsInfo) {
9603}
9604
9605@extension("VK_NVX_device_generated_commands") // 87
9606cmd void vkCmdReserveSpaceForCommandsNVX(
9607        VkCommandBuffer                             commandBuffer,
9608        const VkCmdReserveSpaceForCommandsInfoNVX*  pReserveSpaceInfo) {
9609}
9610
9611@extension("VK_NVX_device_generated_commands") // 87
9612cmd VkResult vkCreateIndirectCommandsLayoutNVX(
9613        VkDevice                                    device,
9614        const VkIndirectCommandsLayoutCreateInfoNVX* pCreateInfo,
9615        const VkAllocationCallbacks*                pAllocator,
9616        VkIndirectCommandsLayoutNVX*                pIndirectCommandsLayout) {
9617    return ?
9618}
9619
9620@extension("VK_NVX_device_generated_commands") // 87
9621cmd void vkDestroyIndirectCommandsLayoutNVX(
9622        VkDevice                                    device,
9623        VkIndirectCommandsLayoutNVX                 indirectCommandsLayout,
9624        const VkAllocationCallbacks*                pAllocator) {
9625}
9626
9627@extension("VK_NVX_device_generated_commands") // 87
9628cmd VkResult vkCreateObjectTableNVX(
9629        VkDevice                                    device,
9630        const VkObjectTableCreateInfoNVX*           pCreateInfo,
9631        const VkAllocationCallbacks*                pAllocator,
9632        VkObjectTableNVX*                           pObjectTable) {
9633    return ?
9634}
9635
9636@extension("VK_NVX_device_generated_commands") // 87
9637cmd void vkDestroyObjectTableNVX(
9638        VkDevice                                    device,
9639        VkObjectTableNVX                            objectTable,
9640        const VkAllocationCallbacks*                pAllocator) {
9641}
9642
9643@extension("VK_NVX_device_generated_commands") // 87
9644cmd VkResult vkRegisterObjectsNVX(
9645        VkDevice                                    device,
9646        VkObjectTableNVX                            objectTable,
9647        u32                                         objectCount,
9648        const VkObjectTableEntryNVX* const*         ppObjectTableEntries,
9649        const u32*                                  pObjectIndices) {
9650    return ?
9651}
9652
9653@extension("VK_NVX_device_generated_commands") // 87
9654cmd VkResult vkUnregisterObjectsNVX(
9655        VkDevice                                    device,
9656        VkObjectTableNVX                            objectTable,
9657        u32                                         objectCount,
9658        const VkObjectEntryTypeNVX*                 pObjectEntryTypes,
9659        const u32*                                  pObjectIndices) {
9660    return ?
9661}
9662
9663@extension("VK_NVX_device_generated_commands") // 87
9664cmd void vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX(
9665        VkPhysicalDevice                            physicalDevice,
9666        VkDeviceGeneratedCommandsFeaturesNVX*       pFeatures,
9667        VkDeviceGeneratedCommandsLimitsNVX*         pLimits) {
9668}
9669
9670@extension("VK_NV_clip_space_w_scaling") // 88
9671cmd void vkCmdSetViewportWScalingNV(
9672        VkCommandBuffer                             commandBuffer,
9673        u32                                         firstViewport,
9674        u32                                         viewportCount,
9675        const VkViewportWScalingNV*                 pViewportWScalings) {
9676}
9677
9678@extension("VK_EXT_direct_mode_display") // 89
9679cmd VkResult vkReleaseDisplayEXT(
9680        VkPhysicalDevice                            physicalDevice,
9681        VkDisplayKHR                                display) {
9682    return ?
9683}
9684
9685@extension("VK_EXT_acquire_xlib_display") // 90
9686cmd VkResult vkAcquireXlibDisplayEXT(
9687        VkPhysicalDevice                            physicalDevice,
9688        platform.Display*                           dpy,
9689        VkDisplayKHR                                display) {
9690    return ?
9691}
9692
9693@extension("VK_EXT_acquire_xlib_display") // 90
9694cmd VkResult vkGetRandROutputDisplayEXT(
9695        VkPhysicalDevice                            physicalDevice,
9696        platform.Display*                           dpy,
9697        platform.RROutput                           rrOutput,
9698        VkDisplayKHR*                               pDisplay) {
9699    return ?
9700}
9701
9702@extension("VK_EXT_display_surface_counter") // 91
9703cmd VkResult vkGetPhysicalDeviceSurfaceCapabilities2EXT(
9704        VkPhysicalDevice                            physicalDevice,
9705        VkSurfaceKHR                                surface,
9706        VkSurfaceCapabilities2EXT*                  pSurfaceCapabilities) {
9707    return ?
9708}
9709
9710@extension("VK_EXT_display_control") // 92
9711cmd VkResult vkDisplayPowerControlEXT(
9712        VkDevice                                    device,
9713        VkDisplayKHR                                display,
9714        const VkDisplayPowerInfoEXT*                pDisplayPowerInfo) {
9715    return ?
9716}
9717
9718@extension("VK_EXT_display_control") // 92
9719cmd VkResult vkRegisterDeviceEventEXT(
9720        VkDevice                                    device,
9721        const VkDeviceEventInfoEXT*                 pDeviceEventInfo,
9722        const VkAllocationCallbacks*                pAllocator,
9723        VkFence*                                    pFence) {
9724    return ?
9725}
9726
9727@extension("VK_EXT_display_control") // 92
9728cmd VkResult vkRegisterDisplayEventEXT(
9729        VkDevice                                    device,
9730        VkDisplayKHR                                display,
9731        const VkDisplayEventInfoEXT*                pDisplayEventInfo,
9732        const VkAllocationCallbacks*                pAllocator,
9733        VkFence*                                    pFence) {
9734    return ?
9735}
9736
9737@extension("VK_EXT_display_control") // 92
9738cmd VkResult vkGetSwapchainCounterEXT(
9739        VkDevice                                    device,
9740        VkSwapchainKHR                              swapchain,
9741        VkSurfaceCounterFlagBitsEXT                 counter,
9742        u64*                                        pCounterValue) {
9743    return ?
9744}
9745
9746@extension("VK_GOOGLE_display_timing") // 93
9747cmd VkResult vkGetRefreshCycleDurationGOOGLE(
9748        VkDevice                                    device,
9749        VkSwapchainKHR                              swapchain,
9750        VkRefreshCycleDurationGOOGLE*               pDisplayTimingProperties) {
9751    deviceObject := GetDevice(device)
9752    swapchainObject := GetSwapchain(swapchain)
9753
9754    displayTimingProperties := ?
9755    pDisplayTimingProperties[0] = displayTimingProperties
9756
9757    return ?
9758}
9759
9760@extension("VK_GOOGLE_display_timing") // 93
9761cmd VkResult vkGetPastPresentationTimingGOOGLE(
9762        VkDevice                                    device,
9763        VkSwapchainKHR                              swapchain,
9764        u32*                                        pPresentationTimingCount,
9765        VkPastPresentationTimingGOOGLE*             pPresentationTimings) {
9766    return ?
9767}
9768
9769@extension("VK_EXT_discard_rectangles") // 100
9770cmd void vkCmdSetDiscardRectangleEXT(
9771        VkCommandBuffer                             commandBuffer,
9772        u32                                         firstDiscardRectangle,
9773        u32                                         discardRectangleCount,
9774        const VkRect2D*                             pDiscardRectangles) {
9775}
9776
9777@extension("VK_EXT_hdr_metadata") // 106
9778cmd void vkSetHdrMetadataEXT(
9779        VkDevice                                    device,
9780        u32                                         swapchainCount,
9781        const VkSwapchainKHR*                       pSwapchains,
9782        const VkHdrMetadataEXT*                     pMetadata) {
9783}
9784
9785@extension("VK_KHR_shared_presentable_image") // 112
9786cmd VkResult vkGetSwapchainStatusKHR(
9787        VkDevice                                    device,
9788        VkSwapchainKHR                              swapchain) {
9789    return ?
9790}
9791
9792@extension("VK_KHR_external_fence_capabilities") // 113
9793cmd void vkGetPhysicalDeviceExternalFencePropertiesKHR(
9794        VkPhysicalDevice                            physicalDevice,
9795        const VkPhysicalDeviceExternalFenceInfoKHR* pExternalFenceInfo,
9796        VkExternalFencePropertiesKHR*               pExternalFenceProperties) {
9797}
9798
9799@extension("VK_KHR_external_fence_win32") // 115
9800cmd VkResult vkImportFenceWin32HandleKHR(
9801        VkDevice                                    device,
9802        const VkImportFenceWin32HandleInfoKHR*      pImportFenceWin32HandleInfo) {
9803    return ?
9804}
9805
9806@extension("VK_KHR_external_fence_win32") // 115
9807cmd VkResult vkGetFenceWin32HandleKHR(
9808        VkDevice                                    device,
9809        const VkFenceGetWin32HandleInfoKHR*         pGetWin32HandleInfo,
9810        platform.HANDLE*                            pHandle) {
9811    return ?
9812}
9813
9814@extension("VK_KHR_external_fence_fd") // 116
9815cmd VkResult vkImportFenceFdKHR(
9816        VkDevice                                    device,
9817        const VkImportFenceFdInfoKHR*               pImportFenceFdInfo) {
9818    return ?
9819}
9820
9821@extension("VK_KHR_external_fence_fd") // 116
9822cmd VkResult vkGetFenceFdKHR(
9823        VkDevice                                    device,
9824        const VkFenceGetFdInfoKHR*                  pGetFdInfo,
9825        int*                                        pFd) {
9826    return ?
9827}
9828
9829@extension("VK_KHR_get_surface_capabilities2") // 120
9830cmd VkResult vkGetPhysicalDeviceSurfaceCapabilities2KHR(
9831        VkPhysicalDevice                            physicalDevice,
9832        const VkPhysicalDeviceSurfaceInfo2KHR*      pSurfaceInfo,
9833        VkSurfaceCapabilities2KHR*                  pSurfaceCapabilities) {
9834    return ?
9835}
9836
9837@extension("VK_KHR_get_surface_capabilities2") // 120
9838cmd VkResult vkGetPhysicalDeviceSurfaceFormats2KHR(
9839        VkPhysicalDevice                            physicalDevice,
9840        const VkPhysicalDeviceSurfaceInfo2KHR*      pSurfaceInfo,
9841        u32*                                        pSurfaceFormatCount,
9842        VkSurfaceFormat2KHR*                        pSurfaceFormats) {
9843    return ?
9844}
9845
9846@extension("VK_MVK_ios_surface") // 123
9847cmd VkResult vkCreateIOSSurfaceMVK(
9848        VkInstance                                  instance,
9849        const VkIOSSurfaceCreateInfoMVK*            pCreateInfo,
9850        const VkAllocationCallbacks*                pAllocator,
9851        VkSurfaceKHR*                               pSurface) {
9852    return ?
9853}
9854
9855@extension("VK_MVK_macos_surface") // 124
9856cmd VkResult vkCreateMacOSSurfaceMVK(
9857        VkInstance                                  instance,
9858        const VkMacOSSurfaceCreateInfoMVK*          pCreateInfo,
9859        const VkAllocationCallbacks*                pAllocator,
9860        VkSurfaceKHR*                               pSurface) {
9861    return ?
9862}
9863
9864@extension("VK_EXT_debug_utils") // 129
9865@external type void* PFN_vkDebugUtilsMessengerCallbackEXT
9866@extension("VK_EXT_debug_utils") // 129
9867@pfn cmd VkBool32 vkDebugUtilsMessengerCallbackEXT(
9868        VkDebugUtilsMessageSeverityFlagBitsEXT      messageSeverity,
9869        VkDebugUtilsMessageTypeFlagsEXT             messageType,
9870        const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData,
9871        void*                                       pUserData) {
9872    return ?
9873}
9874
9875@extension("VK_EXT_debug_utils") // 129
9876cmd VkResult vkSetDebugUtilsObjectNameEXT(
9877        VkDevice                                    device,
9878        const VkDebugUtilsObjectNameInfoEXT*        pNameInfo) {
9879    return ?
9880}
9881
9882@extension("VK_EXT_debug_utils") // 129
9883cmd VkResult vkSetDebugUtilsObjectTagEXT(
9884        VkDevice                                    device,
9885        const VkDebugUtilsObjectTagInfoEXT*         pTagInfo) {
9886    return ?
9887}
9888
9889@extension("VK_EXT_debug_utils") // 129
9890cmd void vkQueueBeginDebugUtilsLabelEXT(
9891        VkQueue                                     queue,
9892        const VkDebugUtilsLabelEXT*                 pLabelInfo) {
9893}
9894
9895@extension("VK_EXT_debug_utils") // 129
9896cmd void vkQueueEndDebugUtilsLabelEXT(VkQueue       queue) {
9897}
9898
9899@extension("VK_EXT_debug_utils") // 129
9900cmd void vkQueueInsertDebugUtilsLabelEXT(
9901        VkQueue                                     queue,
9902        const VkDebugUtilsLabelEXT*                 pLabelInfo) {
9903}
9904
9905@extension("VK_EXT_debug_utils") // 129
9906cmd void vkCmdBeginDebugUtilsLabelEXT(
9907        VkCommandBuffer                             commandBuffer,
9908        const VkDebugUtilsLabelEXT*                 pLabelInfo) {
9909}
9910
9911@extension("VK_EXT_debug_utils") // 129
9912cmd void vkCmdEndDebugUtilsLabelEXT(VkCommandBuffer commandBuffer) {
9913}
9914
9915@extension("VK_EXT_debug_utils") // 129
9916cmd void vkCmdInsertDebugUtilsLabelEXT(
9917        VkCommandBuffer                             commandBuffer,
9918        const VkDebugUtilsLabelEXT*                 pLabelInfo) {
9919}
9920
9921@extension("VK_EXT_debug_utils") // 129
9922cmd VkResult vkCreateDebugUtilsMessengerEXT(
9923        VkInstance                                  instance,
9924        const VkDebugUtilsMessengerCreateInfoEXT*   pCreateInfo,
9925        const VkAllocationCallbacks*                pAllocator,
9926        VkDebugUtilsMessengerEXT*                   pMessenger) {
9927    return ?
9928}
9929
9930@extension("VK_EXT_debug_utils") // 129
9931cmd void vkDestroyDebugUtilsMessengerEXT(
9932        VkInstance                                  instance,
9933        VkDebugUtilsMessengerEXT                    messenger,
9934        const VkAllocationCallbacks*                pAllocator) {
9935}
9936
9937@extension("VK_EXT_debug_utils") // 129
9938cmd void vkSubmitDebugUtilsMessageEXT(
9939        VkInstance                                  instance,
9940        VkDebugUtilsMessageSeverityFlagBitsEXT      messageSeverity,
9941        VkDebugUtilsMessageTypeFlagsEXT             messageTypes,
9942        const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData) {
9943}
9944
9945@extension("VK_ANDROID_external_memory_android_hardware_buffer") // 130
9946@vulkan1_1 // extension requires 1.1, and should become non-optional when 1.1 does
9947cmd VkResult vkGetAndroidHardwareBufferPropertiesANDROID(
9948        VkDevice                                    device,
9949        const platform.AHardwareBuffer*             buffer,
9950        VkAndroidHardwareBufferPropertiesANDROID*   pProperties) {
9951    return ?
9952}
9953
9954@extension("VK_ANDROID_external_memory_android_hardware_buffer") // 130
9955@vulkan1_1 // extension requires 1.1, and should become non-optional when 1.1 does
9956cmd VkResult vkGetMemoryAndroidHardwareBufferANDROID(
9957        VkDevice                                            device,
9958        const VkMemoryGetAndroidHardwareBufferInfoANDROID*  pInfo,
9959        platform.AHardwareBuffer**                          pBuffer) {
9960    return ?
9961}
9962
9963@extension("VK_EXT_sample_locations") // 144
9964cmd void vkCmdSetSampleLocationsEXT(
9965        VkCommandBuffer                             commandBuffer,
9966        const VkSampleLocationsInfoEXT*             pSampleLocationsInfo) {
9967}
9968
9969@extension("VK_EXT_sample_locations") // 144
9970cmd void vkGetPhysicalDeviceMultisamplePropertiesEXT(
9971        VkPhysicalDevice                            physicalDevice,
9972        VkSampleCountFlagBits                       samples,
9973        VkMultisamplePropertiesEXT*                 pMultisampleProperties) {
9974}
9975
9976@extension("VK_KHR_get_memory_requirements2") // 147
9977cmd void vkGetImageMemoryRequirements2KHR(
9978        VkDevice                                    device,
9979        const VkImageMemoryRequirementsInfo2KHR*    pInfo,
9980        VkMemoryRequirements2KHR*                   pMemoryRequirements) {
9981}
9982
9983@extension("VK_KHR_get_memory_requirements2") // 147
9984cmd void vkGetBufferMemoryRequirements2KHR(
9985        VkDevice                                    device,
9986        const VkBufferMemoryRequirementsInfo2KHR*   pInfo,
9987        VkMemoryRequirements2KHR*                   pMemoryRequirements) {
9988}
9989
9990@extension("VK_KHR_get_memory_requirements2") // 147
9991cmd void vkGetImageSparseMemoryRequirements2KHR(
9992        VkDevice                                        device,
9993        const VkImageSparseMemoryRequirementsInfo2KHR*  pInfo,
9994        u32*                                            pSparseMemoryRequirementCount,
9995        VkSparseImageMemoryRequirements2KHR*            pSparseMemoryRequirements) {
9996}
9997
9998@extension("VK_KHR_sampler_ycbcr_conversion") // 157
9999cmd VkResult vkCreateSamplerYcbcrConversionKHR(
10000        VkDevice                                        device,
10001        const VkSamplerYcbcrConversionCreateInfoKHR*    pCreateInfo,
10002        const VkAllocationCallbacks*                    pAllocator,
10003        VkSamplerYcbcrConversionKHR*                    pYcbcrConversion) {
10004    return ?
10005}
10006
10007@extension("VK_KHR_sampler_ycbcr_conversion") // 157
10008cmd void vkDestroySamplerYcbcrConversionKHR(
10009        VkDevice                                        device,
10010        VkSamplerYcbcrConversionKHR                     ycbcrConversion,
10011        const VkAllocationCallbacks*                    pAllocator) {
10012}
10013
10014@extension("VK_KHR_bind_memory2") // 158
10015cmd VkResult vkBindBufferMemory2KHR(
10016        VkDevice                                        device,
10017        u32                                             bindInfoCount,
10018        const VkBindBufferMemoryInfoKHR*                pBindInfos) {
10019    return ?
10020}
10021
10022@extension("VK_KHR_bind_memory2") // 158
10023cmd VkResult vkBindImageMemory2KHR(
10024        VkDevice                                        device,
10025        u32                                             bindInfoCount,
10026        const VkBindImageMemoryInfoKHR*                 pBindInfos) {
10027    return ?
10028}
10029
10030@extension("VK_EXT_validation_cache") // 161
10031cmd VkResult vkCreateValidationCacheEXT(
10032        VkDevice                                    device,
10033        const VkValidationCacheCreateInfoEXT*       pCreateInfo,
10034        const VkAllocationCallbacks*                pAllocator,
10035        VkValidationCacheEXT*                       pValidationCache) {
10036    return ?
10037}
10038
10039@extension("VK_EXT_validation_cache") // 161
10040cmd void vkDestroyValidationCacheEXT(
10041        VkDevice                                    device,
10042        VkValidationCacheEXT                        validationCache,
10043        const VkAllocationCallbacks*                pAllocator) {
10044}
10045
10046@extension("VK_EXT_validation_cache") // 161
10047cmd VkResult vkMergeValidationCachesEXT(
10048        VkDevice                                    device,
10049        VkValidationCacheEXT                        dstCache,
10050        u32                                         srcCacheCount,
10051        const VkValidationCacheEXT*                 pSrcCaches) {
10052    return ?
10053}
10054
10055@extension("VK_EXT_validation_cache") // 161
10056cmd VkResult vkGetValidationCacheDataEXT(
10057        VkDevice                                    device,
10058        VkValidationCacheEXT                        validationCache,
10059        platform.size_t*                            pDataSize,
10060        void*                                       pData) {
10061    return ?
10062}
10063
10064@extension("VK_KHR_maintenance3") // 169
10065cmd void vkGetDescriptorSetLayoutSupportKHR(
10066        VkDevice                                    device,
10067        const VkDescriptorSetLayoutCreateInfo*      pCreateInfo,
10068        VkDescriptorSetLayoutSupportKHR*            pSupport) {
10069}
10070
10071@extension("VK_EXT_external_memory_host") // 179
10072cmd VkResult vkGetMemoryHostPointerPropertiesEXT(
10073        VkDevice                                    device,
10074        VkExternalMemoryHandleTypeFlagBits          handleType,
10075        const void*                                 pHostPointer,
10076        VkMemoryHostPointerPropertiesEXT*           pMemoryHostPointerProperties) {
10077    return ?
10078}
10079
10080////////////////
10081// Validation //
10082////////////////
10083
10084extern void validate(string layerName, bool condition, string message)
10085
10086
10087/////////////////////////////
10088// Internal State Tracking //
10089/////////////////////////////
10090
10091StateObject State
10092
10093@internal class StateObject {
10094    // Dispatchable objects.
10095    map!(VkInstance,       ref!InstanceObject)       Instances
10096    map!(VkPhysicalDevice, ref!PhysicalDeviceObject) PhysicalDevices
10097    map!(VkDevice,         ref!DeviceObject)         Devices
10098    map!(VkQueue,          ref!QueueObject)          Queues
10099    map!(VkCommandBuffer,  ref!CommandBufferObject)  CommandBuffers
10100
10101    // Non-dispatchable objects.
10102    map!(VkDeviceMemory,             ref!DeviceMemoryObject)             DeviceMemories
10103    map!(VkBuffer,                   ref!BufferObject)                   Buffers
10104    map!(VkBufferView,               ref!BufferViewObject)               BufferViews
10105    map!(VkImage,                    ref!ImageObject)                    Images
10106    map!(VkImageView,                ref!ImageViewObject)                ImageViews
10107    map!(VkShaderModule,             ref!ShaderModuleObject)             ShaderModules
10108    map!(VkPipeline,                 ref!PipelineObject)                 Pipelines
10109    map!(VkPipelineLayout,           ref!PipelineLayoutObject)           PipelineLayouts
10110    map!(VkSampler,                  ref!SamplerObject)                  Samplers
10111    map!(VkDescriptorSet,            ref!DescriptorSetObject)            DescriptorSets
10112    map!(VkDescriptorSetLayout,      ref!DescriptorSetLayoutObject)      DescriptorSetLayouts
10113    map!(VkDescriptorPool,           ref!DescriptorPoolObject)           DescriptorPools
10114    map!(VkFence,                    ref!FenceObject)                    Fences
10115    map!(VkSemaphore,                ref!SemaphoreObject)                Semaphores
10116    map!(VkEvent,                    ref!EventObject)                    Events
10117    map!(VkQueryPool,                ref!QueryPoolObject)                QueryPools
10118    map!(VkFramebuffer,              ref!FramebufferObject)              Framebuffers
10119    map!(VkRenderPass,               ref!RenderPassObject)               RenderPasses
10120    map!(VkPipelineCache,            ref!PipelineCacheObject)            PipelineCaches
10121    map!(VkCommandPool,              ref!CommandPoolObject)              CommandPools
10122    map!(VkSurfaceKHR,               ref!SurfaceObject)                  Surfaces
10123    map!(VkSwapchainKHR,             ref!SwapchainObject)                Swapchains
10124}
10125
10126@internal class InstanceObject {
10127}
10128
10129@internal class PhysicalDeviceObject {
10130    VkInstance instance
10131}
10132
10133@internal class DeviceObject {
10134    VkPhysicalDevice physicalDevice
10135}
10136
10137@internal class QueueObject {
10138    VkDevice      device
10139    VkQueueFlags  flags
10140}
10141
10142@internal class CommandBufferObject {
10143    VkDevice                  device
10144    map!(u64, VkDeviceMemory) boundObjects
10145    VkQueueFlags              queueFlags
10146}
10147
10148@internal class DeviceMemoryObject {
10149    VkDevice                                device
10150    VkDeviceSize                            allocationSize
10151    map!(u64, VkDeviceSize)                 boundObjects
10152    map!(VkCommandBuffer, VkCommandBuffer)  boundCommandBuffers
10153}
10154
10155@internal class BufferObject {
10156    VkDevice              device
10157    VkDeviceMemory        memory
10158    VkDeviceSize          memoryOffset
10159}
10160
10161@internal class BufferViewObject {
10162    VkDevice      device
10163    VkBuffer      buffer
10164}
10165
10166@internal class ImageObject {
10167    VkDevice              device
10168    VkDeviceMemory        memory
10169    VkDeviceSize          memoryOffset
10170}
10171
10172@internal class ImageViewObject {
10173    VkDevice      device
10174    VkImage       image
10175}
10176
10177@internal class ShaderObject {
10178    VkDevice      device
10179}
10180
10181@internal class ShaderModuleObject {
10182    VkDevice      device
10183}
10184
10185@internal class PipelineObject {
10186    VkDevice      device
10187}
10188
10189@internal class PipelineLayoutObject {
10190    VkDevice      device
10191}
10192
10193@internal class SamplerObject {
10194    VkDevice      device
10195}
10196
10197@internal class DescriptorSetObject {
10198    VkDevice      device
10199}
10200
10201@internal class DescriptorSetLayoutObject {
10202    VkDevice      device
10203}
10204
10205@internal class DescriptorPoolObject {
10206    VkDevice      device
10207}
10208
10209@internal class FenceObject {
10210    VkDevice      device
10211    bool          signaled
10212}
10213
10214@internal class SemaphoreObject {
10215    VkDevice      device
10216}
10217
10218@internal class EventObject {
10219    VkDevice      device
10220}
10221
10222@internal class QueryPoolObject {
10223    VkDevice      device
10224}
10225
10226@internal class FramebufferObject {
10227    VkDevice      device
10228}
10229
10230@internal class RenderPassObject {
10231    VkDevice      device
10232}
10233
10234@internal class PipelineCacheObject {
10235    VkDevice      device
10236}
10237
10238@internal class CommandPoolObject {
10239    VkDevice      device
10240}
10241
10242@internal class SurfaceObject {
10243    VkInstance    instance
10244}
10245
10246@internal class SwapchainObject {
10247    VkDevice      device
10248}
10249
10250macro ref!InstanceObject GetInstance(VkInstance instance) {
10251    assert(instance in State.Instances)
10252    return State.Instances[instance]
10253}
10254
10255macro ref!PhysicalDeviceObject GetPhysicalDevice(VkPhysicalDevice physicalDevice) {
10256    assert(physicalDevice in State.PhysicalDevices)
10257    return State.PhysicalDevices[physicalDevice]
10258}
10259
10260macro ref!DeviceObject GetDevice(VkDevice device) {
10261    assert(device in State.Devices)
10262    return State.Devices[device]
10263}
10264
10265macro ref!QueueObject GetQueue(VkQueue queue) {
10266    assert(queue in State.Queues)
10267    return State.Queues[queue]
10268}
10269
10270macro ref!CommandBufferObject GetCommandBuffer(VkCommandBuffer commandBuffer) {
10271    assert(commandBuffer in State.CommandBuffers)
10272    return State.CommandBuffers[commandBuffer]
10273}
10274
10275macro ref!DeviceMemoryObject GetDeviceMemory(VkDeviceMemory memory) {
10276    assert(memory in State.DeviceMemories)
10277    return State.DeviceMemories[memory]
10278}
10279
10280macro ref!BufferObject GetBuffer(VkBuffer buffer) {
10281    assert(buffer in State.Buffers)
10282    return State.Buffers[buffer]
10283}
10284
10285macro ref!BufferViewObject GetBufferView(VkBufferView bufferView) {
10286    assert(bufferView in State.BufferViews)
10287    return State.BufferViews[bufferView]
10288}
10289
10290macro ref!ImageObject GetImage(VkImage image) {
10291    assert(image in State.Images)
10292    return State.Images[image]
10293}
10294
10295macro ref!ImageViewObject GetImageView(VkImageView imageView) {
10296    assert(imageView in State.ImageViews)
10297    return State.ImageViews[imageView]
10298}
10299
10300macro ref!ShaderModuleObject GetShaderModule(VkShaderModule shaderModule) {
10301    assert(shaderModule in State.ShaderModules)
10302    return State.ShaderModules[shaderModule]
10303}
10304
10305macro ref!PipelineObject GetPipeline(VkPipeline pipeline) {
10306    assert(pipeline in State.Pipelines)
10307    return State.Pipelines[pipeline]
10308}
10309
10310macro ref!PipelineLayoutObject GetPipelineLayout(VkPipelineLayout pipelineLayout) {
10311    assert(pipelineLayout in State.PipelineLayouts)
10312    return State.PipelineLayouts[pipelineLayout]
10313}
10314
10315macro ref!SamplerObject GetSampler(VkSampler sampler) {
10316    assert(sampler in State.Samplers)
10317    return State.Samplers[sampler]
10318}
10319
10320macro ref!DescriptorSetObject GetDescriptorSet(VkDescriptorSet descriptorSet) {
10321    assert(descriptorSet in State.DescriptorSets)
10322    return State.DescriptorSets[descriptorSet]
10323}
10324
10325macro ref!DescriptorSetLayoutObject GetDescriptorSetLayout(VkDescriptorSetLayout descriptorSetLayout) {
10326    assert(descriptorSetLayout in State.DescriptorSetLayouts)
10327    return State.DescriptorSetLayouts[descriptorSetLayout]
10328}
10329
10330macro ref!DescriptorPoolObject GetDescriptorPool(VkDescriptorPool descriptorPool) {
10331    assert(descriptorPool in State.DescriptorPools)
10332    return State.DescriptorPools[descriptorPool]
10333}
10334
10335macro ref!FenceObject GetFence(VkFence fence) {
10336    assert(fence in State.Fences)
10337    return State.Fences[fence]
10338}
10339
10340macro ref!SemaphoreObject GetSemaphore(VkSemaphore semaphore) {
10341    assert(semaphore in State.Semaphores)
10342    return State.Semaphores[semaphore]
10343}
10344
10345macro ref!EventObject GetEvent(VkEvent event) {
10346    assert(event in State.Events)
10347    return State.Events[event]
10348}
10349
10350macro ref!QueryPoolObject GetQueryPool(VkQueryPool queryPool) {
10351    assert(queryPool in State.QueryPools)
10352    return State.QueryPools[queryPool]
10353}
10354
10355macro ref!FramebufferObject GetFramebuffer(VkFramebuffer framebuffer) {
10356    assert(framebuffer in State.Framebuffers)
10357    return State.Framebuffers[framebuffer]
10358}
10359
10360macro ref!RenderPassObject GetRenderPass(VkRenderPass renderPass) {
10361    assert(renderPass in State.RenderPasses)
10362    return State.RenderPasses[renderPass]
10363}
10364
10365macro ref!PipelineCacheObject GetPipelineCache(VkPipelineCache pipelineCache) {
10366    assert(pipelineCache in State.PipelineCaches)
10367    return State.PipelineCaches[pipelineCache]
10368}
10369
10370macro ref!CommandPoolObject GetCommandPool(VkCommandPool commandPool) {
10371    assert(commandPool in State.CommandPools)
10372    return State.CommandPools[commandPool]
10373}
10374
10375macro ref!SurfaceObject GetSurface(VkSurfaceKHR surface) {
10376    assert(surface in State.Surfaces)
10377    return State.Surfaces[surface]
10378}
10379
10380macro ref!SwapchainObject GetSwapchain(VkSwapchainKHR swapchain) {
10381    assert(swapchain in State.Swapchains)
10382    return State.Swapchains[swapchain]
10383}
10384
10385macro VkQueueFlags AddQueueFlag(VkQueueFlags flags, VkQueueFlagBits bit) {
10386    return as!VkQueueFlags(as!u32(flags) | as!u32(bit))
10387}
10388