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