Skip to main content

erupt/generated/
mod.rs

1// DO NOT EDIT: @generated by erupt's generator
2/// Provides Vulkan extension items.
3pub mod extensions;
4/// Provides external library items.
5pub mod external;
6/// Re-exports **every** Vulkan item.
7pub mod vk;
8/// A list of requirements enabled in the entry loader.
9#[derive(Debug)]
10pub struct EntryEnabled {
11    pub instance_version: u32,
12    pub vk1_1: bool,
13    pub vk1_2: bool,
14    pub vk1_3: bool,
15}
16impl EntryEnabled {
17    pub(crate) unsafe fn new<T>(
18        loader: &mut T,
19        mut symbol: impl FnMut(
20            &mut T,
21            *const std::os::raw::c_char,
22        ) -> Option<crate::vk1_0::PFN_vkVoidFunction>,
23    ) -> Result<EntryEnabled, crate::LoaderError> {
24        let mut version = crate::vk1_0::make_api_version(0, 1, 0, 0);
25        if let Some(function)
26            = symbol(loader, crate::vk1_1::FN_ENUMERATE_INSTANCE_VERSION) {
27            let function: crate::vk1_1::PFN_vkEnumerateInstanceVersion = std::mem::transmute(
28                function,
29            );
30            let result = function(&mut version);
31            if result.0 < 0 {
32                return Err(crate::LoaderError::VulkanError(result));
33            }
34        }
35        Ok(EntryEnabled {
36            instance_version: version,
37            vk1_1: version >= crate::vk1_0::make_api_version(0, 1, 1, 0),
38            vk1_2: version >= crate::vk1_0::make_api_version(0, 1, 2, 0),
39            vk1_3: version >= crate::vk1_0::make_api_version(0, 1, 3, 0),
40        })
41    }
42}
43#[allow(rustdoc::broken_intra_doc_links)]
44/// Loader for entry commands.
45///
46/// To create a new loader, call [`EntryLoader::new`](CustomEntryLoader::new).
47pub struct CustomEntryLoader<T> {
48    pub(crate) arc: std::sync::Arc<()>,
49    pub loader: T,
50    pub(crate) enabled: EntryEnabled,
51    pub get_instance_proc_addr: crate::vk1_0::PFN_vkGetInstanceProcAddr,
52    pub create_instance: Option<vk1_0::PFN_vkCreateInstance>,
53    pub enumerate_instance_version: Option<vk1_1::PFN_vkEnumerateInstanceVersion>,
54    pub enumerate_instance_layer_properties: Option<
55        vk1_0::PFN_vkEnumerateInstanceLayerProperties,
56    >,
57    pub enumerate_instance_extension_properties: Option<
58        vk1_0::PFN_vkEnumerateInstanceExtensionProperties,
59    >,
60}
61impl<T> CustomEntryLoader<T> {
62    #[allow(unused_parens)]
63    pub(crate) unsafe fn custom(
64        mut loader: T,
65        mut symbol: impl FnMut(
66            &mut T,
67            *const std::os::raw::c_char,
68        ) -> Option<crate::vk1_0::PFN_vkVoidFunction>,
69        entry_enabled: EntryEnabled,
70    ) -> Result<CustomEntryLoader<T>, crate::LoaderError> {
71        let mut symbol = |name| symbol(&mut loader, name);
72        let get_instance_proc_addr = symbol(crate::vk1_0::FN_GET_INSTANCE_PROC_ADDR)
73            .ok_or(crate::LoaderError::SymbolNotAvailable)?;
74        Ok(CustomEntryLoader {
75            arc: std::sync::Arc::new(()),
76            get_instance_proc_addr: std::mem::transmute(get_instance_proc_addr),
77            create_instance: std::mem::transmute(
78                symbol(crate::vk1_0::FN_CREATE_INSTANCE),
79            ),
80            enumerate_instance_version: if entry_enabled.vk1_1 {
81                std::mem::transmute(symbol(crate::vk1_1::FN_ENUMERATE_INSTANCE_VERSION))
82            } else {
83                None
84            },
85            enumerate_instance_layer_properties: std::mem::transmute(
86                symbol(crate::vk1_0::FN_ENUMERATE_INSTANCE_LAYER_PROPERTIES),
87            ),
88            enumerate_instance_extension_properties: std::mem::transmute(
89                symbol(crate::vk1_0::FN_ENUMERATE_INSTANCE_EXTENSION_PROPERTIES),
90            ),
91            loader,
92            enabled: entry_enabled,
93        })
94    }
95}
96/// A list of requirements enabled in the instance loader.
97#[derive(Debug)]
98pub struct InstanceEnabled {
99    pub vk1_1: bool,
100    pub vk1_2: bool,
101    pub khr_android_surface: bool,
102    pub khr_display: bool,
103    pub khr_surface: bool,
104    pub nn_vi_surface: bool,
105    pub khr_wayland_surface: bool,
106    pub khr_win32_surface: bool,
107    pub khr_xlib_surface: bool,
108    pub khr_xcb_surface: bool,
109    pub ext_directfb_surface: bool,
110    pub fuchsia_imagepipe_surface: bool,
111    pub ggp_stream_descriptor_surface: bool,
112    pub qnx_screen_surface: bool,
113    pub ext_debug_report: bool,
114    pub nv_external_memory_capabilities: bool,
115    pub ext_direct_mode_display: bool,
116    pub ext_acquire_xlib_display: bool,
117    pub nv_acquire_winrt_display: bool,
118    pub ext_display_surface_counter: bool,
119    pub khr_swapchain: bool,
120    pub khr_device_group: bool,
121    pub mvk_ios_surface: bool,
122    pub mvk_macos_surface: bool,
123    pub ext_metal_surface: bool,
124    pub ext_sample_locations: bool,
125    pub khr_get_surface_capabilities2: bool,
126    pub khr_get_display_properties2: bool,
127    pub vk1_3: bool,
128    pub ext_calibrated_timestamps: bool,
129    pub ext_debug_utils: bool,
130    pub nv_cooperative_matrix: bool,
131    pub ext_full_screen_exclusive: bool,
132    pub khr_performance_query: bool,
133    pub ext_headless_surface: bool,
134    pub nv_coverage_reduction_mode: bool,
135    pub khr_fragment_shading_rate: bool,
136    pub khr_video_queue: bool,
137    pub ext_acquire_drm_display: bool,
138    pub khr_get_physical_device_properties2: bool,
139    pub khr_external_memory_capabilities: bool,
140    pub khr_external_semaphore_capabilities: bool,
141    pub khr_external_fence_capabilities: bool,
142    pub khr_device_group_creation: bool,
143    pub ext_tooling_info: bool,
144}
145impl InstanceEnabled {
146    pub(crate) unsafe fn new(
147        instance_version: u32,
148        enabled_extensions: &[&std::ffi::CStr],
149        available_device_extensions: &[&std::ffi::CStr],
150    ) -> Result<InstanceEnabled, crate::LoaderError> {
151        let version = instance_version;
152        let enabled_extension = |extension| enabled_extensions
153            .contains(&std::ffi::CStr::from_ptr(extension));
154        let available_device_extension = |extension| available_device_extensions
155            .contains(&std::ffi::CStr::from_ptr(extension));
156        Ok(InstanceEnabled {
157            vk1_1: version >= crate::vk1_0::make_api_version(0, 1, 1, 0),
158            vk1_2: version >= crate::vk1_0::make_api_version(0, 1, 2, 0),
159            khr_android_surface: enabled_extension(
160                crate::extensions::khr_android_surface::KHR_ANDROID_SURFACE_EXTENSION_NAME,
161            ),
162            khr_display: enabled_extension(
163                crate::extensions::khr_display::KHR_DISPLAY_EXTENSION_NAME,
164            ),
165            khr_surface: enabled_extension(
166                crate::extensions::khr_surface::KHR_SURFACE_EXTENSION_NAME,
167            ),
168            nn_vi_surface: enabled_extension(
169                crate::extensions::nn_vi_surface::NN_VI_SURFACE_EXTENSION_NAME,
170            ),
171            khr_wayland_surface: enabled_extension(
172                crate::extensions::khr_wayland_surface::KHR_WAYLAND_SURFACE_EXTENSION_NAME,
173            ),
174            khr_win32_surface: enabled_extension(
175                crate::extensions::khr_win32_surface::KHR_WIN32_SURFACE_EXTENSION_NAME,
176            ),
177            khr_xlib_surface: enabled_extension(
178                crate::extensions::khr_xlib_surface::KHR_XLIB_SURFACE_EXTENSION_NAME,
179            ),
180            khr_xcb_surface: enabled_extension(
181                crate::extensions::khr_xcb_surface::KHR_XCB_SURFACE_EXTENSION_NAME,
182            ),
183            ext_directfb_surface: enabled_extension(
184                crate::extensions::ext_directfb_surface::EXT_DIRECTFB_SURFACE_EXTENSION_NAME,
185            ),
186            fuchsia_imagepipe_surface: enabled_extension(
187                crate::extensions::fuchsia_imagepipe_surface::FUCHSIA_IMAGEPIPE_SURFACE_EXTENSION_NAME,
188            ),
189            ggp_stream_descriptor_surface: enabled_extension(
190                crate::extensions::ggp_stream_descriptor_surface::GGP_STREAM_DESCRIPTOR_SURFACE_EXTENSION_NAME,
191            ),
192            qnx_screen_surface: enabled_extension(
193                crate::extensions::qnx_screen_surface::QNX_SCREEN_SURFACE_EXTENSION_NAME,
194            ),
195            ext_debug_report: enabled_extension(
196                crate::extensions::ext_debug_report::EXT_DEBUG_REPORT_EXTENSION_NAME,
197            ),
198            nv_external_memory_capabilities: enabled_extension(
199                crate::extensions::nv_external_memory_capabilities::NV_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME,
200            ),
201            ext_direct_mode_display: enabled_extension(
202                crate::extensions::ext_direct_mode_display::EXT_DIRECT_MODE_DISPLAY_EXTENSION_NAME,
203            ),
204            ext_acquire_xlib_display: enabled_extension(
205                crate::extensions::ext_acquire_xlib_display::EXT_ACQUIRE_XLIB_DISPLAY_EXTENSION_NAME,
206            ),
207            nv_acquire_winrt_display: available_device_extension(
208                crate::extensions::nv_acquire_winrt_display::NV_ACQUIRE_WINRT_DISPLAY_EXTENSION_NAME,
209            ),
210            ext_display_surface_counter: enabled_extension(
211                crate::extensions::ext_display_surface_counter::EXT_DISPLAY_SURFACE_COUNTER_EXTENSION_NAME,
212            ),
213            khr_swapchain: available_device_extension(
214                crate::extensions::khr_swapchain::KHR_SWAPCHAIN_EXTENSION_NAME,
215            ),
216            khr_device_group: available_device_extension(
217                crate::extensions::khr_device_group::KHR_DEVICE_GROUP_EXTENSION_NAME,
218            ),
219            mvk_ios_surface: enabled_extension(
220                crate::extensions::mvk_ios_surface::MVK_IOS_SURFACE_EXTENSION_NAME,
221            ),
222            mvk_macos_surface: enabled_extension(
223                crate::extensions::mvk_macos_surface::MVK_MACOS_SURFACE_EXTENSION_NAME,
224            ),
225            ext_metal_surface: enabled_extension(
226                crate::extensions::ext_metal_surface::EXT_METAL_SURFACE_EXTENSION_NAME,
227            ),
228            ext_sample_locations: available_device_extension(
229                crate::extensions::ext_sample_locations::EXT_SAMPLE_LOCATIONS_EXTENSION_NAME,
230            ),
231            khr_get_surface_capabilities2: enabled_extension(
232                crate::extensions::khr_get_surface_capabilities2::KHR_GET_SURFACE_CAPABILITIES_2_EXTENSION_NAME,
233            ),
234            khr_get_display_properties2: enabled_extension(
235                crate::extensions::khr_get_display_properties2::KHR_GET_DISPLAY_PROPERTIES_2_EXTENSION_NAME,
236            ),
237            vk1_3: version >= crate::vk1_0::make_api_version(0, 1, 3, 0),
238            ext_calibrated_timestamps: available_device_extension(
239                crate::extensions::ext_calibrated_timestamps::EXT_CALIBRATED_TIMESTAMPS_EXTENSION_NAME,
240            ),
241            ext_debug_utils: enabled_extension(
242                crate::extensions::ext_debug_utils::EXT_DEBUG_UTILS_EXTENSION_NAME,
243            ),
244            nv_cooperative_matrix: available_device_extension(
245                crate::extensions::nv_cooperative_matrix::NV_COOPERATIVE_MATRIX_EXTENSION_NAME,
246            ),
247            ext_full_screen_exclusive: available_device_extension(
248                crate::extensions::ext_full_screen_exclusive::EXT_FULL_SCREEN_EXCLUSIVE_EXTENSION_NAME,
249            ),
250            khr_performance_query: available_device_extension(
251                crate::extensions::khr_performance_query::KHR_PERFORMANCE_QUERY_EXTENSION_NAME,
252            ),
253            ext_headless_surface: enabled_extension(
254                crate::extensions::ext_headless_surface::EXT_HEADLESS_SURFACE_EXTENSION_NAME,
255            ),
256            nv_coverage_reduction_mode: available_device_extension(
257                crate::extensions::nv_coverage_reduction_mode::NV_COVERAGE_REDUCTION_MODE_EXTENSION_NAME,
258            ),
259            khr_fragment_shading_rate: available_device_extension(
260                crate::extensions::khr_fragment_shading_rate::KHR_FRAGMENT_SHADING_RATE_EXTENSION_NAME,
261            ),
262            khr_video_queue: available_device_extension(
263                crate::extensions::khr_video_queue::KHR_VIDEO_QUEUE_EXTENSION_NAME,
264            ),
265            ext_acquire_drm_display: enabled_extension(
266                crate::extensions::ext_acquire_drm_display::EXT_ACQUIRE_DRM_DISPLAY_EXTENSION_NAME,
267            ),
268            khr_get_physical_device_properties2: enabled_extension(
269                crate::extensions::khr_get_physical_device_properties2::KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME,
270            ),
271            khr_external_memory_capabilities: enabled_extension(
272                crate::extensions::khr_external_memory_capabilities::KHR_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME,
273            ),
274            khr_external_semaphore_capabilities: enabled_extension(
275                crate::extensions::khr_external_semaphore_capabilities::KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_EXTENSION_NAME,
276            ),
277            khr_external_fence_capabilities: enabled_extension(
278                crate::extensions::khr_external_fence_capabilities::KHR_EXTERNAL_FENCE_CAPABILITIES_EXTENSION_NAME,
279            ),
280            khr_device_group_creation: enabled_extension(
281                crate::extensions::khr_device_group_creation::KHR_DEVICE_GROUP_CREATION_EXTENSION_NAME,
282            ),
283            ext_tooling_info: available_device_extension(
284                crate::extensions::ext_tooling_info::EXT_TOOLING_INFO_EXTENSION_NAME,
285            ),
286        })
287    }
288}
289/// Loader for instance commands.
290///
291/// This will consume lots of stack space, so consider putting it into
292/// a heap pointer type such as `Box` or `Arc`.
293///
294/// To create a new loader, call [`InstanceLoader::new`].
295pub struct InstanceLoader {
296    #[allow(dead_code)]
297    parent: std::sync::Weak<()>,
298    pub(crate) arc: std::sync::Arc<()>,
299    pub handle: crate::vk1_0::Instance,
300    pub(crate) enabled: InstanceEnabled,
301    pub get_device_proc_addr: crate::vk1_0::PFN_vkGetDeviceProcAddr,
302    pub destroy_instance: Option<vk1_0::PFN_vkDestroyInstance>,
303    pub enumerate_physical_devices: Option<vk1_0::PFN_vkEnumeratePhysicalDevices>,
304    pub get_instance_proc_addr: Option<vk1_0::PFN_vkGetInstanceProcAddr>,
305    pub get_physical_device_properties: Option<vk1_0::PFN_vkGetPhysicalDeviceProperties>,
306    pub get_physical_device_queue_family_properties: Option<
307        vk1_0::PFN_vkGetPhysicalDeviceQueueFamilyProperties,
308    >,
309    pub get_physical_device_memory_properties: Option<
310        vk1_0::PFN_vkGetPhysicalDeviceMemoryProperties,
311    >,
312    pub get_physical_device_features: Option<vk1_0::PFN_vkGetPhysicalDeviceFeatures>,
313    pub get_physical_device_format_properties: Option<
314        vk1_0::PFN_vkGetPhysicalDeviceFormatProperties,
315    >,
316    pub get_physical_device_image_format_properties: Option<
317        vk1_0::PFN_vkGetPhysicalDeviceImageFormatProperties,
318    >,
319    pub create_device: Option<vk1_0::PFN_vkCreateDevice>,
320    pub enumerate_device_layer_properties: Option<
321        vk1_0::PFN_vkEnumerateDeviceLayerProperties,
322    >,
323    pub enumerate_device_extension_properties: Option<
324        vk1_0::PFN_vkEnumerateDeviceExtensionProperties,
325    >,
326    pub get_physical_device_sparse_image_format_properties: Option<
327        vk1_0::PFN_vkGetPhysicalDeviceSparseImageFormatProperties,
328    >,
329    pub create_android_surface_khr: Option<
330        extensions::khr_android_surface::PFN_vkCreateAndroidSurfaceKHR,
331    >,
332    pub get_physical_device_display_properties_khr: Option<
333        extensions::khr_display::PFN_vkGetPhysicalDeviceDisplayPropertiesKHR,
334    >,
335    pub get_physical_device_display_plane_properties_khr: Option<
336        extensions::khr_display::PFN_vkGetPhysicalDeviceDisplayPlanePropertiesKHR,
337    >,
338    pub get_display_plane_supported_displays_khr: Option<
339        extensions::khr_display::PFN_vkGetDisplayPlaneSupportedDisplaysKHR,
340    >,
341    pub get_display_mode_properties_khr: Option<
342        extensions::khr_display::PFN_vkGetDisplayModePropertiesKHR,
343    >,
344    pub create_display_mode_khr: Option<
345        extensions::khr_display::PFN_vkCreateDisplayModeKHR,
346    >,
347    pub get_display_plane_capabilities_khr: Option<
348        extensions::khr_display::PFN_vkGetDisplayPlaneCapabilitiesKHR,
349    >,
350    pub create_display_plane_surface_khr: Option<
351        extensions::khr_display::PFN_vkCreateDisplayPlaneSurfaceKHR,
352    >,
353    pub destroy_surface_khr: Option<extensions::khr_surface::PFN_vkDestroySurfaceKHR>,
354    pub get_physical_device_surface_support_khr: Option<
355        extensions::khr_surface::PFN_vkGetPhysicalDeviceSurfaceSupportKHR,
356    >,
357    pub get_physical_device_surface_capabilities_khr: Option<
358        extensions::khr_surface::PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR,
359    >,
360    pub get_physical_device_surface_formats_khr: Option<
361        extensions::khr_surface::PFN_vkGetPhysicalDeviceSurfaceFormatsKHR,
362    >,
363    pub get_physical_device_surface_present_modes_khr: Option<
364        extensions::khr_surface::PFN_vkGetPhysicalDeviceSurfacePresentModesKHR,
365    >,
366    pub create_vi_surface_nn: Option<extensions::nn_vi_surface::PFN_vkCreateViSurfaceNN>,
367    pub create_wayland_surface_khr: Option<
368        extensions::khr_wayland_surface::PFN_vkCreateWaylandSurfaceKHR,
369    >,
370    pub get_physical_device_wayland_presentation_support_khr: Option<
371        extensions::khr_wayland_surface::PFN_vkGetPhysicalDeviceWaylandPresentationSupportKHR,
372    >,
373    pub create_win32_surface_khr: Option<
374        extensions::khr_win32_surface::PFN_vkCreateWin32SurfaceKHR,
375    >,
376    pub get_physical_device_win32_presentation_support_khr: Option<
377        extensions::khr_win32_surface::PFN_vkGetPhysicalDeviceWin32PresentationSupportKHR,
378    >,
379    pub create_xlib_surface_khr: Option<
380        extensions::khr_xlib_surface::PFN_vkCreateXlibSurfaceKHR,
381    >,
382    pub get_physical_device_xlib_presentation_support_khr: Option<
383        extensions::khr_xlib_surface::PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR,
384    >,
385    pub create_xcb_surface_khr: Option<
386        extensions::khr_xcb_surface::PFN_vkCreateXcbSurfaceKHR,
387    >,
388    pub get_physical_device_xcb_presentation_support_khr: Option<
389        extensions::khr_xcb_surface::PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR,
390    >,
391    pub create_direct_fb_surface_ext: Option<
392        extensions::ext_directfb_surface::PFN_vkCreateDirectFBSurfaceEXT,
393    >,
394    pub get_physical_device_direct_fb_presentation_support_ext: Option<
395        extensions::ext_directfb_surface::PFN_vkGetPhysicalDeviceDirectFBPresentationSupportEXT,
396    >,
397    pub create_image_pipe_surface_fuchsia: Option<
398        extensions::fuchsia_imagepipe_surface::PFN_vkCreateImagePipeSurfaceFUCHSIA,
399    >,
400    pub create_stream_descriptor_surface_ggp: Option<
401        extensions::ggp_stream_descriptor_surface::PFN_vkCreateStreamDescriptorSurfaceGGP,
402    >,
403    pub create_screen_surface_qnx: Option<
404        extensions::qnx_screen_surface::PFN_vkCreateScreenSurfaceQNX,
405    >,
406    pub get_physical_device_screen_presentation_support_qnx: Option<
407        extensions::qnx_screen_surface::PFN_vkGetPhysicalDeviceScreenPresentationSupportQNX,
408    >,
409    pub create_debug_report_callback_ext: Option<
410        extensions::ext_debug_report::PFN_vkCreateDebugReportCallbackEXT,
411    >,
412    pub destroy_debug_report_callback_ext: Option<
413        extensions::ext_debug_report::PFN_vkDestroyDebugReportCallbackEXT,
414    >,
415    pub debug_report_message_ext: Option<
416        extensions::ext_debug_report::PFN_vkDebugReportMessageEXT,
417    >,
418    pub get_physical_device_external_image_format_properties_nv: Option<
419        extensions::nv_external_memory_capabilities::PFN_vkGetPhysicalDeviceExternalImageFormatPropertiesNV,
420    >,
421    pub get_physical_device_features2: Option<vk1_1::PFN_vkGetPhysicalDeviceFeatures2>,
422    pub get_physical_device_properties2: Option<
423        vk1_1::PFN_vkGetPhysicalDeviceProperties2,
424    >,
425    pub get_physical_device_format_properties2: Option<
426        vk1_1::PFN_vkGetPhysicalDeviceFormatProperties2,
427    >,
428    pub get_physical_device_image_format_properties2: Option<
429        vk1_1::PFN_vkGetPhysicalDeviceImageFormatProperties2,
430    >,
431    pub get_physical_device_queue_family_properties2: Option<
432        vk1_1::PFN_vkGetPhysicalDeviceQueueFamilyProperties2,
433    >,
434    pub get_physical_device_memory_properties2: Option<
435        vk1_1::PFN_vkGetPhysicalDeviceMemoryProperties2,
436    >,
437    pub get_physical_device_sparse_image_format_properties2: Option<
438        vk1_1::PFN_vkGetPhysicalDeviceSparseImageFormatProperties2,
439    >,
440    pub get_physical_device_external_buffer_properties: Option<
441        vk1_1::PFN_vkGetPhysicalDeviceExternalBufferProperties,
442    >,
443    pub get_physical_device_external_semaphore_properties: Option<
444        vk1_1::PFN_vkGetPhysicalDeviceExternalSemaphoreProperties,
445    >,
446    pub get_physical_device_external_fence_properties: Option<
447        vk1_1::PFN_vkGetPhysicalDeviceExternalFenceProperties,
448    >,
449    pub release_display_ext: Option<
450        extensions::ext_direct_mode_display::PFN_vkReleaseDisplayEXT,
451    >,
452    pub acquire_xlib_display_ext: Option<
453        extensions::ext_acquire_xlib_display::PFN_vkAcquireXlibDisplayEXT,
454    >,
455    pub get_rand_r_output_display_ext: Option<
456        extensions::ext_acquire_xlib_display::PFN_vkGetRandROutputDisplayEXT,
457    >,
458    pub acquire_winrt_display_nv: Option<
459        extensions::nv_acquire_winrt_display::PFN_vkAcquireWinrtDisplayNV,
460    >,
461    pub get_winrt_display_nv: Option<
462        extensions::nv_acquire_winrt_display::PFN_vkGetWinrtDisplayNV,
463    >,
464    pub get_physical_device_surface_capabilities2_ext: Option<
465        extensions::ext_display_surface_counter::PFN_vkGetPhysicalDeviceSurfaceCapabilities2EXT,
466    >,
467    pub enumerate_physical_device_groups: Option<
468        vk1_1::PFN_vkEnumeratePhysicalDeviceGroups,
469    >,
470    pub get_physical_device_present_rectangles_khr: Option<
471        extensions::khr_swapchain::PFN_vkGetPhysicalDevicePresentRectanglesKHR,
472    >,
473    pub create_ios_surface_mvk: Option<
474        extensions::mvk_ios_surface::PFN_vkCreateIOSSurfaceMVK,
475    >,
476    pub create_mac_os_surface_mvk: Option<
477        extensions::mvk_macos_surface::PFN_vkCreateMacOSSurfaceMVK,
478    >,
479    pub create_metal_surface_ext: Option<
480        extensions::ext_metal_surface::PFN_vkCreateMetalSurfaceEXT,
481    >,
482    pub get_physical_device_multisample_properties_ext: Option<
483        extensions::ext_sample_locations::PFN_vkGetPhysicalDeviceMultisamplePropertiesEXT,
484    >,
485    pub get_physical_device_surface_capabilities2_khr: Option<
486        extensions::khr_get_surface_capabilities2::PFN_vkGetPhysicalDeviceSurfaceCapabilities2KHR,
487    >,
488    pub get_physical_device_surface_formats2_khr: Option<
489        extensions::khr_get_surface_capabilities2::PFN_vkGetPhysicalDeviceSurfaceFormats2KHR,
490    >,
491    pub get_physical_device_display_properties2_khr: Option<
492        extensions::khr_get_display_properties2::PFN_vkGetPhysicalDeviceDisplayProperties2KHR,
493    >,
494    pub get_physical_device_display_plane_properties2_khr: Option<
495        extensions::khr_get_display_properties2::PFN_vkGetPhysicalDeviceDisplayPlaneProperties2KHR,
496    >,
497    pub get_display_mode_properties2_khr: Option<
498        extensions::khr_get_display_properties2::PFN_vkGetDisplayModeProperties2KHR,
499    >,
500    pub get_display_plane_capabilities2_khr: Option<
501        extensions::khr_get_display_properties2::PFN_vkGetDisplayPlaneCapabilities2KHR,
502    >,
503    pub get_physical_device_calibrateable_time_domains_ext: Option<
504        extensions::ext_calibrated_timestamps::PFN_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT,
505    >,
506    pub create_debug_utils_messenger_ext: Option<
507        extensions::ext_debug_utils::PFN_vkCreateDebugUtilsMessengerEXT,
508    >,
509    pub destroy_debug_utils_messenger_ext: Option<
510        extensions::ext_debug_utils::PFN_vkDestroyDebugUtilsMessengerEXT,
511    >,
512    pub submit_debug_utils_message_ext: Option<
513        extensions::ext_debug_utils::PFN_vkSubmitDebugUtilsMessageEXT,
514    >,
515    pub get_physical_device_cooperative_matrix_properties_nv: Option<
516        extensions::nv_cooperative_matrix::PFN_vkGetPhysicalDeviceCooperativeMatrixPropertiesNV,
517    >,
518    pub get_physical_device_surface_present_modes2_ext: Option<
519        extensions::ext_full_screen_exclusive::PFN_vkGetPhysicalDeviceSurfacePresentModes2EXT,
520    >,
521    pub enumerate_physical_device_queue_family_performance_query_counters_khr: Option<
522        extensions::khr_performance_query::PFN_vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR,
523    >,
524    pub get_physical_device_queue_family_performance_query_passes_khr: Option<
525        extensions::khr_performance_query::PFN_vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR,
526    >,
527    pub create_headless_surface_ext: Option<
528        extensions::ext_headless_surface::PFN_vkCreateHeadlessSurfaceEXT,
529    >,
530    pub get_physical_device_supported_framebuffer_mixed_samples_combinations_nv: Option<
531        extensions::nv_coverage_reduction_mode::PFN_vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV,
532    >,
533    pub get_physical_device_tool_properties: Option<
534        vk1_3::PFN_vkGetPhysicalDeviceToolProperties,
535    >,
536    pub get_physical_device_fragment_shading_rates_khr: Option<
537        extensions::khr_fragment_shading_rate::PFN_vkGetPhysicalDeviceFragmentShadingRatesKHR,
538    >,
539    pub get_physical_device_video_capabilities_khr: Option<
540        extensions::khr_video_queue::PFN_vkGetPhysicalDeviceVideoCapabilitiesKHR,
541    >,
542    pub get_physical_device_video_format_properties_khr: Option<
543        extensions::khr_video_queue::PFN_vkGetPhysicalDeviceVideoFormatPropertiesKHR,
544    >,
545    pub acquire_drm_display_ext: Option<
546        extensions::ext_acquire_drm_display::PFN_vkAcquireDrmDisplayEXT,
547    >,
548    pub get_drm_display_ext: Option<
549        extensions::ext_acquire_drm_display::PFN_vkGetDrmDisplayEXT,
550    >,
551    pub get_physical_device_features2_khr: Option<
552        extensions::khr_get_physical_device_properties2::PFN_vkGetPhysicalDeviceFeatures2KHR,
553    >,
554    pub get_physical_device_properties2_khr: Option<
555        extensions::khr_get_physical_device_properties2::PFN_vkGetPhysicalDeviceProperties2KHR,
556    >,
557    pub get_physical_device_format_properties2_khr: Option<
558        extensions::khr_get_physical_device_properties2::PFN_vkGetPhysicalDeviceFormatProperties2KHR,
559    >,
560    pub get_physical_device_image_format_properties2_khr: Option<
561        extensions::khr_get_physical_device_properties2::PFN_vkGetPhysicalDeviceImageFormatProperties2KHR,
562    >,
563    pub get_physical_device_queue_family_properties2_khr: Option<
564        extensions::khr_get_physical_device_properties2::PFN_vkGetPhysicalDeviceQueueFamilyProperties2KHR,
565    >,
566    pub get_physical_device_memory_properties2_khr: Option<
567        extensions::khr_get_physical_device_properties2::PFN_vkGetPhysicalDeviceMemoryProperties2KHR,
568    >,
569    pub get_physical_device_sparse_image_format_properties2_khr: Option<
570        extensions::khr_get_physical_device_properties2::PFN_vkGetPhysicalDeviceSparseImageFormatProperties2KHR,
571    >,
572    pub get_physical_device_external_buffer_properties_khr: Option<
573        extensions::khr_external_memory_capabilities::PFN_vkGetPhysicalDeviceExternalBufferPropertiesKHR,
574    >,
575    pub get_physical_device_external_semaphore_properties_khr: Option<
576        extensions::khr_external_semaphore_capabilities::PFN_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR,
577    >,
578    pub get_physical_device_external_fence_properties_khr: Option<
579        extensions::khr_external_fence_capabilities::PFN_vkGetPhysicalDeviceExternalFencePropertiesKHR,
580    >,
581    pub enumerate_physical_device_groups_khr: Option<
582        extensions::khr_device_group_creation::PFN_vkEnumeratePhysicalDeviceGroupsKHR,
583    >,
584    pub get_physical_device_tool_properties_ext: Option<
585        extensions::ext_tooling_info::PFN_vkGetPhysicalDeviceToolPropertiesEXT,
586    >,
587}
588impl InstanceLoader {
589    #[allow(unused_parens)]
590    pub(crate) unsafe fn custom<T>(
591        entry_loader: &CustomEntryLoader<T>,
592        instance: crate::vk1_0::Instance,
593        instance_enabled: InstanceEnabled,
594        mut symbol: impl FnMut(
595            *const std::os::raw::c_char,
596        ) -> Option<crate::vk1_0::PFN_vkVoidFunction>,
597    ) -> Result<InstanceLoader, crate::LoaderError> {
598        let get_device_proc_addr = symbol(crate::vk1_0::FN_GET_DEVICE_PROC_ADDR)
599            .ok_or(crate::LoaderError::SymbolNotAvailable)?;
600        Ok(InstanceLoader {
601            parent: std::sync::Arc::downgrade(&entry_loader.arc),
602            arc: std::sync::Arc::new(()),
603            handle: instance,
604            get_device_proc_addr: std::mem::transmute(get_device_proc_addr),
605            destroy_instance: std::mem::transmute(
606                symbol(crate::vk1_0::FN_DESTROY_INSTANCE),
607            ),
608            enumerate_physical_devices: std::mem::transmute(
609                symbol(crate::vk1_0::FN_ENUMERATE_PHYSICAL_DEVICES),
610            ),
611            get_instance_proc_addr: std::mem::transmute(
612                symbol(crate::vk1_0::FN_GET_INSTANCE_PROC_ADDR),
613            ),
614            get_physical_device_properties: std::mem::transmute(
615                symbol(crate::vk1_0::FN_GET_PHYSICAL_DEVICE_PROPERTIES),
616            ),
617            get_physical_device_queue_family_properties: std::mem::transmute(
618                symbol(crate::vk1_0::FN_GET_PHYSICAL_DEVICE_QUEUE_FAMILY_PROPERTIES),
619            ),
620            get_physical_device_memory_properties: std::mem::transmute(
621                symbol(crate::vk1_0::FN_GET_PHYSICAL_DEVICE_MEMORY_PROPERTIES),
622            ),
623            get_physical_device_features: std::mem::transmute(
624                symbol(crate::vk1_0::FN_GET_PHYSICAL_DEVICE_FEATURES),
625            ),
626            get_physical_device_format_properties: std::mem::transmute(
627                symbol(crate::vk1_0::FN_GET_PHYSICAL_DEVICE_FORMAT_PROPERTIES),
628            ),
629            get_physical_device_image_format_properties: std::mem::transmute(
630                symbol(crate::vk1_0::FN_GET_PHYSICAL_DEVICE_IMAGE_FORMAT_PROPERTIES),
631            ),
632            create_device: std::mem::transmute(symbol(crate::vk1_0::FN_CREATE_DEVICE)),
633            enumerate_device_layer_properties: std::mem::transmute(
634                symbol(crate::vk1_0::FN_ENUMERATE_DEVICE_LAYER_PROPERTIES),
635            ),
636            enumerate_device_extension_properties: std::mem::transmute(
637                symbol(crate::vk1_0::FN_ENUMERATE_DEVICE_EXTENSION_PROPERTIES),
638            ),
639            get_physical_device_sparse_image_format_properties: std::mem::transmute(
640                symbol(
641                    crate::vk1_0::FN_GET_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_PROPERTIES,
642                ),
643            ),
644            create_android_surface_khr: if instance_enabled.khr_android_surface {
645                std::mem::transmute(
646                    symbol(
647                        crate::extensions::khr_android_surface::FN_CREATE_ANDROID_SURFACE_KHR,
648                    ),
649                )
650            } else {
651                None
652            },
653            get_physical_device_display_properties_khr: if instance_enabled.khr_display {
654                std::mem::transmute(
655                    symbol(
656                        crate::extensions::khr_display::FN_GET_PHYSICAL_DEVICE_DISPLAY_PROPERTIES_KHR,
657                    ),
658                )
659            } else {
660                None
661            },
662            get_physical_device_display_plane_properties_khr: if instance_enabled
663                .khr_display
664            {
665                std::mem::transmute(
666                    symbol(
667                        crate::extensions::khr_display::FN_GET_PHYSICAL_DEVICE_DISPLAY_PLANE_PROPERTIES_KHR,
668                    ),
669                )
670            } else {
671                None
672            },
673            get_display_plane_supported_displays_khr: if instance_enabled.khr_display {
674                std::mem::transmute(
675                    symbol(
676                        crate::extensions::khr_display::FN_GET_DISPLAY_PLANE_SUPPORTED_DISPLAYS_KHR,
677                    ),
678                )
679            } else {
680                None
681            },
682            get_display_mode_properties_khr: if instance_enabled.khr_display {
683                std::mem::transmute(
684                    symbol(
685                        crate::extensions::khr_display::FN_GET_DISPLAY_MODE_PROPERTIES_KHR,
686                    ),
687                )
688            } else {
689                None
690            },
691            create_display_mode_khr: if instance_enabled.khr_display {
692                std::mem::transmute(
693                    symbol(crate::extensions::khr_display::FN_CREATE_DISPLAY_MODE_KHR),
694                )
695            } else {
696                None
697            },
698            get_display_plane_capabilities_khr: if instance_enabled.khr_display {
699                std::mem::transmute(
700                    symbol(
701                        crate::extensions::khr_display::FN_GET_DISPLAY_PLANE_CAPABILITIES_KHR,
702                    ),
703                )
704            } else {
705                None
706            },
707            create_display_plane_surface_khr: if instance_enabled.khr_display {
708                std::mem::transmute(
709                    symbol(
710                        crate::extensions::khr_display::FN_CREATE_DISPLAY_PLANE_SURFACE_KHR,
711                    ),
712                )
713            } else {
714                None
715            },
716            destroy_surface_khr: if instance_enabled.khr_surface {
717                std::mem::transmute(
718                    symbol(crate::extensions::khr_surface::FN_DESTROY_SURFACE_KHR),
719                )
720            } else {
721                None
722            },
723            get_physical_device_surface_support_khr: if instance_enabled.khr_surface {
724                std::mem::transmute(
725                    symbol(
726                        crate::extensions::khr_surface::FN_GET_PHYSICAL_DEVICE_SURFACE_SUPPORT_KHR,
727                    ),
728                )
729            } else {
730                None
731            },
732            get_physical_device_surface_capabilities_khr: if instance_enabled.khr_surface
733            {
734                std::mem::transmute(
735                    symbol(
736                        crate::extensions::khr_surface::FN_GET_PHYSICAL_DEVICE_SURFACE_CAPABILITIES_KHR,
737                    ),
738                )
739            } else {
740                None
741            },
742            get_physical_device_surface_formats_khr: if instance_enabled.khr_surface {
743                std::mem::transmute(
744                    symbol(
745                        crate::extensions::khr_surface::FN_GET_PHYSICAL_DEVICE_SURFACE_FORMATS_KHR,
746                    ),
747                )
748            } else {
749                None
750            },
751            get_physical_device_surface_present_modes_khr: if instance_enabled
752                .khr_surface
753            {
754                std::mem::transmute(
755                    symbol(
756                        crate::extensions::khr_surface::FN_GET_PHYSICAL_DEVICE_SURFACE_PRESENT_MODES_KHR,
757                    ),
758                )
759            } else {
760                None
761            },
762            create_vi_surface_nn: if instance_enabled.nn_vi_surface {
763                std::mem::transmute(
764                    symbol(crate::extensions::nn_vi_surface::FN_CREATE_VI_SURFACE_NN),
765                )
766            } else {
767                None
768            },
769            create_wayland_surface_khr: if instance_enabled.khr_wayland_surface {
770                std::mem::transmute(
771                    symbol(
772                        crate::extensions::khr_wayland_surface::FN_CREATE_WAYLAND_SURFACE_KHR,
773                    ),
774                )
775            } else {
776                None
777            },
778            get_physical_device_wayland_presentation_support_khr: if instance_enabled
779                .khr_wayland_surface
780            {
781                std::mem::transmute(
782                    symbol(
783                        crate::extensions::khr_wayland_surface::FN_GET_PHYSICAL_DEVICE_WAYLAND_PRESENTATION_SUPPORT_KHR,
784                    ),
785                )
786            } else {
787                None
788            },
789            create_win32_surface_khr: if instance_enabled.khr_win32_surface {
790                std::mem::transmute(
791                    symbol(
792                        crate::extensions::khr_win32_surface::FN_CREATE_WIN32_SURFACE_KHR,
793                    ),
794                )
795            } else {
796                None
797            },
798            get_physical_device_win32_presentation_support_khr: if instance_enabled
799                .khr_win32_surface
800            {
801                std::mem::transmute(
802                    symbol(
803                        crate::extensions::khr_win32_surface::FN_GET_PHYSICAL_DEVICE_WIN32_PRESENTATION_SUPPORT_KHR,
804                    ),
805                )
806            } else {
807                None
808            },
809            create_xlib_surface_khr: if instance_enabled.khr_xlib_surface {
810                std::mem::transmute(
811                    symbol(
812                        crate::extensions::khr_xlib_surface::FN_CREATE_XLIB_SURFACE_KHR,
813                    ),
814                )
815            } else {
816                None
817            },
818            get_physical_device_xlib_presentation_support_khr: if instance_enabled
819                .khr_xlib_surface
820            {
821                std::mem::transmute(
822                    symbol(
823                        crate::extensions::khr_xlib_surface::FN_GET_PHYSICAL_DEVICE_XLIB_PRESENTATION_SUPPORT_KHR,
824                    ),
825                )
826            } else {
827                None
828            },
829            create_xcb_surface_khr: if instance_enabled.khr_xcb_surface {
830                std::mem::transmute(
831                    symbol(crate::extensions::khr_xcb_surface::FN_CREATE_XCB_SURFACE_KHR),
832                )
833            } else {
834                None
835            },
836            get_physical_device_xcb_presentation_support_khr: if instance_enabled
837                .khr_xcb_surface
838            {
839                std::mem::transmute(
840                    symbol(
841                        crate::extensions::khr_xcb_surface::FN_GET_PHYSICAL_DEVICE_XCB_PRESENTATION_SUPPORT_KHR,
842                    ),
843                )
844            } else {
845                None
846            },
847            create_direct_fb_surface_ext: if instance_enabled.ext_directfb_surface {
848                std::mem::transmute(
849                    symbol(
850                        crate::extensions::ext_directfb_surface::FN_CREATE_DIRECT_FB_SURFACE_EXT,
851                    ),
852                )
853            } else {
854                None
855            },
856            get_physical_device_direct_fb_presentation_support_ext: if instance_enabled
857                .ext_directfb_surface
858            {
859                std::mem::transmute(
860                    symbol(
861                        crate::extensions::ext_directfb_surface::FN_GET_PHYSICAL_DEVICE_DIRECT_FB_PRESENTATION_SUPPORT_EXT,
862                    ),
863                )
864            } else {
865                None
866            },
867            create_image_pipe_surface_fuchsia: if instance_enabled
868                .fuchsia_imagepipe_surface
869            {
870                std::mem::transmute(
871                    symbol(
872                        crate::extensions::fuchsia_imagepipe_surface::FN_CREATE_IMAGE_PIPE_SURFACE_FUCHSIA,
873                    ),
874                )
875            } else {
876                None
877            },
878            create_stream_descriptor_surface_ggp: if instance_enabled
879                .ggp_stream_descriptor_surface
880            {
881                std::mem::transmute(
882                    symbol(
883                        crate::extensions::ggp_stream_descriptor_surface::FN_CREATE_STREAM_DESCRIPTOR_SURFACE_GGP,
884                    ),
885                )
886            } else {
887                None
888            },
889            create_screen_surface_qnx: if instance_enabled.qnx_screen_surface {
890                std::mem::transmute(
891                    symbol(
892                        crate::extensions::qnx_screen_surface::FN_CREATE_SCREEN_SURFACE_QNX,
893                    ),
894                )
895            } else {
896                None
897            },
898            get_physical_device_screen_presentation_support_qnx: if instance_enabled
899                .qnx_screen_surface
900            {
901                std::mem::transmute(
902                    symbol(
903                        crate::extensions::qnx_screen_surface::FN_GET_PHYSICAL_DEVICE_SCREEN_PRESENTATION_SUPPORT_QNX,
904                    ),
905                )
906            } else {
907                None
908            },
909            create_debug_report_callback_ext: if instance_enabled.ext_debug_report {
910                std::mem::transmute(
911                    symbol(
912                        crate::extensions::ext_debug_report::FN_CREATE_DEBUG_REPORT_CALLBACK_EXT,
913                    ),
914                )
915            } else {
916                None
917            },
918            destroy_debug_report_callback_ext: if instance_enabled.ext_debug_report {
919                std::mem::transmute(
920                    symbol(
921                        crate::extensions::ext_debug_report::FN_DESTROY_DEBUG_REPORT_CALLBACK_EXT,
922                    ),
923                )
924            } else {
925                None
926            },
927            debug_report_message_ext: if instance_enabled.ext_debug_report {
928                std::mem::transmute(
929                    symbol(
930                        crate::extensions::ext_debug_report::FN_DEBUG_REPORT_MESSAGE_EXT,
931                    ),
932                )
933            } else {
934                None
935            },
936            get_physical_device_external_image_format_properties_nv: if instance_enabled
937                .nv_external_memory_capabilities
938            {
939                std::mem::transmute(
940                    symbol(
941                        crate::extensions::nv_external_memory_capabilities::FN_GET_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_PROPERTIES_NV,
942                    ),
943                )
944            } else {
945                None
946            },
947            get_physical_device_features2: if instance_enabled.vk1_1 {
948                std::mem::transmute(
949                    symbol(crate::vk1_1::FN_GET_PHYSICAL_DEVICE_FEATURES2),
950                )
951            } else {
952                None
953            },
954            get_physical_device_properties2: if instance_enabled.vk1_1 {
955                std::mem::transmute(
956                    symbol(crate::vk1_1::FN_GET_PHYSICAL_DEVICE_PROPERTIES2),
957                )
958            } else {
959                None
960            },
961            get_physical_device_format_properties2: if instance_enabled.vk1_1 {
962                std::mem::transmute(
963                    symbol(crate::vk1_1::FN_GET_PHYSICAL_DEVICE_FORMAT_PROPERTIES2),
964                )
965            } else {
966                None
967            },
968            get_physical_device_image_format_properties2: if instance_enabled.vk1_1 {
969                std::mem::transmute(
970                    symbol(crate::vk1_1::FN_GET_PHYSICAL_DEVICE_IMAGE_FORMAT_PROPERTIES2),
971                )
972            } else {
973                None
974            },
975            get_physical_device_queue_family_properties2: if instance_enabled.vk1_1 {
976                std::mem::transmute(
977                    symbol(crate::vk1_1::FN_GET_PHYSICAL_DEVICE_QUEUE_FAMILY_PROPERTIES2),
978                )
979            } else {
980                None
981            },
982            get_physical_device_memory_properties2: if instance_enabled.vk1_1 {
983                std::mem::transmute(
984                    symbol(crate::vk1_1::FN_GET_PHYSICAL_DEVICE_MEMORY_PROPERTIES2),
985                )
986            } else {
987                None
988            },
989            get_physical_device_sparse_image_format_properties2: if instance_enabled
990                .vk1_1
991            {
992                std::mem::transmute(
993                    symbol(
994                        crate::vk1_1::FN_GET_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_PROPERTIES2,
995                    ),
996                )
997            } else {
998                None
999            },
1000            get_physical_device_external_buffer_properties: if instance_enabled.vk1_1 {
1001                std::mem::transmute(
1002                    symbol(
1003                        crate::vk1_1::FN_GET_PHYSICAL_DEVICE_EXTERNAL_BUFFER_PROPERTIES,
1004                    ),
1005                )
1006            } else {
1007                None
1008            },
1009            get_physical_device_external_semaphore_properties: if instance_enabled.vk1_1
1010            {
1011                std::mem::transmute(
1012                    symbol(
1013                        crate::vk1_1::FN_GET_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_PROPERTIES,
1014                    ),
1015                )
1016            } else {
1017                None
1018            },
1019            get_physical_device_external_fence_properties: if instance_enabled.vk1_1 {
1020                std::mem::transmute(
1021                    symbol(
1022                        crate::vk1_1::FN_GET_PHYSICAL_DEVICE_EXTERNAL_FENCE_PROPERTIES,
1023                    ),
1024                )
1025            } else {
1026                None
1027            },
1028            release_display_ext: if instance_enabled.ext_direct_mode_display {
1029                std::mem::transmute(
1030                    symbol(
1031                        crate::extensions::ext_direct_mode_display::FN_RELEASE_DISPLAY_EXT,
1032                    ),
1033                )
1034            } else {
1035                None
1036            },
1037            acquire_xlib_display_ext: if instance_enabled.ext_acquire_xlib_display {
1038                std::mem::transmute(
1039                    symbol(
1040                        crate::extensions::ext_acquire_xlib_display::FN_ACQUIRE_XLIB_DISPLAY_EXT,
1041                    ),
1042                )
1043            } else {
1044                None
1045            },
1046            get_rand_r_output_display_ext: if instance_enabled.ext_acquire_xlib_display {
1047                std::mem::transmute(
1048                    symbol(
1049                        crate::extensions::ext_acquire_xlib_display::FN_GET_RAND_R_OUTPUT_DISPLAY_EXT,
1050                    ),
1051                )
1052            } else {
1053                None
1054            },
1055            acquire_winrt_display_nv: if instance_enabled.nv_acquire_winrt_display {
1056                std::mem::transmute(
1057                    symbol(
1058                        crate::extensions::nv_acquire_winrt_display::FN_ACQUIRE_WINRT_DISPLAY_NV,
1059                    ),
1060                )
1061            } else {
1062                None
1063            },
1064            get_winrt_display_nv: if instance_enabled.nv_acquire_winrt_display {
1065                std::mem::transmute(
1066                    symbol(
1067                        crate::extensions::nv_acquire_winrt_display::FN_GET_WINRT_DISPLAY_NV,
1068                    ),
1069                )
1070            } else {
1071                None
1072            },
1073            get_physical_device_surface_capabilities2_ext: if instance_enabled
1074                .ext_display_surface_counter
1075            {
1076                std::mem::transmute(
1077                    symbol(
1078                        crate::extensions::ext_display_surface_counter::FN_GET_PHYSICAL_DEVICE_SURFACE_CAPABILITIES2_EXT,
1079                    ),
1080                )
1081            } else {
1082                None
1083            },
1084            enumerate_physical_device_groups: if instance_enabled.vk1_1 {
1085                std::mem::transmute(
1086                    symbol(crate::vk1_1::FN_ENUMERATE_PHYSICAL_DEVICE_GROUPS),
1087                )
1088            } else {
1089                None
1090            },
1091            get_physical_device_present_rectangles_khr: if (instance_enabled
1092                .khr_swapchain && instance_enabled.vk1_1)
1093                || (instance_enabled.khr_device_group && instance_enabled.khr_surface)
1094            {
1095                std::mem::transmute(
1096                    symbol(
1097                        crate::extensions::khr_swapchain::FN_GET_PHYSICAL_DEVICE_PRESENT_RECTANGLES_KHR,
1098                    ),
1099                )
1100            } else {
1101                None
1102            },
1103            create_ios_surface_mvk: if instance_enabled.mvk_ios_surface {
1104                std::mem::transmute(
1105                    symbol(crate::extensions::mvk_ios_surface::FN_CREATE_IOS_SURFACE_MVK),
1106                )
1107            } else {
1108                None
1109            },
1110            create_mac_os_surface_mvk: if instance_enabled.mvk_macos_surface {
1111                std::mem::transmute(
1112                    symbol(
1113                        crate::extensions::mvk_macos_surface::FN_CREATE_MAC_OS_SURFACE_MVK,
1114                    ),
1115                )
1116            } else {
1117                None
1118            },
1119            create_metal_surface_ext: if instance_enabled.ext_metal_surface {
1120                std::mem::transmute(
1121                    symbol(
1122                        crate::extensions::ext_metal_surface::FN_CREATE_METAL_SURFACE_EXT,
1123                    ),
1124                )
1125            } else {
1126                None
1127            },
1128            get_physical_device_multisample_properties_ext: if instance_enabled
1129                .ext_sample_locations
1130            {
1131                std::mem::transmute(
1132                    symbol(
1133                        crate::extensions::ext_sample_locations::FN_GET_PHYSICAL_DEVICE_MULTISAMPLE_PROPERTIES_EXT,
1134                    ),
1135                )
1136            } else {
1137                None
1138            },
1139            get_physical_device_surface_capabilities2_khr: if instance_enabled
1140                .khr_get_surface_capabilities2
1141            {
1142                std::mem::transmute(
1143                    symbol(
1144                        crate::extensions::khr_get_surface_capabilities2::FN_GET_PHYSICAL_DEVICE_SURFACE_CAPABILITIES2_KHR,
1145                    ),
1146                )
1147            } else {
1148                None
1149            },
1150            get_physical_device_surface_formats2_khr: if instance_enabled
1151                .khr_get_surface_capabilities2
1152            {
1153                std::mem::transmute(
1154                    symbol(
1155                        crate::extensions::khr_get_surface_capabilities2::FN_GET_PHYSICAL_DEVICE_SURFACE_FORMATS2_KHR,
1156                    ),
1157                )
1158            } else {
1159                None
1160            },
1161            get_physical_device_display_properties2_khr: if instance_enabled
1162                .khr_get_display_properties2
1163            {
1164                std::mem::transmute(
1165                    symbol(
1166                        crate::extensions::khr_get_display_properties2::FN_GET_PHYSICAL_DEVICE_DISPLAY_PROPERTIES2_KHR,
1167                    ),
1168                )
1169            } else {
1170                None
1171            },
1172            get_physical_device_display_plane_properties2_khr: if instance_enabled
1173                .khr_get_display_properties2
1174            {
1175                std::mem::transmute(
1176                    symbol(
1177                        crate::extensions::khr_get_display_properties2::FN_GET_PHYSICAL_DEVICE_DISPLAY_PLANE_PROPERTIES2_KHR,
1178                    ),
1179                )
1180            } else {
1181                None
1182            },
1183            get_display_mode_properties2_khr: if instance_enabled
1184                .khr_get_display_properties2
1185            {
1186                std::mem::transmute(
1187                    symbol(
1188                        crate::extensions::khr_get_display_properties2::FN_GET_DISPLAY_MODE_PROPERTIES2_KHR,
1189                    ),
1190                )
1191            } else {
1192                None
1193            },
1194            get_display_plane_capabilities2_khr: if instance_enabled
1195                .khr_get_display_properties2
1196            {
1197                std::mem::transmute(
1198                    symbol(
1199                        crate::extensions::khr_get_display_properties2::FN_GET_DISPLAY_PLANE_CAPABILITIES2_KHR,
1200                    ),
1201                )
1202            } else {
1203                None
1204            },
1205            get_physical_device_calibrateable_time_domains_ext: if instance_enabled
1206                .ext_calibrated_timestamps
1207            {
1208                std::mem::transmute(
1209                    symbol(
1210                        crate::extensions::ext_calibrated_timestamps::FN_GET_PHYSICAL_DEVICE_CALIBRATEABLE_TIME_DOMAINS_EXT,
1211                    ),
1212                )
1213            } else {
1214                None
1215            },
1216            create_debug_utils_messenger_ext: if instance_enabled.ext_debug_utils {
1217                std::mem::transmute(
1218                    symbol(
1219                        crate::extensions::ext_debug_utils::FN_CREATE_DEBUG_UTILS_MESSENGER_EXT,
1220                    ),
1221                )
1222            } else {
1223                None
1224            },
1225            destroy_debug_utils_messenger_ext: if instance_enabled.ext_debug_utils {
1226                std::mem::transmute(
1227                    symbol(
1228                        crate::extensions::ext_debug_utils::FN_DESTROY_DEBUG_UTILS_MESSENGER_EXT,
1229                    ),
1230                )
1231            } else {
1232                None
1233            },
1234            submit_debug_utils_message_ext: if instance_enabled.ext_debug_utils {
1235                std::mem::transmute(
1236                    symbol(
1237                        crate::extensions::ext_debug_utils::FN_SUBMIT_DEBUG_UTILS_MESSAGE_EXT,
1238                    ),
1239                )
1240            } else {
1241                None
1242            },
1243            get_physical_device_cooperative_matrix_properties_nv: if instance_enabled
1244                .nv_cooperative_matrix
1245            {
1246                std::mem::transmute(
1247                    symbol(
1248                        crate::extensions::nv_cooperative_matrix::FN_GET_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_PROPERTIES_NV,
1249                    ),
1250                )
1251            } else {
1252                None
1253            },
1254            get_physical_device_surface_present_modes2_ext: if instance_enabled
1255                .ext_full_screen_exclusive
1256            {
1257                std::mem::transmute(
1258                    symbol(
1259                        crate::extensions::ext_full_screen_exclusive::FN_GET_PHYSICAL_DEVICE_SURFACE_PRESENT_MODES2_EXT,
1260                    ),
1261                )
1262            } else {
1263                None
1264            },
1265            enumerate_physical_device_queue_family_performance_query_counters_khr: if instance_enabled
1266                .khr_performance_query
1267            {
1268                std::mem::transmute(
1269                    symbol(
1270                        crate::extensions::khr_performance_query::FN_ENUMERATE_PHYSICAL_DEVICE_QUEUE_FAMILY_PERFORMANCE_QUERY_COUNTERS_KHR,
1271                    ),
1272                )
1273            } else {
1274                None
1275            },
1276            get_physical_device_queue_family_performance_query_passes_khr: if instance_enabled
1277                .khr_performance_query
1278            {
1279                std::mem::transmute(
1280                    symbol(
1281                        crate::extensions::khr_performance_query::FN_GET_PHYSICAL_DEVICE_QUEUE_FAMILY_PERFORMANCE_QUERY_PASSES_KHR,
1282                    ),
1283                )
1284            } else {
1285                None
1286            },
1287            create_headless_surface_ext: if instance_enabled.ext_headless_surface {
1288                std::mem::transmute(
1289                    symbol(
1290                        crate::extensions::ext_headless_surface::FN_CREATE_HEADLESS_SURFACE_EXT,
1291                    ),
1292                )
1293            } else {
1294                None
1295            },
1296            get_physical_device_supported_framebuffer_mixed_samples_combinations_nv: if instance_enabled
1297                .nv_coverage_reduction_mode
1298            {
1299                std::mem::transmute(
1300                    symbol(
1301                        crate::extensions::nv_coverage_reduction_mode::FN_GET_PHYSICAL_DEVICE_SUPPORTED_FRAMEBUFFER_MIXED_SAMPLES_COMBINATIONS_NV,
1302                    ),
1303                )
1304            } else {
1305                None
1306            },
1307            get_physical_device_tool_properties: if instance_enabled.vk1_3 {
1308                std::mem::transmute(
1309                    symbol(crate::vk1_3::FN_GET_PHYSICAL_DEVICE_TOOL_PROPERTIES),
1310                )
1311            } else {
1312                None
1313            },
1314            get_physical_device_fragment_shading_rates_khr: if instance_enabled
1315                .khr_fragment_shading_rate
1316            {
1317                std::mem::transmute(
1318                    symbol(
1319                        crate::extensions::khr_fragment_shading_rate::FN_GET_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATES_KHR,
1320                    ),
1321                )
1322            } else {
1323                None
1324            },
1325            get_physical_device_video_capabilities_khr: if instance_enabled
1326                .khr_video_queue
1327            {
1328                std::mem::transmute(
1329                    symbol(
1330                        crate::extensions::khr_video_queue::FN_GET_PHYSICAL_DEVICE_VIDEO_CAPABILITIES_KHR,
1331                    ),
1332                )
1333            } else {
1334                None
1335            },
1336            get_physical_device_video_format_properties_khr: if instance_enabled
1337                .khr_video_queue
1338            {
1339                std::mem::transmute(
1340                    symbol(
1341                        crate::extensions::khr_video_queue::FN_GET_PHYSICAL_DEVICE_VIDEO_FORMAT_PROPERTIES_KHR,
1342                    ),
1343                )
1344            } else {
1345                None
1346            },
1347            acquire_drm_display_ext: if instance_enabled.ext_acquire_drm_display {
1348                std::mem::transmute(
1349                    symbol(
1350                        crate::extensions::ext_acquire_drm_display::FN_ACQUIRE_DRM_DISPLAY_EXT,
1351                    ),
1352                )
1353            } else {
1354                None
1355            },
1356            get_drm_display_ext: if instance_enabled.ext_acquire_drm_display {
1357                std::mem::transmute(
1358                    symbol(
1359                        crate::extensions::ext_acquire_drm_display::FN_GET_DRM_DISPLAY_EXT,
1360                    ),
1361                )
1362            } else {
1363                None
1364            },
1365            get_physical_device_features2_khr: if instance_enabled
1366                .khr_get_physical_device_properties2
1367            {
1368                std::mem::transmute(
1369                    symbol(
1370                        crate::extensions::khr_get_physical_device_properties2::FN_GET_PHYSICAL_DEVICE_FEATURES2_KHR,
1371                    ),
1372                )
1373            } else {
1374                None
1375            },
1376            get_physical_device_properties2_khr: if instance_enabled
1377                .khr_get_physical_device_properties2
1378            {
1379                std::mem::transmute(
1380                    symbol(
1381                        crate::extensions::khr_get_physical_device_properties2::FN_GET_PHYSICAL_DEVICE_PROPERTIES2_KHR,
1382                    ),
1383                )
1384            } else {
1385                None
1386            },
1387            get_physical_device_format_properties2_khr: if instance_enabled
1388                .khr_get_physical_device_properties2
1389            {
1390                std::mem::transmute(
1391                    symbol(
1392                        crate::extensions::khr_get_physical_device_properties2::FN_GET_PHYSICAL_DEVICE_FORMAT_PROPERTIES2_KHR,
1393                    ),
1394                )
1395            } else {
1396                None
1397            },
1398            get_physical_device_image_format_properties2_khr: if instance_enabled
1399                .khr_get_physical_device_properties2
1400            {
1401                std::mem::transmute(
1402                    symbol(
1403                        crate::extensions::khr_get_physical_device_properties2::FN_GET_PHYSICAL_DEVICE_IMAGE_FORMAT_PROPERTIES2_KHR,
1404                    ),
1405                )
1406            } else {
1407                None
1408            },
1409            get_physical_device_queue_family_properties2_khr: if instance_enabled
1410                .khr_get_physical_device_properties2
1411            {
1412                std::mem::transmute(
1413                    symbol(
1414                        crate::extensions::khr_get_physical_device_properties2::FN_GET_PHYSICAL_DEVICE_QUEUE_FAMILY_PROPERTIES2_KHR,
1415                    ),
1416                )
1417            } else {
1418                None
1419            },
1420            get_physical_device_memory_properties2_khr: if instance_enabled
1421                .khr_get_physical_device_properties2
1422            {
1423                std::mem::transmute(
1424                    symbol(
1425                        crate::extensions::khr_get_physical_device_properties2::FN_GET_PHYSICAL_DEVICE_MEMORY_PROPERTIES2_KHR,
1426                    ),
1427                )
1428            } else {
1429                None
1430            },
1431            get_physical_device_sparse_image_format_properties2_khr: if instance_enabled
1432                .khr_get_physical_device_properties2
1433            {
1434                std::mem::transmute(
1435                    symbol(
1436                        crate::extensions::khr_get_physical_device_properties2::FN_GET_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_PROPERTIES2_KHR,
1437                    ),
1438                )
1439            } else {
1440                None
1441            },
1442            get_physical_device_external_buffer_properties_khr: if instance_enabled
1443                .khr_external_memory_capabilities
1444            {
1445                std::mem::transmute(
1446                    symbol(
1447                        crate::extensions::khr_external_memory_capabilities::FN_GET_PHYSICAL_DEVICE_EXTERNAL_BUFFER_PROPERTIES_KHR,
1448                    ),
1449                )
1450            } else {
1451                None
1452            },
1453            get_physical_device_external_semaphore_properties_khr: if instance_enabled
1454                .khr_external_semaphore_capabilities
1455            {
1456                std::mem::transmute(
1457                    symbol(
1458                        crate::extensions::khr_external_semaphore_capabilities::FN_GET_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_PROPERTIES_KHR,
1459                    ),
1460                )
1461            } else {
1462                None
1463            },
1464            get_physical_device_external_fence_properties_khr: if instance_enabled
1465                .khr_external_fence_capabilities
1466            {
1467                std::mem::transmute(
1468                    symbol(
1469                        crate::extensions::khr_external_fence_capabilities::FN_GET_PHYSICAL_DEVICE_EXTERNAL_FENCE_PROPERTIES_KHR,
1470                    ),
1471                )
1472            } else {
1473                None
1474            },
1475            enumerate_physical_device_groups_khr: if instance_enabled
1476                .khr_device_group_creation
1477            {
1478                std::mem::transmute(
1479                    symbol(
1480                        crate::extensions::khr_device_group_creation::FN_ENUMERATE_PHYSICAL_DEVICE_GROUPS_KHR,
1481                    ),
1482                )
1483            } else {
1484                None
1485            },
1486            get_physical_device_tool_properties_ext: if instance_enabled.ext_tooling_info
1487            {
1488                std::mem::transmute(
1489                    symbol(
1490                        crate::extensions::ext_tooling_info::FN_GET_PHYSICAL_DEVICE_TOOL_PROPERTIES_EXT,
1491                    ),
1492                )
1493            } else {
1494                None
1495            },
1496            enabled: instance_enabled,
1497        })
1498    }
1499}
1500/// A list of requirements enabled in the device loader.
1501#[derive(Debug)]
1502pub struct DeviceEnabled {
1503    pub huawei_subpass_shading: bool,
1504    pub ext_multi_draw: bool,
1505    pub ext_conditional_rendering: bool,
1506    pub khr_display_swapchain: bool,
1507    pub khr_swapchain: bool,
1508    pub ext_debug_marker: bool,
1509    pub nv_external_memory_win32: bool,
1510    pub nv_device_generated_commands: bool,
1511    pub khr_push_descriptor: bool,
1512    pub khr_external_memory_win32: bool,
1513    pub khr_external_memory_fd: bool,
1514    pub fuchsia_external_memory: bool,
1515    pub nv_external_memory_rdma: bool,
1516    pub khr_external_semaphore_win32: bool,
1517    pub khr_external_semaphore_fd: bool,
1518    pub fuchsia_external_semaphore: bool,
1519    pub khr_external_fence_win32: bool,
1520    pub khr_external_fence_fd: bool,
1521    pub nv_acquire_winrt_display: bool,
1522    pub ext_display_control: bool,
1523    pub ext_hdr_metadata: bool,
1524    pub khr_shared_presentable_image: bool,
1525    pub google_display_timing: bool,
1526    pub nv_clip_space_w_scaling: bool,
1527    pub ext_discard_rectangles: bool,
1528    pub ext_sample_locations: bool,
1529    pub ext_validation_cache: bool,
1530    pub amd_shader_info: bool,
1531    pub amd_display_native_hdr: bool,
1532    pub ext_calibrated_timestamps: bool,
1533    pub ext_external_memory_host: bool,
1534    pub amd_buffer_marker: bool,
1535    pub android_external_memory_android_hardware_buffer: bool,
1536    pub nv_device_diagnostic_checkpoints: bool,
1537    pub ext_transform_feedback: bool,
1538    pub nv_scissor_exclusive: bool,
1539    pub nv_shading_rate_image: bool,
1540    pub nv_mesh_shader: bool,
1541    pub nv_ray_tracing: bool,
1542    pub huawei_invocation_mask: bool,
1543    pub khr_acceleration_structure: bool,
1544    pub khr_ray_tracing_pipeline: bool,
1545    pub nv_cooperative_matrix: bool,
1546    pub khr_ray_tracing_maintenance1: bool,
1547    pub nvx_image_view_handle: bool,
1548    pub ext_full_screen_exclusive: bool,
1549    pub khr_performance_query: bool,
1550    pub ext_image_drm_format_modifier: bool,
1551    pub nv_coverage_reduction_mode: bool,
1552    pub intel_performance_query: bool,
1553    pub khr_pipeline_executable_properties: bool,
1554    pub ext_line_rasterization: bool,
1555    pub khr_deferred_host_operations: bool,
1556    pub ext_extended_dynamic_state2: bool,
1557    pub khr_fragment_shading_rate: bool,
1558    pub nv_fragment_shading_rate_enums: bool,
1559    pub ext_vertex_input_dynamic_state: bool,
1560    pub ext_color_write_enable: bool,
1561    pub khr_synchronization2: bool,
1562    pub khr_video_queue: bool,
1563    pub khr_video_decode_queue: bool,
1564    pub khr_video_encode_queue: bool,
1565    pub nvx_binary_import: bool,
1566    pub ext_pageable_device_local_memory: bool,
1567    pub khr_present_wait: bool,
1568    pub fuchsia_buffer_collection: bool,
1569    pub valve_descriptor_set_host_mapping: bool,
1570    pub ext_image_compression_control: bool,
1571    pub ext_pipeline_properties: bool,
1572    pub ext_host_query_reset: bool,
1573    pub khr_maintenance1: bool,
1574    pub khr_device_group: bool,
1575    pub khr_bind_memory2: bool,
1576    pub khr_descriptor_update_template: bool,
1577    pub khr_get_memory_requirements2: bool,
1578    pub khr_maintenance4: bool,
1579    pub khr_sampler_ycbcr_conversion: bool,
1580    pub khr_maintenance3: bool,
1581    pub khr_create_renderpass2: bool,
1582    pub khr_timeline_semaphore: bool,
1583    pub khr_draw_indirect_count: bool,
1584    pub amd_draw_indirect_count: bool,
1585    pub khr_buffer_device_address: bool,
1586    pub ext_buffer_device_address: bool,
1587    pub ext_tooling_info: bool,
1588    pub ext_extended_dynamic_state: bool,
1589    pub ext_private_data: bool,
1590    pub khr_copy_commands2: bool,
1591    pub khr_dynamic_rendering: bool,
1592}
1593impl DeviceEnabled {
1594    pub(crate) unsafe fn new(enabled_extensions: &[&std::ffi::CStr]) -> DeviceEnabled {
1595        let enabled_extension = |extension| enabled_extensions
1596            .contains(&std::ffi::CStr::from_ptr(extension));
1597        DeviceEnabled {
1598            huawei_subpass_shading: enabled_extension(
1599                crate::extensions::huawei_subpass_shading::HUAWEI_SUBPASS_SHADING_EXTENSION_NAME,
1600            ),
1601            ext_multi_draw: enabled_extension(
1602                crate::extensions::ext_multi_draw::EXT_MULTI_DRAW_EXTENSION_NAME,
1603            ),
1604            ext_conditional_rendering: enabled_extension(
1605                crate::extensions::ext_conditional_rendering::EXT_CONDITIONAL_RENDERING_EXTENSION_NAME,
1606            ),
1607            khr_display_swapchain: enabled_extension(
1608                crate::extensions::khr_display_swapchain::KHR_DISPLAY_SWAPCHAIN_EXTENSION_NAME,
1609            ),
1610            khr_swapchain: enabled_extension(
1611                crate::extensions::khr_swapchain::KHR_SWAPCHAIN_EXTENSION_NAME,
1612            ),
1613            ext_debug_marker: enabled_extension(
1614                crate::extensions::ext_debug_marker::EXT_DEBUG_MARKER_EXTENSION_NAME,
1615            ),
1616            nv_external_memory_win32: enabled_extension(
1617                crate::extensions::nv_external_memory_win32::NV_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME,
1618            ),
1619            nv_device_generated_commands: enabled_extension(
1620                crate::extensions::nv_device_generated_commands::NV_DEVICE_GENERATED_COMMANDS_EXTENSION_NAME,
1621            ),
1622            khr_push_descriptor: enabled_extension(
1623                crate::extensions::khr_push_descriptor::KHR_PUSH_DESCRIPTOR_EXTENSION_NAME,
1624            ),
1625            khr_external_memory_win32: enabled_extension(
1626                crate::extensions::khr_external_memory_win32::KHR_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME,
1627            ),
1628            khr_external_memory_fd: enabled_extension(
1629                crate::extensions::khr_external_memory_fd::KHR_EXTERNAL_MEMORY_FD_EXTENSION_NAME,
1630            ),
1631            fuchsia_external_memory: enabled_extension(
1632                crate::extensions::fuchsia_external_memory::FUCHSIA_EXTERNAL_MEMORY_EXTENSION_NAME,
1633            ),
1634            nv_external_memory_rdma: enabled_extension(
1635                crate::extensions::nv_external_memory_rdma::NV_EXTERNAL_MEMORY_RDMA_EXTENSION_NAME,
1636            ),
1637            khr_external_semaphore_win32: enabled_extension(
1638                crate::extensions::khr_external_semaphore_win32::KHR_EXTERNAL_SEMAPHORE_WIN32_EXTENSION_NAME,
1639            ),
1640            khr_external_semaphore_fd: enabled_extension(
1641                crate::extensions::khr_external_semaphore_fd::KHR_EXTERNAL_SEMAPHORE_FD_EXTENSION_NAME,
1642            ),
1643            fuchsia_external_semaphore: enabled_extension(
1644                crate::extensions::fuchsia_external_semaphore::FUCHSIA_EXTERNAL_SEMAPHORE_EXTENSION_NAME,
1645            ),
1646            khr_external_fence_win32: enabled_extension(
1647                crate::extensions::khr_external_fence_win32::KHR_EXTERNAL_FENCE_WIN32_EXTENSION_NAME,
1648            ),
1649            khr_external_fence_fd: enabled_extension(
1650                crate::extensions::khr_external_fence_fd::KHR_EXTERNAL_FENCE_FD_EXTENSION_NAME,
1651            ),
1652            nv_acquire_winrt_display: enabled_extension(
1653                crate::extensions::nv_acquire_winrt_display::NV_ACQUIRE_WINRT_DISPLAY_EXTENSION_NAME,
1654            ),
1655            ext_display_control: enabled_extension(
1656                crate::extensions::ext_display_control::EXT_DISPLAY_CONTROL_EXTENSION_NAME,
1657            ),
1658            ext_hdr_metadata: enabled_extension(
1659                crate::extensions::ext_hdr_metadata::EXT_HDR_METADATA_EXTENSION_NAME,
1660            ),
1661            khr_shared_presentable_image: enabled_extension(
1662                crate::extensions::khr_shared_presentable_image::KHR_SHARED_PRESENTABLE_IMAGE_EXTENSION_NAME,
1663            ),
1664            google_display_timing: enabled_extension(
1665                crate::extensions::google_display_timing::GOOGLE_DISPLAY_TIMING_EXTENSION_NAME,
1666            ),
1667            nv_clip_space_w_scaling: enabled_extension(
1668                crate::extensions::nv_clip_space_w_scaling::NV_CLIP_SPACE_W_SCALING_EXTENSION_NAME,
1669            ),
1670            ext_discard_rectangles: enabled_extension(
1671                crate::extensions::ext_discard_rectangles::EXT_DISCARD_RECTANGLES_EXTENSION_NAME,
1672            ),
1673            ext_sample_locations: enabled_extension(
1674                crate::extensions::ext_sample_locations::EXT_SAMPLE_LOCATIONS_EXTENSION_NAME,
1675            ),
1676            ext_validation_cache: enabled_extension(
1677                crate::extensions::ext_validation_cache::EXT_VALIDATION_CACHE_EXTENSION_NAME,
1678            ),
1679            amd_shader_info: enabled_extension(
1680                crate::extensions::amd_shader_info::AMD_SHADER_INFO_EXTENSION_NAME,
1681            ),
1682            amd_display_native_hdr: enabled_extension(
1683                crate::extensions::amd_display_native_hdr::AMD_DISPLAY_NATIVE_HDR_EXTENSION_NAME,
1684            ),
1685            ext_calibrated_timestamps: enabled_extension(
1686                crate::extensions::ext_calibrated_timestamps::EXT_CALIBRATED_TIMESTAMPS_EXTENSION_NAME,
1687            ),
1688            ext_external_memory_host: enabled_extension(
1689                crate::extensions::ext_external_memory_host::EXT_EXTERNAL_MEMORY_HOST_EXTENSION_NAME,
1690            ),
1691            amd_buffer_marker: enabled_extension(
1692                crate::extensions::amd_buffer_marker::AMD_BUFFER_MARKER_EXTENSION_NAME,
1693            ),
1694            android_external_memory_android_hardware_buffer: enabled_extension(
1695                crate::extensions::android_external_memory_android_hardware_buffer::ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_EXTENSION_NAME,
1696            ),
1697            nv_device_diagnostic_checkpoints: enabled_extension(
1698                crate::extensions::nv_device_diagnostic_checkpoints::NV_DEVICE_DIAGNOSTIC_CHECKPOINTS_EXTENSION_NAME,
1699            ),
1700            ext_transform_feedback: enabled_extension(
1701                crate::extensions::ext_transform_feedback::EXT_TRANSFORM_FEEDBACK_EXTENSION_NAME,
1702            ),
1703            nv_scissor_exclusive: enabled_extension(
1704                crate::extensions::nv_scissor_exclusive::NV_SCISSOR_EXCLUSIVE_EXTENSION_NAME,
1705            ),
1706            nv_shading_rate_image: enabled_extension(
1707                crate::extensions::nv_shading_rate_image::NV_SHADING_RATE_IMAGE_EXTENSION_NAME,
1708            ),
1709            nv_mesh_shader: enabled_extension(
1710                crate::extensions::nv_mesh_shader::NV_MESH_SHADER_EXTENSION_NAME,
1711            ),
1712            nv_ray_tracing: enabled_extension(
1713                crate::extensions::nv_ray_tracing::NV_RAY_TRACING_EXTENSION_NAME,
1714            ),
1715            huawei_invocation_mask: enabled_extension(
1716                crate::extensions::huawei_invocation_mask::HUAWEI_INVOCATION_MASK_EXTENSION_NAME,
1717            ),
1718            khr_acceleration_structure: enabled_extension(
1719                crate::extensions::khr_acceleration_structure::KHR_ACCELERATION_STRUCTURE_EXTENSION_NAME,
1720            ),
1721            khr_ray_tracing_pipeline: enabled_extension(
1722                crate::extensions::khr_ray_tracing_pipeline::KHR_RAY_TRACING_PIPELINE_EXTENSION_NAME,
1723            ),
1724            nv_cooperative_matrix: enabled_extension(
1725                crate::extensions::nv_cooperative_matrix::NV_COOPERATIVE_MATRIX_EXTENSION_NAME,
1726            ),
1727            khr_ray_tracing_maintenance1: enabled_extension(
1728                crate::extensions::khr_ray_tracing_maintenance1::KHR_RAY_TRACING_MAINTENANCE_1_EXTENSION_NAME,
1729            ),
1730            nvx_image_view_handle: enabled_extension(
1731                crate::extensions::nvx_image_view_handle::NVX_IMAGE_VIEW_HANDLE_EXTENSION_NAME,
1732            ),
1733            ext_full_screen_exclusive: enabled_extension(
1734                crate::extensions::ext_full_screen_exclusive::EXT_FULL_SCREEN_EXCLUSIVE_EXTENSION_NAME,
1735            ),
1736            khr_performance_query: enabled_extension(
1737                crate::extensions::khr_performance_query::KHR_PERFORMANCE_QUERY_EXTENSION_NAME,
1738            ),
1739            ext_image_drm_format_modifier: enabled_extension(
1740                crate::extensions::ext_image_drm_format_modifier::EXT_IMAGE_DRM_FORMAT_MODIFIER_EXTENSION_NAME,
1741            ),
1742            nv_coverage_reduction_mode: enabled_extension(
1743                crate::extensions::nv_coverage_reduction_mode::NV_COVERAGE_REDUCTION_MODE_EXTENSION_NAME,
1744            ),
1745            intel_performance_query: enabled_extension(
1746                crate::extensions::intel_performance_query::INTEL_PERFORMANCE_QUERY_EXTENSION_NAME,
1747            ),
1748            khr_pipeline_executable_properties: enabled_extension(
1749                crate::extensions::khr_pipeline_executable_properties::KHR_PIPELINE_EXECUTABLE_PROPERTIES_EXTENSION_NAME,
1750            ),
1751            ext_line_rasterization: enabled_extension(
1752                crate::extensions::ext_line_rasterization::EXT_LINE_RASTERIZATION_EXTENSION_NAME,
1753            ),
1754            khr_deferred_host_operations: enabled_extension(
1755                crate::extensions::khr_deferred_host_operations::KHR_DEFERRED_HOST_OPERATIONS_EXTENSION_NAME,
1756            ),
1757            ext_extended_dynamic_state2: enabled_extension(
1758                crate::extensions::ext_extended_dynamic_state2::EXT_EXTENDED_DYNAMIC_STATE_2_EXTENSION_NAME,
1759            ),
1760            khr_fragment_shading_rate: enabled_extension(
1761                crate::extensions::khr_fragment_shading_rate::KHR_FRAGMENT_SHADING_RATE_EXTENSION_NAME,
1762            ),
1763            nv_fragment_shading_rate_enums: enabled_extension(
1764                crate::extensions::nv_fragment_shading_rate_enums::NV_FRAGMENT_SHADING_RATE_ENUMS_EXTENSION_NAME,
1765            ),
1766            ext_vertex_input_dynamic_state: enabled_extension(
1767                crate::extensions::ext_vertex_input_dynamic_state::EXT_VERTEX_INPUT_DYNAMIC_STATE_EXTENSION_NAME,
1768            ),
1769            ext_color_write_enable: enabled_extension(
1770                crate::extensions::ext_color_write_enable::EXT_COLOR_WRITE_ENABLE_EXTENSION_NAME,
1771            ),
1772            khr_synchronization2: enabled_extension(
1773                crate::extensions::khr_synchronization2::KHR_SYNCHRONIZATION_2_EXTENSION_NAME,
1774            ),
1775            khr_video_queue: enabled_extension(
1776                crate::extensions::khr_video_queue::KHR_VIDEO_QUEUE_EXTENSION_NAME,
1777            ),
1778            khr_video_decode_queue: enabled_extension(
1779                crate::extensions::khr_video_decode_queue::KHR_VIDEO_DECODE_QUEUE_EXTENSION_NAME,
1780            ),
1781            khr_video_encode_queue: enabled_extension(
1782                crate::extensions::khr_video_encode_queue::KHR_VIDEO_ENCODE_QUEUE_EXTENSION_NAME,
1783            ),
1784            nvx_binary_import: enabled_extension(
1785                crate::extensions::nvx_binary_import::NVX_BINARY_IMPORT_EXTENSION_NAME,
1786            ),
1787            ext_pageable_device_local_memory: enabled_extension(
1788                crate::extensions::ext_pageable_device_local_memory::EXT_PAGEABLE_DEVICE_LOCAL_MEMORY_EXTENSION_NAME,
1789            ),
1790            khr_present_wait: enabled_extension(
1791                crate::extensions::khr_present_wait::KHR_PRESENT_WAIT_EXTENSION_NAME,
1792            ),
1793            fuchsia_buffer_collection: enabled_extension(
1794                crate::extensions::fuchsia_buffer_collection::FUCHSIA_BUFFER_COLLECTION_EXTENSION_NAME,
1795            ),
1796            valve_descriptor_set_host_mapping: enabled_extension(
1797                crate::extensions::valve_descriptor_set_host_mapping::VALVE_DESCRIPTOR_SET_HOST_MAPPING_EXTENSION_NAME,
1798            ),
1799            ext_image_compression_control: enabled_extension(
1800                crate::extensions::ext_image_compression_control::EXT_IMAGE_COMPRESSION_CONTROL_EXTENSION_NAME,
1801            ),
1802            ext_pipeline_properties: enabled_extension(
1803                crate::extensions::ext_pipeline_properties::EXT_PIPELINE_PROPERTIES_EXTENSION_NAME,
1804            ),
1805            ext_host_query_reset: enabled_extension(
1806                crate::extensions::ext_host_query_reset::EXT_HOST_QUERY_RESET_EXTENSION_NAME,
1807            ),
1808            khr_maintenance1: enabled_extension(
1809                crate::extensions::khr_maintenance1::KHR_MAINTENANCE_1_EXTENSION_NAME,
1810            ),
1811            khr_device_group: enabled_extension(
1812                crate::extensions::khr_device_group::KHR_DEVICE_GROUP_EXTENSION_NAME,
1813            ),
1814            khr_bind_memory2: enabled_extension(
1815                crate::extensions::khr_bind_memory2::KHR_BIND_MEMORY_2_EXTENSION_NAME,
1816            ),
1817            khr_descriptor_update_template: enabled_extension(
1818                crate::extensions::khr_descriptor_update_template::KHR_DESCRIPTOR_UPDATE_TEMPLATE_EXTENSION_NAME,
1819            ),
1820            khr_get_memory_requirements2: enabled_extension(
1821                crate::extensions::khr_get_memory_requirements2::KHR_GET_MEMORY_REQUIREMENTS_2_EXTENSION_NAME,
1822            ),
1823            khr_maintenance4: enabled_extension(
1824                crate::extensions::khr_maintenance4::KHR_MAINTENANCE_4_EXTENSION_NAME,
1825            ),
1826            khr_sampler_ycbcr_conversion: enabled_extension(
1827                crate::extensions::khr_sampler_ycbcr_conversion::KHR_SAMPLER_YCBCR_CONVERSION_EXTENSION_NAME,
1828            ),
1829            khr_maintenance3: enabled_extension(
1830                crate::extensions::khr_maintenance3::KHR_MAINTENANCE_3_EXTENSION_NAME,
1831            ),
1832            khr_create_renderpass2: enabled_extension(
1833                crate::extensions::khr_create_renderpass2::KHR_CREATE_RENDERPASS_2_EXTENSION_NAME,
1834            ),
1835            khr_timeline_semaphore: enabled_extension(
1836                crate::extensions::khr_timeline_semaphore::KHR_TIMELINE_SEMAPHORE_EXTENSION_NAME,
1837            ),
1838            khr_draw_indirect_count: enabled_extension(
1839                crate::extensions::khr_draw_indirect_count::KHR_DRAW_INDIRECT_COUNT_EXTENSION_NAME,
1840            ),
1841            amd_draw_indirect_count: enabled_extension(
1842                crate::extensions::amd_draw_indirect_count::AMD_DRAW_INDIRECT_COUNT_EXTENSION_NAME,
1843            ),
1844            khr_buffer_device_address: enabled_extension(
1845                crate::extensions::khr_buffer_device_address::KHR_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME,
1846            ),
1847            ext_buffer_device_address: enabled_extension(
1848                crate::extensions::ext_buffer_device_address::EXT_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME,
1849            ),
1850            ext_tooling_info: enabled_extension(
1851                crate::extensions::ext_tooling_info::EXT_TOOLING_INFO_EXTENSION_NAME,
1852            ),
1853            ext_extended_dynamic_state: enabled_extension(
1854                crate::extensions::ext_extended_dynamic_state::EXT_EXTENDED_DYNAMIC_STATE_EXTENSION_NAME,
1855            ),
1856            ext_private_data: enabled_extension(
1857                crate::extensions::ext_private_data::EXT_PRIVATE_DATA_EXTENSION_NAME,
1858            ),
1859            khr_copy_commands2: enabled_extension(
1860                crate::extensions::khr_copy_commands2::KHR_COPY_COMMANDS_2_EXTENSION_NAME,
1861            ),
1862            khr_dynamic_rendering: enabled_extension(
1863                crate::extensions::khr_dynamic_rendering::KHR_DYNAMIC_RENDERING_EXTENSION_NAME,
1864            ),
1865        }
1866    }
1867}
1868/// Loader for device commands.
1869///
1870/// This will consume lots of stack space, so consider putting it into
1871/// a heap pointer type such as `Box` or `Arc`.
1872///
1873/// To create a new loader, call [`DeviceLoader::new`].
1874pub struct DeviceLoader {
1875    #[allow(dead_code)]
1876    parent: std::sync::Weak<()>,
1877    pub handle: crate::vk1_0::Device,
1878    pub(crate) enabled: DeviceEnabled,
1879    pub get_device_proc_addr: Option<vk1_0::PFN_vkGetDeviceProcAddr>,
1880    pub destroy_device: Option<vk1_0::PFN_vkDestroyDevice>,
1881    pub get_device_queue: Option<vk1_0::PFN_vkGetDeviceQueue>,
1882    pub queue_submit: Option<vk1_0::PFN_vkQueueSubmit>,
1883    pub queue_wait_idle: Option<vk1_0::PFN_vkQueueWaitIdle>,
1884    pub device_wait_idle: Option<vk1_0::PFN_vkDeviceWaitIdle>,
1885    pub allocate_memory: Option<vk1_0::PFN_vkAllocateMemory>,
1886    pub free_memory: Option<vk1_0::PFN_vkFreeMemory>,
1887    pub map_memory: Option<vk1_0::PFN_vkMapMemory>,
1888    pub unmap_memory: Option<vk1_0::PFN_vkUnmapMemory>,
1889    pub flush_mapped_memory_ranges: Option<vk1_0::PFN_vkFlushMappedMemoryRanges>,
1890    pub invalidate_mapped_memory_ranges: Option<
1891        vk1_0::PFN_vkInvalidateMappedMemoryRanges,
1892    >,
1893    pub get_device_memory_commitment: Option<vk1_0::PFN_vkGetDeviceMemoryCommitment>,
1894    pub get_buffer_memory_requirements: Option<vk1_0::PFN_vkGetBufferMemoryRequirements>,
1895    pub bind_buffer_memory: Option<vk1_0::PFN_vkBindBufferMemory>,
1896    pub get_image_memory_requirements: Option<vk1_0::PFN_vkGetImageMemoryRequirements>,
1897    pub bind_image_memory: Option<vk1_0::PFN_vkBindImageMemory>,
1898    pub get_image_sparse_memory_requirements: Option<
1899        vk1_0::PFN_vkGetImageSparseMemoryRequirements,
1900    >,
1901    pub queue_bind_sparse: Option<vk1_0::PFN_vkQueueBindSparse>,
1902    pub create_fence: Option<vk1_0::PFN_vkCreateFence>,
1903    pub destroy_fence: Option<vk1_0::PFN_vkDestroyFence>,
1904    pub reset_fences: Option<vk1_0::PFN_vkResetFences>,
1905    pub get_fence_status: Option<vk1_0::PFN_vkGetFenceStatus>,
1906    pub wait_for_fences: Option<vk1_0::PFN_vkWaitForFences>,
1907    pub create_semaphore: Option<vk1_0::PFN_vkCreateSemaphore>,
1908    pub destroy_semaphore: Option<vk1_0::PFN_vkDestroySemaphore>,
1909    pub create_event: Option<vk1_0::PFN_vkCreateEvent>,
1910    pub destroy_event: Option<vk1_0::PFN_vkDestroyEvent>,
1911    pub get_event_status: Option<vk1_0::PFN_vkGetEventStatus>,
1912    pub set_event: Option<vk1_0::PFN_vkSetEvent>,
1913    pub reset_event: Option<vk1_0::PFN_vkResetEvent>,
1914    pub create_query_pool: Option<vk1_0::PFN_vkCreateQueryPool>,
1915    pub destroy_query_pool: Option<vk1_0::PFN_vkDestroyQueryPool>,
1916    pub get_query_pool_results: Option<vk1_0::PFN_vkGetQueryPoolResults>,
1917    pub reset_query_pool: Option<vk1_2::PFN_vkResetQueryPool>,
1918    pub create_buffer: Option<vk1_0::PFN_vkCreateBuffer>,
1919    pub destroy_buffer: Option<vk1_0::PFN_vkDestroyBuffer>,
1920    pub create_buffer_view: Option<vk1_0::PFN_vkCreateBufferView>,
1921    pub destroy_buffer_view: Option<vk1_0::PFN_vkDestroyBufferView>,
1922    pub create_image: Option<vk1_0::PFN_vkCreateImage>,
1923    pub destroy_image: Option<vk1_0::PFN_vkDestroyImage>,
1924    pub get_image_subresource_layout: Option<vk1_0::PFN_vkGetImageSubresourceLayout>,
1925    pub create_image_view: Option<vk1_0::PFN_vkCreateImageView>,
1926    pub destroy_image_view: Option<vk1_0::PFN_vkDestroyImageView>,
1927    pub create_shader_module: Option<vk1_0::PFN_vkCreateShaderModule>,
1928    pub destroy_shader_module: Option<vk1_0::PFN_vkDestroyShaderModule>,
1929    pub create_pipeline_cache: Option<vk1_0::PFN_vkCreatePipelineCache>,
1930    pub destroy_pipeline_cache: Option<vk1_0::PFN_vkDestroyPipelineCache>,
1931    pub get_pipeline_cache_data: Option<vk1_0::PFN_vkGetPipelineCacheData>,
1932    pub merge_pipeline_caches: Option<vk1_0::PFN_vkMergePipelineCaches>,
1933    pub create_graphics_pipelines: Option<vk1_0::PFN_vkCreateGraphicsPipelines>,
1934    pub create_compute_pipelines: Option<vk1_0::PFN_vkCreateComputePipelines>,
1935    pub get_device_subpass_shading_max_workgroup_size_huawei: Option<
1936        extensions::huawei_subpass_shading::PFN_vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI,
1937    >,
1938    pub destroy_pipeline: Option<vk1_0::PFN_vkDestroyPipeline>,
1939    pub create_pipeline_layout: Option<vk1_0::PFN_vkCreatePipelineLayout>,
1940    pub destroy_pipeline_layout: Option<vk1_0::PFN_vkDestroyPipelineLayout>,
1941    pub create_sampler: Option<vk1_0::PFN_vkCreateSampler>,
1942    pub destroy_sampler: Option<vk1_0::PFN_vkDestroySampler>,
1943    pub create_descriptor_set_layout: Option<vk1_0::PFN_vkCreateDescriptorSetLayout>,
1944    pub destroy_descriptor_set_layout: Option<vk1_0::PFN_vkDestroyDescriptorSetLayout>,
1945    pub create_descriptor_pool: Option<vk1_0::PFN_vkCreateDescriptorPool>,
1946    pub destroy_descriptor_pool: Option<vk1_0::PFN_vkDestroyDescriptorPool>,
1947    pub reset_descriptor_pool: Option<vk1_0::PFN_vkResetDescriptorPool>,
1948    pub allocate_descriptor_sets: Option<vk1_0::PFN_vkAllocateDescriptorSets>,
1949    pub free_descriptor_sets: Option<vk1_0::PFN_vkFreeDescriptorSets>,
1950    pub update_descriptor_sets: Option<vk1_0::PFN_vkUpdateDescriptorSets>,
1951    pub create_framebuffer: Option<vk1_0::PFN_vkCreateFramebuffer>,
1952    pub destroy_framebuffer: Option<vk1_0::PFN_vkDestroyFramebuffer>,
1953    pub create_render_pass: Option<vk1_0::PFN_vkCreateRenderPass>,
1954    pub destroy_render_pass: Option<vk1_0::PFN_vkDestroyRenderPass>,
1955    pub get_render_area_granularity: Option<vk1_0::PFN_vkGetRenderAreaGranularity>,
1956    pub create_command_pool: Option<vk1_0::PFN_vkCreateCommandPool>,
1957    pub destroy_command_pool: Option<vk1_0::PFN_vkDestroyCommandPool>,
1958    pub reset_command_pool: Option<vk1_0::PFN_vkResetCommandPool>,
1959    pub allocate_command_buffers: Option<vk1_0::PFN_vkAllocateCommandBuffers>,
1960    pub free_command_buffers: Option<vk1_0::PFN_vkFreeCommandBuffers>,
1961    pub begin_command_buffer: Option<vk1_0::PFN_vkBeginCommandBuffer>,
1962    pub end_command_buffer: Option<vk1_0::PFN_vkEndCommandBuffer>,
1963    pub reset_command_buffer: Option<vk1_0::PFN_vkResetCommandBuffer>,
1964    pub cmd_bind_pipeline: Option<vk1_0::PFN_vkCmdBindPipeline>,
1965    pub cmd_set_viewport: Option<vk1_0::PFN_vkCmdSetViewport>,
1966    pub cmd_set_scissor: Option<vk1_0::PFN_vkCmdSetScissor>,
1967    pub cmd_set_line_width: Option<vk1_0::PFN_vkCmdSetLineWidth>,
1968    pub cmd_set_depth_bias: Option<vk1_0::PFN_vkCmdSetDepthBias>,
1969    pub cmd_set_blend_constants: Option<vk1_0::PFN_vkCmdSetBlendConstants>,
1970    pub cmd_set_depth_bounds: Option<vk1_0::PFN_vkCmdSetDepthBounds>,
1971    pub cmd_set_stencil_compare_mask: Option<vk1_0::PFN_vkCmdSetStencilCompareMask>,
1972    pub cmd_set_stencil_write_mask: Option<vk1_0::PFN_vkCmdSetStencilWriteMask>,
1973    pub cmd_set_stencil_reference: Option<vk1_0::PFN_vkCmdSetStencilReference>,
1974    pub cmd_bind_descriptor_sets: Option<vk1_0::PFN_vkCmdBindDescriptorSets>,
1975    pub cmd_bind_index_buffer: Option<vk1_0::PFN_vkCmdBindIndexBuffer>,
1976    pub cmd_bind_vertex_buffers: Option<vk1_0::PFN_vkCmdBindVertexBuffers>,
1977    pub cmd_draw: Option<vk1_0::PFN_vkCmdDraw>,
1978    pub cmd_draw_indexed: Option<vk1_0::PFN_vkCmdDrawIndexed>,
1979    pub cmd_draw_multi_ext: Option<extensions::ext_multi_draw::PFN_vkCmdDrawMultiEXT>,
1980    pub cmd_draw_multi_indexed_ext: Option<
1981        extensions::ext_multi_draw::PFN_vkCmdDrawMultiIndexedEXT,
1982    >,
1983    pub cmd_draw_indirect: Option<vk1_0::PFN_vkCmdDrawIndirect>,
1984    pub cmd_draw_indexed_indirect: Option<vk1_0::PFN_vkCmdDrawIndexedIndirect>,
1985    pub cmd_dispatch: Option<vk1_0::PFN_vkCmdDispatch>,
1986    pub cmd_dispatch_indirect: Option<vk1_0::PFN_vkCmdDispatchIndirect>,
1987    pub cmd_subpass_shading_huawei: Option<
1988        extensions::huawei_subpass_shading::PFN_vkCmdSubpassShadingHUAWEI,
1989    >,
1990    pub cmd_copy_buffer: Option<vk1_0::PFN_vkCmdCopyBuffer>,
1991    pub cmd_copy_image: Option<vk1_0::PFN_vkCmdCopyImage>,
1992    pub cmd_blit_image: Option<vk1_0::PFN_vkCmdBlitImage>,
1993    pub cmd_copy_buffer_to_image: Option<vk1_0::PFN_vkCmdCopyBufferToImage>,
1994    pub cmd_copy_image_to_buffer: Option<vk1_0::PFN_vkCmdCopyImageToBuffer>,
1995    pub cmd_update_buffer: Option<vk1_0::PFN_vkCmdUpdateBuffer>,
1996    pub cmd_fill_buffer: Option<vk1_0::PFN_vkCmdFillBuffer>,
1997    pub cmd_clear_color_image: Option<vk1_0::PFN_vkCmdClearColorImage>,
1998    pub cmd_clear_depth_stencil_image: Option<vk1_0::PFN_vkCmdClearDepthStencilImage>,
1999    pub cmd_clear_attachments: Option<vk1_0::PFN_vkCmdClearAttachments>,
2000    pub cmd_resolve_image: Option<vk1_0::PFN_vkCmdResolveImage>,
2001    pub cmd_set_event: Option<vk1_0::PFN_vkCmdSetEvent>,
2002    pub cmd_reset_event: Option<vk1_0::PFN_vkCmdResetEvent>,
2003    pub cmd_wait_events: Option<vk1_0::PFN_vkCmdWaitEvents>,
2004    pub cmd_pipeline_barrier: Option<vk1_0::PFN_vkCmdPipelineBarrier>,
2005    pub cmd_begin_query: Option<vk1_0::PFN_vkCmdBeginQuery>,
2006    pub cmd_end_query: Option<vk1_0::PFN_vkCmdEndQuery>,
2007    pub cmd_begin_conditional_rendering_ext: Option<
2008        extensions::ext_conditional_rendering::PFN_vkCmdBeginConditionalRenderingEXT,
2009    >,
2010    pub cmd_end_conditional_rendering_ext: Option<
2011        extensions::ext_conditional_rendering::PFN_vkCmdEndConditionalRenderingEXT,
2012    >,
2013    pub cmd_reset_query_pool: Option<vk1_0::PFN_vkCmdResetQueryPool>,
2014    pub cmd_write_timestamp: Option<vk1_0::PFN_vkCmdWriteTimestamp>,
2015    pub cmd_copy_query_pool_results: Option<vk1_0::PFN_vkCmdCopyQueryPoolResults>,
2016    pub cmd_push_constants: Option<vk1_0::PFN_vkCmdPushConstants>,
2017    pub cmd_begin_render_pass: Option<vk1_0::PFN_vkCmdBeginRenderPass>,
2018    pub cmd_next_subpass: Option<vk1_0::PFN_vkCmdNextSubpass>,
2019    pub cmd_end_render_pass: Option<vk1_0::PFN_vkCmdEndRenderPass>,
2020    pub cmd_execute_commands: Option<vk1_0::PFN_vkCmdExecuteCommands>,
2021    pub create_shared_swapchains_khr: Option<
2022        extensions::khr_display_swapchain::PFN_vkCreateSharedSwapchainsKHR,
2023    >,
2024    pub create_swapchain_khr: Option<
2025        extensions::khr_swapchain::PFN_vkCreateSwapchainKHR,
2026    >,
2027    pub destroy_swapchain_khr: Option<
2028        extensions::khr_swapchain::PFN_vkDestroySwapchainKHR,
2029    >,
2030    pub get_swapchain_images_khr: Option<
2031        extensions::khr_swapchain::PFN_vkGetSwapchainImagesKHR,
2032    >,
2033    pub acquire_next_image_khr: Option<
2034        extensions::khr_swapchain::PFN_vkAcquireNextImageKHR,
2035    >,
2036    pub queue_present_khr: Option<extensions::khr_swapchain::PFN_vkQueuePresentKHR>,
2037    pub debug_marker_set_object_name_ext: Option<
2038        extensions::ext_debug_marker::PFN_vkDebugMarkerSetObjectNameEXT,
2039    >,
2040    pub debug_marker_set_object_tag_ext: Option<
2041        extensions::ext_debug_marker::PFN_vkDebugMarkerSetObjectTagEXT,
2042    >,
2043    pub cmd_debug_marker_begin_ext: Option<
2044        extensions::ext_debug_marker::PFN_vkCmdDebugMarkerBeginEXT,
2045    >,
2046    pub cmd_debug_marker_end_ext: Option<
2047        extensions::ext_debug_marker::PFN_vkCmdDebugMarkerEndEXT,
2048    >,
2049    pub cmd_debug_marker_insert_ext: Option<
2050        extensions::ext_debug_marker::PFN_vkCmdDebugMarkerInsertEXT,
2051    >,
2052    pub get_memory_win32_handle_nv: Option<
2053        extensions::nv_external_memory_win32::PFN_vkGetMemoryWin32HandleNV,
2054    >,
2055    pub cmd_execute_generated_commands_nv: Option<
2056        extensions::nv_device_generated_commands::PFN_vkCmdExecuteGeneratedCommandsNV,
2057    >,
2058    pub cmd_preprocess_generated_commands_nv: Option<
2059        extensions::nv_device_generated_commands::PFN_vkCmdPreprocessGeneratedCommandsNV,
2060    >,
2061    pub cmd_bind_pipeline_shader_group_nv: Option<
2062        extensions::nv_device_generated_commands::PFN_vkCmdBindPipelineShaderGroupNV,
2063    >,
2064    pub get_generated_commands_memory_requirements_nv: Option<
2065        extensions::nv_device_generated_commands::PFN_vkGetGeneratedCommandsMemoryRequirementsNV,
2066    >,
2067    pub create_indirect_commands_layout_nv: Option<
2068        extensions::nv_device_generated_commands::PFN_vkCreateIndirectCommandsLayoutNV,
2069    >,
2070    pub destroy_indirect_commands_layout_nv: Option<
2071        extensions::nv_device_generated_commands::PFN_vkDestroyIndirectCommandsLayoutNV,
2072    >,
2073    pub cmd_push_descriptor_set_khr: Option<
2074        extensions::khr_push_descriptor::PFN_vkCmdPushDescriptorSetKHR,
2075    >,
2076    pub trim_command_pool: Option<vk1_1::PFN_vkTrimCommandPool>,
2077    pub get_memory_win32_handle_khr: Option<
2078        extensions::khr_external_memory_win32::PFN_vkGetMemoryWin32HandleKHR,
2079    >,
2080    pub get_memory_win32_handle_properties_khr: Option<
2081        extensions::khr_external_memory_win32::PFN_vkGetMemoryWin32HandlePropertiesKHR,
2082    >,
2083    pub get_memory_fd_khr: Option<
2084        extensions::khr_external_memory_fd::PFN_vkGetMemoryFdKHR,
2085    >,
2086    pub get_memory_fd_properties_khr: Option<
2087        extensions::khr_external_memory_fd::PFN_vkGetMemoryFdPropertiesKHR,
2088    >,
2089    pub get_memory_zircon_handle_fuchsia: Option<
2090        extensions::fuchsia_external_memory::PFN_vkGetMemoryZirconHandleFUCHSIA,
2091    >,
2092    pub get_memory_zircon_handle_properties_fuchsia: Option<
2093        extensions::fuchsia_external_memory::PFN_vkGetMemoryZirconHandlePropertiesFUCHSIA,
2094    >,
2095    pub get_memory_remote_address_nv: Option<
2096        extensions::nv_external_memory_rdma::PFN_vkGetMemoryRemoteAddressNV,
2097    >,
2098    pub get_semaphore_win32_handle_khr: Option<
2099        extensions::khr_external_semaphore_win32::PFN_vkGetSemaphoreWin32HandleKHR,
2100    >,
2101    pub import_semaphore_win32_handle_khr: Option<
2102        extensions::khr_external_semaphore_win32::PFN_vkImportSemaphoreWin32HandleKHR,
2103    >,
2104    pub get_semaphore_fd_khr: Option<
2105        extensions::khr_external_semaphore_fd::PFN_vkGetSemaphoreFdKHR,
2106    >,
2107    pub import_semaphore_fd_khr: Option<
2108        extensions::khr_external_semaphore_fd::PFN_vkImportSemaphoreFdKHR,
2109    >,
2110    pub get_semaphore_zircon_handle_fuchsia: Option<
2111        extensions::fuchsia_external_semaphore::PFN_vkGetSemaphoreZirconHandleFUCHSIA,
2112    >,
2113    pub import_semaphore_zircon_handle_fuchsia: Option<
2114        extensions::fuchsia_external_semaphore::PFN_vkImportSemaphoreZirconHandleFUCHSIA,
2115    >,
2116    pub get_fence_win32_handle_khr: Option<
2117        extensions::khr_external_fence_win32::PFN_vkGetFenceWin32HandleKHR,
2118    >,
2119    pub import_fence_win32_handle_khr: Option<
2120        extensions::khr_external_fence_win32::PFN_vkImportFenceWin32HandleKHR,
2121    >,
2122    pub get_fence_fd_khr: Option<extensions::khr_external_fence_fd::PFN_vkGetFenceFdKHR>,
2123    pub import_fence_fd_khr: Option<
2124        extensions::khr_external_fence_fd::PFN_vkImportFenceFdKHR,
2125    >,
2126    pub display_power_control_ext: Option<
2127        extensions::ext_display_control::PFN_vkDisplayPowerControlEXT,
2128    >,
2129    pub register_device_event_ext: Option<
2130        extensions::ext_display_control::PFN_vkRegisterDeviceEventEXT,
2131    >,
2132    pub register_display_event_ext: Option<
2133        extensions::ext_display_control::PFN_vkRegisterDisplayEventEXT,
2134    >,
2135    pub get_swapchain_counter_ext: Option<
2136        extensions::ext_display_control::PFN_vkGetSwapchainCounterEXT,
2137    >,
2138    pub get_device_group_peer_memory_features: Option<
2139        vk1_1::PFN_vkGetDeviceGroupPeerMemoryFeatures,
2140    >,
2141    pub bind_buffer_memory2: Option<vk1_1::PFN_vkBindBufferMemory2>,
2142    pub bind_image_memory2: Option<vk1_1::PFN_vkBindImageMemory2>,
2143    pub cmd_set_device_mask: Option<vk1_1::PFN_vkCmdSetDeviceMask>,
2144    pub get_device_group_present_capabilities_khr: Option<
2145        extensions::khr_swapchain::PFN_vkGetDeviceGroupPresentCapabilitiesKHR,
2146    >,
2147    pub get_device_group_surface_present_modes_khr: Option<
2148        extensions::khr_swapchain::PFN_vkGetDeviceGroupSurfacePresentModesKHR,
2149    >,
2150    pub acquire_next_image2_khr: Option<
2151        extensions::khr_swapchain::PFN_vkAcquireNextImage2KHR,
2152    >,
2153    pub cmd_dispatch_base: Option<vk1_1::PFN_vkCmdDispatchBase>,
2154    pub create_descriptor_update_template: Option<
2155        vk1_1::PFN_vkCreateDescriptorUpdateTemplate,
2156    >,
2157    pub destroy_descriptor_update_template: Option<
2158        vk1_1::PFN_vkDestroyDescriptorUpdateTemplate,
2159    >,
2160    pub update_descriptor_set_with_template: Option<
2161        vk1_1::PFN_vkUpdateDescriptorSetWithTemplate,
2162    >,
2163    pub cmd_push_descriptor_set_with_template_khr: Option<
2164        extensions::khr_push_descriptor::PFN_vkCmdPushDescriptorSetWithTemplateKHR,
2165    >,
2166    pub set_hdr_metadata_ext: Option<
2167        extensions::ext_hdr_metadata::PFN_vkSetHdrMetadataEXT,
2168    >,
2169    pub get_swapchain_status_khr: Option<
2170        extensions::khr_shared_presentable_image::PFN_vkGetSwapchainStatusKHR,
2171    >,
2172    pub get_refresh_cycle_duration_google: Option<
2173        extensions::google_display_timing::PFN_vkGetRefreshCycleDurationGOOGLE,
2174    >,
2175    pub get_past_presentation_timing_google: Option<
2176        extensions::google_display_timing::PFN_vkGetPastPresentationTimingGOOGLE,
2177    >,
2178    pub cmd_set_viewport_w_scaling_nv: Option<
2179        extensions::nv_clip_space_w_scaling::PFN_vkCmdSetViewportWScalingNV,
2180    >,
2181    pub cmd_set_discard_rectangle_ext: Option<
2182        extensions::ext_discard_rectangles::PFN_vkCmdSetDiscardRectangleEXT,
2183    >,
2184    pub cmd_set_sample_locations_ext: Option<
2185        extensions::ext_sample_locations::PFN_vkCmdSetSampleLocationsEXT,
2186    >,
2187    pub get_buffer_memory_requirements2: Option<
2188        vk1_1::PFN_vkGetBufferMemoryRequirements2,
2189    >,
2190    pub get_image_memory_requirements2: Option<vk1_1::PFN_vkGetImageMemoryRequirements2>,
2191    pub get_image_sparse_memory_requirements2: Option<
2192        vk1_1::PFN_vkGetImageSparseMemoryRequirements2,
2193    >,
2194    pub get_device_buffer_memory_requirements: Option<
2195        vk1_3::PFN_vkGetDeviceBufferMemoryRequirements,
2196    >,
2197    pub get_device_image_memory_requirements: Option<
2198        vk1_3::PFN_vkGetDeviceImageMemoryRequirements,
2199    >,
2200    pub get_device_image_sparse_memory_requirements: Option<
2201        vk1_3::PFN_vkGetDeviceImageSparseMemoryRequirements,
2202    >,
2203    pub create_sampler_ycbcr_conversion: Option<
2204        vk1_1::PFN_vkCreateSamplerYcbcrConversion,
2205    >,
2206    pub destroy_sampler_ycbcr_conversion: Option<
2207        vk1_1::PFN_vkDestroySamplerYcbcrConversion,
2208    >,
2209    pub get_device_queue2: Option<vk1_1::PFN_vkGetDeviceQueue2>,
2210    pub create_validation_cache_ext: Option<
2211        extensions::ext_validation_cache::PFN_vkCreateValidationCacheEXT,
2212    >,
2213    pub destroy_validation_cache_ext: Option<
2214        extensions::ext_validation_cache::PFN_vkDestroyValidationCacheEXT,
2215    >,
2216    pub get_validation_cache_data_ext: Option<
2217        extensions::ext_validation_cache::PFN_vkGetValidationCacheDataEXT,
2218    >,
2219    pub merge_validation_caches_ext: Option<
2220        extensions::ext_validation_cache::PFN_vkMergeValidationCachesEXT,
2221    >,
2222    pub get_descriptor_set_layout_support: Option<
2223        vk1_1::PFN_vkGetDescriptorSetLayoutSupport,
2224    >,
2225    pub get_shader_info_amd: Option<extensions::amd_shader_info::PFN_vkGetShaderInfoAMD>,
2226    pub set_local_dimming_amd: Option<
2227        extensions::amd_display_native_hdr::PFN_vkSetLocalDimmingAMD,
2228    >,
2229    pub get_calibrated_timestamps_ext: Option<
2230        extensions::ext_calibrated_timestamps::PFN_vkGetCalibratedTimestampsEXT,
2231    >,
2232    pub set_debug_utils_object_name_ext: Option<
2233        extensions::ext_debug_utils::PFN_vkSetDebugUtilsObjectNameEXT,
2234    >,
2235    pub set_debug_utils_object_tag_ext: Option<
2236        extensions::ext_debug_utils::PFN_vkSetDebugUtilsObjectTagEXT,
2237    >,
2238    pub queue_begin_debug_utils_label_ext: Option<
2239        extensions::ext_debug_utils::PFN_vkQueueBeginDebugUtilsLabelEXT,
2240    >,
2241    pub queue_end_debug_utils_label_ext: Option<
2242        extensions::ext_debug_utils::PFN_vkQueueEndDebugUtilsLabelEXT,
2243    >,
2244    pub queue_insert_debug_utils_label_ext: Option<
2245        extensions::ext_debug_utils::PFN_vkQueueInsertDebugUtilsLabelEXT,
2246    >,
2247    pub cmd_begin_debug_utils_label_ext: Option<
2248        extensions::ext_debug_utils::PFN_vkCmdBeginDebugUtilsLabelEXT,
2249    >,
2250    pub cmd_end_debug_utils_label_ext: Option<
2251        extensions::ext_debug_utils::PFN_vkCmdEndDebugUtilsLabelEXT,
2252    >,
2253    pub cmd_insert_debug_utils_label_ext: Option<
2254        extensions::ext_debug_utils::PFN_vkCmdInsertDebugUtilsLabelEXT,
2255    >,
2256    pub get_memory_host_pointer_properties_ext: Option<
2257        extensions::ext_external_memory_host::PFN_vkGetMemoryHostPointerPropertiesEXT,
2258    >,
2259    pub cmd_write_buffer_marker_amd: Option<
2260        extensions::amd_buffer_marker::PFN_vkCmdWriteBufferMarkerAMD,
2261    >,
2262    pub create_render_pass2: Option<vk1_2::PFN_vkCreateRenderPass2>,
2263    pub cmd_begin_render_pass2: Option<vk1_2::PFN_vkCmdBeginRenderPass2>,
2264    pub cmd_next_subpass2: Option<vk1_2::PFN_vkCmdNextSubpass2>,
2265    pub cmd_end_render_pass2: Option<vk1_2::PFN_vkCmdEndRenderPass2>,
2266    pub get_semaphore_counter_value: Option<vk1_2::PFN_vkGetSemaphoreCounterValue>,
2267    pub wait_semaphores: Option<vk1_2::PFN_vkWaitSemaphores>,
2268    pub signal_semaphore: Option<vk1_2::PFN_vkSignalSemaphore>,
2269    pub get_android_hardware_buffer_properties_android: Option<
2270        extensions::android_external_memory_android_hardware_buffer::PFN_vkGetAndroidHardwareBufferPropertiesANDROID,
2271    >,
2272    pub get_memory_android_hardware_buffer_android: Option<
2273        extensions::android_external_memory_android_hardware_buffer::PFN_vkGetMemoryAndroidHardwareBufferANDROID,
2274    >,
2275    pub cmd_draw_indirect_count: Option<vk1_2::PFN_vkCmdDrawIndirectCount>,
2276    pub cmd_draw_indexed_indirect_count: Option<
2277        vk1_2::PFN_vkCmdDrawIndexedIndirectCount,
2278    >,
2279    pub cmd_set_checkpoint_nv: Option<
2280        extensions::nv_device_diagnostic_checkpoints::PFN_vkCmdSetCheckpointNV,
2281    >,
2282    pub get_queue_checkpoint_data_nv: Option<
2283        extensions::nv_device_diagnostic_checkpoints::PFN_vkGetQueueCheckpointDataNV,
2284    >,
2285    pub cmd_bind_transform_feedback_buffers_ext: Option<
2286        extensions::ext_transform_feedback::PFN_vkCmdBindTransformFeedbackBuffersEXT,
2287    >,
2288    pub cmd_begin_transform_feedback_ext: Option<
2289        extensions::ext_transform_feedback::PFN_vkCmdBeginTransformFeedbackEXT,
2290    >,
2291    pub cmd_end_transform_feedback_ext: Option<
2292        extensions::ext_transform_feedback::PFN_vkCmdEndTransformFeedbackEXT,
2293    >,
2294    pub cmd_begin_query_indexed_ext: Option<
2295        extensions::ext_transform_feedback::PFN_vkCmdBeginQueryIndexedEXT,
2296    >,
2297    pub cmd_end_query_indexed_ext: Option<
2298        extensions::ext_transform_feedback::PFN_vkCmdEndQueryIndexedEXT,
2299    >,
2300    pub cmd_draw_indirect_byte_count_ext: Option<
2301        extensions::ext_transform_feedback::PFN_vkCmdDrawIndirectByteCountEXT,
2302    >,
2303    pub cmd_set_exclusive_scissor_nv: Option<
2304        extensions::nv_scissor_exclusive::PFN_vkCmdSetExclusiveScissorNV,
2305    >,
2306    pub cmd_bind_shading_rate_image_nv: Option<
2307        extensions::nv_shading_rate_image::PFN_vkCmdBindShadingRateImageNV,
2308    >,
2309    pub cmd_set_viewport_shading_rate_palette_nv: Option<
2310        extensions::nv_shading_rate_image::PFN_vkCmdSetViewportShadingRatePaletteNV,
2311    >,
2312    pub cmd_set_coarse_sample_order_nv: Option<
2313        extensions::nv_shading_rate_image::PFN_vkCmdSetCoarseSampleOrderNV,
2314    >,
2315    pub cmd_draw_mesh_tasks_nv: Option<
2316        extensions::nv_mesh_shader::PFN_vkCmdDrawMeshTasksNV,
2317    >,
2318    pub cmd_draw_mesh_tasks_indirect_nv: Option<
2319        extensions::nv_mesh_shader::PFN_vkCmdDrawMeshTasksIndirectNV,
2320    >,
2321    pub cmd_draw_mesh_tasks_indirect_count_nv: Option<
2322        extensions::nv_mesh_shader::PFN_vkCmdDrawMeshTasksIndirectCountNV,
2323    >,
2324    pub compile_deferred_nv: Option<extensions::nv_ray_tracing::PFN_vkCompileDeferredNV>,
2325    pub create_acceleration_structure_nv: Option<
2326        extensions::nv_ray_tracing::PFN_vkCreateAccelerationStructureNV,
2327    >,
2328    pub cmd_bind_invocation_mask_huawei: Option<
2329        extensions::huawei_invocation_mask::PFN_vkCmdBindInvocationMaskHUAWEI,
2330    >,
2331    pub destroy_acceleration_structure_khr: Option<
2332        extensions::khr_acceleration_structure::PFN_vkDestroyAccelerationStructureKHR,
2333    >,
2334    pub destroy_acceleration_structure_nv: Option<
2335        extensions::nv_ray_tracing::PFN_vkDestroyAccelerationStructureNV,
2336    >,
2337    pub get_acceleration_structure_memory_requirements_nv: Option<
2338        extensions::nv_ray_tracing::PFN_vkGetAccelerationStructureMemoryRequirementsNV,
2339    >,
2340    pub bind_acceleration_structure_memory_nv: Option<
2341        extensions::nv_ray_tracing::PFN_vkBindAccelerationStructureMemoryNV,
2342    >,
2343    pub cmd_copy_acceleration_structure_nv: Option<
2344        extensions::nv_ray_tracing::PFN_vkCmdCopyAccelerationStructureNV,
2345    >,
2346    pub cmd_copy_acceleration_structure_khr: Option<
2347        extensions::khr_acceleration_structure::PFN_vkCmdCopyAccelerationStructureKHR,
2348    >,
2349    pub copy_acceleration_structure_khr: Option<
2350        extensions::khr_acceleration_structure::PFN_vkCopyAccelerationStructureKHR,
2351    >,
2352    pub cmd_copy_acceleration_structure_to_memory_khr: Option<
2353        extensions::khr_acceleration_structure::PFN_vkCmdCopyAccelerationStructureToMemoryKHR,
2354    >,
2355    pub copy_acceleration_structure_to_memory_khr: Option<
2356        extensions::khr_acceleration_structure::PFN_vkCopyAccelerationStructureToMemoryKHR,
2357    >,
2358    pub cmd_copy_memory_to_acceleration_structure_khr: Option<
2359        extensions::khr_acceleration_structure::PFN_vkCmdCopyMemoryToAccelerationStructureKHR,
2360    >,
2361    pub copy_memory_to_acceleration_structure_khr: Option<
2362        extensions::khr_acceleration_structure::PFN_vkCopyMemoryToAccelerationStructureKHR,
2363    >,
2364    pub cmd_write_acceleration_structures_properties_khr: Option<
2365        extensions::khr_acceleration_structure::PFN_vkCmdWriteAccelerationStructuresPropertiesKHR,
2366    >,
2367    pub cmd_write_acceleration_structures_properties_nv: Option<
2368        extensions::nv_ray_tracing::PFN_vkCmdWriteAccelerationStructuresPropertiesNV,
2369    >,
2370    pub cmd_build_acceleration_structure_nv: Option<
2371        extensions::nv_ray_tracing::PFN_vkCmdBuildAccelerationStructureNV,
2372    >,
2373    pub write_acceleration_structures_properties_khr: Option<
2374        extensions::khr_acceleration_structure::PFN_vkWriteAccelerationStructuresPropertiesKHR,
2375    >,
2376    pub cmd_trace_rays_khr: Option<
2377        extensions::khr_ray_tracing_pipeline::PFN_vkCmdTraceRaysKHR,
2378    >,
2379    pub cmd_trace_rays_nv: Option<extensions::nv_ray_tracing::PFN_vkCmdTraceRaysNV>,
2380    pub get_ray_tracing_shader_group_handles_khr: Option<
2381        extensions::khr_ray_tracing_pipeline::PFN_vkGetRayTracingShaderGroupHandlesKHR,
2382    >,
2383    pub get_ray_tracing_capture_replay_shader_group_handles_khr: Option<
2384        extensions::khr_ray_tracing_pipeline::PFN_vkGetRayTracingCaptureReplayShaderGroupHandlesKHR,
2385    >,
2386    pub get_acceleration_structure_handle_nv: Option<
2387        extensions::nv_ray_tracing::PFN_vkGetAccelerationStructureHandleNV,
2388    >,
2389    pub create_ray_tracing_pipelines_nv: Option<
2390        extensions::nv_ray_tracing::PFN_vkCreateRayTracingPipelinesNV,
2391    >,
2392    pub create_ray_tracing_pipelines_khr: Option<
2393        extensions::khr_ray_tracing_pipeline::PFN_vkCreateRayTracingPipelinesKHR,
2394    >,
2395    pub cmd_trace_rays_indirect_khr: Option<
2396        extensions::khr_ray_tracing_pipeline::PFN_vkCmdTraceRaysIndirectKHR,
2397    >,
2398    pub cmd_trace_rays_indirect2_khr: Option<
2399        extensions::khr_ray_tracing_maintenance1::PFN_vkCmdTraceRaysIndirect2KHR,
2400    >,
2401    pub get_device_acceleration_structure_compatibility_khr: Option<
2402        extensions::khr_acceleration_structure::PFN_vkGetDeviceAccelerationStructureCompatibilityKHR,
2403    >,
2404    pub get_ray_tracing_shader_group_stack_size_khr: Option<
2405        extensions::khr_ray_tracing_pipeline::PFN_vkGetRayTracingShaderGroupStackSizeKHR,
2406    >,
2407    pub cmd_set_ray_tracing_pipeline_stack_size_khr: Option<
2408        extensions::khr_ray_tracing_pipeline::PFN_vkCmdSetRayTracingPipelineStackSizeKHR,
2409    >,
2410    pub get_image_view_handle_nvx: Option<
2411        extensions::nvx_image_view_handle::PFN_vkGetImageViewHandleNVX,
2412    >,
2413    pub get_image_view_address_nvx: Option<
2414        extensions::nvx_image_view_handle::PFN_vkGetImageViewAddressNVX,
2415    >,
2416    pub get_device_group_surface_present_modes2_ext: Option<
2417        extensions::ext_full_screen_exclusive::PFN_vkGetDeviceGroupSurfacePresentModes2EXT,
2418    >,
2419    pub acquire_full_screen_exclusive_mode_ext: Option<
2420        extensions::ext_full_screen_exclusive::PFN_vkAcquireFullScreenExclusiveModeEXT,
2421    >,
2422    pub release_full_screen_exclusive_mode_ext: Option<
2423        extensions::ext_full_screen_exclusive::PFN_vkReleaseFullScreenExclusiveModeEXT,
2424    >,
2425    pub acquire_profiling_lock_khr: Option<
2426        extensions::khr_performance_query::PFN_vkAcquireProfilingLockKHR,
2427    >,
2428    pub release_profiling_lock_khr: Option<
2429        extensions::khr_performance_query::PFN_vkReleaseProfilingLockKHR,
2430    >,
2431    pub get_image_drm_format_modifier_properties_ext: Option<
2432        extensions::ext_image_drm_format_modifier::PFN_vkGetImageDrmFormatModifierPropertiesEXT,
2433    >,
2434    pub get_buffer_opaque_capture_address: Option<
2435        vk1_2::PFN_vkGetBufferOpaqueCaptureAddress,
2436    >,
2437    pub get_buffer_device_address: Option<vk1_2::PFN_vkGetBufferDeviceAddress>,
2438    pub initialize_performance_api_intel: Option<
2439        extensions::intel_performance_query::PFN_vkInitializePerformanceApiINTEL,
2440    >,
2441    pub uninitialize_performance_api_intel: Option<
2442        extensions::intel_performance_query::PFN_vkUninitializePerformanceApiINTEL,
2443    >,
2444    pub cmd_set_performance_marker_intel: Option<
2445        extensions::intel_performance_query::PFN_vkCmdSetPerformanceMarkerINTEL,
2446    >,
2447    pub cmd_set_performance_stream_marker_intel: Option<
2448        extensions::intel_performance_query::PFN_vkCmdSetPerformanceStreamMarkerINTEL,
2449    >,
2450    pub cmd_set_performance_override_intel: Option<
2451        extensions::intel_performance_query::PFN_vkCmdSetPerformanceOverrideINTEL,
2452    >,
2453    pub acquire_performance_configuration_intel: Option<
2454        extensions::intel_performance_query::PFN_vkAcquirePerformanceConfigurationINTEL,
2455    >,
2456    pub release_performance_configuration_intel: Option<
2457        extensions::intel_performance_query::PFN_vkReleasePerformanceConfigurationINTEL,
2458    >,
2459    pub queue_set_performance_configuration_intel: Option<
2460        extensions::intel_performance_query::PFN_vkQueueSetPerformanceConfigurationINTEL,
2461    >,
2462    pub get_performance_parameter_intel: Option<
2463        extensions::intel_performance_query::PFN_vkGetPerformanceParameterINTEL,
2464    >,
2465    pub get_device_memory_opaque_capture_address: Option<
2466        vk1_2::PFN_vkGetDeviceMemoryOpaqueCaptureAddress,
2467    >,
2468    pub get_pipeline_executable_properties_khr: Option<
2469        extensions::khr_pipeline_executable_properties::PFN_vkGetPipelineExecutablePropertiesKHR,
2470    >,
2471    pub get_pipeline_executable_statistics_khr: Option<
2472        extensions::khr_pipeline_executable_properties::PFN_vkGetPipelineExecutableStatisticsKHR,
2473    >,
2474    pub get_pipeline_executable_internal_representations_khr: Option<
2475        extensions::khr_pipeline_executable_properties::PFN_vkGetPipelineExecutableInternalRepresentationsKHR,
2476    >,
2477    pub cmd_set_line_stipple_ext: Option<
2478        extensions::ext_line_rasterization::PFN_vkCmdSetLineStippleEXT,
2479    >,
2480    pub create_acceleration_structure_khr: Option<
2481        extensions::khr_acceleration_structure::PFN_vkCreateAccelerationStructureKHR,
2482    >,
2483    pub cmd_build_acceleration_structures_khr: Option<
2484        extensions::khr_acceleration_structure::PFN_vkCmdBuildAccelerationStructuresKHR,
2485    >,
2486    pub cmd_build_acceleration_structures_indirect_khr: Option<
2487        extensions::khr_acceleration_structure::PFN_vkCmdBuildAccelerationStructuresIndirectKHR,
2488    >,
2489    pub build_acceleration_structures_khr: Option<
2490        extensions::khr_acceleration_structure::PFN_vkBuildAccelerationStructuresKHR,
2491    >,
2492    pub get_acceleration_structure_device_address_khr: Option<
2493        extensions::khr_acceleration_structure::PFN_vkGetAccelerationStructureDeviceAddressKHR,
2494    >,
2495    pub create_deferred_operation_khr: Option<
2496        extensions::khr_deferred_host_operations::PFN_vkCreateDeferredOperationKHR,
2497    >,
2498    pub destroy_deferred_operation_khr: Option<
2499        extensions::khr_deferred_host_operations::PFN_vkDestroyDeferredOperationKHR,
2500    >,
2501    pub get_deferred_operation_max_concurrency_khr: Option<
2502        extensions::khr_deferred_host_operations::PFN_vkGetDeferredOperationMaxConcurrencyKHR,
2503    >,
2504    pub get_deferred_operation_result_khr: Option<
2505        extensions::khr_deferred_host_operations::PFN_vkGetDeferredOperationResultKHR,
2506    >,
2507    pub deferred_operation_join_khr: Option<
2508        extensions::khr_deferred_host_operations::PFN_vkDeferredOperationJoinKHR,
2509    >,
2510    pub cmd_set_cull_mode: Option<vk1_3::PFN_vkCmdSetCullMode>,
2511    pub cmd_set_front_face: Option<vk1_3::PFN_vkCmdSetFrontFace>,
2512    pub cmd_set_primitive_topology: Option<vk1_3::PFN_vkCmdSetPrimitiveTopology>,
2513    pub cmd_set_viewport_with_count: Option<vk1_3::PFN_vkCmdSetViewportWithCount>,
2514    pub cmd_set_scissor_with_count: Option<vk1_3::PFN_vkCmdSetScissorWithCount>,
2515    pub cmd_bind_vertex_buffers2: Option<vk1_3::PFN_vkCmdBindVertexBuffers2>,
2516    pub cmd_set_depth_test_enable: Option<vk1_3::PFN_vkCmdSetDepthTestEnable>,
2517    pub cmd_set_depth_write_enable: Option<vk1_3::PFN_vkCmdSetDepthWriteEnable>,
2518    pub cmd_set_depth_compare_op: Option<vk1_3::PFN_vkCmdSetDepthCompareOp>,
2519    pub cmd_set_depth_bounds_test_enable: Option<
2520        vk1_3::PFN_vkCmdSetDepthBoundsTestEnable,
2521    >,
2522    pub cmd_set_stencil_test_enable: Option<vk1_3::PFN_vkCmdSetStencilTestEnable>,
2523    pub cmd_set_stencil_op: Option<vk1_3::PFN_vkCmdSetStencilOp>,
2524    pub cmd_set_patch_control_points_ext: Option<
2525        extensions::ext_extended_dynamic_state2::PFN_vkCmdSetPatchControlPointsEXT,
2526    >,
2527    pub cmd_set_rasterizer_discard_enable: Option<
2528        vk1_3::PFN_vkCmdSetRasterizerDiscardEnable,
2529    >,
2530    pub cmd_set_depth_bias_enable: Option<vk1_3::PFN_vkCmdSetDepthBiasEnable>,
2531    pub cmd_set_logic_op_ext: Option<
2532        extensions::ext_extended_dynamic_state2::PFN_vkCmdSetLogicOpEXT,
2533    >,
2534    pub cmd_set_primitive_restart_enable: Option<
2535        vk1_3::PFN_vkCmdSetPrimitiveRestartEnable,
2536    >,
2537    pub create_private_data_slot: Option<vk1_3::PFN_vkCreatePrivateDataSlot>,
2538    pub destroy_private_data_slot: Option<vk1_3::PFN_vkDestroyPrivateDataSlot>,
2539    pub set_private_data: Option<vk1_3::PFN_vkSetPrivateData>,
2540    pub get_private_data: Option<vk1_3::PFN_vkGetPrivateData>,
2541    pub cmd_copy_buffer2: Option<vk1_3::PFN_vkCmdCopyBuffer2>,
2542    pub cmd_copy_image2: Option<vk1_3::PFN_vkCmdCopyImage2>,
2543    pub cmd_blit_image2: Option<vk1_3::PFN_vkCmdBlitImage2>,
2544    pub cmd_copy_buffer_to_image2: Option<vk1_3::PFN_vkCmdCopyBufferToImage2>,
2545    pub cmd_copy_image_to_buffer2: Option<vk1_3::PFN_vkCmdCopyImageToBuffer2>,
2546    pub cmd_resolve_image2: Option<vk1_3::PFN_vkCmdResolveImage2>,
2547    pub cmd_set_fragment_shading_rate_khr: Option<
2548        extensions::khr_fragment_shading_rate::PFN_vkCmdSetFragmentShadingRateKHR,
2549    >,
2550    pub cmd_set_fragment_shading_rate_enum_nv: Option<
2551        extensions::nv_fragment_shading_rate_enums::PFN_vkCmdSetFragmentShadingRateEnumNV,
2552    >,
2553    pub get_acceleration_structure_build_sizes_khr: Option<
2554        extensions::khr_acceleration_structure::PFN_vkGetAccelerationStructureBuildSizesKHR,
2555    >,
2556    pub cmd_set_vertex_input_ext: Option<
2557        extensions::ext_vertex_input_dynamic_state::PFN_vkCmdSetVertexInputEXT,
2558    >,
2559    pub cmd_set_color_write_enable_ext: Option<
2560        extensions::ext_color_write_enable::PFN_vkCmdSetColorWriteEnableEXT,
2561    >,
2562    pub cmd_set_event2: Option<vk1_3::PFN_vkCmdSetEvent2>,
2563    pub cmd_reset_event2: Option<vk1_3::PFN_vkCmdResetEvent2>,
2564    pub cmd_wait_events2: Option<vk1_3::PFN_vkCmdWaitEvents2>,
2565    pub cmd_pipeline_barrier2: Option<vk1_3::PFN_vkCmdPipelineBarrier2>,
2566    pub queue_submit2: Option<vk1_3::PFN_vkQueueSubmit2>,
2567    pub cmd_write_timestamp2: Option<vk1_3::PFN_vkCmdWriteTimestamp2>,
2568    pub cmd_write_buffer_marker2_amd: Option<
2569        extensions::khr_synchronization2::PFN_vkCmdWriteBufferMarker2AMD,
2570    >,
2571    pub get_queue_checkpoint_data2_nv: Option<
2572        extensions::khr_synchronization2::PFN_vkGetQueueCheckpointData2NV,
2573    >,
2574    pub create_video_session_khr: Option<
2575        extensions::khr_video_queue::PFN_vkCreateVideoSessionKHR,
2576    >,
2577    pub destroy_video_session_khr: Option<
2578        extensions::khr_video_queue::PFN_vkDestroyVideoSessionKHR,
2579    >,
2580    pub create_video_session_parameters_khr: Option<
2581        extensions::khr_video_queue::PFN_vkCreateVideoSessionParametersKHR,
2582    >,
2583    pub update_video_session_parameters_khr: Option<
2584        extensions::khr_video_queue::PFN_vkUpdateVideoSessionParametersKHR,
2585    >,
2586    pub destroy_video_session_parameters_khr: Option<
2587        extensions::khr_video_queue::PFN_vkDestroyVideoSessionParametersKHR,
2588    >,
2589    pub get_video_session_memory_requirements_khr: Option<
2590        extensions::khr_video_queue::PFN_vkGetVideoSessionMemoryRequirementsKHR,
2591    >,
2592    pub bind_video_session_memory_khr: Option<
2593        extensions::khr_video_queue::PFN_vkBindVideoSessionMemoryKHR,
2594    >,
2595    pub cmd_decode_video_khr: Option<
2596        extensions::khr_video_decode_queue::PFN_vkCmdDecodeVideoKHR,
2597    >,
2598    pub cmd_begin_video_coding_khr: Option<
2599        extensions::khr_video_queue::PFN_vkCmdBeginVideoCodingKHR,
2600    >,
2601    pub cmd_control_video_coding_khr: Option<
2602        extensions::khr_video_queue::PFN_vkCmdControlVideoCodingKHR,
2603    >,
2604    pub cmd_end_video_coding_khr: Option<
2605        extensions::khr_video_queue::PFN_vkCmdEndVideoCodingKHR,
2606    >,
2607    pub cmd_encode_video_khr: Option<
2608        extensions::khr_video_encode_queue::PFN_vkCmdEncodeVideoKHR,
2609    >,
2610    pub create_cu_module_nvx: Option<
2611        extensions::nvx_binary_import::PFN_vkCreateCuModuleNVX,
2612    >,
2613    pub create_cu_function_nvx: Option<
2614        extensions::nvx_binary_import::PFN_vkCreateCuFunctionNVX,
2615    >,
2616    pub destroy_cu_module_nvx: Option<
2617        extensions::nvx_binary_import::PFN_vkDestroyCuModuleNVX,
2618    >,
2619    pub destroy_cu_function_nvx: Option<
2620        extensions::nvx_binary_import::PFN_vkDestroyCuFunctionNVX,
2621    >,
2622    pub cmd_cu_launch_kernel_nvx: Option<
2623        extensions::nvx_binary_import::PFN_vkCmdCuLaunchKernelNVX,
2624    >,
2625    pub set_device_memory_priority_ext: Option<
2626        extensions::ext_pageable_device_local_memory::PFN_vkSetDeviceMemoryPriorityEXT,
2627    >,
2628    pub wait_for_present_khr: Option<
2629        extensions::khr_present_wait::PFN_vkWaitForPresentKHR,
2630    >,
2631    pub create_buffer_collection_fuchsia: Option<
2632        extensions::fuchsia_buffer_collection::PFN_vkCreateBufferCollectionFUCHSIA,
2633    >,
2634    pub set_buffer_collection_buffer_constraints_fuchsia: Option<
2635        extensions::fuchsia_buffer_collection::PFN_vkSetBufferCollectionBufferConstraintsFUCHSIA,
2636    >,
2637    pub set_buffer_collection_image_constraints_fuchsia: Option<
2638        extensions::fuchsia_buffer_collection::PFN_vkSetBufferCollectionImageConstraintsFUCHSIA,
2639    >,
2640    pub destroy_buffer_collection_fuchsia: Option<
2641        extensions::fuchsia_buffer_collection::PFN_vkDestroyBufferCollectionFUCHSIA,
2642    >,
2643    pub get_buffer_collection_properties_fuchsia: Option<
2644        extensions::fuchsia_buffer_collection::PFN_vkGetBufferCollectionPropertiesFUCHSIA,
2645    >,
2646    pub cmd_begin_rendering: Option<vk1_3::PFN_vkCmdBeginRendering>,
2647    pub cmd_end_rendering: Option<vk1_3::PFN_vkCmdEndRendering>,
2648    pub get_descriptor_set_layout_host_mapping_info_valve: Option<
2649        extensions::valve_descriptor_set_host_mapping::PFN_vkGetDescriptorSetLayoutHostMappingInfoVALVE,
2650    >,
2651    pub get_descriptor_set_host_mapping_valve: Option<
2652        extensions::valve_descriptor_set_host_mapping::PFN_vkGetDescriptorSetHostMappingVALVE,
2653    >,
2654    pub get_image_subresource_layout2_ext: Option<
2655        extensions::ext_image_compression_control::PFN_vkGetImageSubresourceLayout2EXT,
2656    >,
2657    pub get_pipeline_properties_ext: Option<
2658        extensions::ext_pipeline_properties::PFN_vkGetPipelinePropertiesEXT,
2659    >,
2660    pub reset_query_pool_ext: Option<
2661        extensions::ext_host_query_reset::PFN_vkResetQueryPoolEXT,
2662    >,
2663    pub trim_command_pool_khr: Option<
2664        extensions::khr_maintenance1::PFN_vkTrimCommandPoolKHR,
2665    >,
2666    pub get_device_group_peer_memory_features_khr: Option<
2667        extensions::khr_device_group::PFN_vkGetDeviceGroupPeerMemoryFeaturesKHR,
2668    >,
2669    pub bind_buffer_memory2_khr: Option<
2670        extensions::khr_bind_memory2::PFN_vkBindBufferMemory2KHR,
2671    >,
2672    pub bind_image_memory2_khr: Option<
2673        extensions::khr_bind_memory2::PFN_vkBindImageMemory2KHR,
2674    >,
2675    pub cmd_set_device_mask_khr: Option<
2676        extensions::khr_device_group::PFN_vkCmdSetDeviceMaskKHR,
2677    >,
2678    pub cmd_dispatch_base_khr: Option<
2679        extensions::khr_device_group::PFN_vkCmdDispatchBaseKHR,
2680    >,
2681    pub create_descriptor_update_template_khr: Option<
2682        extensions::khr_descriptor_update_template::PFN_vkCreateDescriptorUpdateTemplateKHR,
2683    >,
2684    pub destroy_descriptor_update_template_khr: Option<
2685        extensions::khr_descriptor_update_template::PFN_vkDestroyDescriptorUpdateTemplateKHR,
2686    >,
2687    pub update_descriptor_set_with_template_khr: Option<
2688        extensions::khr_descriptor_update_template::PFN_vkUpdateDescriptorSetWithTemplateKHR,
2689    >,
2690    pub get_buffer_memory_requirements2_khr: Option<
2691        extensions::khr_get_memory_requirements2::PFN_vkGetBufferMemoryRequirements2KHR,
2692    >,
2693    pub get_image_memory_requirements2_khr: Option<
2694        extensions::khr_get_memory_requirements2::PFN_vkGetImageMemoryRequirements2KHR,
2695    >,
2696    pub get_image_sparse_memory_requirements2_khr: Option<
2697        extensions::khr_get_memory_requirements2::PFN_vkGetImageSparseMemoryRequirements2KHR,
2698    >,
2699    pub get_device_buffer_memory_requirements_khr: Option<
2700        extensions::khr_maintenance4::PFN_vkGetDeviceBufferMemoryRequirementsKHR,
2701    >,
2702    pub get_device_image_memory_requirements_khr: Option<
2703        extensions::khr_maintenance4::PFN_vkGetDeviceImageMemoryRequirementsKHR,
2704    >,
2705    pub get_device_image_sparse_memory_requirements_khr: Option<
2706        extensions::khr_maintenance4::PFN_vkGetDeviceImageSparseMemoryRequirementsKHR,
2707    >,
2708    pub create_sampler_ycbcr_conversion_khr: Option<
2709        extensions::khr_sampler_ycbcr_conversion::PFN_vkCreateSamplerYcbcrConversionKHR,
2710    >,
2711    pub destroy_sampler_ycbcr_conversion_khr: Option<
2712        extensions::khr_sampler_ycbcr_conversion::PFN_vkDestroySamplerYcbcrConversionKHR,
2713    >,
2714    pub get_descriptor_set_layout_support_khr: Option<
2715        extensions::khr_maintenance3::PFN_vkGetDescriptorSetLayoutSupportKHR,
2716    >,
2717    pub create_render_pass2_khr: Option<
2718        extensions::khr_create_renderpass2::PFN_vkCreateRenderPass2KHR,
2719    >,
2720    pub cmd_begin_render_pass2_khr: Option<
2721        extensions::khr_create_renderpass2::PFN_vkCmdBeginRenderPass2KHR,
2722    >,
2723    pub cmd_next_subpass2_khr: Option<
2724        extensions::khr_create_renderpass2::PFN_vkCmdNextSubpass2KHR,
2725    >,
2726    pub cmd_end_render_pass2_khr: Option<
2727        extensions::khr_create_renderpass2::PFN_vkCmdEndRenderPass2KHR,
2728    >,
2729    pub get_semaphore_counter_value_khr: Option<
2730        extensions::khr_timeline_semaphore::PFN_vkGetSemaphoreCounterValueKHR,
2731    >,
2732    pub wait_semaphores_khr: Option<
2733        extensions::khr_timeline_semaphore::PFN_vkWaitSemaphoresKHR,
2734    >,
2735    pub signal_semaphore_khr: Option<
2736        extensions::khr_timeline_semaphore::PFN_vkSignalSemaphoreKHR,
2737    >,
2738    pub cmd_draw_indirect_count_khr: Option<
2739        extensions::khr_draw_indirect_count::PFN_vkCmdDrawIndirectCountKHR,
2740    >,
2741    pub cmd_draw_indirect_count_amd: Option<
2742        extensions::amd_draw_indirect_count::PFN_vkCmdDrawIndirectCountAMD,
2743    >,
2744    pub cmd_draw_indexed_indirect_count_khr: Option<
2745        extensions::khr_draw_indirect_count::PFN_vkCmdDrawIndexedIndirectCountKHR,
2746    >,
2747    pub cmd_draw_indexed_indirect_count_amd: Option<
2748        extensions::amd_draw_indirect_count::PFN_vkCmdDrawIndexedIndirectCountAMD,
2749    >,
2750    pub get_ray_tracing_shader_group_handles_nv: Option<
2751        extensions::nv_ray_tracing::PFN_vkGetRayTracingShaderGroupHandlesNV,
2752    >,
2753    pub get_buffer_opaque_capture_address_khr: Option<
2754        extensions::khr_buffer_device_address::PFN_vkGetBufferOpaqueCaptureAddressKHR,
2755    >,
2756    pub get_buffer_device_address_khr: Option<
2757        extensions::khr_buffer_device_address::PFN_vkGetBufferDeviceAddressKHR,
2758    >,
2759    pub get_buffer_device_address_ext: Option<
2760        extensions::ext_buffer_device_address::PFN_vkGetBufferDeviceAddressEXT,
2761    >,
2762    pub get_device_memory_opaque_capture_address_khr: Option<
2763        extensions::khr_buffer_device_address::PFN_vkGetDeviceMemoryOpaqueCaptureAddressKHR,
2764    >,
2765    pub cmd_set_cull_mode_ext: Option<
2766        extensions::ext_extended_dynamic_state::PFN_vkCmdSetCullModeEXT,
2767    >,
2768    pub cmd_set_front_face_ext: Option<
2769        extensions::ext_extended_dynamic_state::PFN_vkCmdSetFrontFaceEXT,
2770    >,
2771    pub cmd_set_primitive_topology_ext: Option<
2772        extensions::ext_extended_dynamic_state::PFN_vkCmdSetPrimitiveTopologyEXT,
2773    >,
2774    pub cmd_set_viewport_with_count_ext: Option<
2775        extensions::ext_extended_dynamic_state::PFN_vkCmdSetViewportWithCountEXT,
2776    >,
2777    pub cmd_set_scissor_with_count_ext: Option<
2778        extensions::ext_extended_dynamic_state::PFN_vkCmdSetScissorWithCountEXT,
2779    >,
2780    pub cmd_bind_vertex_buffers2_ext: Option<
2781        extensions::ext_extended_dynamic_state::PFN_vkCmdBindVertexBuffers2EXT,
2782    >,
2783    pub cmd_set_depth_test_enable_ext: Option<
2784        extensions::ext_extended_dynamic_state::PFN_vkCmdSetDepthTestEnableEXT,
2785    >,
2786    pub cmd_set_depth_write_enable_ext: Option<
2787        extensions::ext_extended_dynamic_state::PFN_vkCmdSetDepthWriteEnableEXT,
2788    >,
2789    pub cmd_set_depth_compare_op_ext: Option<
2790        extensions::ext_extended_dynamic_state::PFN_vkCmdSetDepthCompareOpEXT,
2791    >,
2792    pub cmd_set_depth_bounds_test_enable_ext: Option<
2793        extensions::ext_extended_dynamic_state::PFN_vkCmdSetDepthBoundsTestEnableEXT,
2794    >,
2795    pub cmd_set_stencil_test_enable_ext: Option<
2796        extensions::ext_extended_dynamic_state::PFN_vkCmdSetStencilTestEnableEXT,
2797    >,
2798    pub cmd_set_stencil_op_ext: Option<
2799        extensions::ext_extended_dynamic_state::PFN_vkCmdSetStencilOpEXT,
2800    >,
2801    pub cmd_set_rasterizer_discard_enable_ext: Option<
2802        extensions::ext_extended_dynamic_state2::PFN_vkCmdSetRasterizerDiscardEnableEXT,
2803    >,
2804    pub cmd_set_depth_bias_enable_ext: Option<
2805        extensions::ext_extended_dynamic_state2::PFN_vkCmdSetDepthBiasEnableEXT,
2806    >,
2807    pub cmd_set_primitive_restart_enable_ext: Option<
2808        extensions::ext_extended_dynamic_state2::PFN_vkCmdSetPrimitiveRestartEnableEXT,
2809    >,
2810    pub create_private_data_slot_ext: Option<
2811        extensions::ext_private_data::PFN_vkCreatePrivateDataSlotEXT,
2812    >,
2813    pub destroy_private_data_slot_ext: Option<
2814        extensions::ext_private_data::PFN_vkDestroyPrivateDataSlotEXT,
2815    >,
2816    pub set_private_data_ext: Option<
2817        extensions::ext_private_data::PFN_vkSetPrivateDataEXT,
2818    >,
2819    pub get_private_data_ext: Option<
2820        extensions::ext_private_data::PFN_vkGetPrivateDataEXT,
2821    >,
2822    pub cmd_copy_buffer2_khr: Option<
2823        extensions::khr_copy_commands2::PFN_vkCmdCopyBuffer2KHR,
2824    >,
2825    pub cmd_copy_image2_khr: Option<
2826        extensions::khr_copy_commands2::PFN_vkCmdCopyImage2KHR,
2827    >,
2828    pub cmd_blit_image2_khr: Option<
2829        extensions::khr_copy_commands2::PFN_vkCmdBlitImage2KHR,
2830    >,
2831    pub cmd_copy_buffer_to_image2_khr: Option<
2832        extensions::khr_copy_commands2::PFN_vkCmdCopyBufferToImage2KHR,
2833    >,
2834    pub cmd_copy_image_to_buffer2_khr: Option<
2835        extensions::khr_copy_commands2::PFN_vkCmdCopyImageToBuffer2KHR,
2836    >,
2837    pub cmd_resolve_image2_khr: Option<
2838        extensions::khr_copy_commands2::PFN_vkCmdResolveImage2KHR,
2839    >,
2840    pub cmd_set_event2_khr: Option<
2841        extensions::khr_synchronization2::PFN_vkCmdSetEvent2KHR,
2842    >,
2843    pub cmd_reset_event2_khr: Option<
2844        extensions::khr_synchronization2::PFN_vkCmdResetEvent2KHR,
2845    >,
2846    pub cmd_wait_events2_khr: Option<
2847        extensions::khr_synchronization2::PFN_vkCmdWaitEvents2KHR,
2848    >,
2849    pub cmd_pipeline_barrier2_khr: Option<
2850        extensions::khr_synchronization2::PFN_vkCmdPipelineBarrier2KHR,
2851    >,
2852    pub queue_submit2_khr: Option<
2853        extensions::khr_synchronization2::PFN_vkQueueSubmit2KHR,
2854    >,
2855    pub cmd_write_timestamp2_khr: Option<
2856        extensions::khr_synchronization2::PFN_vkCmdWriteTimestamp2KHR,
2857    >,
2858    pub cmd_begin_rendering_khr: Option<
2859        extensions::khr_dynamic_rendering::PFN_vkCmdBeginRenderingKHR,
2860    >,
2861    pub cmd_end_rendering_khr: Option<
2862        extensions::khr_dynamic_rendering::PFN_vkCmdEndRenderingKHR,
2863    >,
2864}
2865impl DeviceLoader {
2866    #[allow(unused_parens)]
2867    pub(crate) unsafe fn custom(
2868        instance_loader: &InstanceLoader,
2869        device: crate::vk1_0::Device,
2870        device_enabled: DeviceEnabled,
2871        mut symbol: impl FnMut(
2872            *const std::os::raw::c_char,
2873        ) -> Option<crate::vk1_0::PFN_vkVoidFunction>,
2874    ) -> Result<DeviceLoader, crate::LoaderError> {
2875        let instance_enabled = &instance_loader.enabled;
2876        Ok(DeviceLoader {
2877            parent: std::sync::Arc::downgrade(&instance_loader.arc),
2878            handle: device,
2879            get_device_proc_addr: std::mem::transmute(
2880                symbol(crate::vk1_0::FN_GET_DEVICE_PROC_ADDR),
2881            ),
2882            destroy_device: std::mem::transmute(symbol(crate::vk1_0::FN_DESTROY_DEVICE)),
2883            get_device_queue: std::mem::transmute(
2884                symbol(crate::vk1_0::FN_GET_DEVICE_QUEUE),
2885            ),
2886            queue_submit: std::mem::transmute(symbol(crate::vk1_0::FN_QUEUE_SUBMIT)),
2887            queue_wait_idle: std::mem::transmute(
2888                symbol(crate::vk1_0::FN_QUEUE_WAIT_IDLE),
2889            ),
2890            device_wait_idle: std::mem::transmute(
2891                symbol(crate::vk1_0::FN_DEVICE_WAIT_IDLE),
2892            ),
2893            allocate_memory: std::mem::transmute(
2894                symbol(crate::vk1_0::FN_ALLOCATE_MEMORY),
2895            ),
2896            free_memory: std::mem::transmute(symbol(crate::vk1_0::FN_FREE_MEMORY)),
2897            map_memory: std::mem::transmute(symbol(crate::vk1_0::FN_MAP_MEMORY)),
2898            unmap_memory: std::mem::transmute(symbol(crate::vk1_0::FN_UNMAP_MEMORY)),
2899            flush_mapped_memory_ranges: std::mem::transmute(
2900                symbol(crate::vk1_0::FN_FLUSH_MAPPED_MEMORY_RANGES),
2901            ),
2902            invalidate_mapped_memory_ranges: std::mem::transmute(
2903                symbol(crate::vk1_0::FN_INVALIDATE_MAPPED_MEMORY_RANGES),
2904            ),
2905            get_device_memory_commitment: std::mem::transmute(
2906                symbol(crate::vk1_0::FN_GET_DEVICE_MEMORY_COMMITMENT),
2907            ),
2908            get_buffer_memory_requirements: std::mem::transmute(
2909                symbol(crate::vk1_0::FN_GET_BUFFER_MEMORY_REQUIREMENTS),
2910            ),
2911            bind_buffer_memory: std::mem::transmute(
2912                symbol(crate::vk1_0::FN_BIND_BUFFER_MEMORY),
2913            ),
2914            get_image_memory_requirements: std::mem::transmute(
2915                symbol(crate::vk1_0::FN_GET_IMAGE_MEMORY_REQUIREMENTS),
2916            ),
2917            bind_image_memory: std::mem::transmute(
2918                symbol(crate::vk1_0::FN_BIND_IMAGE_MEMORY),
2919            ),
2920            get_image_sparse_memory_requirements: std::mem::transmute(
2921                symbol(crate::vk1_0::FN_GET_IMAGE_SPARSE_MEMORY_REQUIREMENTS),
2922            ),
2923            queue_bind_sparse: std::mem::transmute(
2924                symbol(crate::vk1_0::FN_QUEUE_BIND_SPARSE),
2925            ),
2926            create_fence: std::mem::transmute(symbol(crate::vk1_0::FN_CREATE_FENCE)),
2927            destroy_fence: std::mem::transmute(symbol(crate::vk1_0::FN_DESTROY_FENCE)),
2928            reset_fences: std::mem::transmute(symbol(crate::vk1_0::FN_RESET_FENCES)),
2929            get_fence_status: std::mem::transmute(
2930                symbol(crate::vk1_0::FN_GET_FENCE_STATUS),
2931            ),
2932            wait_for_fences: std::mem::transmute(
2933                symbol(crate::vk1_0::FN_WAIT_FOR_FENCES),
2934            ),
2935            create_semaphore: std::mem::transmute(
2936                symbol(crate::vk1_0::FN_CREATE_SEMAPHORE),
2937            ),
2938            destroy_semaphore: std::mem::transmute(
2939                symbol(crate::vk1_0::FN_DESTROY_SEMAPHORE),
2940            ),
2941            create_event: std::mem::transmute(symbol(crate::vk1_0::FN_CREATE_EVENT)),
2942            destroy_event: std::mem::transmute(symbol(crate::vk1_0::FN_DESTROY_EVENT)),
2943            get_event_status: std::mem::transmute(
2944                symbol(crate::vk1_0::FN_GET_EVENT_STATUS),
2945            ),
2946            set_event: std::mem::transmute(symbol(crate::vk1_0::FN_SET_EVENT)),
2947            reset_event: std::mem::transmute(symbol(crate::vk1_0::FN_RESET_EVENT)),
2948            create_query_pool: std::mem::transmute(
2949                symbol(crate::vk1_0::FN_CREATE_QUERY_POOL),
2950            ),
2951            destroy_query_pool: std::mem::transmute(
2952                symbol(crate::vk1_0::FN_DESTROY_QUERY_POOL),
2953            ),
2954            get_query_pool_results: std::mem::transmute(
2955                symbol(crate::vk1_0::FN_GET_QUERY_POOL_RESULTS),
2956            ),
2957            reset_query_pool: if instance_enabled.vk1_2 {
2958                std::mem::transmute(symbol(crate::vk1_2::FN_RESET_QUERY_POOL))
2959            } else {
2960                None
2961            },
2962            create_buffer: std::mem::transmute(symbol(crate::vk1_0::FN_CREATE_BUFFER)),
2963            destroy_buffer: std::mem::transmute(symbol(crate::vk1_0::FN_DESTROY_BUFFER)),
2964            create_buffer_view: std::mem::transmute(
2965                symbol(crate::vk1_0::FN_CREATE_BUFFER_VIEW),
2966            ),
2967            destroy_buffer_view: std::mem::transmute(
2968                symbol(crate::vk1_0::FN_DESTROY_BUFFER_VIEW),
2969            ),
2970            create_image: std::mem::transmute(symbol(crate::vk1_0::FN_CREATE_IMAGE)),
2971            destroy_image: std::mem::transmute(symbol(crate::vk1_0::FN_DESTROY_IMAGE)),
2972            get_image_subresource_layout: std::mem::transmute(
2973                symbol(crate::vk1_0::FN_GET_IMAGE_SUBRESOURCE_LAYOUT),
2974            ),
2975            create_image_view: std::mem::transmute(
2976                symbol(crate::vk1_0::FN_CREATE_IMAGE_VIEW),
2977            ),
2978            destroy_image_view: std::mem::transmute(
2979                symbol(crate::vk1_0::FN_DESTROY_IMAGE_VIEW),
2980            ),
2981            create_shader_module: std::mem::transmute(
2982                symbol(crate::vk1_0::FN_CREATE_SHADER_MODULE),
2983            ),
2984            destroy_shader_module: std::mem::transmute(
2985                symbol(crate::vk1_0::FN_DESTROY_SHADER_MODULE),
2986            ),
2987            create_pipeline_cache: std::mem::transmute(
2988                symbol(crate::vk1_0::FN_CREATE_PIPELINE_CACHE),
2989            ),
2990            destroy_pipeline_cache: std::mem::transmute(
2991                symbol(crate::vk1_0::FN_DESTROY_PIPELINE_CACHE),
2992            ),
2993            get_pipeline_cache_data: std::mem::transmute(
2994                symbol(crate::vk1_0::FN_GET_PIPELINE_CACHE_DATA),
2995            ),
2996            merge_pipeline_caches: std::mem::transmute(
2997                symbol(crate::vk1_0::FN_MERGE_PIPELINE_CACHES),
2998            ),
2999            create_graphics_pipelines: std::mem::transmute(
3000                symbol(crate::vk1_0::FN_CREATE_GRAPHICS_PIPELINES),
3001            ),
3002            create_compute_pipelines: std::mem::transmute(
3003                symbol(crate::vk1_0::FN_CREATE_COMPUTE_PIPELINES),
3004            ),
3005            get_device_subpass_shading_max_workgroup_size_huawei: if device_enabled
3006                .huawei_subpass_shading
3007            {
3008                std::mem::transmute(
3009                    symbol(
3010                        crate::extensions::huawei_subpass_shading::FN_GET_DEVICE_SUBPASS_SHADING_MAX_WORKGROUP_SIZE_HUAWEI,
3011                    ),
3012                )
3013            } else {
3014                None
3015            },
3016            destroy_pipeline: std::mem::transmute(
3017                symbol(crate::vk1_0::FN_DESTROY_PIPELINE),
3018            ),
3019            create_pipeline_layout: std::mem::transmute(
3020                symbol(crate::vk1_0::FN_CREATE_PIPELINE_LAYOUT),
3021            ),
3022            destroy_pipeline_layout: std::mem::transmute(
3023                symbol(crate::vk1_0::FN_DESTROY_PIPELINE_LAYOUT),
3024            ),
3025            create_sampler: std::mem::transmute(symbol(crate::vk1_0::FN_CREATE_SAMPLER)),
3026            destroy_sampler: std::mem::transmute(
3027                symbol(crate::vk1_0::FN_DESTROY_SAMPLER),
3028            ),
3029            create_descriptor_set_layout: std::mem::transmute(
3030                symbol(crate::vk1_0::FN_CREATE_DESCRIPTOR_SET_LAYOUT),
3031            ),
3032            destroy_descriptor_set_layout: std::mem::transmute(
3033                symbol(crate::vk1_0::FN_DESTROY_DESCRIPTOR_SET_LAYOUT),
3034            ),
3035            create_descriptor_pool: std::mem::transmute(
3036                symbol(crate::vk1_0::FN_CREATE_DESCRIPTOR_POOL),
3037            ),
3038            destroy_descriptor_pool: std::mem::transmute(
3039                symbol(crate::vk1_0::FN_DESTROY_DESCRIPTOR_POOL),
3040            ),
3041            reset_descriptor_pool: std::mem::transmute(
3042                symbol(crate::vk1_0::FN_RESET_DESCRIPTOR_POOL),
3043            ),
3044            allocate_descriptor_sets: std::mem::transmute(
3045                symbol(crate::vk1_0::FN_ALLOCATE_DESCRIPTOR_SETS),
3046            ),
3047            free_descriptor_sets: std::mem::transmute(
3048                symbol(crate::vk1_0::FN_FREE_DESCRIPTOR_SETS),
3049            ),
3050            update_descriptor_sets: std::mem::transmute(
3051                symbol(crate::vk1_0::FN_UPDATE_DESCRIPTOR_SETS),
3052            ),
3053            create_framebuffer: std::mem::transmute(
3054                symbol(crate::vk1_0::FN_CREATE_FRAMEBUFFER),
3055            ),
3056            destroy_framebuffer: std::mem::transmute(
3057                symbol(crate::vk1_0::FN_DESTROY_FRAMEBUFFER),
3058            ),
3059            create_render_pass: std::mem::transmute(
3060                symbol(crate::vk1_0::FN_CREATE_RENDER_PASS),
3061            ),
3062            destroy_render_pass: std::mem::transmute(
3063                symbol(crate::vk1_0::FN_DESTROY_RENDER_PASS),
3064            ),
3065            get_render_area_granularity: std::mem::transmute(
3066                symbol(crate::vk1_0::FN_GET_RENDER_AREA_GRANULARITY),
3067            ),
3068            create_command_pool: std::mem::transmute(
3069                symbol(crate::vk1_0::FN_CREATE_COMMAND_POOL),
3070            ),
3071            destroy_command_pool: std::mem::transmute(
3072                symbol(crate::vk1_0::FN_DESTROY_COMMAND_POOL),
3073            ),
3074            reset_command_pool: std::mem::transmute(
3075                symbol(crate::vk1_0::FN_RESET_COMMAND_POOL),
3076            ),
3077            allocate_command_buffers: std::mem::transmute(
3078                symbol(crate::vk1_0::FN_ALLOCATE_COMMAND_BUFFERS),
3079            ),
3080            free_command_buffers: std::mem::transmute(
3081                symbol(crate::vk1_0::FN_FREE_COMMAND_BUFFERS),
3082            ),
3083            begin_command_buffer: std::mem::transmute(
3084                symbol(crate::vk1_0::FN_BEGIN_COMMAND_BUFFER),
3085            ),
3086            end_command_buffer: std::mem::transmute(
3087                symbol(crate::vk1_0::FN_END_COMMAND_BUFFER),
3088            ),
3089            reset_command_buffer: std::mem::transmute(
3090                symbol(crate::vk1_0::FN_RESET_COMMAND_BUFFER),
3091            ),
3092            cmd_bind_pipeline: std::mem::transmute(
3093                symbol(crate::vk1_0::FN_CMD_BIND_PIPELINE),
3094            ),
3095            cmd_set_viewport: std::mem::transmute(
3096                symbol(crate::vk1_0::FN_CMD_SET_VIEWPORT),
3097            ),
3098            cmd_set_scissor: std::mem::transmute(
3099                symbol(crate::vk1_0::FN_CMD_SET_SCISSOR),
3100            ),
3101            cmd_set_line_width: std::mem::transmute(
3102                symbol(crate::vk1_0::FN_CMD_SET_LINE_WIDTH),
3103            ),
3104            cmd_set_depth_bias: std::mem::transmute(
3105                symbol(crate::vk1_0::FN_CMD_SET_DEPTH_BIAS),
3106            ),
3107            cmd_set_blend_constants: std::mem::transmute(
3108                symbol(crate::vk1_0::FN_CMD_SET_BLEND_CONSTANTS),
3109            ),
3110            cmd_set_depth_bounds: std::mem::transmute(
3111                symbol(crate::vk1_0::FN_CMD_SET_DEPTH_BOUNDS),
3112            ),
3113            cmd_set_stencil_compare_mask: std::mem::transmute(
3114                symbol(crate::vk1_0::FN_CMD_SET_STENCIL_COMPARE_MASK),
3115            ),
3116            cmd_set_stencil_write_mask: std::mem::transmute(
3117                symbol(crate::vk1_0::FN_CMD_SET_STENCIL_WRITE_MASK),
3118            ),
3119            cmd_set_stencil_reference: std::mem::transmute(
3120                symbol(crate::vk1_0::FN_CMD_SET_STENCIL_REFERENCE),
3121            ),
3122            cmd_bind_descriptor_sets: std::mem::transmute(
3123                symbol(crate::vk1_0::FN_CMD_BIND_DESCRIPTOR_SETS),
3124            ),
3125            cmd_bind_index_buffer: std::mem::transmute(
3126                symbol(crate::vk1_0::FN_CMD_BIND_INDEX_BUFFER),
3127            ),
3128            cmd_bind_vertex_buffers: std::mem::transmute(
3129                symbol(crate::vk1_0::FN_CMD_BIND_VERTEX_BUFFERS),
3130            ),
3131            cmd_draw: std::mem::transmute(symbol(crate::vk1_0::FN_CMD_DRAW)),
3132            cmd_draw_indexed: std::mem::transmute(
3133                symbol(crate::vk1_0::FN_CMD_DRAW_INDEXED),
3134            ),
3135            cmd_draw_multi_ext: if device_enabled.ext_multi_draw {
3136                std::mem::transmute(
3137                    symbol(crate::extensions::ext_multi_draw::FN_CMD_DRAW_MULTI_EXT),
3138                )
3139            } else {
3140                None
3141            },
3142            cmd_draw_multi_indexed_ext: if device_enabled.ext_multi_draw {
3143                std::mem::transmute(
3144                    symbol(
3145                        crate::extensions::ext_multi_draw::FN_CMD_DRAW_MULTI_INDEXED_EXT,
3146                    ),
3147                )
3148            } else {
3149                None
3150            },
3151            cmd_draw_indirect: std::mem::transmute(
3152                symbol(crate::vk1_0::FN_CMD_DRAW_INDIRECT),
3153            ),
3154            cmd_draw_indexed_indirect: std::mem::transmute(
3155                symbol(crate::vk1_0::FN_CMD_DRAW_INDEXED_INDIRECT),
3156            ),
3157            cmd_dispatch: std::mem::transmute(symbol(crate::vk1_0::FN_CMD_DISPATCH)),
3158            cmd_dispatch_indirect: std::mem::transmute(
3159                symbol(crate::vk1_0::FN_CMD_DISPATCH_INDIRECT),
3160            ),
3161            cmd_subpass_shading_huawei: if device_enabled.huawei_subpass_shading {
3162                std::mem::transmute(
3163                    symbol(
3164                        crate::extensions::huawei_subpass_shading::FN_CMD_SUBPASS_SHADING_HUAWEI,
3165                    ),
3166                )
3167            } else {
3168                None
3169            },
3170            cmd_copy_buffer: std::mem::transmute(
3171                symbol(crate::vk1_0::FN_CMD_COPY_BUFFER),
3172            ),
3173            cmd_copy_image: std::mem::transmute(symbol(crate::vk1_0::FN_CMD_COPY_IMAGE)),
3174            cmd_blit_image: std::mem::transmute(symbol(crate::vk1_0::FN_CMD_BLIT_IMAGE)),
3175            cmd_copy_buffer_to_image: std::mem::transmute(
3176                symbol(crate::vk1_0::FN_CMD_COPY_BUFFER_TO_IMAGE),
3177            ),
3178            cmd_copy_image_to_buffer: std::mem::transmute(
3179                symbol(crate::vk1_0::FN_CMD_COPY_IMAGE_TO_BUFFER),
3180            ),
3181            cmd_update_buffer: std::mem::transmute(
3182                symbol(crate::vk1_0::FN_CMD_UPDATE_BUFFER),
3183            ),
3184            cmd_fill_buffer: std::mem::transmute(
3185                symbol(crate::vk1_0::FN_CMD_FILL_BUFFER),
3186            ),
3187            cmd_clear_color_image: std::mem::transmute(
3188                symbol(crate::vk1_0::FN_CMD_CLEAR_COLOR_IMAGE),
3189            ),
3190            cmd_clear_depth_stencil_image: std::mem::transmute(
3191                symbol(crate::vk1_0::FN_CMD_CLEAR_DEPTH_STENCIL_IMAGE),
3192            ),
3193            cmd_clear_attachments: std::mem::transmute(
3194                symbol(crate::vk1_0::FN_CMD_CLEAR_ATTACHMENTS),
3195            ),
3196            cmd_resolve_image: std::mem::transmute(
3197                symbol(crate::vk1_0::FN_CMD_RESOLVE_IMAGE),
3198            ),
3199            cmd_set_event: std::mem::transmute(symbol(crate::vk1_0::FN_CMD_SET_EVENT)),
3200            cmd_reset_event: std::mem::transmute(
3201                symbol(crate::vk1_0::FN_CMD_RESET_EVENT),
3202            ),
3203            cmd_wait_events: std::mem::transmute(
3204                symbol(crate::vk1_0::FN_CMD_WAIT_EVENTS),
3205            ),
3206            cmd_pipeline_barrier: std::mem::transmute(
3207                symbol(crate::vk1_0::FN_CMD_PIPELINE_BARRIER),
3208            ),
3209            cmd_begin_query: std::mem::transmute(
3210                symbol(crate::vk1_0::FN_CMD_BEGIN_QUERY),
3211            ),
3212            cmd_end_query: std::mem::transmute(symbol(crate::vk1_0::FN_CMD_END_QUERY)),
3213            cmd_begin_conditional_rendering_ext: if device_enabled
3214                .ext_conditional_rendering
3215            {
3216                std::mem::transmute(
3217                    symbol(
3218                        crate::extensions::ext_conditional_rendering::FN_CMD_BEGIN_CONDITIONAL_RENDERING_EXT,
3219                    ),
3220                )
3221            } else {
3222                None
3223            },
3224            cmd_end_conditional_rendering_ext: if device_enabled
3225                .ext_conditional_rendering
3226            {
3227                std::mem::transmute(
3228                    symbol(
3229                        crate::extensions::ext_conditional_rendering::FN_CMD_END_CONDITIONAL_RENDERING_EXT,
3230                    ),
3231                )
3232            } else {
3233                None
3234            },
3235            cmd_reset_query_pool: std::mem::transmute(
3236                symbol(crate::vk1_0::FN_CMD_RESET_QUERY_POOL),
3237            ),
3238            cmd_write_timestamp: std::mem::transmute(
3239                symbol(crate::vk1_0::FN_CMD_WRITE_TIMESTAMP),
3240            ),
3241            cmd_copy_query_pool_results: std::mem::transmute(
3242                symbol(crate::vk1_0::FN_CMD_COPY_QUERY_POOL_RESULTS),
3243            ),
3244            cmd_push_constants: std::mem::transmute(
3245                symbol(crate::vk1_0::FN_CMD_PUSH_CONSTANTS),
3246            ),
3247            cmd_begin_render_pass: std::mem::transmute(
3248                symbol(crate::vk1_0::FN_CMD_BEGIN_RENDER_PASS),
3249            ),
3250            cmd_next_subpass: std::mem::transmute(
3251                symbol(crate::vk1_0::FN_CMD_NEXT_SUBPASS),
3252            ),
3253            cmd_end_render_pass: std::mem::transmute(
3254                symbol(crate::vk1_0::FN_CMD_END_RENDER_PASS),
3255            ),
3256            cmd_execute_commands: std::mem::transmute(
3257                symbol(crate::vk1_0::FN_CMD_EXECUTE_COMMANDS),
3258            ),
3259            create_shared_swapchains_khr: if device_enabled.khr_display_swapchain {
3260                std::mem::transmute(
3261                    symbol(
3262                        crate::extensions::khr_display_swapchain::FN_CREATE_SHARED_SWAPCHAINS_KHR,
3263                    ),
3264                )
3265            } else {
3266                None
3267            },
3268            create_swapchain_khr: if device_enabled.khr_swapchain {
3269                std::mem::transmute(
3270                    symbol(crate::extensions::khr_swapchain::FN_CREATE_SWAPCHAIN_KHR),
3271                )
3272            } else {
3273                None
3274            },
3275            destroy_swapchain_khr: if device_enabled.khr_swapchain {
3276                std::mem::transmute(
3277                    symbol(crate::extensions::khr_swapchain::FN_DESTROY_SWAPCHAIN_KHR),
3278                )
3279            } else {
3280                None
3281            },
3282            get_swapchain_images_khr: if device_enabled.khr_swapchain {
3283                std::mem::transmute(
3284                    symbol(crate::extensions::khr_swapchain::FN_GET_SWAPCHAIN_IMAGES_KHR),
3285                )
3286            } else {
3287                None
3288            },
3289            acquire_next_image_khr: if device_enabled.khr_swapchain {
3290                std::mem::transmute(
3291                    symbol(crate::extensions::khr_swapchain::FN_ACQUIRE_NEXT_IMAGE_KHR),
3292                )
3293            } else {
3294                None
3295            },
3296            queue_present_khr: if device_enabled.khr_swapchain {
3297                std::mem::transmute(
3298                    symbol(crate::extensions::khr_swapchain::FN_QUEUE_PRESENT_KHR),
3299                )
3300            } else {
3301                None
3302            },
3303            debug_marker_set_object_name_ext: if device_enabled.ext_debug_marker {
3304                std::mem::transmute(
3305                    symbol(
3306                        crate::extensions::ext_debug_marker::FN_DEBUG_MARKER_SET_OBJECT_NAME_EXT,
3307                    ),
3308                )
3309            } else {
3310                None
3311            },
3312            debug_marker_set_object_tag_ext: if device_enabled.ext_debug_marker {
3313                std::mem::transmute(
3314                    symbol(
3315                        crate::extensions::ext_debug_marker::FN_DEBUG_MARKER_SET_OBJECT_TAG_EXT,
3316                    ),
3317                )
3318            } else {
3319                None
3320            },
3321            cmd_debug_marker_begin_ext: if device_enabled.ext_debug_marker {
3322                std::mem::transmute(
3323                    symbol(
3324                        crate::extensions::ext_debug_marker::FN_CMD_DEBUG_MARKER_BEGIN_EXT,
3325                    ),
3326                )
3327            } else {
3328                None
3329            },
3330            cmd_debug_marker_end_ext: if device_enabled.ext_debug_marker {
3331                std::mem::transmute(
3332                    symbol(
3333                        crate::extensions::ext_debug_marker::FN_CMD_DEBUG_MARKER_END_EXT,
3334                    ),
3335                )
3336            } else {
3337                None
3338            },
3339            cmd_debug_marker_insert_ext: if device_enabled.ext_debug_marker {
3340                std::mem::transmute(
3341                    symbol(
3342                        crate::extensions::ext_debug_marker::FN_CMD_DEBUG_MARKER_INSERT_EXT,
3343                    ),
3344                )
3345            } else {
3346                None
3347            },
3348            get_memory_win32_handle_nv: if device_enabled.nv_external_memory_win32 {
3349                std::mem::transmute(
3350                    symbol(
3351                        crate::extensions::nv_external_memory_win32::FN_GET_MEMORY_WIN32_HANDLE_NV,
3352                    ),
3353                )
3354            } else {
3355                None
3356            },
3357            cmd_execute_generated_commands_nv: if device_enabled
3358                .nv_device_generated_commands
3359            {
3360                std::mem::transmute(
3361                    symbol(
3362                        crate::extensions::nv_device_generated_commands::FN_CMD_EXECUTE_GENERATED_COMMANDS_NV,
3363                    ),
3364                )
3365            } else {
3366                None
3367            },
3368            cmd_preprocess_generated_commands_nv: if device_enabled
3369                .nv_device_generated_commands
3370            {
3371                std::mem::transmute(
3372                    symbol(
3373                        crate::extensions::nv_device_generated_commands::FN_CMD_PREPROCESS_GENERATED_COMMANDS_NV,
3374                    ),
3375                )
3376            } else {
3377                None
3378            },
3379            cmd_bind_pipeline_shader_group_nv: if device_enabled
3380                .nv_device_generated_commands
3381            {
3382                std::mem::transmute(
3383                    symbol(
3384                        crate::extensions::nv_device_generated_commands::FN_CMD_BIND_PIPELINE_SHADER_GROUP_NV,
3385                    ),
3386                )
3387            } else {
3388                None
3389            },
3390            get_generated_commands_memory_requirements_nv: if device_enabled
3391                .nv_device_generated_commands
3392            {
3393                std::mem::transmute(
3394                    symbol(
3395                        crate::extensions::nv_device_generated_commands::FN_GET_GENERATED_COMMANDS_MEMORY_REQUIREMENTS_NV,
3396                    ),
3397                )
3398            } else {
3399                None
3400            },
3401            create_indirect_commands_layout_nv: if device_enabled
3402                .nv_device_generated_commands
3403            {
3404                std::mem::transmute(
3405                    symbol(
3406                        crate::extensions::nv_device_generated_commands::FN_CREATE_INDIRECT_COMMANDS_LAYOUT_NV,
3407                    ),
3408                )
3409            } else {
3410                None
3411            },
3412            destroy_indirect_commands_layout_nv: if device_enabled
3413                .nv_device_generated_commands
3414            {
3415                std::mem::transmute(
3416                    symbol(
3417                        crate::extensions::nv_device_generated_commands::FN_DESTROY_INDIRECT_COMMANDS_LAYOUT_NV,
3418                    ),
3419                )
3420            } else {
3421                None
3422            },
3423            cmd_push_descriptor_set_khr: if device_enabled.khr_push_descriptor {
3424                std::mem::transmute(
3425                    symbol(
3426                        crate::extensions::khr_push_descriptor::FN_CMD_PUSH_DESCRIPTOR_SET_KHR,
3427                    ),
3428                )
3429            } else {
3430                None
3431            },
3432            trim_command_pool: if instance_enabled.vk1_1 {
3433                std::mem::transmute(symbol(crate::vk1_1::FN_TRIM_COMMAND_POOL))
3434            } else {
3435                None
3436            },
3437            get_memory_win32_handle_khr: if device_enabled.khr_external_memory_win32 {
3438                std::mem::transmute(
3439                    symbol(
3440                        crate::extensions::khr_external_memory_win32::FN_GET_MEMORY_WIN32_HANDLE_KHR,
3441                    ),
3442                )
3443            } else {
3444                None
3445            },
3446            get_memory_win32_handle_properties_khr: if device_enabled
3447                .khr_external_memory_win32
3448            {
3449                std::mem::transmute(
3450                    symbol(
3451                        crate::extensions::khr_external_memory_win32::FN_GET_MEMORY_WIN32_HANDLE_PROPERTIES_KHR,
3452                    ),
3453                )
3454            } else {
3455                None
3456            },
3457            get_memory_fd_khr: if device_enabled.khr_external_memory_fd {
3458                std::mem::transmute(
3459                    symbol(
3460                        crate::extensions::khr_external_memory_fd::FN_GET_MEMORY_FD_KHR,
3461                    ),
3462                )
3463            } else {
3464                None
3465            },
3466            get_memory_fd_properties_khr: if device_enabled.khr_external_memory_fd {
3467                std::mem::transmute(
3468                    symbol(
3469                        crate::extensions::khr_external_memory_fd::FN_GET_MEMORY_FD_PROPERTIES_KHR,
3470                    ),
3471                )
3472            } else {
3473                None
3474            },
3475            get_memory_zircon_handle_fuchsia: if device_enabled.fuchsia_external_memory {
3476                std::mem::transmute(
3477                    symbol(
3478                        crate::extensions::fuchsia_external_memory::FN_GET_MEMORY_ZIRCON_HANDLE_FUCHSIA,
3479                    ),
3480                )
3481            } else {
3482                None
3483            },
3484            get_memory_zircon_handle_properties_fuchsia: if device_enabled
3485                .fuchsia_external_memory
3486            {
3487                std::mem::transmute(
3488                    symbol(
3489                        crate::extensions::fuchsia_external_memory::FN_GET_MEMORY_ZIRCON_HANDLE_PROPERTIES_FUCHSIA,
3490                    ),
3491                )
3492            } else {
3493                None
3494            },
3495            get_memory_remote_address_nv: if device_enabled.nv_external_memory_rdma {
3496                std::mem::transmute(
3497                    symbol(
3498                        crate::extensions::nv_external_memory_rdma::FN_GET_MEMORY_REMOTE_ADDRESS_NV,
3499                    ),
3500                )
3501            } else {
3502                None
3503            },
3504            get_semaphore_win32_handle_khr: if device_enabled
3505                .khr_external_semaphore_win32
3506            {
3507                std::mem::transmute(
3508                    symbol(
3509                        crate::extensions::khr_external_semaphore_win32::FN_GET_SEMAPHORE_WIN32_HANDLE_KHR,
3510                    ),
3511                )
3512            } else {
3513                None
3514            },
3515            import_semaphore_win32_handle_khr: if device_enabled
3516                .khr_external_semaphore_win32
3517            {
3518                std::mem::transmute(
3519                    symbol(
3520                        crate::extensions::khr_external_semaphore_win32::FN_IMPORT_SEMAPHORE_WIN32_HANDLE_KHR,
3521                    ),
3522                )
3523            } else {
3524                None
3525            },
3526            get_semaphore_fd_khr: if device_enabled.khr_external_semaphore_fd {
3527                std::mem::transmute(
3528                    symbol(
3529                        crate::extensions::khr_external_semaphore_fd::FN_GET_SEMAPHORE_FD_KHR,
3530                    ),
3531                )
3532            } else {
3533                None
3534            },
3535            import_semaphore_fd_khr: if device_enabled.khr_external_semaphore_fd {
3536                std::mem::transmute(
3537                    symbol(
3538                        crate::extensions::khr_external_semaphore_fd::FN_IMPORT_SEMAPHORE_FD_KHR,
3539                    ),
3540                )
3541            } else {
3542                None
3543            },
3544            get_semaphore_zircon_handle_fuchsia: if device_enabled
3545                .fuchsia_external_semaphore
3546            {
3547                std::mem::transmute(
3548                    symbol(
3549                        crate::extensions::fuchsia_external_semaphore::FN_GET_SEMAPHORE_ZIRCON_HANDLE_FUCHSIA,
3550                    ),
3551                )
3552            } else {
3553                None
3554            },
3555            import_semaphore_zircon_handle_fuchsia: if device_enabled
3556                .fuchsia_external_semaphore
3557            {
3558                std::mem::transmute(
3559                    symbol(
3560                        crate::extensions::fuchsia_external_semaphore::FN_IMPORT_SEMAPHORE_ZIRCON_HANDLE_FUCHSIA,
3561                    ),
3562                )
3563            } else {
3564                None
3565            },
3566            get_fence_win32_handle_khr: if device_enabled.khr_external_fence_win32 {
3567                std::mem::transmute(
3568                    symbol(
3569                        crate::extensions::khr_external_fence_win32::FN_GET_FENCE_WIN32_HANDLE_KHR,
3570                    ),
3571                )
3572            } else {
3573                None
3574            },
3575            import_fence_win32_handle_khr: if device_enabled.khr_external_fence_win32 {
3576                std::mem::transmute(
3577                    symbol(
3578                        crate::extensions::khr_external_fence_win32::FN_IMPORT_FENCE_WIN32_HANDLE_KHR,
3579                    ),
3580                )
3581            } else {
3582                None
3583            },
3584            get_fence_fd_khr: if device_enabled.khr_external_fence_fd {
3585                std::mem::transmute(
3586                    symbol(crate::extensions::khr_external_fence_fd::FN_GET_FENCE_FD_KHR),
3587                )
3588            } else {
3589                None
3590            },
3591            import_fence_fd_khr: if device_enabled.khr_external_fence_fd {
3592                std::mem::transmute(
3593                    symbol(
3594                        crate::extensions::khr_external_fence_fd::FN_IMPORT_FENCE_FD_KHR,
3595                    ),
3596                )
3597            } else {
3598                None
3599            },
3600            display_power_control_ext: if device_enabled.ext_display_control {
3601                std::mem::transmute(
3602                    symbol(
3603                        crate::extensions::ext_display_control::FN_DISPLAY_POWER_CONTROL_EXT,
3604                    ),
3605                )
3606            } else {
3607                None
3608            },
3609            register_device_event_ext: if device_enabled.ext_display_control {
3610                std::mem::transmute(
3611                    symbol(
3612                        crate::extensions::ext_display_control::FN_REGISTER_DEVICE_EVENT_EXT,
3613                    ),
3614                )
3615            } else {
3616                None
3617            },
3618            register_display_event_ext: if device_enabled.ext_display_control {
3619                std::mem::transmute(
3620                    symbol(
3621                        crate::extensions::ext_display_control::FN_REGISTER_DISPLAY_EVENT_EXT,
3622                    ),
3623                )
3624            } else {
3625                None
3626            },
3627            get_swapchain_counter_ext: if device_enabled.ext_display_control {
3628                std::mem::transmute(
3629                    symbol(
3630                        crate::extensions::ext_display_control::FN_GET_SWAPCHAIN_COUNTER_EXT,
3631                    ),
3632                )
3633            } else {
3634                None
3635            },
3636            get_device_group_peer_memory_features: if instance_enabled.vk1_1 {
3637                std::mem::transmute(
3638                    symbol(crate::vk1_1::FN_GET_DEVICE_GROUP_PEER_MEMORY_FEATURES),
3639                )
3640            } else {
3641                None
3642            },
3643            bind_buffer_memory2: if instance_enabled.vk1_1 {
3644                std::mem::transmute(symbol(crate::vk1_1::FN_BIND_BUFFER_MEMORY2))
3645            } else {
3646                None
3647            },
3648            bind_image_memory2: if instance_enabled.vk1_1 {
3649                std::mem::transmute(symbol(crate::vk1_1::FN_BIND_IMAGE_MEMORY2))
3650            } else {
3651                None
3652            },
3653            cmd_set_device_mask: if instance_enabled.vk1_1 {
3654                std::mem::transmute(symbol(crate::vk1_1::FN_CMD_SET_DEVICE_MASK))
3655            } else {
3656                None
3657            },
3658            get_device_group_present_capabilities_khr: if (device_enabled.khr_swapchain
3659                && instance_enabled.vk1_1)
3660                || (device_enabled.khr_device_group && instance_enabled.khr_surface)
3661            {
3662                std::mem::transmute(
3663                    symbol(
3664                        crate::extensions::khr_swapchain::FN_GET_DEVICE_GROUP_PRESENT_CAPABILITIES_KHR,
3665                    ),
3666                )
3667            } else {
3668                None
3669            },
3670            get_device_group_surface_present_modes_khr: if (device_enabled.khr_swapchain
3671                && instance_enabled.vk1_1)
3672                || (device_enabled.khr_device_group && instance_enabled.khr_surface)
3673            {
3674                std::mem::transmute(
3675                    symbol(
3676                        crate::extensions::khr_swapchain::FN_GET_DEVICE_GROUP_SURFACE_PRESENT_MODES_KHR,
3677                    ),
3678                )
3679            } else {
3680                None
3681            },
3682            acquire_next_image2_khr: if (device_enabled.khr_swapchain
3683                && instance_enabled.vk1_1)
3684                || (device_enabled.khr_device_group && device_enabled.khr_swapchain)
3685            {
3686                std::mem::transmute(
3687                    symbol(crate::extensions::khr_swapchain::FN_ACQUIRE_NEXT_IMAGE2_KHR),
3688                )
3689            } else {
3690                None
3691            },
3692            cmd_dispatch_base: if instance_enabled.vk1_1 {
3693                std::mem::transmute(symbol(crate::vk1_1::FN_CMD_DISPATCH_BASE))
3694            } else {
3695                None
3696            },
3697            create_descriptor_update_template: if instance_enabled.vk1_1 {
3698                std::mem::transmute(
3699                    symbol(crate::vk1_1::FN_CREATE_DESCRIPTOR_UPDATE_TEMPLATE),
3700                )
3701            } else {
3702                None
3703            },
3704            destroy_descriptor_update_template: if instance_enabled.vk1_1 {
3705                std::mem::transmute(
3706                    symbol(crate::vk1_1::FN_DESTROY_DESCRIPTOR_UPDATE_TEMPLATE),
3707                )
3708            } else {
3709                None
3710            },
3711            update_descriptor_set_with_template: if instance_enabled.vk1_1 {
3712                std::mem::transmute(
3713                    symbol(crate::vk1_1::FN_UPDATE_DESCRIPTOR_SET_WITH_TEMPLATE),
3714                )
3715            } else {
3716                None
3717            },
3718            cmd_push_descriptor_set_with_template_khr: if (device_enabled
3719                .khr_push_descriptor && instance_enabled.vk1_1)
3720                || (device_enabled.khr_push_descriptor
3721                    && device_enabled.khr_descriptor_update_template)
3722                || (device_enabled.khr_descriptor_update_template
3723                    && device_enabled.khr_push_descriptor)
3724            {
3725                std::mem::transmute(
3726                    symbol(
3727                        crate::extensions::khr_push_descriptor::FN_CMD_PUSH_DESCRIPTOR_SET_WITH_TEMPLATE_KHR,
3728                    ),
3729                )
3730            } else {
3731                None
3732            },
3733            set_hdr_metadata_ext: if device_enabled.ext_hdr_metadata {
3734                std::mem::transmute(
3735                    symbol(crate::extensions::ext_hdr_metadata::FN_SET_HDR_METADATA_EXT),
3736                )
3737            } else {
3738                None
3739            },
3740            get_swapchain_status_khr: if device_enabled.khr_shared_presentable_image {
3741                std::mem::transmute(
3742                    symbol(
3743                        crate::extensions::khr_shared_presentable_image::FN_GET_SWAPCHAIN_STATUS_KHR,
3744                    ),
3745                )
3746            } else {
3747                None
3748            },
3749            get_refresh_cycle_duration_google: if device_enabled.google_display_timing {
3750                std::mem::transmute(
3751                    symbol(
3752                        crate::extensions::google_display_timing::FN_GET_REFRESH_CYCLE_DURATION_GOOGLE,
3753                    ),
3754                )
3755            } else {
3756                None
3757            },
3758            get_past_presentation_timing_google: if device_enabled.google_display_timing
3759            {
3760                std::mem::transmute(
3761                    symbol(
3762                        crate::extensions::google_display_timing::FN_GET_PAST_PRESENTATION_TIMING_GOOGLE,
3763                    ),
3764                )
3765            } else {
3766                None
3767            },
3768            cmd_set_viewport_w_scaling_nv: if device_enabled.nv_clip_space_w_scaling {
3769                std::mem::transmute(
3770                    symbol(
3771                        crate::extensions::nv_clip_space_w_scaling::FN_CMD_SET_VIEWPORT_W_SCALING_NV,
3772                    ),
3773                )
3774            } else {
3775                None
3776            },
3777            cmd_set_discard_rectangle_ext: if device_enabled.ext_discard_rectangles {
3778                std::mem::transmute(
3779                    symbol(
3780                        crate::extensions::ext_discard_rectangles::FN_CMD_SET_DISCARD_RECTANGLE_EXT,
3781                    ),
3782                )
3783            } else {
3784                None
3785            },
3786            cmd_set_sample_locations_ext: if device_enabled.ext_sample_locations {
3787                std::mem::transmute(
3788                    symbol(
3789                        crate::extensions::ext_sample_locations::FN_CMD_SET_SAMPLE_LOCATIONS_EXT,
3790                    ),
3791                )
3792            } else {
3793                None
3794            },
3795            get_buffer_memory_requirements2: if instance_enabled.vk1_1 {
3796                std::mem::transmute(
3797                    symbol(crate::vk1_1::FN_GET_BUFFER_MEMORY_REQUIREMENTS2),
3798                )
3799            } else {
3800                None
3801            },
3802            get_image_memory_requirements2: if instance_enabled.vk1_1 {
3803                std::mem::transmute(
3804                    symbol(crate::vk1_1::FN_GET_IMAGE_MEMORY_REQUIREMENTS2),
3805                )
3806            } else {
3807                None
3808            },
3809            get_image_sparse_memory_requirements2: if instance_enabled.vk1_1 {
3810                std::mem::transmute(
3811                    symbol(crate::vk1_1::FN_GET_IMAGE_SPARSE_MEMORY_REQUIREMENTS2),
3812                )
3813            } else {
3814                None
3815            },
3816            get_device_buffer_memory_requirements: if instance_enabled.vk1_3 {
3817                std::mem::transmute(
3818                    symbol(crate::vk1_3::FN_GET_DEVICE_BUFFER_MEMORY_REQUIREMENTS),
3819                )
3820            } else {
3821                None
3822            },
3823            get_device_image_memory_requirements: if instance_enabled.vk1_3 {
3824                std::mem::transmute(
3825                    symbol(crate::vk1_3::FN_GET_DEVICE_IMAGE_MEMORY_REQUIREMENTS),
3826                )
3827            } else {
3828                None
3829            },
3830            get_device_image_sparse_memory_requirements: if instance_enabled.vk1_3 {
3831                std::mem::transmute(
3832                    symbol(crate::vk1_3::FN_GET_DEVICE_IMAGE_SPARSE_MEMORY_REQUIREMENTS),
3833                )
3834            } else {
3835                None
3836            },
3837            create_sampler_ycbcr_conversion: if instance_enabled.vk1_1 {
3838                std::mem::transmute(
3839                    symbol(crate::vk1_1::FN_CREATE_SAMPLER_YCBCR_CONVERSION),
3840                )
3841            } else {
3842                None
3843            },
3844            destroy_sampler_ycbcr_conversion: if instance_enabled.vk1_1 {
3845                std::mem::transmute(
3846                    symbol(crate::vk1_1::FN_DESTROY_SAMPLER_YCBCR_CONVERSION),
3847                )
3848            } else {
3849                None
3850            },
3851            get_device_queue2: if instance_enabled.vk1_1 {
3852                std::mem::transmute(symbol(crate::vk1_1::FN_GET_DEVICE_QUEUE2))
3853            } else {
3854                None
3855            },
3856            create_validation_cache_ext: if device_enabled.ext_validation_cache {
3857                std::mem::transmute(
3858                    symbol(
3859                        crate::extensions::ext_validation_cache::FN_CREATE_VALIDATION_CACHE_EXT,
3860                    ),
3861                )
3862            } else {
3863                None
3864            },
3865            destroy_validation_cache_ext: if device_enabled.ext_validation_cache {
3866                std::mem::transmute(
3867                    symbol(
3868                        crate::extensions::ext_validation_cache::FN_DESTROY_VALIDATION_CACHE_EXT,
3869                    ),
3870                )
3871            } else {
3872                None
3873            },
3874            get_validation_cache_data_ext: if device_enabled.ext_validation_cache {
3875                std::mem::transmute(
3876                    symbol(
3877                        crate::extensions::ext_validation_cache::FN_GET_VALIDATION_CACHE_DATA_EXT,
3878                    ),
3879                )
3880            } else {
3881                None
3882            },
3883            merge_validation_caches_ext: if device_enabled.ext_validation_cache {
3884                std::mem::transmute(
3885                    symbol(
3886                        crate::extensions::ext_validation_cache::FN_MERGE_VALIDATION_CACHES_EXT,
3887                    ),
3888                )
3889            } else {
3890                None
3891            },
3892            get_descriptor_set_layout_support: if instance_enabled.vk1_1 {
3893                std::mem::transmute(
3894                    symbol(crate::vk1_1::FN_GET_DESCRIPTOR_SET_LAYOUT_SUPPORT),
3895                )
3896            } else {
3897                None
3898            },
3899            get_shader_info_amd: if device_enabled.amd_shader_info {
3900                std::mem::transmute(
3901                    symbol(crate::extensions::amd_shader_info::FN_GET_SHADER_INFO_AMD),
3902                )
3903            } else {
3904                None
3905            },
3906            set_local_dimming_amd: if device_enabled.amd_display_native_hdr {
3907                std::mem::transmute(
3908                    symbol(
3909                        crate::extensions::amd_display_native_hdr::FN_SET_LOCAL_DIMMING_AMD,
3910                    ),
3911                )
3912            } else {
3913                None
3914            },
3915            get_calibrated_timestamps_ext: if device_enabled.ext_calibrated_timestamps {
3916                std::mem::transmute(
3917                    symbol(
3918                        crate::extensions::ext_calibrated_timestamps::FN_GET_CALIBRATED_TIMESTAMPS_EXT,
3919                    ),
3920                )
3921            } else {
3922                None
3923            },
3924            set_debug_utils_object_name_ext: if instance_enabled.ext_debug_utils {
3925                std::mem::transmute(
3926                    symbol(
3927                        crate::extensions::ext_debug_utils::FN_SET_DEBUG_UTILS_OBJECT_NAME_EXT,
3928                    ),
3929                )
3930            } else {
3931                None
3932            },
3933            set_debug_utils_object_tag_ext: if instance_enabled.ext_debug_utils {
3934                std::mem::transmute(
3935                    symbol(
3936                        crate::extensions::ext_debug_utils::FN_SET_DEBUG_UTILS_OBJECT_TAG_EXT,
3937                    ),
3938                )
3939            } else {
3940                None
3941            },
3942            queue_begin_debug_utils_label_ext: if instance_enabled.ext_debug_utils {
3943                std::mem::transmute(
3944                    symbol(
3945                        crate::extensions::ext_debug_utils::FN_QUEUE_BEGIN_DEBUG_UTILS_LABEL_EXT,
3946                    ),
3947                )
3948            } else {
3949                None
3950            },
3951            queue_end_debug_utils_label_ext: if instance_enabled.ext_debug_utils {
3952                std::mem::transmute(
3953                    symbol(
3954                        crate::extensions::ext_debug_utils::FN_QUEUE_END_DEBUG_UTILS_LABEL_EXT,
3955                    ),
3956                )
3957            } else {
3958                None
3959            },
3960            queue_insert_debug_utils_label_ext: if instance_enabled.ext_debug_utils {
3961                std::mem::transmute(
3962                    symbol(
3963                        crate::extensions::ext_debug_utils::FN_QUEUE_INSERT_DEBUG_UTILS_LABEL_EXT,
3964                    ),
3965                )
3966            } else {
3967                None
3968            },
3969            cmd_begin_debug_utils_label_ext: if instance_enabled.ext_debug_utils {
3970                std::mem::transmute(
3971                    symbol(
3972                        crate::extensions::ext_debug_utils::FN_CMD_BEGIN_DEBUG_UTILS_LABEL_EXT,
3973                    ),
3974                )
3975            } else {
3976                None
3977            },
3978            cmd_end_debug_utils_label_ext: if instance_enabled.ext_debug_utils {
3979                std::mem::transmute(
3980                    symbol(
3981                        crate::extensions::ext_debug_utils::FN_CMD_END_DEBUG_UTILS_LABEL_EXT,
3982                    ),
3983                )
3984            } else {
3985                None
3986            },
3987            cmd_insert_debug_utils_label_ext: if instance_enabled.ext_debug_utils {
3988                std::mem::transmute(
3989                    symbol(
3990                        crate::extensions::ext_debug_utils::FN_CMD_INSERT_DEBUG_UTILS_LABEL_EXT,
3991                    ),
3992                )
3993            } else {
3994                None
3995            },
3996            get_memory_host_pointer_properties_ext: if device_enabled
3997                .ext_external_memory_host
3998            {
3999                std::mem::transmute(
4000                    symbol(
4001                        crate::extensions::ext_external_memory_host::FN_GET_MEMORY_HOST_POINTER_PROPERTIES_EXT,
4002                    ),
4003                )
4004            } else {
4005                None
4006            },
4007            cmd_write_buffer_marker_amd: if device_enabled.amd_buffer_marker {
4008                std::mem::transmute(
4009                    symbol(
4010                        crate::extensions::amd_buffer_marker::FN_CMD_WRITE_BUFFER_MARKER_AMD,
4011                    ),
4012                )
4013            } else {
4014                None
4015            },
4016            create_render_pass2: if instance_enabled.vk1_2 {
4017                std::mem::transmute(symbol(crate::vk1_2::FN_CREATE_RENDER_PASS2))
4018            } else {
4019                None
4020            },
4021            cmd_begin_render_pass2: if instance_enabled.vk1_2 {
4022                std::mem::transmute(symbol(crate::vk1_2::FN_CMD_BEGIN_RENDER_PASS2))
4023            } else {
4024                None
4025            },
4026            cmd_next_subpass2: if instance_enabled.vk1_2 {
4027                std::mem::transmute(symbol(crate::vk1_2::FN_CMD_NEXT_SUBPASS2))
4028            } else {
4029                None
4030            },
4031            cmd_end_render_pass2: if instance_enabled.vk1_2 {
4032                std::mem::transmute(symbol(crate::vk1_2::FN_CMD_END_RENDER_PASS2))
4033            } else {
4034                None
4035            },
4036            get_semaphore_counter_value: if instance_enabled.vk1_2 {
4037                std::mem::transmute(symbol(crate::vk1_2::FN_GET_SEMAPHORE_COUNTER_VALUE))
4038            } else {
4039                None
4040            },
4041            wait_semaphores: if instance_enabled.vk1_2 {
4042                std::mem::transmute(symbol(crate::vk1_2::FN_WAIT_SEMAPHORES))
4043            } else {
4044                None
4045            },
4046            signal_semaphore: if instance_enabled.vk1_2 {
4047                std::mem::transmute(symbol(crate::vk1_2::FN_SIGNAL_SEMAPHORE))
4048            } else {
4049                None
4050            },
4051            get_android_hardware_buffer_properties_android: if device_enabled
4052                .android_external_memory_android_hardware_buffer
4053            {
4054                std::mem::transmute(
4055                    symbol(
4056                        crate::extensions::android_external_memory_android_hardware_buffer::FN_GET_ANDROID_HARDWARE_BUFFER_PROPERTIES_ANDROID,
4057                    ),
4058                )
4059            } else {
4060                None
4061            },
4062            get_memory_android_hardware_buffer_android: if device_enabled
4063                .android_external_memory_android_hardware_buffer
4064            {
4065                std::mem::transmute(
4066                    symbol(
4067                        crate::extensions::android_external_memory_android_hardware_buffer::FN_GET_MEMORY_ANDROID_HARDWARE_BUFFER_ANDROID,
4068                    ),
4069                )
4070            } else {
4071                None
4072            },
4073            cmd_draw_indirect_count: if instance_enabled.vk1_2 {
4074                std::mem::transmute(symbol(crate::vk1_2::FN_CMD_DRAW_INDIRECT_COUNT))
4075            } else {
4076                None
4077            },
4078            cmd_draw_indexed_indirect_count: if instance_enabled.vk1_2 {
4079                std::mem::transmute(
4080                    symbol(crate::vk1_2::FN_CMD_DRAW_INDEXED_INDIRECT_COUNT),
4081                )
4082            } else {
4083                None
4084            },
4085            cmd_set_checkpoint_nv: if device_enabled.nv_device_diagnostic_checkpoints {
4086                std::mem::transmute(
4087                    symbol(
4088                        crate::extensions::nv_device_diagnostic_checkpoints::FN_CMD_SET_CHECKPOINT_NV,
4089                    ),
4090                )
4091            } else {
4092                None
4093            },
4094            get_queue_checkpoint_data_nv: if device_enabled
4095                .nv_device_diagnostic_checkpoints
4096            {
4097                std::mem::transmute(
4098                    symbol(
4099                        crate::extensions::nv_device_diagnostic_checkpoints::FN_GET_QUEUE_CHECKPOINT_DATA_NV,
4100                    ),
4101                )
4102            } else {
4103                None
4104            },
4105            cmd_bind_transform_feedback_buffers_ext: if device_enabled
4106                .ext_transform_feedback
4107            {
4108                std::mem::transmute(
4109                    symbol(
4110                        crate::extensions::ext_transform_feedback::FN_CMD_BIND_TRANSFORM_FEEDBACK_BUFFERS_EXT,
4111                    ),
4112                )
4113            } else {
4114                None
4115            },
4116            cmd_begin_transform_feedback_ext: if device_enabled.ext_transform_feedback {
4117                std::mem::transmute(
4118                    symbol(
4119                        crate::extensions::ext_transform_feedback::FN_CMD_BEGIN_TRANSFORM_FEEDBACK_EXT,
4120                    ),
4121                )
4122            } else {
4123                None
4124            },
4125            cmd_end_transform_feedback_ext: if device_enabled.ext_transform_feedback {
4126                std::mem::transmute(
4127                    symbol(
4128                        crate::extensions::ext_transform_feedback::FN_CMD_END_TRANSFORM_FEEDBACK_EXT,
4129                    ),
4130                )
4131            } else {
4132                None
4133            },
4134            cmd_begin_query_indexed_ext: if device_enabled.ext_transform_feedback {
4135                std::mem::transmute(
4136                    symbol(
4137                        crate::extensions::ext_transform_feedback::FN_CMD_BEGIN_QUERY_INDEXED_EXT,
4138                    ),
4139                )
4140            } else {
4141                None
4142            },
4143            cmd_end_query_indexed_ext: if device_enabled.ext_transform_feedback {
4144                std::mem::transmute(
4145                    symbol(
4146                        crate::extensions::ext_transform_feedback::FN_CMD_END_QUERY_INDEXED_EXT,
4147                    ),
4148                )
4149            } else {
4150                None
4151            },
4152            cmd_draw_indirect_byte_count_ext: if device_enabled.ext_transform_feedback {
4153                std::mem::transmute(
4154                    symbol(
4155                        crate::extensions::ext_transform_feedback::FN_CMD_DRAW_INDIRECT_BYTE_COUNT_EXT,
4156                    ),
4157                )
4158            } else {
4159                None
4160            },
4161            cmd_set_exclusive_scissor_nv: if device_enabled.nv_scissor_exclusive {
4162                std::mem::transmute(
4163                    symbol(
4164                        crate::extensions::nv_scissor_exclusive::FN_CMD_SET_EXCLUSIVE_SCISSOR_NV,
4165                    ),
4166                )
4167            } else {
4168                None
4169            },
4170            cmd_bind_shading_rate_image_nv: if device_enabled.nv_shading_rate_image {
4171                std::mem::transmute(
4172                    symbol(
4173                        crate::extensions::nv_shading_rate_image::FN_CMD_BIND_SHADING_RATE_IMAGE_NV,
4174                    ),
4175                )
4176            } else {
4177                None
4178            },
4179            cmd_set_viewport_shading_rate_palette_nv: if device_enabled
4180                .nv_shading_rate_image
4181            {
4182                std::mem::transmute(
4183                    symbol(
4184                        crate::extensions::nv_shading_rate_image::FN_CMD_SET_VIEWPORT_SHADING_RATE_PALETTE_NV,
4185                    ),
4186                )
4187            } else {
4188                None
4189            },
4190            cmd_set_coarse_sample_order_nv: if device_enabled.nv_shading_rate_image {
4191                std::mem::transmute(
4192                    symbol(
4193                        crate::extensions::nv_shading_rate_image::FN_CMD_SET_COARSE_SAMPLE_ORDER_NV,
4194                    ),
4195                )
4196            } else {
4197                None
4198            },
4199            cmd_draw_mesh_tasks_nv: if device_enabled.nv_mesh_shader {
4200                std::mem::transmute(
4201                    symbol(crate::extensions::nv_mesh_shader::FN_CMD_DRAW_MESH_TASKS_NV),
4202                )
4203            } else {
4204                None
4205            },
4206            cmd_draw_mesh_tasks_indirect_nv: if device_enabled.nv_mesh_shader {
4207                std::mem::transmute(
4208                    symbol(
4209                        crate::extensions::nv_mesh_shader::FN_CMD_DRAW_MESH_TASKS_INDIRECT_NV,
4210                    ),
4211                )
4212            } else {
4213                None
4214            },
4215            cmd_draw_mesh_tasks_indirect_count_nv: if device_enabled.nv_mesh_shader {
4216                std::mem::transmute(
4217                    symbol(
4218                        crate::extensions::nv_mesh_shader::FN_CMD_DRAW_MESH_TASKS_INDIRECT_COUNT_NV,
4219                    ),
4220                )
4221            } else {
4222                None
4223            },
4224            compile_deferred_nv: if device_enabled.nv_ray_tracing {
4225                std::mem::transmute(
4226                    symbol(crate::extensions::nv_ray_tracing::FN_COMPILE_DEFERRED_NV),
4227                )
4228            } else {
4229                None
4230            },
4231            create_acceleration_structure_nv: if device_enabled.nv_ray_tracing {
4232                std::mem::transmute(
4233                    symbol(
4234                        crate::extensions::nv_ray_tracing::FN_CREATE_ACCELERATION_STRUCTURE_NV,
4235                    ),
4236                )
4237            } else {
4238                None
4239            },
4240            cmd_bind_invocation_mask_huawei: if device_enabled.huawei_invocation_mask {
4241                std::mem::transmute(
4242                    symbol(
4243                        crate::extensions::huawei_invocation_mask::FN_CMD_BIND_INVOCATION_MASK_HUAWEI,
4244                    ),
4245                )
4246            } else {
4247                None
4248            },
4249            destroy_acceleration_structure_khr: if device_enabled
4250                .khr_acceleration_structure
4251            {
4252                std::mem::transmute(
4253                    symbol(
4254                        crate::extensions::khr_acceleration_structure::FN_DESTROY_ACCELERATION_STRUCTURE_KHR,
4255                    ),
4256                )
4257            } else {
4258                None
4259            },
4260            destroy_acceleration_structure_nv: if device_enabled.nv_ray_tracing {
4261                std::mem::transmute(
4262                    symbol(
4263                        crate::extensions::nv_ray_tracing::FN_DESTROY_ACCELERATION_STRUCTURE_NV,
4264                    ),
4265                )
4266            } else {
4267                None
4268            },
4269            get_acceleration_structure_memory_requirements_nv: if device_enabled
4270                .nv_ray_tracing
4271            {
4272                std::mem::transmute(
4273                    symbol(
4274                        crate::extensions::nv_ray_tracing::FN_GET_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_NV,
4275                    ),
4276                )
4277            } else {
4278                None
4279            },
4280            bind_acceleration_structure_memory_nv: if device_enabled.nv_ray_tracing {
4281                std::mem::transmute(
4282                    symbol(
4283                        crate::extensions::nv_ray_tracing::FN_BIND_ACCELERATION_STRUCTURE_MEMORY_NV,
4284                    ),
4285                )
4286            } else {
4287                None
4288            },
4289            cmd_copy_acceleration_structure_nv: if device_enabled.nv_ray_tracing {
4290                std::mem::transmute(
4291                    symbol(
4292                        crate::extensions::nv_ray_tracing::FN_CMD_COPY_ACCELERATION_STRUCTURE_NV,
4293                    ),
4294                )
4295            } else {
4296                None
4297            },
4298            cmd_copy_acceleration_structure_khr: if device_enabled
4299                .khr_acceleration_structure
4300            {
4301                std::mem::transmute(
4302                    symbol(
4303                        crate::extensions::khr_acceleration_structure::FN_CMD_COPY_ACCELERATION_STRUCTURE_KHR,
4304                    ),
4305                )
4306            } else {
4307                None
4308            },
4309            copy_acceleration_structure_khr: if device_enabled.khr_acceleration_structure
4310            {
4311                std::mem::transmute(
4312                    symbol(
4313                        crate::extensions::khr_acceleration_structure::FN_COPY_ACCELERATION_STRUCTURE_KHR,
4314                    ),
4315                )
4316            } else {
4317                None
4318            },
4319            cmd_copy_acceleration_structure_to_memory_khr: if device_enabled
4320                .khr_acceleration_structure
4321            {
4322                std::mem::transmute(
4323                    symbol(
4324                        crate::extensions::khr_acceleration_structure::FN_CMD_COPY_ACCELERATION_STRUCTURE_TO_MEMORY_KHR,
4325                    ),
4326                )
4327            } else {
4328                None
4329            },
4330            copy_acceleration_structure_to_memory_khr: if device_enabled
4331                .khr_acceleration_structure
4332            {
4333                std::mem::transmute(
4334                    symbol(
4335                        crate::extensions::khr_acceleration_structure::FN_COPY_ACCELERATION_STRUCTURE_TO_MEMORY_KHR,
4336                    ),
4337                )
4338            } else {
4339                None
4340            },
4341            cmd_copy_memory_to_acceleration_structure_khr: if device_enabled
4342                .khr_acceleration_structure
4343            {
4344                std::mem::transmute(
4345                    symbol(
4346                        crate::extensions::khr_acceleration_structure::FN_CMD_COPY_MEMORY_TO_ACCELERATION_STRUCTURE_KHR,
4347                    ),
4348                )
4349            } else {
4350                None
4351            },
4352            copy_memory_to_acceleration_structure_khr: if device_enabled
4353                .khr_acceleration_structure
4354            {
4355                std::mem::transmute(
4356                    symbol(
4357                        crate::extensions::khr_acceleration_structure::FN_COPY_MEMORY_TO_ACCELERATION_STRUCTURE_KHR,
4358                    ),
4359                )
4360            } else {
4361                None
4362            },
4363            cmd_write_acceleration_structures_properties_khr: if device_enabled
4364                .khr_acceleration_structure
4365            {
4366                std::mem::transmute(
4367                    symbol(
4368                        crate::extensions::khr_acceleration_structure::FN_CMD_WRITE_ACCELERATION_STRUCTURES_PROPERTIES_KHR,
4369                    ),
4370                )
4371            } else {
4372                None
4373            },
4374            cmd_write_acceleration_structures_properties_nv: if device_enabled
4375                .nv_ray_tracing
4376            {
4377                std::mem::transmute(
4378                    symbol(
4379                        crate::extensions::nv_ray_tracing::FN_CMD_WRITE_ACCELERATION_STRUCTURES_PROPERTIES_NV,
4380                    ),
4381                )
4382            } else {
4383                None
4384            },
4385            cmd_build_acceleration_structure_nv: if device_enabled.nv_ray_tracing {
4386                std::mem::transmute(
4387                    symbol(
4388                        crate::extensions::nv_ray_tracing::FN_CMD_BUILD_ACCELERATION_STRUCTURE_NV,
4389                    ),
4390                )
4391            } else {
4392                None
4393            },
4394            write_acceleration_structures_properties_khr: if device_enabled
4395                .khr_acceleration_structure
4396            {
4397                std::mem::transmute(
4398                    symbol(
4399                        crate::extensions::khr_acceleration_structure::FN_WRITE_ACCELERATION_STRUCTURES_PROPERTIES_KHR,
4400                    ),
4401                )
4402            } else {
4403                None
4404            },
4405            cmd_trace_rays_khr: if device_enabled.khr_ray_tracing_pipeline {
4406                std::mem::transmute(
4407                    symbol(
4408                        crate::extensions::khr_ray_tracing_pipeline::FN_CMD_TRACE_RAYS_KHR,
4409                    ),
4410                )
4411            } else {
4412                None
4413            },
4414            cmd_trace_rays_nv: if device_enabled.nv_ray_tracing {
4415                std::mem::transmute(
4416                    symbol(crate::extensions::nv_ray_tracing::FN_CMD_TRACE_RAYS_NV),
4417                )
4418            } else {
4419                None
4420            },
4421            get_ray_tracing_shader_group_handles_khr: if device_enabled
4422                .khr_ray_tracing_pipeline
4423            {
4424                std::mem::transmute(
4425                    symbol(
4426                        crate::extensions::khr_ray_tracing_pipeline::FN_GET_RAY_TRACING_SHADER_GROUP_HANDLES_KHR,
4427                    ),
4428                )
4429            } else {
4430                None
4431            },
4432            get_ray_tracing_capture_replay_shader_group_handles_khr: if device_enabled
4433                .khr_ray_tracing_pipeline
4434            {
4435                std::mem::transmute(
4436                    symbol(
4437                        crate::extensions::khr_ray_tracing_pipeline::FN_GET_RAY_TRACING_CAPTURE_REPLAY_SHADER_GROUP_HANDLES_KHR,
4438                    ),
4439                )
4440            } else {
4441                None
4442            },
4443            get_acceleration_structure_handle_nv: if device_enabled.nv_ray_tracing {
4444                std::mem::transmute(
4445                    symbol(
4446                        crate::extensions::nv_ray_tracing::FN_GET_ACCELERATION_STRUCTURE_HANDLE_NV,
4447                    ),
4448                )
4449            } else {
4450                None
4451            },
4452            create_ray_tracing_pipelines_nv: if device_enabled.nv_ray_tracing {
4453                std::mem::transmute(
4454                    symbol(
4455                        crate::extensions::nv_ray_tracing::FN_CREATE_RAY_TRACING_PIPELINES_NV,
4456                    ),
4457                )
4458            } else {
4459                None
4460            },
4461            create_ray_tracing_pipelines_khr: if device_enabled.khr_ray_tracing_pipeline
4462            {
4463                std::mem::transmute(
4464                    symbol(
4465                        crate::extensions::khr_ray_tracing_pipeline::FN_CREATE_RAY_TRACING_PIPELINES_KHR,
4466                    ),
4467                )
4468            } else {
4469                None
4470            },
4471            cmd_trace_rays_indirect_khr: if device_enabled.khr_ray_tracing_pipeline {
4472                std::mem::transmute(
4473                    symbol(
4474                        crate::extensions::khr_ray_tracing_pipeline::FN_CMD_TRACE_RAYS_INDIRECT_KHR,
4475                    ),
4476                )
4477            } else {
4478                None
4479            },
4480            cmd_trace_rays_indirect2_khr: if (device_enabled.khr_ray_tracing_maintenance1
4481                && device_enabled.khr_ray_tracing_pipeline)
4482            {
4483                std::mem::transmute(
4484                    symbol(
4485                        crate::extensions::khr_ray_tracing_maintenance1::FN_CMD_TRACE_RAYS_INDIRECT2_KHR,
4486                    ),
4487                )
4488            } else {
4489                None
4490            },
4491            get_device_acceleration_structure_compatibility_khr: if device_enabled
4492                .khr_acceleration_structure
4493            {
4494                std::mem::transmute(
4495                    symbol(
4496                        crate::extensions::khr_acceleration_structure::FN_GET_DEVICE_ACCELERATION_STRUCTURE_COMPATIBILITY_KHR,
4497                    ),
4498                )
4499            } else {
4500                None
4501            },
4502            get_ray_tracing_shader_group_stack_size_khr: if device_enabled
4503                .khr_ray_tracing_pipeline
4504            {
4505                std::mem::transmute(
4506                    symbol(
4507                        crate::extensions::khr_ray_tracing_pipeline::FN_GET_RAY_TRACING_SHADER_GROUP_STACK_SIZE_KHR,
4508                    ),
4509                )
4510            } else {
4511                None
4512            },
4513            cmd_set_ray_tracing_pipeline_stack_size_khr: if device_enabled
4514                .khr_ray_tracing_pipeline
4515            {
4516                std::mem::transmute(
4517                    symbol(
4518                        crate::extensions::khr_ray_tracing_pipeline::FN_CMD_SET_RAY_TRACING_PIPELINE_STACK_SIZE_KHR,
4519                    ),
4520                )
4521            } else {
4522                None
4523            },
4524            get_image_view_handle_nvx: if device_enabled.nvx_image_view_handle {
4525                std::mem::transmute(
4526                    symbol(
4527                        crate::extensions::nvx_image_view_handle::FN_GET_IMAGE_VIEW_HANDLE_NVX,
4528                    ),
4529                )
4530            } else {
4531                None
4532            },
4533            get_image_view_address_nvx: if device_enabled.nvx_image_view_handle {
4534                std::mem::transmute(
4535                    symbol(
4536                        crate::extensions::nvx_image_view_handle::FN_GET_IMAGE_VIEW_ADDRESS_NVX,
4537                    ),
4538                )
4539            } else {
4540                None
4541            },
4542            get_device_group_surface_present_modes2_ext: if (device_enabled
4543                .ext_full_screen_exclusive && device_enabled.khr_device_group)
4544                || (device_enabled.ext_full_screen_exclusive && instance_enabled.vk1_1)
4545            {
4546                std::mem::transmute(
4547                    symbol(
4548                        crate::extensions::ext_full_screen_exclusive::FN_GET_DEVICE_GROUP_SURFACE_PRESENT_MODES2_EXT,
4549                    ),
4550                )
4551            } else {
4552                None
4553            },
4554            acquire_full_screen_exclusive_mode_ext: if device_enabled
4555                .ext_full_screen_exclusive
4556            {
4557                std::mem::transmute(
4558                    symbol(
4559                        crate::extensions::ext_full_screen_exclusive::FN_ACQUIRE_FULL_SCREEN_EXCLUSIVE_MODE_EXT,
4560                    ),
4561                )
4562            } else {
4563                None
4564            },
4565            release_full_screen_exclusive_mode_ext: if device_enabled
4566                .ext_full_screen_exclusive
4567            {
4568                std::mem::transmute(
4569                    symbol(
4570                        crate::extensions::ext_full_screen_exclusive::FN_RELEASE_FULL_SCREEN_EXCLUSIVE_MODE_EXT,
4571                    ),
4572                )
4573            } else {
4574                None
4575            },
4576            acquire_profiling_lock_khr: if device_enabled.khr_performance_query {
4577                std::mem::transmute(
4578                    symbol(
4579                        crate::extensions::khr_performance_query::FN_ACQUIRE_PROFILING_LOCK_KHR,
4580                    ),
4581                )
4582            } else {
4583                None
4584            },
4585            release_profiling_lock_khr: if device_enabled.khr_performance_query {
4586                std::mem::transmute(
4587                    symbol(
4588                        crate::extensions::khr_performance_query::FN_RELEASE_PROFILING_LOCK_KHR,
4589                    ),
4590                )
4591            } else {
4592                None
4593            },
4594            get_image_drm_format_modifier_properties_ext: if device_enabled
4595                .ext_image_drm_format_modifier
4596            {
4597                std::mem::transmute(
4598                    symbol(
4599                        crate::extensions::ext_image_drm_format_modifier::FN_GET_IMAGE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT,
4600                    ),
4601                )
4602            } else {
4603                None
4604            },
4605            get_buffer_opaque_capture_address: if instance_enabled.vk1_2 {
4606                std::mem::transmute(
4607                    symbol(crate::vk1_2::FN_GET_BUFFER_OPAQUE_CAPTURE_ADDRESS),
4608                )
4609            } else {
4610                None
4611            },
4612            get_buffer_device_address: if instance_enabled.vk1_2 {
4613                std::mem::transmute(symbol(crate::vk1_2::FN_GET_BUFFER_DEVICE_ADDRESS))
4614            } else {
4615                None
4616            },
4617            initialize_performance_api_intel: if device_enabled.intel_performance_query {
4618                std::mem::transmute(
4619                    symbol(
4620                        crate::extensions::intel_performance_query::FN_INITIALIZE_PERFORMANCE_API_INTEL,
4621                    ),
4622                )
4623            } else {
4624                None
4625            },
4626            uninitialize_performance_api_intel: if device_enabled.intel_performance_query
4627            {
4628                std::mem::transmute(
4629                    symbol(
4630                        crate::extensions::intel_performance_query::FN_UNINITIALIZE_PERFORMANCE_API_INTEL,
4631                    ),
4632                )
4633            } else {
4634                None
4635            },
4636            cmd_set_performance_marker_intel: if device_enabled.intel_performance_query {
4637                std::mem::transmute(
4638                    symbol(
4639                        crate::extensions::intel_performance_query::FN_CMD_SET_PERFORMANCE_MARKER_INTEL,
4640                    ),
4641                )
4642            } else {
4643                None
4644            },
4645            cmd_set_performance_stream_marker_intel: if device_enabled
4646                .intel_performance_query
4647            {
4648                std::mem::transmute(
4649                    symbol(
4650                        crate::extensions::intel_performance_query::FN_CMD_SET_PERFORMANCE_STREAM_MARKER_INTEL,
4651                    ),
4652                )
4653            } else {
4654                None
4655            },
4656            cmd_set_performance_override_intel: if device_enabled.intel_performance_query
4657            {
4658                std::mem::transmute(
4659                    symbol(
4660                        crate::extensions::intel_performance_query::FN_CMD_SET_PERFORMANCE_OVERRIDE_INTEL,
4661                    ),
4662                )
4663            } else {
4664                None
4665            },
4666            acquire_performance_configuration_intel: if device_enabled
4667                .intel_performance_query
4668            {
4669                std::mem::transmute(
4670                    symbol(
4671                        crate::extensions::intel_performance_query::FN_ACQUIRE_PERFORMANCE_CONFIGURATION_INTEL,
4672                    ),
4673                )
4674            } else {
4675                None
4676            },
4677            release_performance_configuration_intel: if device_enabled
4678                .intel_performance_query
4679            {
4680                std::mem::transmute(
4681                    symbol(
4682                        crate::extensions::intel_performance_query::FN_RELEASE_PERFORMANCE_CONFIGURATION_INTEL,
4683                    ),
4684                )
4685            } else {
4686                None
4687            },
4688            queue_set_performance_configuration_intel: if device_enabled
4689                .intel_performance_query
4690            {
4691                std::mem::transmute(
4692                    symbol(
4693                        crate::extensions::intel_performance_query::FN_QUEUE_SET_PERFORMANCE_CONFIGURATION_INTEL,
4694                    ),
4695                )
4696            } else {
4697                None
4698            },
4699            get_performance_parameter_intel: if device_enabled.intel_performance_query {
4700                std::mem::transmute(
4701                    symbol(
4702                        crate::extensions::intel_performance_query::FN_GET_PERFORMANCE_PARAMETER_INTEL,
4703                    ),
4704                )
4705            } else {
4706                None
4707            },
4708            get_device_memory_opaque_capture_address: if instance_enabled.vk1_2 {
4709                std::mem::transmute(
4710                    symbol(crate::vk1_2::FN_GET_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS),
4711                )
4712            } else {
4713                None
4714            },
4715            get_pipeline_executable_properties_khr: if device_enabled
4716                .khr_pipeline_executable_properties
4717            {
4718                std::mem::transmute(
4719                    symbol(
4720                        crate::extensions::khr_pipeline_executable_properties::FN_GET_PIPELINE_EXECUTABLE_PROPERTIES_KHR,
4721                    ),
4722                )
4723            } else {
4724                None
4725            },
4726            get_pipeline_executable_statistics_khr: if device_enabled
4727                .khr_pipeline_executable_properties
4728            {
4729                std::mem::transmute(
4730                    symbol(
4731                        crate::extensions::khr_pipeline_executable_properties::FN_GET_PIPELINE_EXECUTABLE_STATISTICS_KHR,
4732                    ),
4733                )
4734            } else {
4735                None
4736            },
4737            get_pipeline_executable_internal_representations_khr: if device_enabled
4738                .khr_pipeline_executable_properties
4739            {
4740                std::mem::transmute(
4741                    symbol(
4742                        crate::extensions::khr_pipeline_executable_properties::FN_GET_PIPELINE_EXECUTABLE_INTERNAL_REPRESENTATIONS_KHR,
4743                    ),
4744                )
4745            } else {
4746                None
4747            },
4748            cmd_set_line_stipple_ext: if device_enabled.ext_line_rasterization {
4749                std::mem::transmute(
4750                    symbol(
4751                        crate::extensions::ext_line_rasterization::FN_CMD_SET_LINE_STIPPLE_EXT,
4752                    ),
4753                )
4754            } else {
4755                None
4756            },
4757            create_acceleration_structure_khr: if device_enabled
4758                .khr_acceleration_structure
4759            {
4760                std::mem::transmute(
4761                    symbol(
4762                        crate::extensions::khr_acceleration_structure::FN_CREATE_ACCELERATION_STRUCTURE_KHR,
4763                    ),
4764                )
4765            } else {
4766                None
4767            },
4768            cmd_build_acceleration_structures_khr: if device_enabled
4769                .khr_acceleration_structure
4770            {
4771                std::mem::transmute(
4772                    symbol(
4773                        crate::extensions::khr_acceleration_structure::FN_CMD_BUILD_ACCELERATION_STRUCTURES_KHR,
4774                    ),
4775                )
4776            } else {
4777                None
4778            },
4779            cmd_build_acceleration_structures_indirect_khr: if device_enabled
4780                .khr_acceleration_structure
4781            {
4782                std::mem::transmute(
4783                    symbol(
4784                        crate::extensions::khr_acceleration_structure::FN_CMD_BUILD_ACCELERATION_STRUCTURES_INDIRECT_KHR,
4785                    ),
4786                )
4787            } else {
4788                None
4789            },
4790            build_acceleration_structures_khr: if device_enabled
4791                .khr_acceleration_structure
4792            {
4793                std::mem::transmute(
4794                    symbol(
4795                        crate::extensions::khr_acceleration_structure::FN_BUILD_ACCELERATION_STRUCTURES_KHR,
4796                    ),
4797                )
4798            } else {
4799                None
4800            },
4801            get_acceleration_structure_device_address_khr: if device_enabled
4802                .khr_acceleration_structure
4803            {
4804                std::mem::transmute(
4805                    symbol(
4806                        crate::extensions::khr_acceleration_structure::FN_GET_ACCELERATION_STRUCTURE_DEVICE_ADDRESS_KHR,
4807                    ),
4808                )
4809            } else {
4810                None
4811            },
4812            create_deferred_operation_khr: if device_enabled.khr_deferred_host_operations
4813            {
4814                std::mem::transmute(
4815                    symbol(
4816                        crate::extensions::khr_deferred_host_operations::FN_CREATE_DEFERRED_OPERATION_KHR,
4817                    ),
4818                )
4819            } else {
4820                None
4821            },
4822            destroy_deferred_operation_khr: if device_enabled
4823                .khr_deferred_host_operations
4824            {
4825                std::mem::transmute(
4826                    symbol(
4827                        crate::extensions::khr_deferred_host_operations::FN_DESTROY_DEFERRED_OPERATION_KHR,
4828                    ),
4829                )
4830            } else {
4831                None
4832            },
4833            get_deferred_operation_max_concurrency_khr: if device_enabled
4834                .khr_deferred_host_operations
4835            {
4836                std::mem::transmute(
4837                    symbol(
4838                        crate::extensions::khr_deferred_host_operations::FN_GET_DEFERRED_OPERATION_MAX_CONCURRENCY_KHR,
4839                    ),
4840                )
4841            } else {
4842                None
4843            },
4844            get_deferred_operation_result_khr: if device_enabled
4845                .khr_deferred_host_operations
4846            {
4847                std::mem::transmute(
4848                    symbol(
4849                        crate::extensions::khr_deferred_host_operations::FN_GET_DEFERRED_OPERATION_RESULT_KHR,
4850                    ),
4851                )
4852            } else {
4853                None
4854            },
4855            deferred_operation_join_khr: if device_enabled.khr_deferred_host_operations {
4856                std::mem::transmute(
4857                    symbol(
4858                        crate::extensions::khr_deferred_host_operations::FN_DEFERRED_OPERATION_JOIN_KHR,
4859                    ),
4860                )
4861            } else {
4862                None
4863            },
4864            cmd_set_cull_mode: if instance_enabled.vk1_3 {
4865                std::mem::transmute(symbol(crate::vk1_3::FN_CMD_SET_CULL_MODE))
4866            } else {
4867                None
4868            },
4869            cmd_set_front_face: if instance_enabled.vk1_3 {
4870                std::mem::transmute(symbol(crate::vk1_3::FN_CMD_SET_FRONT_FACE))
4871            } else {
4872                None
4873            },
4874            cmd_set_primitive_topology: if instance_enabled.vk1_3 {
4875                std::mem::transmute(symbol(crate::vk1_3::FN_CMD_SET_PRIMITIVE_TOPOLOGY))
4876            } else {
4877                None
4878            },
4879            cmd_set_viewport_with_count: if instance_enabled.vk1_3 {
4880                std::mem::transmute(symbol(crate::vk1_3::FN_CMD_SET_VIEWPORT_WITH_COUNT))
4881            } else {
4882                None
4883            },
4884            cmd_set_scissor_with_count: if instance_enabled.vk1_3 {
4885                std::mem::transmute(symbol(crate::vk1_3::FN_CMD_SET_SCISSOR_WITH_COUNT))
4886            } else {
4887                None
4888            },
4889            cmd_bind_vertex_buffers2: if instance_enabled.vk1_3 {
4890                std::mem::transmute(symbol(crate::vk1_3::FN_CMD_BIND_VERTEX_BUFFERS2))
4891            } else {
4892                None
4893            },
4894            cmd_set_depth_test_enable: if instance_enabled.vk1_3 {
4895                std::mem::transmute(symbol(crate::vk1_3::FN_CMD_SET_DEPTH_TEST_ENABLE))
4896            } else {
4897                None
4898            },
4899            cmd_set_depth_write_enable: if instance_enabled.vk1_3 {
4900                std::mem::transmute(symbol(crate::vk1_3::FN_CMD_SET_DEPTH_WRITE_ENABLE))
4901            } else {
4902                None
4903            },
4904            cmd_set_depth_compare_op: if instance_enabled.vk1_3 {
4905                std::mem::transmute(symbol(crate::vk1_3::FN_CMD_SET_DEPTH_COMPARE_OP))
4906            } else {
4907                None
4908            },
4909            cmd_set_depth_bounds_test_enable: if instance_enabled.vk1_3 {
4910                std::mem::transmute(
4911                    symbol(crate::vk1_3::FN_CMD_SET_DEPTH_BOUNDS_TEST_ENABLE),
4912                )
4913            } else {
4914                None
4915            },
4916            cmd_set_stencil_test_enable: if instance_enabled.vk1_3 {
4917                std::mem::transmute(symbol(crate::vk1_3::FN_CMD_SET_STENCIL_TEST_ENABLE))
4918            } else {
4919                None
4920            },
4921            cmd_set_stencil_op: if instance_enabled.vk1_3 {
4922                std::mem::transmute(symbol(crate::vk1_3::FN_CMD_SET_STENCIL_OP))
4923            } else {
4924                None
4925            },
4926            cmd_set_patch_control_points_ext: if device_enabled
4927                .ext_extended_dynamic_state2
4928            {
4929                std::mem::transmute(
4930                    symbol(
4931                        crate::extensions::ext_extended_dynamic_state2::FN_CMD_SET_PATCH_CONTROL_POINTS_EXT,
4932                    ),
4933                )
4934            } else {
4935                None
4936            },
4937            cmd_set_rasterizer_discard_enable: if instance_enabled.vk1_3 {
4938                std::mem::transmute(
4939                    symbol(crate::vk1_3::FN_CMD_SET_RASTERIZER_DISCARD_ENABLE),
4940                )
4941            } else {
4942                None
4943            },
4944            cmd_set_depth_bias_enable: if instance_enabled.vk1_3 {
4945                std::mem::transmute(symbol(crate::vk1_3::FN_CMD_SET_DEPTH_BIAS_ENABLE))
4946            } else {
4947                None
4948            },
4949            cmd_set_logic_op_ext: if device_enabled.ext_extended_dynamic_state2 {
4950                std::mem::transmute(
4951                    symbol(
4952                        crate::extensions::ext_extended_dynamic_state2::FN_CMD_SET_LOGIC_OP_EXT,
4953                    ),
4954                )
4955            } else {
4956                None
4957            },
4958            cmd_set_primitive_restart_enable: if instance_enabled.vk1_3 {
4959                std::mem::transmute(
4960                    symbol(crate::vk1_3::FN_CMD_SET_PRIMITIVE_RESTART_ENABLE),
4961                )
4962            } else {
4963                None
4964            },
4965            create_private_data_slot: if instance_enabled.vk1_3 {
4966                std::mem::transmute(symbol(crate::vk1_3::FN_CREATE_PRIVATE_DATA_SLOT))
4967            } else {
4968                None
4969            },
4970            destroy_private_data_slot: if instance_enabled.vk1_3 {
4971                std::mem::transmute(symbol(crate::vk1_3::FN_DESTROY_PRIVATE_DATA_SLOT))
4972            } else {
4973                None
4974            },
4975            set_private_data: if instance_enabled.vk1_3 {
4976                std::mem::transmute(symbol(crate::vk1_3::FN_SET_PRIVATE_DATA))
4977            } else {
4978                None
4979            },
4980            get_private_data: if instance_enabled.vk1_3 {
4981                std::mem::transmute(symbol(crate::vk1_3::FN_GET_PRIVATE_DATA))
4982            } else {
4983                None
4984            },
4985            cmd_copy_buffer2: if instance_enabled.vk1_3 {
4986                std::mem::transmute(symbol(crate::vk1_3::FN_CMD_COPY_BUFFER2))
4987            } else {
4988                None
4989            },
4990            cmd_copy_image2: if instance_enabled.vk1_3 {
4991                std::mem::transmute(symbol(crate::vk1_3::FN_CMD_COPY_IMAGE2))
4992            } else {
4993                None
4994            },
4995            cmd_blit_image2: if instance_enabled.vk1_3 {
4996                std::mem::transmute(symbol(crate::vk1_3::FN_CMD_BLIT_IMAGE2))
4997            } else {
4998                None
4999            },
5000            cmd_copy_buffer_to_image2: if instance_enabled.vk1_3 {
5001                std::mem::transmute(symbol(crate::vk1_3::FN_CMD_COPY_BUFFER_TO_IMAGE2))
5002            } else {
5003                None
5004            },
5005            cmd_copy_image_to_buffer2: if instance_enabled.vk1_3 {
5006                std::mem::transmute(symbol(crate::vk1_3::FN_CMD_COPY_IMAGE_TO_BUFFER2))
5007            } else {
5008                None
5009            },
5010            cmd_resolve_image2: if instance_enabled.vk1_3 {
5011                std::mem::transmute(symbol(crate::vk1_3::FN_CMD_RESOLVE_IMAGE2))
5012            } else {
5013                None
5014            },
5015            cmd_set_fragment_shading_rate_khr: if device_enabled
5016                .khr_fragment_shading_rate
5017            {
5018                std::mem::transmute(
5019                    symbol(
5020                        crate::extensions::khr_fragment_shading_rate::FN_CMD_SET_FRAGMENT_SHADING_RATE_KHR,
5021                    ),
5022                )
5023            } else {
5024                None
5025            },
5026            cmd_set_fragment_shading_rate_enum_nv: if device_enabled
5027                .nv_fragment_shading_rate_enums
5028            {
5029                std::mem::transmute(
5030                    symbol(
5031                        crate::extensions::nv_fragment_shading_rate_enums::FN_CMD_SET_FRAGMENT_SHADING_RATE_ENUM_NV,
5032                    ),
5033                )
5034            } else {
5035                None
5036            },
5037            get_acceleration_structure_build_sizes_khr: if device_enabled
5038                .khr_acceleration_structure
5039            {
5040                std::mem::transmute(
5041                    symbol(
5042                        crate::extensions::khr_acceleration_structure::FN_GET_ACCELERATION_STRUCTURE_BUILD_SIZES_KHR,
5043                    ),
5044                )
5045            } else {
5046                None
5047            },
5048            cmd_set_vertex_input_ext: if device_enabled.ext_vertex_input_dynamic_state {
5049                std::mem::transmute(
5050                    symbol(
5051                        crate::extensions::ext_vertex_input_dynamic_state::FN_CMD_SET_VERTEX_INPUT_EXT,
5052                    ),
5053                )
5054            } else {
5055                None
5056            },
5057            cmd_set_color_write_enable_ext: if device_enabled.ext_color_write_enable {
5058                std::mem::transmute(
5059                    symbol(
5060                        crate::extensions::ext_color_write_enable::FN_CMD_SET_COLOR_WRITE_ENABLE_EXT,
5061                    ),
5062                )
5063            } else {
5064                None
5065            },
5066            cmd_set_event2: if instance_enabled.vk1_3 {
5067                std::mem::transmute(symbol(crate::vk1_3::FN_CMD_SET_EVENT2))
5068            } else {
5069                None
5070            },
5071            cmd_reset_event2: if instance_enabled.vk1_3 {
5072                std::mem::transmute(symbol(crate::vk1_3::FN_CMD_RESET_EVENT2))
5073            } else {
5074                None
5075            },
5076            cmd_wait_events2: if instance_enabled.vk1_3 {
5077                std::mem::transmute(symbol(crate::vk1_3::FN_CMD_WAIT_EVENTS2))
5078            } else {
5079                None
5080            },
5081            cmd_pipeline_barrier2: if instance_enabled.vk1_3 {
5082                std::mem::transmute(symbol(crate::vk1_3::FN_CMD_PIPELINE_BARRIER2))
5083            } else {
5084                None
5085            },
5086            queue_submit2: if instance_enabled.vk1_3 {
5087                std::mem::transmute(symbol(crate::vk1_3::FN_QUEUE_SUBMIT2))
5088            } else {
5089                None
5090            },
5091            cmd_write_timestamp2: if instance_enabled.vk1_3 {
5092                std::mem::transmute(symbol(crate::vk1_3::FN_CMD_WRITE_TIMESTAMP2))
5093            } else {
5094                None
5095            },
5096            cmd_write_buffer_marker2_amd: if (device_enabled.khr_synchronization2
5097                && device_enabled.amd_buffer_marker)
5098            {
5099                std::mem::transmute(
5100                    symbol(
5101                        crate::extensions::khr_synchronization2::FN_CMD_WRITE_BUFFER_MARKER2_AMD,
5102                    ),
5103                )
5104            } else {
5105                None
5106            },
5107            get_queue_checkpoint_data2_nv: if (device_enabled.khr_synchronization2
5108                && device_enabled.nv_device_diagnostic_checkpoints)
5109            {
5110                std::mem::transmute(
5111                    symbol(
5112                        crate::extensions::khr_synchronization2::FN_GET_QUEUE_CHECKPOINT_DATA2_NV,
5113                    ),
5114                )
5115            } else {
5116                None
5117            },
5118            create_video_session_khr: if device_enabled.khr_video_queue {
5119                std::mem::transmute(
5120                    symbol(
5121                        crate::extensions::khr_video_queue::FN_CREATE_VIDEO_SESSION_KHR,
5122                    ),
5123                )
5124            } else {
5125                None
5126            },
5127            destroy_video_session_khr: if device_enabled.khr_video_queue {
5128                std::mem::transmute(
5129                    symbol(
5130                        crate::extensions::khr_video_queue::FN_DESTROY_VIDEO_SESSION_KHR,
5131                    ),
5132                )
5133            } else {
5134                None
5135            },
5136            create_video_session_parameters_khr: if device_enabled.khr_video_queue {
5137                std::mem::transmute(
5138                    symbol(
5139                        crate::extensions::khr_video_queue::FN_CREATE_VIDEO_SESSION_PARAMETERS_KHR,
5140                    ),
5141                )
5142            } else {
5143                None
5144            },
5145            update_video_session_parameters_khr: if device_enabled.khr_video_queue {
5146                std::mem::transmute(
5147                    symbol(
5148                        crate::extensions::khr_video_queue::FN_UPDATE_VIDEO_SESSION_PARAMETERS_KHR,
5149                    ),
5150                )
5151            } else {
5152                None
5153            },
5154            destroy_video_session_parameters_khr: if device_enabled.khr_video_queue {
5155                std::mem::transmute(
5156                    symbol(
5157                        crate::extensions::khr_video_queue::FN_DESTROY_VIDEO_SESSION_PARAMETERS_KHR,
5158                    ),
5159                )
5160            } else {
5161                None
5162            },
5163            get_video_session_memory_requirements_khr: if device_enabled.khr_video_queue
5164            {
5165                std::mem::transmute(
5166                    symbol(
5167                        crate::extensions::khr_video_queue::FN_GET_VIDEO_SESSION_MEMORY_REQUIREMENTS_KHR,
5168                    ),
5169                )
5170            } else {
5171                None
5172            },
5173            bind_video_session_memory_khr: if device_enabled.khr_video_queue {
5174                std::mem::transmute(
5175                    symbol(
5176                        crate::extensions::khr_video_queue::FN_BIND_VIDEO_SESSION_MEMORY_KHR,
5177                    ),
5178                )
5179            } else {
5180                None
5181            },
5182            cmd_decode_video_khr: if device_enabled.khr_video_decode_queue {
5183                std::mem::transmute(
5184                    symbol(
5185                        crate::extensions::khr_video_decode_queue::FN_CMD_DECODE_VIDEO_KHR,
5186                    ),
5187                )
5188            } else {
5189                None
5190            },
5191            cmd_begin_video_coding_khr: if device_enabled.khr_video_queue {
5192                std::mem::transmute(
5193                    symbol(
5194                        crate::extensions::khr_video_queue::FN_CMD_BEGIN_VIDEO_CODING_KHR,
5195                    ),
5196                )
5197            } else {
5198                None
5199            },
5200            cmd_control_video_coding_khr: if device_enabled.khr_video_queue {
5201                std::mem::transmute(
5202                    symbol(
5203                        crate::extensions::khr_video_queue::FN_CMD_CONTROL_VIDEO_CODING_KHR,
5204                    ),
5205                )
5206            } else {
5207                None
5208            },
5209            cmd_end_video_coding_khr: if device_enabled.khr_video_queue {
5210                std::mem::transmute(
5211                    symbol(
5212                        crate::extensions::khr_video_queue::FN_CMD_END_VIDEO_CODING_KHR,
5213                    ),
5214                )
5215            } else {
5216                None
5217            },
5218            cmd_encode_video_khr: if device_enabled.khr_video_encode_queue {
5219                std::mem::transmute(
5220                    symbol(
5221                        crate::extensions::khr_video_encode_queue::FN_CMD_ENCODE_VIDEO_KHR,
5222                    ),
5223                )
5224            } else {
5225                None
5226            },
5227            create_cu_module_nvx: if device_enabled.nvx_binary_import {
5228                std::mem::transmute(
5229                    symbol(crate::extensions::nvx_binary_import::FN_CREATE_CU_MODULE_NVX),
5230                )
5231            } else {
5232                None
5233            },
5234            create_cu_function_nvx: if device_enabled.nvx_binary_import {
5235                std::mem::transmute(
5236                    symbol(
5237                        crate::extensions::nvx_binary_import::FN_CREATE_CU_FUNCTION_NVX,
5238                    ),
5239                )
5240            } else {
5241                None
5242            },
5243            destroy_cu_module_nvx: if device_enabled.nvx_binary_import {
5244                std::mem::transmute(
5245                    symbol(
5246                        crate::extensions::nvx_binary_import::FN_DESTROY_CU_MODULE_NVX,
5247                    ),
5248                )
5249            } else {
5250                None
5251            },
5252            destroy_cu_function_nvx: if device_enabled.nvx_binary_import {
5253                std::mem::transmute(
5254                    symbol(
5255                        crate::extensions::nvx_binary_import::FN_DESTROY_CU_FUNCTION_NVX,
5256                    ),
5257                )
5258            } else {
5259                None
5260            },
5261            cmd_cu_launch_kernel_nvx: if device_enabled.nvx_binary_import {
5262                std::mem::transmute(
5263                    symbol(
5264                        crate::extensions::nvx_binary_import::FN_CMD_CU_LAUNCH_KERNEL_NVX,
5265                    ),
5266                )
5267            } else {
5268                None
5269            },
5270            set_device_memory_priority_ext: if device_enabled
5271                .ext_pageable_device_local_memory
5272            {
5273                std::mem::transmute(
5274                    symbol(
5275                        crate::extensions::ext_pageable_device_local_memory::FN_SET_DEVICE_MEMORY_PRIORITY_EXT,
5276                    ),
5277                )
5278            } else {
5279                None
5280            },
5281            wait_for_present_khr: if device_enabled.khr_present_wait {
5282                std::mem::transmute(
5283                    symbol(crate::extensions::khr_present_wait::FN_WAIT_FOR_PRESENT_KHR),
5284                )
5285            } else {
5286                None
5287            },
5288            create_buffer_collection_fuchsia: if device_enabled.fuchsia_buffer_collection
5289            {
5290                std::mem::transmute(
5291                    symbol(
5292                        crate::extensions::fuchsia_buffer_collection::FN_CREATE_BUFFER_COLLECTION_FUCHSIA,
5293                    ),
5294                )
5295            } else {
5296                None
5297            },
5298            set_buffer_collection_buffer_constraints_fuchsia: if device_enabled
5299                .fuchsia_buffer_collection
5300            {
5301                std::mem::transmute(
5302                    symbol(
5303                        crate::extensions::fuchsia_buffer_collection::FN_SET_BUFFER_COLLECTION_BUFFER_CONSTRAINTS_FUCHSIA,
5304                    ),
5305                )
5306            } else {
5307                None
5308            },
5309            set_buffer_collection_image_constraints_fuchsia: if device_enabled
5310                .fuchsia_buffer_collection
5311            {
5312                std::mem::transmute(
5313                    symbol(
5314                        crate::extensions::fuchsia_buffer_collection::FN_SET_BUFFER_COLLECTION_IMAGE_CONSTRAINTS_FUCHSIA,
5315                    ),
5316                )
5317            } else {
5318                None
5319            },
5320            destroy_buffer_collection_fuchsia: if device_enabled
5321                .fuchsia_buffer_collection
5322            {
5323                std::mem::transmute(
5324                    symbol(
5325                        crate::extensions::fuchsia_buffer_collection::FN_DESTROY_BUFFER_COLLECTION_FUCHSIA,
5326                    ),
5327                )
5328            } else {
5329                None
5330            },
5331            get_buffer_collection_properties_fuchsia: if device_enabled
5332                .fuchsia_buffer_collection
5333            {
5334                std::mem::transmute(
5335                    symbol(
5336                        crate::extensions::fuchsia_buffer_collection::FN_GET_BUFFER_COLLECTION_PROPERTIES_FUCHSIA,
5337                    ),
5338                )
5339            } else {
5340                None
5341            },
5342            cmd_begin_rendering: if instance_enabled.vk1_3 {
5343                std::mem::transmute(symbol(crate::vk1_3::FN_CMD_BEGIN_RENDERING))
5344            } else {
5345                None
5346            },
5347            cmd_end_rendering: if instance_enabled.vk1_3 {
5348                std::mem::transmute(symbol(crate::vk1_3::FN_CMD_END_RENDERING))
5349            } else {
5350                None
5351            },
5352            get_descriptor_set_layout_host_mapping_info_valve: if device_enabled
5353                .valve_descriptor_set_host_mapping
5354            {
5355                std::mem::transmute(
5356                    symbol(
5357                        crate::extensions::valve_descriptor_set_host_mapping::FN_GET_DESCRIPTOR_SET_LAYOUT_HOST_MAPPING_INFO_VALVE,
5358                    ),
5359                )
5360            } else {
5361                None
5362            },
5363            get_descriptor_set_host_mapping_valve: if device_enabled
5364                .valve_descriptor_set_host_mapping
5365            {
5366                std::mem::transmute(
5367                    symbol(
5368                        crate::extensions::valve_descriptor_set_host_mapping::FN_GET_DESCRIPTOR_SET_HOST_MAPPING_VALVE,
5369                    ),
5370                )
5371            } else {
5372                None
5373            },
5374            get_image_subresource_layout2_ext: if device_enabled
5375                .ext_image_compression_control
5376            {
5377                std::mem::transmute(
5378                    symbol(
5379                        crate::extensions::ext_image_compression_control::FN_GET_IMAGE_SUBRESOURCE_LAYOUT2_EXT,
5380                    ),
5381                )
5382            } else {
5383                None
5384            },
5385            get_pipeline_properties_ext: if device_enabled.ext_pipeline_properties {
5386                std::mem::transmute(
5387                    symbol(
5388                        crate::extensions::ext_pipeline_properties::FN_GET_PIPELINE_PROPERTIES_EXT,
5389                    ),
5390                )
5391            } else {
5392                None
5393            },
5394            reset_query_pool_ext: if device_enabled.ext_host_query_reset {
5395                std::mem::transmute(
5396                    symbol(
5397                        crate::extensions::ext_host_query_reset::FN_RESET_QUERY_POOL_EXT,
5398                    ),
5399                )
5400            } else {
5401                None
5402            },
5403            trim_command_pool_khr: if device_enabled.khr_maintenance1 {
5404                std::mem::transmute(
5405                    symbol(crate::extensions::khr_maintenance1::FN_TRIM_COMMAND_POOL_KHR),
5406                )
5407            } else {
5408                None
5409            },
5410            get_device_group_peer_memory_features_khr: if device_enabled.khr_device_group
5411            {
5412                std::mem::transmute(
5413                    symbol(
5414                        crate::extensions::khr_device_group::FN_GET_DEVICE_GROUP_PEER_MEMORY_FEATURES_KHR,
5415                    ),
5416                )
5417            } else {
5418                None
5419            },
5420            bind_buffer_memory2_khr: if device_enabled.khr_bind_memory2 {
5421                std::mem::transmute(
5422                    symbol(
5423                        crate::extensions::khr_bind_memory2::FN_BIND_BUFFER_MEMORY2_KHR,
5424                    ),
5425                )
5426            } else {
5427                None
5428            },
5429            bind_image_memory2_khr: if device_enabled.khr_bind_memory2 {
5430                std::mem::transmute(
5431                    symbol(
5432                        crate::extensions::khr_bind_memory2::FN_BIND_IMAGE_MEMORY2_KHR,
5433                    ),
5434                )
5435            } else {
5436                None
5437            },
5438            cmd_set_device_mask_khr: if device_enabled.khr_device_group {
5439                std::mem::transmute(
5440                    symbol(
5441                        crate::extensions::khr_device_group::FN_CMD_SET_DEVICE_MASK_KHR,
5442                    ),
5443                )
5444            } else {
5445                None
5446            },
5447            cmd_dispatch_base_khr: if device_enabled.khr_device_group {
5448                std::mem::transmute(
5449                    symbol(crate::extensions::khr_device_group::FN_CMD_DISPATCH_BASE_KHR),
5450                )
5451            } else {
5452                None
5453            },
5454            create_descriptor_update_template_khr: if device_enabled
5455                .khr_descriptor_update_template
5456            {
5457                std::mem::transmute(
5458                    symbol(
5459                        crate::extensions::khr_descriptor_update_template::FN_CREATE_DESCRIPTOR_UPDATE_TEMPLATE_KHR,
5460                    ),
5461                )
5462            } else {
5463                None
5464            },
5465            destroy_descriptor_update_template_khr: if device_enabled
5466                .khr_descriptor_update_template
5467            {
5468                std::mem::transmute(
5469                    symbol(
5470                        crate::extensions::khr_descriptor_update_template::FN_DESTROY_DESCRIPTOR_UPDATE_TEMPLATE_KHR,
5471                    ),
5472                )
5473            } else {
5474                None
5475            },
5476            update_descriptor_set_with_template_khr: if device_enabled
5477                .khr_descriptor_update_template
5478            {
5479                std::mem::transmute(
5480                    symbol(
5481                        crate::extensions::khr_descriptor_update_template::FN_UPDATE_DESCRIPTOR_SET_WITH_TEMPLATE_KHR,
5482                    ),
5483                )
5484            } else {
5485                None
5486            },
5487            get_buffer_memory_requirements2_khr: if device_enabled
5488                .khr_get_memory_requirements2
5489            {
5490                std::mem::transmute(
5491                    symbol(
5492                        crate::extensions::khr_get_memory_requirements2::FN_GET_BUFFER_MEMORY_REQUIREMENTS2_KHR,
5493                    ),
5494                )
5495            } else {
5496                None
5497            },
5498            get_image_memory_requirements2_khr: if device_enabled
5499                .khr_get_memory_requirements2
5500            {
5501                std::mem::transmute(
5502                    symbol(
5503                        crate::extensions::khr_get_memory_requirements2::FN_GET_IMAGE_MEMORY_REQUIREMENTS2_KHR,
5504                    ),
5505                )
5506            } else {
5507                None
5508            },
5509            get_image_sparse_memory_requirements2_khr: if device_enabled
5510                .khr_get_memory_requirements2
5511            {
5512                std::mem::transmute(
5513                    symbol(
5514                        crate::extensions::khr_get_memory_requirements2::FN_GET_IMAGE_SPARSE_MEMORY_REQUIREMENTS2_KHR,
5515                    ),
5516                )
5517            } else {
5518                None
5519            },
5520            get_device_buffer_memory_requirements_khr: if device_enabled.khr_maintenance4
5521            {
5522                std::mem::transmute(
5523                    symbol(
5524                        crate::extensions::khr_maintenance4::FN_GET_DEVICE_BUFFER_MEMORY_REQUIREMENTS_KHR,
5525                    ),
5526                )
5527            } else {
5528                None
5529            },
5530            get_device_image_memory_requirements_khr: if device_enabled.khr_maintenance4
5531            {
5532                std::mem::transmute(
5533                    symbol(
5534                        crate::extensions::khr_maintenance4::FN_GET_DEVICE_IMAGE_MEMORY_REQUIREMENTS_KHR,
5535                    ),
5536                )
5537            } else {
5538                None
5539            },
5540            get_device_image_sparse_memory_requirements_khr: if device_enabled
5541                .khr_maintenance4
5542            {
5543                std::mem::transmute(
5544                    symbol(
5545                        crate::extensions::khr_maintenance4::FN_GET_DEVICE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_KHR,
5546                    ),
5547                )
5548            } else {
5549                None
5550            },
5551            create_sampler_ycbcr_conversion_khr: if device_enabled
5552                .khr_sampler_ycbcr_conversion
5553            {
5554                std::mem::transmute(
5555                    symbol(
5556                        crate::extensions::khr_sampler_ycbcr_conversion::FN_CREATE_SAMPLER_YCBCR_CONVERSION_KHR,
5557                    ),
5558                )
5559            } else {
5560                None
5561            },
5562            destroy_sampler_ycbcr_conversion_khr: if device_enabled
5563                .khr_sampler_ycbcr_conversion
5564            {
5565                std::mem::transmute(
5566                    symbol(
5567                        crate::extensions::khr_sampler_ycbcr_conversion::FN_DESTROY_SAMPLER_YCBCR_CONVERSION_KHR,
5568                    ),
5569                )
5570            } else {
5571                None
5572            },
5573            get_descriptor_set_layout_support_khr: if device_enabled.khr_maintenance3 {
5574                std::mem::transmute(
5575                    symbol(
5576                        crate::extensions::khr_maintenance3::FN_GET_DESCRIPTOR_SET_LAYOUT_SUPPORT_KHR,
5577                    ),
5578                )
5579            } else {
5580                None
5581            },
5582            create_render_pass2_khr: if device_enabled.khr_create_renderpass2 {
5583                std::mem::transmute(
5584                    symbol(
5585                        crate::extensions::khr_create_renderpass2::FN_CREATE_RENDER_PASS2_KHR,
5586                    ),
5587                )
5588            } else {
5589                None
5590            },
5591            cmd_begin_render_pass2_khr: if device_enabled.khr_create_renderpass2 {
5592                std::mem::transmute(
5593                    symbol(
5594                        crate::extensions::khr_create_renderpass2::FN_CMD_BEGIN_RENDER_PASS2_KHR,
5595                    ),
5596                )
5597            } else {
5598                None
5599            },
5600            cmd_next_subpass2_khr: if device_enabled.khr_create_renderpass2 {
5601                std::mem::transmute(
5602                    symbol(
5603                        crate::extensions::khr_create_renderpass2::FN_CMD_NEXT_SUBPASS2_KHR,
5604                    ),
5605                )
5606            } else {
5607                None
5608            },
5609            cmd_end_render_pass2_khr: if device_enabled.khr_create_renderpass2 {
5610                std::mem::transmute(
5611                    symbol(
5612                        crate::extensions::khr_create_renderpass2::FN_CMD_END_RENDER_PASS2_KHR,
5613                    ),
5614                )
5615            } else {
5616                None
5617            },
5618            get_semaphore_counter_value_khr: if device_enabled.khr_timeline_semaphore {
5619                std::mem::transmute(
5620                    symbol(
5621                        crate::extensions::khr_timeline_semaphore::FN_GET_SEMAPHORE_COUNTER_VALUE_KHR,
5622                    ),
5623                )
5624            } else {
5625                None
5626            },
5627            wait_semaphores_khr: if device_enabled.khr_timeline_semaphore {
5628                std::mem::transmute(
5629                    symbol(
5630                        crate::extensions::khr_timeline_semaphore::FN_WAIT_SEMAPHORES_KHR,
5631                    ),
5632                )
5633            } else {
5634                None
5635            },
5636            signal_semaphore_khr: if device_enabled.khr_timeline_semaphore {
5637                std::mem::transmute(
5638                    symbol(
5639                        crate::extensions::khr_timeline_semaphore::FN_SIGNAL_SEMAPHORE_KHR,
5640                    ),
5641                )
5642            } else {
5643                None
5644            },
5645            cmd_draw_indirect_count_khr: if device_enabled.khr_draw_indirect_count {
5646                std::mem::transmute(
5647                    symbol(
5648                        crate::extensions::khr_draw_indirect_count::FN_CMD_DRAW_INDIRECT_COUNT_KHR,
5649                    ),
5650                )
5651            } else {
5652                None
5653            },
5654            cmd_draw_indirect_count_amd: if device_enabled.amd_draw_indirect_count {
5655                std::mem::transmute(
5656                    symbol(
5657                        crate::extensions::amd_draw_indirect_count::FN_CMD_DRAW_INDIRECT_COUNT_AMD,
5658                    ),
5659                )
5660            } else {
5661                None
5662            },
5663            cmd_draw_indexed_indirect_count_khr: if device_enabled
5664                .khr_draw_indirect_count
5665            {
5666                std::mem::transmute(
5667                    symbol(
5668                        crate::extensions::khr_draw_indirect_count::FN_CMD_DRAW_INDEXED_INDIRECT_COUNT_KHR,
5669                    ),
5670                )
5671            } else {
5672                None
5673            },
5674            cmd_draw_indexed_indirect_count_amd: if device_enabled
5675                .amd_draw_indirect_count
5676            {
5677                std::mem::transmute(
5678                    symbol(
5679                        crate::extensions::amd_draw_indirect_count::FN_CMD_DRAW_INDEXED_INDIRECT_COUNT_AMD,
5680                    ),
5681                )
5682            } else {
5683                None
5684            },
5685            get_ray_tracing_shader_group_handles_nv: if device_enabled.nv_ray_tracing {
5686                std::mem::transmute(
5687                    symbol(
5688                        crate::extensions::nv_ray_tracing::FN_GET_RAY_TRACING_SHADER_GROUP_HANDLES_NV,
5689                    ),
5690                )
5691            } else {
5692                None
5693            },
5694            get_buffer_opaque_capture_address_khr: if device_enabled
5695                .khr_buffer_device_address
5696            {
5697                std::mem::transmute(
5698                    symbol(
5699                        crate::extensions::khr_buffer_device_address::FN_GET_BUFFER_OPAQUE_CAPTURE_ADDRESS_KHR,
5700                    ),
5701                )
5702            } else {
5703                None
5704            },
5705            get_buffer_device_address_khr: if device_enabled.khr_buffer_device_address {
5706                std::mem::transmute(
5707                    symbol(
5708                        crate::extensions::khr_buffer_device_address::FN_GET_BUFFER_DEVICE_ADDRESS_KHR,
5709                    ),
5710                )
5711            } else {
5712                None
5713            },
5714            get_buffer_device_address_ext: if device_enabled.ext_buffer_device_address {
5715                std::mem::transmute(
5716                    symbol(
5717                        crate::extensions::ext_buffer_device_address::FN_GET_BUFFER_DEVICE_ADDRESS_EXT,
5718                    ),
5719                )
5720            } else {
5721                None
5722            },
5723            get_device_memory_opaque_capture_address_khr: if device_enabled
5724                .khr_buffer_device_address
5725            {
5726                std::mem::transmute(
5727                    symbol(
5728                        crate::extensions::khr_buffer_device_address::FN_GET_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_KHR,
5729                    ),
5730                )
5731            } else {
5732                None
5733            },
5734            cmd_set_cull_mode_ext: if device_enabled.ext_extended_dynamic_state {
5735                std::mem::transmute(
5736                    symbol(
5737                        crate::extensions::ext_extended_dynamic_state::FN_CMD_SET_CULL_MODE_EXT,
5738                    ),
5739                )
5740            } else {
5741                None
5742            },
5743            cmd_set_front_face_ext: if device_enabled.ext_extended_dynamic_state {
5744                std::mem::transmute(
5745                    symbol(
5746                        crate::extensions::ext_extended_dynamic_state::FN_CMD_SET_FRONT_FACE_EXT,
5747                    ),
5748                )
5749            } else {
5750                None
5751            },
5752            cmd_set_primitive_topology_ext: if device_enabled.ext_extended_dynamic_state
5753            {
5754                std::mem::transmute(
5755                    symbol(
5756                        crate::extensions::ext_extended_dynamic_state::FN_CMD_SET_PRIMITIVE_TOPOLOGY_EXT,
5757                    ),
5758                )
5759            } else {
5760                None
5761            },
5762            cmd_set_viewport_with_count_ext: if device_enabled.ext_extended_dynamic_state
5763            {
5764                std::mem::transmute(
5765                    symbol(
5766                        crate::extensions::ext_extended_dynamic_state::FN_CMD_SET_VIEWPORT_WITH_COUNT_EXT,
5767                    ),
5768                )
5769            } else {
5770                None
5771            },
5772            cmd_set_scissor_with_count_ext: if device_enabled.ext_extended_dynamic_state
5773            {
5774                std::mem::transmute(
5775                    symbol(
5776                        crate::extensions::ext_extended_dynamic_state::FN_CMD_SET_SCISSOR_WITH_COUNT_EXT,
5777                    ),
5778                )
5779            } else {
5780                None
5781            },
5782            cmd_bind_vertex_buffers2_ext: if device_enabled.ext_extended_dynamic_state {
5783                std::mem::transmute(
5784                    symbol(
5785                        crate::extensions::ext_extended_dynamic_state::FN_CMD_BIND_VERTEX_BUFFERS2_EXT,
5786                    ),
5787                )
5788            } else {
5789                None
5790            },
5791            cmd_set_depth_test_enable_ext: if device_enabled.ext_extended_dynamic_state {
5792                std::mem::transmute(
5793                    symbol(
5794                        crate::extensions::ext_extended_dynamic_state::FN_CMD_SET_DEPTH_TEST_ENABLE_EXT,
5795                    ),
5796                )
5797            } else {
5798                None
5799            },
5800            cmd_set_depth_write_enable_ext: if device_enabled.ext_extended_dynamic_state
5801            {
5802                std::mem::transmute(
5803                    symbol(
5804                        crate::extensions::ext_extended_dynamic_state::FN_CMD_SET_DEPTH_WRITE_ENABLE_EXT,
5805                    ),
5806                )
5807            } else {
5808                None
5809            },
5810            cmd_set_depth_compare_op_ext: if device_enabled.ext_extended_dynamic_state {
5811                std::mem::transmute(
5812                    symbol(
5813                        crate::extensions::ext_extended_dynamic_state::FN_CMD_SET_DEPTH_COMPARE_OP_EXT,
5814                    ),
5815                )
5816            } else {
5817                None
5818            },
5819            cmd_set_depth_bounds_test_enable_ext: if device_enabled
5820                .ext_extended_dynamic_state
5821            {
5822                std::mem::transmute(
5823                    symbol(
5824                        crate::extensions::ext_extended_dynamic_state::FN_CMD_SET_DEPTH_BOUNDS_TEST_ENABLE_EXT,
5825                    ),
5826                )
5827            } else {
5828                None
5829            },
5830            cmd_set_stencil_test_enable_ext: if device_enabled.ext_extended_dynamic_state
5831            {
5832                std::mem::transmute(
5833                    symbol(
5834                        crate::extensions::ext_extended_dynamic_state::FN_CMD_SET_STENCIL_TEST_ENABLE_EXT,
5835                    ),
5836                )
5837            } else {
5838                None
5839            },
5840            cmd_set_stencil_op_ext: if device_enabled.ext_extended_dynamic_state {
5841                std::mem::transmute(
5842                    symbol(
5843                        crate::extensions::ext_extended_dynamic_state::FN_CMD_SET_STENCIL_OP_EXT,
5844                    ),
5845                )
5846            } else {
5847                None
5848            },
5849            cmd_set_rasterizer_discard_enable_ext: if device_enabled
5850                .ext_extended_dynamic_state2
5851            {
5852                std::mem::transmute(
5853                    symbol(
5854                        crate::extensions::ext_extended_dynamic_state2::FN_CMD_SET_RASTERIZER_DISCARD_ENABLE_EXT,
5855                    ),
5856                )
5857            } else {
5858                None
5859            },
5860            cmd_set_depth_bias_enable_ext: if device_enabled.ext_extended_dynamic_state2
5861            {
5862                std::mem::transmute(
5863                    symbol(
5864                        crate::extensions::ext_extended_dynamic_state2::FN_CMD_SET_DEPTH_BIAS_ENABLE_EXT,
5865                    ),
5866                )
5867            } else {
5868                None
5869            },
5870            cmd_set_primitive_restart_enable_ext: if device_enabled
5871                .ext_extended_dynamic_state2
5872            {
5873                std::mem::transmute(
5874                    symbol(
5875                        crate::extensions::ext_extended_dynamic_state2::FN_CMD_SET_PRIMITIVE_RESTART_ENABLE_EXT,
5876                    ),
5877                )
5878            } else {
5879                None
5880            },
5881            create_private_data_slot_ext: if device_enabled.ext_private_data {
5882                std::mem::transmute(
5883                    symbol(
5884                        crate::extensions::ext_private_data::FN_CREATE_PRIVATE_DATA_SLOT_EXT,
5885                    ),
5886                )
5887            } else {
5888                None
5889            },
5890            destroy_private_data_slot_ext: if device_enabled.ext_private_data {
5891                std::mem::transmute(
5892                    symbol(
5893                        crate::extensions::ext_private_data::FN_DESTROY_PRIVATE_DATA_SLOT_EXT,
5894                    ),
5895                )
5896            } else {
5897                None
5898            },
5899            set_private_data_ext: if device_enabled.ext_private_data {
5900                std::mem::transmute(
5901                    symbol(crate::extensions::ext_private_data::FN_SET_PRIVATE_DATA_EXT),
5902                )
5903            } else {
5904                None
5905            },
5906            get_private_data_ext: if device_enabled.ext_private_data {
5907                std::mem::transmute(
5908                    symbol(crate::extensions::ext_private_data::FN_GET_PRIVATE_DATA_EXT),
5909                )
5910            } else {
5911                None
5912            },
5913            cmd_copy_buffer2_khr: if device_enabled.khr_copy_commands2 {
5914                std::mem::transmute(
5915                    symbol(
5916                        crate::extensions::khr_copy_commands2::FN_CMD_COPY_BUFFER2_KHR,
5917                    ),
5918                )
5919            } else {
5920                None
5921            },
5922            cmd_copy_image2_khr: if device_enabled.khr_copy_commands2 {
5923                std::mem::transmute(
5924                    symbol(crate::extensions::khr_copy_commands2::FN_CMD_COPY_IMAGE2_KHR),
5925                )
5926            } else {
5927                None
5928            },
5929            cmd_blit_image2_khr: if device_enabled.khr_copy_commands2 {
5930                std::mem::transmute(
5931                    symbol(crate::extensions::khr_copy_commands2::FN_CMD_BLIT_IMAGE2_KHR),
5932                )
5933            } else {
5934                None
5935            },
5936            cmd_copy_buffer_to_image2_khr: if device_enabled.khr_copy_commands2 {
5937                std::mem::transmute(
5938                    symbol(
5939                        crate::extensions::khr_copy_commands2::FN_CMD_COPY_BUFFER_TO_IMAGE2_KHR,
5940                    ),
5941                )
5942            } else {
5943                None
5944            },
5945            cmd_copy_image_to_buffer2_khr: if device_enabled.khr_copy_commands2 {
5946                std::mem::transmute(
5947                    symbol(
5948                        crate::extensions::khr_copy_commands2::FN_CMD_COPY_IMAGE_TO_BUFFER2_KHR,
5949                    ),
5950                )
5951            } else {
5952                None
5953            },
5954            cmd_resolve_image2_khr: if device_enabled.khr_copy_commands2 {
5955                std::mem::transmute(
5956                    symbol(
5957                        crate::extensions::khr_copy_commands2::FN_CMD_RESOLVE_IMAGE2_KHR,
5958                    ),
5959                )
5960            } else {
5961                None
5962            },
5963            cmd_set_event2_khr: if device_enabled.khr_synchronization2 {
5964                std::mem::transmute(
5965                    symbol(
5966                        crate::extensions::khr_synchronization2::FN_CMD_SET_EVENT2_KHR,
5967                    ),
5968                )
5969            } else {
5970                None
5971            },
5972            cmd_reset_event2_khr: if device_enabled.khr_synchronization2 {
5973                std::mem::transmute(
5974                    symbol(
5975                        crate::extensions::khr_synchronization2::FN_CMD_RESET_EVENT2_KHR,
5976                    ),
5977                )
5978            } else {
5979                None
5980            },
5981            cmd_wait_events2_khr: if device_enabled.khr_synchronization2 {
5982                std::mem::transmute(
5983                    symbol(
5984                        crate::extensions::khr_synchronization2::FN_CMD_WAIT_EVENTS2_KHR,
5985                    ),
5986                )
5987            } else {
5988                None
5989            },
5990            cmd_pipeline_barrier2_khr: if device_enabled.khr_synchronization2 {
5991                std::mem::transmute(
5992                    symbol(
5993                        crate::extensions::khr_synchronization2::FN_CMD_PIPELINE_BARRIER2_KHR,
5994                    ),
5995                )
5996            } else {
5997                None
5998            },
5999            queue_submit2_khr: if device_enabled.khr_synchronization2 {
6000                std::mem::transmute(
6001                    symbol(crate::extensions::khr_synchronization2::FN_QUEUE_SUBMIT2_KHR),
6002                )
6003            } else {
6004                None
6005            },
6006            cmd_write_timestamp2_khr: if device_enabled.khr_synchronization2 {
6007                std::mem::transmute(
6008                    symbol(
6009                        crate::extensions::khr_synchronization2::FN_CMD_WRITE_TIMESTAMP2_KHR,
6010                    ),
6011                )
6012            } else {
6013                None
6014            },
6015            cmd_begin_rendering_khr: if device_enabled.khr_dynamic_rendering {
6016                std::mem::transmute(
6017                    symbol(
6018                        crate::extensions::khr_dynamic_rendering::FN_CMD_BEGIN_RENDERING_KHR,
6019                    ),
6020                )
6021            } else {
6022                None
6023            },
6024            cmd_end_rendering_khr: if device_enabled.khr_dynamic_rendering {
6025                std::mem::transmute(
6026                    symbol(
6027                        crate::extensions::khr_dynamic_rendering::FN_CMD_END_RENDERING_KHR,
6028                    ),
6029                )
6030            } else {
6031                None
6032            },
6033            enabled: device_enabled,
6034        })
6035    }
6036}
6037pub(crate) fn features2_bool_count(
6038    structure_type: crate::vk1_0::StructureType,
6039) -> Option<usize> {
6040    match structure_type {
6041        crate::vk1_0::StructureType::PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_NV => {
6042            Some(1usize)
6043        }
6044        crate::vk1_0::StructureType::PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES => {
6045            Some(1usize)
6046        }
6047        crate::vk1_0::StructureType::PHYSICAL_DEVICE_FEATURES_2 => Some(55usize),
6048        crate::vk1_0::StructureType::PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES => {
6049            Some(2usize)
6050        }
6051        crate::vk1_0::StructureType::PHYSICAL_DEVICE_MULTIVIEW_FEATURES => Some(3usize),
6052        crate::vk1_0::StructureType::PHYSICAL_DEVICE_PRESENT_ID_FEATURES_KHR => {
6053            Some(1usize)
6054        }
6055        crate::vk1_0::StructureType::PHYSICAL_DEVICE_PRESENT_WAIT_FEATURES_KHR => {
6056            Some(1usize)
6057        }
6058        crate::vk1_0::StructureType::PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES => {
6059            Some(4usize)
6060        }
6061        crate::vk1_0::StructureType::PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES => {
6062            Some(1usize)
6063        }
6064        crate::vk1_0::StructureType::PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES => {
6065            Some(1usize)
6066        }
6067        crate::vk1_0::StructureType::PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES => {
6068            Some(1usize)
6069        }
6070        crate::vk1_0::StructureType::PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT => {
6071            Some(1usize)
6072        }
6073        crate::vk1_0::StructureType::PHYSICAL_DEVICE_MULTI_DRAW_FEATURES_EXT => {
6074            Some(1usize)
6075        }
6076        crate::vk1_0::StructureType::PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES => {
6077            Some(2usize)
6078        }
6079        crate::vk1_0::StructureType::PHYSICAL_DEVICE_MAINTENANCE_4_FEATURES => {
6080            Some(1usize)
6081        }
6082        crate::vk1_0::StructureType::PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES => {
6083            Some(1usize)
6084        }
6085        crate::vk1_0::StructureType::PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES => {
6086            Some(2usize)
6087        }
6088        crate::vk1_0::StructureType::PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES => {
6089            Some(1usize)
6090        }
6091        crate::vk1_0::StructureType::PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES_KHR => {
6092            Some(1usize)
6093        }
6094        crate::vk1_0::StructureType::PHYSICAL_DEVICE_DEVICE_MEMORY_REPORT_FEATURES_EXT => {
6095            Some(1usize)
6096        }
6097        crate::vk1_0::StructureType::PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES => {
6098            Some(20usize)
6099        }
6100        crate::vk1_0::StructureType::PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES => {
6101            Some(1usize)
6102        }
6103        crate::vk1_0::StructureType::PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES => {
6104            Some(3usize)
6105        }
6106        crate::vk1_0::StructureType::PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT => {
6107            Some(2usize)
6108        }
6109        crate::vk1_0::StructureType::PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES => {
6110            Some(3usize)
6111        }
6112        crate::vk1_0::StructureType::PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES => {
6113            Some(2usize)
6114        }
6115        crate::vk1_0::StructureType::PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_FEATURES_EXT => {
6116            Some(12usize)
6117        }
6118        crate::vk1_0::StructureType::PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_2_FEATURES_EXT => {
6119            Some(12usize)
6120        }
6121        crate::vk1_0::StructureType::PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT => {
6122            Some(2usize)
6123        }
6124        crate::vk1_0::StructureType::PHYSICAL_DEVICE_ASTC_DECODE_FEATURES_EXT => {
6125            Some(1usize)
6126        }
6127        crate::vk1_0::StructureType::PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT => {
6128            Some(2usize)
6129        }
6130        crate::vk1_0::StructureType::PHYSICAL_DEVICE_REPRESENTATIVE_FRAGMENT_TEST_FEATURES_NV => {
6131            Some(1usize)
6132        }
6133        crate::vk1_0::StructureType::PHYSICAL_DEVICE_EXCLUSIVE_SCISSOR_FEATURES_NV => {
6134            Some(1usize)
6135        }
6136        crate::vk1_0::StructureType::PHYSICAL_DEVICE_CORNER_SAMPLED_IMAGE_FEATURES_NV => {
6137            Some(1usize)
6138        }
6139        crate::vk1_0::StructureType::PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_FEATURES_NV => {
6140            Some(2usize)
6141        }
6142        crate::vk1_0::StructureType::PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_NV => {
6143            Some(1usize)
6144        }
6145        crate::vk1_0::StructureType::PHYSICAL_DEVICE_SHADER_IMAGE_FOOTPRINT_FEATURES_NV => {
6146            Some(1usize)
6147        }
6148        crate::vk1_0::StructureType::PHYSICAL_DEVICE_DEDICATED_ALLOCATION_IMAGE_ALIASING_FEATURES_NV => {
6149            Some(1usize)
6150        }
6151        crate::vk1_0::StructureType::PHYSICAL_DEVICE_SHADING_RATE_IMAGE_FEATURES_NV => {
6152            Some(2usize)
6153        }
6154        crate::vk1_0::StructureType::PHYSICAL_DEVICE_INVOCATION_MASK_FEATURES_HUAWEI => {
6155            Some(1usize)
6156        }
6157        crate::vk1_0::StructureType::PHYSICAL_DEVICE_MESH_SHADER_FEATURES_NV => {
6158            Some(2usize)
6159        }
6160        crate::vk1_0::StructureType::PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_FEATURES_KHR => {
6161            Some(5usize)
6162        }
6163        crate::vk1_0::StructureType::PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_FEATURES_KHR => {
6164            Some(5usize)
6165        }
6166        crate::vk1_0::StructureType::PHYSICAL_DEVICE_RAY_QUERY_FEATURES_KHR => {
6167            Some(1usize)
6168        }
6169        crate::vk1_0::StructureType::PHYSICAL_DEVICE_RAY_TRACING_MAINTENANCE_1_FEATURES_KHR => {
6170            Some(2usize)
6171        }
6172        crate::vk1_0::StructureType::PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT => {
6173            Some(3usize)
6174        }
6175        crate::vk1_0::StructureType::PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_FEATURES_EXT => {
6176            Some(1usize)
6177        }
6178        crate::vk1_0::StructureType::PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_OFFSET_FEATURES_QCOM => {
6179            Some(1usize)
6180        }
6181        crate::vk1_0::StructureType::PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES => {
6182            Some(1usize)
6183        }
6184        crate::vk1_0::StructureType::PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES => {
6185            Some(1usize)
6186        }
6187        crate::vk1_0::StructureType::PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT => {
6188            Some(1usize)
6189        }
6190        crate::vk1_0::StructureType::PHYSICAL_DEVICE_MEMORY_PRIORITY_FEATURES_EXT => {
6191            Some(1usize)
6192        }
6193        crate::vk1_0::StructureType::PHYSICAL_DEVICE_PAGEABLE_DEVICE_LOCAL_MEMORY_FEATURES_EXT => {
6194            Some(1usize)
6195        }
6196        crate::vk1_0::StructureType::PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES => {
6197            Some(3usize)
6198        }
6199        crate::vk1_0::StructureType::PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT => {
6200            Some(3usize)
6201        }
6202        crate::vk1_0::StructureType::PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES => {
6203            Some(1usize)
6204        }
6205        crate::vk1_0::StructureType::PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES => {
6206            Some(1usize)
6207        }
6208        crate::vk1_0::StructureType::PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_NV => {
6209            Some(2usize)
6210        }
6211        crate::vk1_0::StructureType::PHYSICAL_DEVICE_YCBCR_IMAGE_ARRAYS_FEATURES_EXT => {
6212            Some(1usize)
6213        }
6214        crate::vk1_0::StructureType::PHYSICAL_DEVICE_PERFORMANCE_QUERY_FEATURES_KHR => {
6215            Some(2usize)
6216        }
6217        crate::vk1_0::StructureType::PHYSICAL_DEVICE_COVERAGE_REDUCTION_MODE_FEATURES_NV => {
6218            Some(1usize)
6219        }
6220        crate::vk1_0::StructureType::PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS_2_FEATURES_INTEL => {
6221            Some(1usize)
6222        }
6223        crate::vk1_0::StructureType::PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR => {
6224            Some(2usize)
6225        }
6226        crate::vk1_0::StructureType::PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT => {
6227            Some(1usize)
6228        }
6229        crate::vk1_0::StructureType::PHYSICAL_DEVICE_SHADER_SM_BUILTINS_FEATURES_NV => {
6230            Some(1usize)
6231        }
6232        crate::vk1_0::StructureType::PHYSICAL_DEVICE_FRAGMENT_SHADER_INTERLOCK_FEATURES_EXT => {
6233            Some(3usize)
6234        }
6235        crate::vk1_0::StructureType::PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES => {
6236            Some(1usize)
6237        }
6238        crate::vk1_0::StructureType::PHYSICAL_DEVICE_PRIMITIVE_TOPOLOGY_LIST_RESTART_FEATURES_EXT => {
6239            Some(2usize)
6240        }
6241        crate::vk1_0::StructureType::PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR => {
6242            Some(1usize)
6243        }
6244        crate::vk1_0::StructureType::PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES => {
6245            Some(1usize)
6246        }
6247        crate::vk1_0::StructureType::PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT => {
6248            Some(1usize)
6249        }
6250        crate::vk1_0::StructureType::PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES => {
6251            Some(2usize)
6252        }
6253        crate::vk1_0::StructureType::PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT => {
6254            Some(6usize)
6255        }
6256        crate::vk1_0::StructureType::PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES => {
6257            Some(1usize)
6258        }
6259        crate::vk1_0::StructureType::PHYSICAL_DEVICE_VULKAN_1_1_FEATURES => Some(12usize),
6260        crate::vk1_0::StructureType::PHYSICAL_DEVICE_VULKAN_1_2_FEATURES => Some(47usize),
6261        crate::vk1_0::StructureType::PHYSICAL_DEVICE_VULKAN_1_3_FEATURES => Some(15usize),
6262        crate::vk1_0::StructureType::PHYSICAL_DEVICE_COHERENT_MEMORY_FEATURES_AMD => {
6263            Some(1usize)
6264        }
6265        crate::vk1_0::StructureType::PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_FEATURES_EXT => {
6266            Some(2usize)
6267        }
6268        crate::vk1_0::StructureType::PHYSICAL_DEVICE_BORDER_COLOR_SWIZZLE_FEATURES_EXT => {
6269            Some(2usize)
6270        }
6271        crate::vk1_0::StructureType::PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_FEATURES_EXT => {
6272            Some(1usize)
6273        }
6274        crate::vk1_0::StructureType::PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_2_FEATURES_EXT => {
6275            Some(3usize)
6276        }
6277        crate::vk1_0::StructureType::PHYSICAL_DEVICE_DIAGNOSTICS_CONFIG_FEATURES_NV => {
6278            Some(1usize)
6279        }
6280        crate::vk1_0::StructureType::PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES => {
6281            Some(1usize)
6282        }
6283        crate::vk1_0::StructureType::PHYSICAL_DEVICE_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW_FEATURES_KHR => {
6284            Some(1usize)
6285        }
6286        crate::vk1_0::StructureType::PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT => {
6287            Some(3usize)
6288        }
6289        crate::vk1_0::StructureType::PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES => {
6290            Some(1usize)
6291        }
6292        crate::vk1_0::StructureType::PHYSICAL_DEVICE_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_FEATURES_KHR => {
6293            Some(4usize)
6294        }
6295        crate::vk1_0::StructureType::PHYSICAL_DEVICE_PORTABILITY_SUBSET_FEATURES_KHR => {
6296            Some(15usize)
6297        }
6298        crate::vk1_0::StructureType::PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT => {
6299            Some(2usize)
6300        }
6301        crate::vk1_0::StructureType::PHYSICAL_DEVICE_SUBPASS_SHADING_FEATURES_HUAWEI => {
6302            Some(1usize)
6303        }
6304        crate::vk1_0::StructureType::PHYSICAL_DEVICE_SHADER_IMAGE_ATOMIC_INT64_FEATURES_EXT => {
6305            Some(2usize)
6306        }
6307        crate::vk1_0::StructureType::PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_FEATURES_KHR => {
6308            Some(3usize)
6309        }
6310        crate::vk1_0::StructureType::PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES => {
6311            Some(1usize)
6312        }
6313        crate::vk1_0::StructureType::PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_FEATURES_NV => {
6314            Some(3usize)
6315        }
6316        crate::vk1_0::StructureType::PHYSICAL_DEVICE_IMAGE_2D_VIEW_OF_3D_FEATURES_EXT => {
6317            Some(2usize)
6318        }
6319        crate::vk1_0::StructureType::PHYSICAL_DEVICE_MUTABLE_DESCRIPTOR_TYPE_FEATURES_VALVE => {
6320            Some(1usize)
6321        }
6322        crate::vk1_0::StructureType::PHYSICAL_DEVICE_DEPTH_CLIP_CONTROL_FEATURES_EXT => {
6323            Some(1usize)
6324        }
6325        crate::vk1_0::StructureType::PHYSICAL_DEVICE_VERTEX_INPUT_DYNAMIC_STATE_FEATURES_EXT => {
6326            Some(1usize)
6327        }
6328        crate::vk1_0::StructureType::PHYSICAL_DEVICE_EXTERNAL_MEMORY_RDMA_FEATURES_NV => {
6329            Some(1usize)
6330        }
6331        crate::vk1_0::StructureType::PHYSICAL_DEVICE_COLOR_WRITE_ENABLE_FEATURES_EXT => {
6332            Some(1usize)
6333        }
6334        crate::vk1_0::StructureType::PHYSICAL_DEVICE_SYNCHRONIZATION_2_FEATURES => {
6335            Some(1usize)
6336        }
6337        crate::vk1_0::StructureType::PHYSICAL_DEVICE_PRIMITIVES_GENERATED_QUERY_FEATURES_EXT => {
6338            Some(3usize)
6339        }
6340        crate::vk1_0::StructureType::PHYSICAL_DEVICE_INHERITED_VIEWPORT_SCISSOR_FEATURES_NV => {
6341            Some(1usize)
6342        }
6343        crate::vk1_0::StructureType::PHYSICAL_DEVICE_YCBCR_2_PLANE_444_FORMATS_FEATURES_EXT => {
6344            Some(1usize)
6345        }
6346        crate::vk1_0::StructureType::PHYSICAL_DEVICE_PROVOKING_VERTEX_FEATURES_EXT => {
6347            Some(2usize)
6348        }
6349        crate::vk1_0::StructureType::PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES => {
6350            Some(1usize)
6351        }
6352        crate::vk1_0::StructureType::PHYSICAL_DEVICE_RAY_TRACING_MOTION_BLUR_FEATURES_NV => {
6353            Some(2usize)
6354        }
6355        crate::vk1_0::StructureType::PHYSICAL_DEVICE_RGBA10X6_FORMATS_FEATURES_EXT => {
6356            Some(1usize)
6357        }
6358        crate::vk1_0::StructureType::PHYSICAL_DEVICE_DYNAMIC_RENDERING_FEATURES => {
6359            Some(1usize)
6360        }
6361        crate::vk1_0::StructureType::PHYSICAL_DEVICE_IMAGE_VIEW_MIN_LOD_FEATURES_EXT => {
6362            Some(1usize)
6363        }
6364        crate::vk1_0::StructureType::PHYSICAL_DEVICE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_FEATURES_ARM => {
6365            Some(3usize)
6366        }
6367        crate::vk1_0::StructureType::PHYSICAL_DEVICE_LINEAR_COLOR_ATTACHMENT_FEATURES_NV => {
6368            Some(1usize)
6369        }
6370        crate::vk1_0::StructureType::PHYSICAL_DEVICE_GRAPHICS_PIPELINE_LIBRARY_FEATURES_EXT => {
6371            Some(1usize)
6372        }
6373        crate::vk1_0::StructureType::PHYSICAL_DEVICE_DESCRIPTOR_SET_HOST_MAPPING_FEATURES_VALVE => {
6374            Some(1usize)
6375        }
6376        crate::vk1_0::StructureType::PHYSICAL_DEVICE_IMAGE_COMPRESSION_CONTROL_FEATURES_EXT => {
6377            Some(1usize)
6378        }
6379        crate::vk1_0::StructureType::PHYSICAL_DEVICE_IMAGE_COMPRESSION_CONTROL_SWAPCHAIN_FEATURES_EXT => {
6380            Some(1usize)
6381        }
6382        crate::vk1_0::StructureType::PHYSICAL_DEVICE_SUBPASS_MERGE_FEEDBACK_FEATURES_EXT => {
6383            Some(1usize)
6384        }
6385        crate::vk1_0::StructureType::PHYSICAL_DEVICE_PIPELINE_PROPERTIES_FEATURES_EXT => {
6386            Some(1usize)
6387        }
6388        _ => None,
6389    }
6390}
6391/// Provides Vulkan feature items.
6392pub mod vk1_0;
6393/// Provides Vulkan feature items.
6394pub mod vk1_1;
6395/// Provides Vulkan feature items.
6396pub mod vk1_2;
6397/// Provides Vulkan feature items.
6398pub mod vk1_3;