vulk/
loader.rs

1//
2// Imports
3//
4
5use super::{vk, Error};
6use std::ffi::{c_char, c_void};
7
8//
9// Init
10//
11
12pub struct InitFunctions {
13    pub get_instance_proc_addr: Option<vk::GetInstanceProcAddr>,
14    pub create_instance: Option<vk::CreateInstance>,
15}
16
17pub struct Init {
18    fns: InitFunctions,
19    _library: std::sync::Arc<libloading::Library>,
20}
21
22impl Init {
23    pub unsafe fn load() -> Result<Self, Error> {
24        // Only Windows and Linux are supported.
25        #[cfg(windows)]
26        const VULKAN_LIB_PATH: &str = "vulkan-1.dll";
27        #[cfg(unix)]
28        const VULKAN_LIB_PATH: &str = "libvulkan.so.1";
29
30        // Load library.
31        let library = libloading::Library::new(VULKAN_LIB_PATH)
32            .map_err(|_| Error::LibraryLoad(std::borrow::Cow::Borrowed(VULKAN_LIB_PATH)))
33            .map(std::sync::Arc::new)?;
34
35        // Load functions.
36        let load = |name: &'static [u8]| {
37            let pfn = if let Ok(symbol) = library.get::<*const c_void>(name) {
38                *symbol
39            } else {
40                return None;
41            };
42            if pfn as usize == 0 {
43                return None;
44            }
45            Some(pfn)
46        };
47
48        Ok(Self {
49            fns: InitFunctions {
50                get_instance_proc_addr: load(b"vkGetInstanceProcAddr\0").map(|f| std::mem::transmute(f)),
51                create_instance: load(b"vkCreateInstance\0").map(|f| std::mem::transmute(f)),
52            },
53            _library: library,
54        })
55    }
56
57    #[must_use]
58    pub fn fns(&self) -> &InitFunctions {
59        &self.fns
60    }
61
62    #[must_use]
63    #[inline]
64    #[doc = "**Chapter**: Initialization"]
65    #[doc = "<br>"]
66    #[doc = "**Description**: Return a function pointer for a command"]
67    #[doc = "<br>"]
68    #[doc = "**Provided by**: [`VK_VERSION_1_0`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_VERSION_1_0.html)"]
69    #[doc = "<br>"]
70    #[doc = "**Reference**: [`vkGetInstanceProcAddr`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetInstanceProcAddr.html)"]
71    pub unsafe fn get_instance_proc_addr(&self, instance: vk::Instance, p_name: *const c_char) -> vk::PfnVoidFunction {
72        (self.fns.get_instance_proc_addr.unwrap_unchecked())(instance, p_name)
73    }
74
75    #[inline]
76    #[doc = "**Chapter**: Initialization"]
77    #[doc = "<br>"]
78    #[doc = "**Description**: Create a new Vulkan instance"]
79    #[doc = "<br>"]
80    #[doc = "**Provided by**: [`VK_VERSION_1_0`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_VERSION_1_0.html)"]
81    #[doc = "<br>"]
82    #[doc = "**Reference**: [`vkCreateInstance`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCreateInstance.html)"]
83    pub unsafe fn create_instance(&self, p_create_info: *const vk::InstanceCreateInfo) -> Result<vk::Instance, Error> {
84        let mut p_instance = std::mem::MaybeUninit::uninit();
85        match (self.fns.create_instance.unwrap_unchecked())(p_create_info, std::ptr::null(), p_instance.as_mut_ptr()) {
86            vk::Result::Success => Ok(p_instance.assume_init()),
87            result => Err(Error::Vulkan(result)),
88        }
89    }
90}
91
92//
93// Instance
94//
95
96pub struct InstanceFunctions {
97    pub get_device_proc_addr: Option<vk::GetDeviceProcAddr>,
98    pub destroy_instance: Option<vk::DestroyInstance>,
99    pub enumerate_physical_devices: Option<vk::EnumeratePhysicalDevices>,
100    pub get_physical_device_properties2: Option<vk::GetPhysicalDeviceProperties2>,
101    pub get_physical_device_queue_family_properties2: Option<vk::GetPhysicalDeviceQueueFamilyProperties2>,
102    pub create_device: Option<vk::CreateDevice>,
103    pub get_physical_device_memory_properties2: Option<vk::GetPhysicalDeviceMemoryProperties2>,
104    pub create_win32_surface_khr: Option<vk::CreateWin32SurfaceKHR>,
105    pub destroy_surface_khr: Option<vk::DestroySurfaceKHR>,
106    pub get_physical_device_surface_support_khr: Option<vk::GetPhysicalDeviceSurfaceSupportKHR>,
107    pub get_physical_device_surface_capabilities_khr: Option<vk::GetPhysicalDeviceSurfaceCapabilitiesKHR>,
108    pub get_physical_device_surface_formats_khr: Option<vk::GetPhysicalDeviceSurfaceFormatsKHR>,
109    pub get_physical_device_surface_present_modes_khr: Option<vk::GetPhysicalDeviceSurfacePresentModesKHR>,
110    pub get_physical_device_calibrateable_time_domains_ext: Option<vk::GetPhysicalDeviceCalibrateableTimeDomainsEXT>,
111    pub create_debug_utils_messenger_ext: Option<vk::CreateDebugUtilsMessengerEXT>,
112    pub destroy_debug_utils_messenger_ext: Option<vk::DestroyDebugUtilsMessengerEXT>,
113}
114
115pub struct Instance {
116    fns: InstanceFunctions,
117    handle: vk::Instance,
118}
119
120impl Instance {
121    pub unsafe fn load(init: &Init, instance: vk::Instance) -> Result<Self, Error> {
122        let load = |name: &'static [u8]| {
123            let pfn = init.get_instance_proc_addr(instance, name.as_ptr().cast());
124            if pfn as usize == 0 {
125                return None;
126            }
127            Some(pfn)
128        };
129
130        Ok(Self {
131            fns: InstanceFunctions {
132                get_device_proc_addr: load(b"vkGetDeviceProcAddr\0").map(|f| std::mem::transmute(f)),
133                destroy_instance: load(b"vkDestroyInstance\0").map(|f| std::mem::transmute(f)),
134                enumerate_physical_devices: load(b"vkEnumeratePhysicalDevices\0").map(|f| std::mem::transmute(f)),
135                get_physical_device_properties2: load(b"vkGetPhysicalDeviceProperties2\0").map(|f| std::mem::transmute(f)),
136                get_physical_device_queue_family_properties2: load(b"vkGetPhysicalDeviceQueueFamilyProperties2\0").map(|f| std::mem::transmute(f)),
137                create_device: load(b"vkCreateDevice\0").map(|f| std::mem::transmute(f)),
138                get_physical_device_memory_properties2: load(b"vkGetPhysicalDeviceMemoryProperties2\0").map(|f| std::mem::transmute(f)),
139                create_win32_surface_khr: load(b"vkCreateWin32SurfaceKHR\0").map(|f| std::mem::transmute(f)),
140                destroy_surface_khr: load(b"vkDestroySurfaceKHR\0").map(|f| std::mem::transmute(f)),
141                get_physical_device_surface_support_khr: load(b"vkGetPhysicalDeviceSurfaceSupportKHR\0").map(|f| std::mem::transmute(f)),
142                get_physical_device_surface_capabilities_khr: load(b"vkGetPhysicalDeviceSurfaceCapabilitiesKHR\0").map(|f| std::mem::transmute(f)),
143                get_physical_device_surface_formats_khr: load(b"vkGetPhysicalDeviceSurfaceFormatsKHR\0").map(|f| std::mem::transmute(f)),
144                get_physical_device_surface_present_modes_khr: load(b"vkGetPhysicalDeviceSurfacePresentModesKHR\0").map(|f| std::mem::transmute(f)),
145                get_physical_device_calibrateable_time_domains_ext: load(b"vkGetPhysicalDeviceCalibrateableTimeDomainsEXT\0").map(|f| std::mem::transmute(f)),
146                create_debug_utils_messenger_ext: load(b"vkCreateDebugUtilsMessengerEXT\0").map(|f| std::mem::transmute(f)),
147                destroy_debug_utils_messenger_ext: load(b"vkDestroyDebugUtilsMessengerEXT\0").map(|f| std::mem::transmute(f)),
148            },
149            handle: instance,
150        })
151    }
152
153    #[must_use]
154    pub fn handle(&self) -> vk::Instance {
155        self.handle
156    }
157
158    #[must_use]
159    pub fn fns(&self) -> &InstanceFunctions {
160        &self.fns
161    }
162
163    #[must_use]
164    #[inline]
165    #[doc = "**Chapter**: Initialization"]
166    #[doc = "<br>"]
167    #[doc = "**Description**: Return a function pointer for a command"]
168    #[doc = "<br>"]
169    #[doc = "**Provided by**: [`VK_VERSION_1_0`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_VERSION_1_0.html)"]
170    #[doc = "<br>"]
171    #[doc = "**Reference**: [`vkGetDeviceProcAddr`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetDeviceProcAddr.html)"]
172    pub unsafe fn get_device_proc_addr(&self, device: vk::Device, p_name: *const c_char) -> vk::PfnVoidFunction {
173        (self.fns.get_device_proc_addr.unwrap_unchecked())(device, p_name)
174    }
175
176    #[inline]
177    #[doc = "**Chapter**: Initialization"]
178    #[doc = "<br>"]
179    #[doc = "**Description**: Destroy an instance of Vulkan"]
180    #[doc = "<br>"]
181    #[doc = "**Provided by**: [`VK_VERSION_1_0`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_VERSION_1_0.html)"]
182    #[doc = "<br>"]
183    #[doc = "**Reference**: [`vkDestroyInstance`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkDestroyInstance.html)"]
184    pub unsafe fn destroy_instance(&self) {
185        (self.fns.destroy_instance.unwrap_unchecked())(self.handle, std::ptr::null());
186    }
187
188    #[inline]
189    #[doc = "**Chapter**: Devices and Queues"]
190    #[doc = "<br>"]
191    #[doc = "**Description**: Enumerates the physical devices accessible to a Vulkan instance"]
192    #[doc = "<br>"]
193    #[doc = "**Provided by**: [`VK_VERSION_1_0`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_VERSION_1_0.html)"]
194    #[doc = "<br>"]
195    #[doc = "**Reference**: [`vkEnumeratePhysicalDevices`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkEnumeratePhysicalDevices.html)"]
196    pub unsafe fn enumerate_physical_devices(&self, p_physical_device_count: *mut u32, p_physical_devices: *mut vk::PhysicalDevice) -> Result<(), Error> {
197        match (self.fns.enumerate_physical_devices.unwrap_unchecked())(self.handle, p_physical_device_count, p_physical_devices) {
198            vk::Result::Success => Ok(()),
199            result => Err(Error::Vulkan(result)),
200        }
201    }
202
203    #[inline]
204    #[doc = "**Chapter**: Devices and Queues"]
205    #[doc = "<br>"]
206    #[doc = "**Description**: Returns properties of a physical device"]
207    #[doc = "<br>"]
208    #[doc = "**Provided by**: [`VK_VERSION_1_1`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_VERSION_1_1.html)"]
209    #[doc = "<br>"]
210    #[doc = "**Reference**: [`vkGetPhysicalDeviceProperties2`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetPhysicalDeviceProperties2.html)"]
211    pub unsafe fn get_physical_device_properties2(&self, physical_device: vk::PhysicalDevice, p_properties: *mut vk::PhysicalDeviceProperties2) {
212        (self.fns.get_physical_device_properties2.unwrap_unchecked())(physical_device, p_properties);
213    }
214
215    #[inline]
216    #[doc = "**Chapter**: Devices and Queues"]
217    #[doc = "<br>"]
218    #[doc = "**Description**: Reports properties of the queues of the specified physical device"]
219    #[doc = "<br>"]
220    #[doc = "**Provided by**: [`VK_VERSION_1_1`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_VERSION_1_1.html)"]
221    #[doc = "<br>"]
222    #[doc = "**Reference**: [`vkGetPhysicalDeviceQueueFamilyProperties2`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetPhysicalDeviceQueueFamilyProperties2.html)"]
223    pub unsafe fn get_physical_device_queue_family_properties2(
224        &self,
225        physical_device: vk::PhysicalDevice,
226        p_queue_family_property_count: *mut u32,
227        p_queue_family_properties: *mut vk::QueueFamilyProperties2,
228    ) {
229        (self.fns.get_physical_device_queue_family_properties2.unwrap_unchecked())(physical_device, p_queue_family_property_count, p_queue_family_properties);
230    }
231
232    #[inline]
233    #[doc = "**Chapter**: Devices and Queues"]
234    #[doc = "<br>"]
235    #[doc = "**Description**: Create a new device instance"]
236    #[doc = "<br>"]
237    #[doc = "**Provided by**: [`VK_VERSION_1_0`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_VERSION_1_0.html)"]
238    #[doc = "<br>"]
239    #[doc = "**Reference**: [`vkCreateDevice`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCreateDevice.html)"]
240    pub unsafe fn create_device(&self, physical_device: vk::PhysicalDevice, p_create_info: *const vk::DeviceCreateInfo) -> Result<vk::Device, Error> {
241        let mut p_device = std::mem::MaybeUninit::uninit();
242        match (self.fns.create_device.unwrap_unchecked())(physical_device, p_create_info, std::ptr::null(), p_device.as_mut_ptr()) {
243            vk::Result::Success => Ok(p_device.assume_init()),
244            result => Err(Error::Vulkan(result)),
245        }
246    }
247
248    #[inline]
249    #[doc = "**Chapter**: Memory Allocation"]
250    #[doc = "<br>"]
251    #[doc = "**Description**: Reports memory information for the specified physical device"]
252    #[doc = "<br>"]
253    #[doc = "**Provided by**: [`VK_VERSION_1_1`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_VERSION_1_1.html)"]
254    #[doc = "<br>"]
255    #[doc = "**Reference**: [`vkGetPhysicalDeviceMemoryProperties2`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetPhysicalDeviceMemoryProperties2.html)"]
256    pub unsafe fn get_physical_device_memory_properties2(&self, physical_device: vk::PhysicalDevice, p_memory_properties: *mut vk::PhysicalDeviceMemoryProperties2) {
257        (self.fns.get_physical_device_memory_properties2.unwrap_unchecked())(physical_device, p_memory_properties);
258    }
259
260    #[inline]
261    #[doc = "**Chapter**: Window System Integration (WSI)"]
262    #[doc = "<br>"]
263    #[doc = "**Description**: Create a VkSurfaceKHR object for an Win32 native window"]
264    #[doc = "<br>"]
265    #[doc = "**Provided by**: [`VK_KHR_win32_surface`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_KHR_win32_surface.html)"]
266    #[doc = "<br>"]
267    #[doc = "**Reference**: [`vkCreateWin32SurfaceKHR`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCreateWin32SurfaceKHR.html)"]
268    pub unsafe fn create_win32_surface_khr(&self, p_create_info: *const vk::Win32SurfaceCreateInfoKHR) -> Result<vk::SurfaceKHR, Error> {
269        let mut p_surface = std::mem::MaybeUninit::uninit();
270        match (self.fns.create_win32_surface_khr.unwrap_unchecked())(self.handle, p_create_info, std::ptr::null(), p_surface.as_mut_ptr()) {
271            vk::Result::Success => Ok(p_surface.assume_init()),
272            result => Err(Error::Vulkan(result)),
273        }
274    }
275
276    #[inline]
277    #[doc = "**Chapter**: Window System Integration (WSI)"]
278    #[doc = "<br>"]
279    #[doc = "**Description**: Destroy a VkSurfaceKHR object"]
280    #[doc = "<br>"]
281    #[doc = "**Provided by**: [`VK_KHR_surface`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_KHR_surface.html)"]
282    #[doc = "<br>"]
283    #[doc = "**Reference**: [`vkDestroySurfaceKHR`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkDestroySurfaceKHR.html)"]
284    pub unsafe fn destroy_surface_khr(&self, surface: vk::SurfaceKHR) {
285        (self.fns.destroy_surface_khr.unwrap_unchecked())(self.handle, surface, std::ptr::null());
286    }
287
288    #[inline]
289    #[doc = "**Chapter**: Window System Integration (WSI)"]
290    #[doc = "<br>"]
291    #[doc = "**Description**: Query if presentation is supported"]
292    #[doc = "<br>"]
293    #[doc = "**Provided by**: [`VK_KHR_surface`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_KHR_surface.html)"]
294    #[doc = "<br>"]
295    #[doc = "**Reference**: [`vkGetPhysicalDeviceSurfaceSupportKHR`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetPhysicalDeviceSurfaceSupportKHR.html)"]
296    pub unsafe fn get_physical_device_surface_support_khr(&self, physical_device: vk::PhysicalDevice, queue_family_index: u32, surface: vk::SurfaceKHR) -> Result<vk::Bool32, Error> {
297        let mut p_supported = std::mem::MaybeUninit::uninit();
298        match (self.fns.get_physical_device_surface_support_khr.unwrap_unchecked())(physical_device, queue_family_index, surface, p_supported.as_mut_ptr()) {
299            vk::Result::Success => Ok(p_supported.assume_init()),
300            result => Err(Error::Vulkan(result)),
301        }
302    }
303
304    #[inline]
305    #[doc = "**Chapter**: Window System Integration (WSI)"]
306    #[doc = "<br>"]
307    #[doc = "**Description**: Query surface capabilities"]
308    #[doc = "<br>"]
309    #[doc = "**Provided by**: [`VK_KHR_surface`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_KHR_surface.html)"]
310    #[doc = "<br>"]
311    #[doc = "**Reference**: [`vkGetPhysicalDeviceSurfaceCapabilitiesKHR`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetPhysicalDeviceSurfaceCapabilitiesKHR.html)"]
312    pub unsafe fn get_physical_device_surface_capabilities_khr(&self, physical_device: vk::PhysicalDevice, surface: vk::SurfaceKHR) -> Result<vk::SurfaceCapabilitiesKHR, Error> {
313        let mut p_surface_capabilities = std::mem::MaybeUninit::uninit();
314        match (self.fns.get_physical_device_surface_capabilities_khr.unwrap_unchecked())(physical_device, surface, p_surface_capabilities.as_mut_ptr()) {
315            vk::Result::Success => Ok(p_surface_capabilities.assume_init()),
316            result => Err(Error::Vulkan(result)),
317        }
318    }
319
320    #[inline]
321    #[doc = "**Chapter**: Window System Integration (WSI)"]
322    #[doc = "<br>"]
323    #[doc = "**Description**: Query color formats supported by surface"]
324    #[doc = "<br>"]
325    #[doc = "**Provided by**: [`VK_KHR_surface`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_KHR_surface.html)"]
326    #[doc = "<br>"]
327    #[doc = "**Reference**: [`vkGetPhysicalDeviceSurfaceFormatsKHR`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetPhysicalDeviceSurfaceFormatsKHR.html)"]
328    pub unsafe fn get_physical_device_surface_formats_khr(
329        &self,
330        physical_device: vk::PhysicalDevice,
331        surface: vk::SurfaceKHR,
332        p_surface_format_count: *mut u32,
333        p_surface_formats: *mut vk::SurfaceFormatKHR,
334    ) -> Result<(), Error> {
335        match (self.fns.get_physical_device_surface_formats_khr.unwrap_unchecked())(physical_device, surface, p_surface_format_count, p_surface_formats) {
336            vk::Result::Success => Ok(()),
337            result => Err(Error::Vulkan(result)),
338        }
339    }
340
341    #[inline]
342    #[doc = "**Chapter**: Window System Integration (WSI)"]
343    #[doc = "<br>"]
344    #[doc = "**Description**: Query supported presentation modes"]
345    #[doc = "<br>"]
346    #[doc = "**Provided by**: [`VK_KHR_surface`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_KHR_surface.html)"]
347    #[doc = "<br>"]
348    #[doc = "**Reference**: [`vkGetPhysicalDeviceSurfacePresentModesKHR`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetPhysicalDeviceSurfacePresentModesKHR.html)"]
349    pub unsafe fn get_physical_device_surface_present_modes_khr(
350        &self,
351        physical_device: vk::PhysicalDevice,
352        surface: vk::SurfaceKHR,
353        p_present_mode_count: *mut u32,
354        p_present_modes: *mut vk::PresentModeKHR,
355    ) -> Result<(), Error> {
356        match (self.fns.get_physical_device_surface_present_modes_khr.unwrap_unchecked())(physical_device, surface, p_present_mode_count, p_present_modes) {
357            vk::Result::Success => Ok(()),
358            result => Err(Error::Vulkan(result)),
359        }
360    }
361
362    #[inline]
363    #[doc = "**Chapter**: Additional Capabilities"]
364    #[doc = "<br>"]
365    #[doc = "**Description**: Query calibrateable time domains"]
366    #[doc = "<br>"]
367    #[doc = "**Provided by**: [`VK_EXT_calibrated_timestamps`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_EXT_calibrated_timestamps.html)"]
368    #[doc = "<br>"]
369    #[doc = "**Reference**: [`vkGetPhysicalDeviceCalibrateableTimeDomainsEXT`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetPhysicalDeviceCalibrateableTimeDomainsEXT.html)"]
370    pub unsafe fn get_physical_device_calibrateable_time_domains_ext(
371        &self,
372        physical_device: vk::PhysicalDevice,
373        p_time_domain_count: *mut u32,
374        p_time_domains: *mut vk::TimeDomainEXT,
375    ) -> Result<(), Error> {
376        match (self.fns.get_physical_device_calibrateable_time_domains_ext.unwrap_unchecked())(physical_device, p_time_domain_count, p_time_domains) {
377            vk::Result::Success => Ok(()),
378            result => Err(Error::Vulkan(result)),
379        }
380    }
381
382    #[inline]
383    #[doc = "**Chapter**: Debugging"]
384    #[doc = "<br>"]
385    #[doc = "**Description**: Create a debug messenger object"]
386    #[doc = "<br>"]
387    #[doc = "**Provided by**: [`VK_EXT_debug_utils`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_EXT_debug_utils.html)"]
388    #[doc = "<br>"]
389    #[doc = "**Reference**: [`vkCreateDebugUtilsMessengerEXT`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCreateDebugUtilsMessengerEXT.html)"]
390    pub unsafe fn create_debug_utils_messenger_ext(&self, p_create_info: *const vk::DebugUtilsMessengerCreateInfoEXT) -> Result<vk::DebugUtilsMessengerEXT, Error> {
391        let mut p_messenger = std::mem::MaybeUninit::uninit();
392        match (self.fns.create_debug_utils_messenger_ext.unwrap_unchecked())(self.handle, p_create_info, std::ptr::null(), p_messenger.as_mut_ptr()) {
393            vk::Result::Success => Ok(p_messenger.assume_init()),
394            result => Err(Error::Vulkan(result)),
395        }
396    }
397
398    #[inline]
399    #[doc = "**Chapter**: Debugging"]
400    #[doc = "<br>"]
401    #[doc = "**Description**: Destroy a debug messenger object"]
402    #[doc = "<br>"]
403    #[doc = "**Provided by**: [`VK_EXT_debug_utils`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_EXT_debug_utils.html)"]
404    #[doc = "<br>"]
405    #[doc = "**Reference**: [`vkDestroyDebugUtilsMessengerEXT`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkDestroyDebugUtilsMessengerEXT.html)"]
406    pub unsafe fn destroy_debug_utils_messenger_ext(&self, messenger: vk::DebugUtilsMessengerEXT) {
407        (self.fns.destroy_debug_utils_messenger_ext.unwrap_unchecked())(self.handle, messenger, std::ptr::null());
408    }
409}
410
411//
412// Device
413//
414
415pub struct DeviceFunctions {
416    pub destroy_device: Option<vk::DestroyDevice>,
417    pub get_device_queue2: Option<vk::GetDeviceQueue2>,
418    pub create_command_pool: Option<vk::CreateCommandPool>,
419    pub reset_command_pool: Option<vk::ResetCommandPool>,
420    pub destroy_command_pool: Option<vk::DestroyCommandPool>,
421    pub allocate_command_buffers: Option<vk::AllocateCommandBuffers>,
422    pub reset_command_buffer: Option<vk::ResetCommandBuffer>,
423    pub free_command_buffers: Option<vk::FreeCommandBuffers>,
424    pub begin_command_buffer: Option<vk::BeginCommandBuffer>,
425    pub end_command_buffer: Option<vk::EndCommandBuffer>,
426    pub queue_submit2: Option<vk::QueueSubmit2>,
427    pub create_semaphore: Option<vk::CreateSemaphore>,
428    pub destroy_semaphore: Option<vk::DestroySemaphore>,
429    pub get_semaphore_counter_value: Option<vk::GetSemaphoreCounterValue>,
430    pub wait_semaphores: Option<vk::WaitSemaphores>,
431    pub signal_semaphore: Option<vk::SignalSemaphore>,
432    pub cmd_pipeline_barrier2: Option<vk::CmdPipelineBarrier2>,
433    pub queue_wait_idle: Option<vk::QueueWaitIdle>,
434    pub device_wait_idle: Option<vk::DeviceWaitIdle>,
435    pub get_calibrated_timestamps_ext: Option<vk::GetCalibratedTimestampsEXT>,
436    pub cmd_begin_rendering: Option<vk::CmdBeginRendering>,
437    pub cmd_end_rendering: Option<vk::CmdEndRendering>,
438    pub create_shaders_ext: Option<vk::CreateShadersEXT>,
439    pub cmd_bind_shaders_ext: Option<vk::CmdBindShadersEXT>,
440    pub destroy_shader_ext: Option<vk::DestroyShaderEXT>,
441    pub create_shader_module: Option<vk::CreateShaderModule>,
442    pub destroy_shader_module: Option<vk::DestroyShaderModule>,
443    pub create_ray_tracing_pipelines_khr: Option<vk::CreateRayTracingPipelinesKHR>,
444    pub get_ray_tracing_shader_group_handles_khr: Option<vk::GetRayTracingShaderGroupHandlesKHR>,
445    pub destroy_pipeline: Option<vk::DestroyPipeline>,
446    pub cmd_bind_pipeline: Option<vk::CmdBindPipeline>,
447    pub allocate_memory: Option<vk::AllocateMemory>,
448    pub free_memory: Option<vk::FreeMemory>,
449    pub map_memory2_khr: Option<vk::MapMemory2KHR>,
450    pub unmap_memory2_khr: Option<vk::UnmapMemory2KHR>,
451    pub create_buffer: Option<vk::CreateBuffer>,
452    pub destroy_buffer: Option<vk::DestroyBuffer>,
453    pub create_image: Option<vk::CreateImage>,
454    pub destroy_image: Option<vk::DestroyImage>,
455    pub create_image_view: Option<vk::CreateImageView>,
456    pub destroy_image_view: Option<vk::DestroyImageView>,
457    pub create_acceleration_structure_khr: Option<vk::CreateAccelerationStructureKHR>,
458    pub get_acceleration_structure_build_sizes_khr: Option<vk::GetAccelerationStructureBuildSizesKHR>,
459    pub destroy_acceleration_structure_khr: Option<vk::DestroyAccelerationStructureKHR>,
460    pub get_acceleration_structure_device_address_khr: Option<vk::GetAccelerationStructureDeviceAddressKHR>,
461    pub get_device_buffer_memory_requirements: Option<vk::GetDeviceBufferMemoryRequirements>,
462    pub get_device_image_memory_requirements: Option<vk::GetDeviceImageMemoryRequirements>,
463    pub bind_buffer_memory2: Option<vk::BindBufferMemory2>,
464    pub bind_image_memory2: Option<vk::BindImageMemory2>,
465    pub create_sampler: Option<vk::CreateSampler>,
466    pub destroy_sampler: Option<vk::DestroySampler>,
467    pub create_descriptor_set_layout: Option<vk::CreateDescriptorSetLayout>,
468    pub destroy_descriptor_set_layout: Option<vk::DestroyDescriptorSetLayout>,
469    pub create_pipeline_layout: Option<vk::CreatePipelineLayout>,
470    pub destroy_pipeline_layout: Option<vk::DestroyPipelineLayout>,
471    pub cmd_push_constants: Option<vk::CmdPushConstants>,
472    pub get_buffer_device_address: Option<vk::GetBufferDeviceAddress>,
473    pub get_descriptor_set_layout_size_ext: Option<vk::GetDescriptorSetLayoutSizeEXT>,
474    pub get_descriptor_set_layout_binding_offset_ext: Option<vk::GetDescriptorSetLayoutBindingOffsetEXT>,
475    pub get_descriptor_ext: Option<vk::GetDescriptorEXT>,
476    pub cmd_bind_descriptor_buffers_ext: Option<vk::CmdBindDescriptorBuffersEXT>,
477    pub cmd_set_descriptor_buffer_offsets_ext: Option<vk::CmdSetDescriptorBufferOffsetsEXT>,
478    pub create_query_pool: Option<vk::CreateQueryPool>,
479    pub destroy_query_pool: Option<vk::DestroyQueryPool>,
480    pub reset_query_pool: Option<vk::ResetQueryPool>,
481    pub cmd_begin_query: Option<vk::CmdBeginQuery>,
482    pub cmd_end_query: Option<vk::CmdEndQuery>,
483    pub get_query_pool_results: Option<vk::GetQueryPoolResults>,
484    pub cmd_write_timestamp2: Option<vk::CmdWriteTimestamp2>,
485    pub cmd_copy_buffer2: Option<vk::CmdCopyBuffer2>,
486    pub cmd_copy_image2: Option<vk::CmdCopyImage2>,
487    pub cmd_copy_buffer_to_image2: Option<vk::CmdCopyBufferToImage2>,
488    pub cmd_copy_image_to_buffer2: Option<vk::CmdCopyImageToBuffer2>,
489    pub cmd_draw_mesh_tasks_ext: Option<vk::CmdDrawMeshTasksEXT>,
490    pub cmd_draw_mesh_tasks_indirect_ext: Option<vk::CmdDrawMeshTasksIndirectEXT>,
491    pub cmd_draw_mesh_tasks_indirect_count_ext: Option<vk::CmdDrawMeshTasksIndirectCountEXT>,
492    pub cmd_set_viewport_with_count: Option<vk::CmdSetViewportWithCount>,
493    pub cmd_set_scissor_with_count: Option<vk::CmdSetScissorWithCount>,
494    pub cmd_set_rasterization_samples_ext: Option<vk::CmdSetRasterizationSamplesEXT>,
495    pub cmd_set_front_face: Option<vk::CmdSetFrontFace>,
496    pub cmd_set_cull_mode: Option<vk::CmdSetCullMode>,
497    pub cmd_set_depth_test_enable: Option<vk::CmdSetDepthTestEnable>,
498    pub cmd_set_depth_compare_op: Option<vk::CmdSetDepthCompareOp>,
499    pub cmd_set_depth_write_enable: Option<vk::CmdSetDepthWriteEnable>,
500    pub cmd_set_color_blend_enable_ext: Option<vk::CmdSetColorBlendEnableEXT>,
501    pub cmd_set_color_blend_equation_ext: Option<vk::CmdSetColorBlendEquationEXT>,
502    pub cmd_set_color_write_mask_ext: Option<vk::CmdSetColorWriteMaskEXT>,
503    pub cmd_dispatch: Option<vk::CmdDispatch>,
504    pub cmd_dispatch_indirect: Option<vk::CmdDispatchIndirect>,
505    pub create_swapchain_khr: Option<vk::CreateSwapchainKHR>,
506    pub destroy_swapchain_khr: Option<vk::DestroySwapchainKHR>,
507    pub get_swapchain_images_khr: Option<vk::GetSwapchainImagesKHR>,
508    pub acquire_next_image2_khr: Option<vk::AcquireNextImage2KHR>,
509    pub queue_present_khr: Option<vk::QueuePresentKHR>,
510    pub cmd_build_acceleration_structures_khr: Option<vk::CmdBuildAccelerationStructuresKHR>,
511    pub cmd_trace_rays_khr: Option<vk::CmdTraceRaysKHR>,
512    pub cmd_trace_rays_indirect2_khr: Option<vk::CmdTraceRaysIndirect2KHR>,
513}
514
515pub struct Device {
516    fns: DeviceFunctions,
517    handle: vk::Device,
518}
519
520impl Device {
521    pub unsafe fn load(instance: &Instance, device: vk::Device) -> Result<Self, Error> {
522        let load = |name: &'static [u8]| {
523            let pfn = instance.get_device_proc_addr(device, name.as_ptr().cast());
524            if pfn as usize == 0 {
525                return None;
526            }
527            Some(pfn)
528        };
529
530        Ok(Self {
531            fns: DeviceFunctions {
532                destroy_device: load(b"vkDestroyDevice\0").map(|f| std::mem::transmute(f)),
533                get_device_queue2: load(b"vkGetDeviceQueue2\0").map(|f| std::mem::transmute(f)),
534                create_command_pool: load(b"vkCreateCommandPool\0").map(|f| std::mem::transmute(f)),
535                reset_command_pool: load(b"vkResetCommandPool\0").map(|f| std::mem::transmute(f)),
536                destroy_command_pool: load(b"vkDestroyCommandPool\0").map(|f| std::mem::transmute(f)),
537                allocate_command_buffers: load(b"vkAllocateCommandBuffers\0").map(|f| std::mem::transmute(f)),
538                reset_command_buffer: load(b"vkResetCommandBuffer\0").map(|f| std::mem::transmute(f)),
539                free_command_buffers: load(b"vkFreeCommandBuffers\0").map(|f| std::mem::transmute(f)),
540                begin_command_buffer: load(b"vkBeginCommandBuffer\0").map(|f| std::mem::transmute(f)),
541                end_command_buffer: load(b"vkEndCommandBuffer\0").map(|f| std::mem::transmute(f)),
542                queue_submit2: load(b"vkQueueSubmit2\0").map(|f| std::mem::transmute(f)),
543                create_semaphore: load(b"vkCreateSemaphore\0").map(|f| std::mem::transmute(f)),
544                destroy_semaphore: load(b"vkDestroySemaphore\0").map(|f| std::mem::transmute(f)),
545                get_semaphore_counter_value: load(b"vkGetSemaphoreCounterValue\0").map(|f| std::mem::transmute(f)),
546                wait_semaphores: load(b"vkWaitSemaphores\0").map(|f| std::mem::transmute(f)),
547                signal_semaphore: load(b"vkSignalSemaphore\0").map(|f| std::mem::transmute(f)),
548                cmd_pipeline_barrier2: load(b"vkCmdPipelineBarrier2\0").map(|f| std::mem::transmute(f)),
549                queue_wait_idle: load(b"vkQueueWaitIdle\0").map(|f| std::mem::transmute(f)),
550                device_wait_idle: load(b"vkDeviceWaitIdle\0").map(|f| std::mem::transmute(f)),
551                get_calibrated_timestamps_ext: load(b"vkGetCalibratedTimestampsEXT\0").map(|f| std::mem::transmute(f)),
552                cmd_begin_rendering: load(b"vkCmdBeginRendering\0").map(|f| std::mem::transmute(f)),
553                cmd_end_rendering: load(b"vkCmdEndRendering\0").map(|f| std::mem::transmute(f)),
554                create_shaders_ext: load(b"vkCreateShadersEXT\0").map(|f| std::mem::transmute(f)),
555                cmd_bind_shaders_ext: load(b"vkCmdBindShadersEXT\0").map(|f| std::mem::transmute(f)),
556                destroy_shader_ext: load(b"vkDestroyShaderEXT\0").map(|f| std::mem::transmute(f)),
557                create_shader_module: load(b"vkCreateShaderModule\0").map(|f| std::mem::transmute(f)),
558                destroy_shader_module: load(b"vkDestroyShaderModule\0").map(|f| std::mem::transmute(f)),
559                create_ray_tracing_pipelines_khr: load(b"vkCreateRayTracingPipelinesKHR\0").map(|f| std::mem::transmute(f)),
560                get_ray_tracing_shader_group_handles_khr: load(b"vkGetRayTracingShaderGroupHandlesKHR\0").map(|f| std::mem::transmute(f)),
561                destroy_pipeline: load(b"vkDestroyPipeline\0").map(|f| std::mem::transmute(f)),
562                cmd_bind_pipeline: load(b"vkCmdBindPipeline\0").map(|f| std::mem::transmute(f)),
563                allocate_memory: load(b"vkAllocateMemory\0").map(|f| std::mem::transmute(f)),
564                free_memory: load(b"vkFreeMemory\0").map(|f| std::mem::transmute(f)),
565                map_memory2_khr: load(b"vkMapMemory2KHR\0").map(|f| std::mem::transmute(f)),
566                unmap_memory2_khr: load(b"vkUnmapMemory2KHR\0").map(|f| std::mem::transmute(f)),
567                create_buffer: load(b"vkCreateBuffer\0").map(|f| std::mem::transmute(f)),
568                destroy_buffer: load(b"vkDestroyBuffer\0").map(|f| std::mem::transmute(f)),
569                create_image: load(b"vkCreateImage\0").map(|f| std::mem::transmute(f)),
570                destroy_image: load(b"vkDestroyImage\0").map(|f| std::mem::transmute(f)),
571                create_image_view: load(b"vkCreateImageView\0").map(|f| std::mem::transmute(f)),
572                destroy_image_view: load(b"vkDestroyImageView\0").map(|f| std::mem::transmute(f)),
573                create_acceleration_structure_khr: load(b"vkCreateAccelerationStructureKHR\0").map(|f| std::mem::transmute(f)),
574                get_acceleration_structure_build_sizes_khr: load(b"vkGetAccelerationStructureBuildSizesKHR\0").map(|f| std::mem::transmute(f)),
575                destroy_acceleration_structure_khr: load(b"vkDestroyAccelerationStructureKHR\0").map(|f| std::mem::transmute(f)),
576                get_acceleration_structure_device_address_khr: load(b"vkGetAccelerationStructureDeviceAddressKHR\0").map(|f| std::mem::transmute(f)),
577                get_device_buffer_memory_requirements: load(b"vkGetDeviceBufferMemoryRequirements\0").map(|f| std::mem::transmute(f)),
578                get_device_image_memory_requirements: load(b"vkGetDeviceImageMemoryRequirements\0").map(|f| std::mem::transmute(f)),
579                bind_buffer_memory2: load(b"vkBindBufferMemory2\0").map(|f| std::mem::transmute(f)),
580                bind_image_memory2: load(b"vkBindImageMemory2\0").map(|f| std::mem::transmute(f)),
581                create_sampler: load(b"vkCreateSampler\0").map(|f| std::mem::transmute(f)),
582                destroy_sampler: load(b"vkDestroySampler\0").map(|f| std::mem::transmute(f)),
583                create_descriptor_set_layout: load(b"vkCreateDescriptorSetLayout\0").map(|f| std::mem::transmute(f)),
584                destroy_descriptor_set_layout: load(b"vkDestroyDescriptorSetLayout\0").map(|f| std::mem::transmute(f)),
585                create_pipeline_layout: load(b"vkCreatePipelineLayout\0").map(|f| std::mem::transmute(f)),
586                destroy_pipeline_layout: load(b"vkDestroyPipelineLayout\0").map(|f| std::mem::transmute(f)),
587                cmd_push_constants: load(b"vkCmdPushConstants\0").map(|f| std::mem::transmute(f)),
588                get_buffer_device_address: load(b"vkGetBufferDeviceAddress\0").map(|f| std::mem::transmute(f)),
589                get_descriptor_set_layout_size_ext: load(b"vkGetDescriptorSetLayoutSizeEXT\0").map(|f| std::mem::transmute(f)),
590                get_descriptor_set_layout_binding_offset_ext: load(b"vkGetDescriptorSetLayoutBindingOffsetEXT\0").map(|f| std::mem::transmute(f)),
591                get_descriptor_ext: load(b"vkGetDescriptorEXT\0").map(|f| std::mem::transmute(f)),
592                cmd_bind_descriptor_buffers_ext: load(b"vkCmdBindDescriptorBuffersEXT\0").map(|f| std::mem::transmute(f)),
593                cmd_set_descriptor_buffer_offsets_ext: load(b"vkCmdSetDescriptorBufferOffsetsEXT\0").map(|f| std::mem::transmute(f)),
594                create_query_pool: load(b"vkCreateQueryPool\0").map(|f| std::mem::transmute(f)),
595                destroy_query_pool: load(b"vkDestroyQueryPool\0").map(|f| std::mem::transmute(f)),
596                reset_query_pool: load(b"vkResetQueryPool\0").map(|f| std::mem::transmute(f)),
597                cmd_begin_query: load(b"vkCmdBeginQuery\0").map(|f| std::mem::transmute(f)),
598                cmd_end_query: load(b"vkCmdEndQuery\0").map(|f| std::mem::transmute(f)),
599                get_query_pool_results: load(b"vkGetQueryPoolResults\0").map(|f| std::mem::transmute(f)),
600                cmd_write_timestamp2: load(b"vkCmdWriteTimestamp2\0").map(|f| std::mem::transmute(f)),
601                cmd_copy_buffer2: load(b"vkCmdCopyBuffer2\0").map(|f| std::mem::transmute(f)),
602                cmd_copy_image2: load(b"vkCmdCopyImage2\0").map(|f| std::mem::transmute(f)),
603                cmd_copy_buffer_to_image2: load(b"vkCmdCopyBufferToImage2\0").map(|f| std::mem::transmute(f)),
604                cmd_copy_image_to_buffer2: load(b"vkCmdCopyImageToBuffer2\0").map(|f| std::mem::transmute(f)),
605                cmd_draw_mesh_tasks_ext: load(b"vkCmdDrawMeshTasksEXT\0").map(|f| std::mem::transmute(f)),
606                cmd_draw_mesh_tasks_indirect_ext: load(b"vkCmdDrawMeshTasksIndirectEXT\0").map(|f| std::mem::transmute(f)),
607                cmd_draw_mesh_tasks_indirect_count_ext: load(b"vkCmdDrawMeshTasksIndirectCountEXT\0").map(|f| std::mem::transmute(f)),
608                cmd_set_viewport_with_count: load(b"vkCmdSetViewportWithCount\0").map(|f| std::mem::transmute(f)),
609                cmd_set_scissor_with_count: load(b"vkCmdSetScissorWithCount\0").map(|f| std::mem::transmute(f)),
610                cmd_set_rasterization_samples_ext: load(b"vkCmdSetRasterizationSamplesEXT\0").map(|f| std::mem::transmute(f)),
611                cmd_set_front_face: load(b"vkCmdSetFrontFace\0").map(|f| std::mem::transmute(f)),
612                cmd_set_cull_mode: load(b"vkCmdSetCullMode\0").map(|f| std::mem::transmute(f)),
613                cmd_set_depth_test_enable: load(b"vkCmdSetDepthTestEnable\0").map(|f| std::mem::transmute(f)),
614                cmd_set_depth_compare_op: load(b"vkCmdSetDepthCompareOp\0").map(|f| std::mem::transmute(f)),
615                cmd_set_depth_write_enable: load(b"vkCmdSetDepthWriteEnable\0").map(|f| std::mem::transmute(f)),
616                cmd_set_color_blend_enable_ext: load(b"vkCmdSetColorBlendEnableEXT\0").map(|f| std::mem::transmute(f)),
617                cmd_set_color_blend_equation_ext: load(b"vkCmdSetColorBlendEquationEXT\0").map(|f| std::mem::transmute(f)),
618                cmd_set_color_write_mask_ext: load(b"vkCmdSetColorWriteMaskEXT\0").map(|f| std::mem::transmute(f)),
619                cmd_dispatch: load(b"vkCmdDispatch\0").map(|f| std::mem::transmute(f)),
620                cmd_dispatch_indirect: load(b"vkCmdDispatchIndirect\0").map(|f| std::mem::transmute(f)),
621                create_swapchain_khr: load(b"vkCreateSwapchainKHR\0").map(|f| std::mem::transmute(f)),
622                destroy_swapchain_khr: load(b"vkDestroySwapchainKHR\0").map(|f| std::mem::transmute(f)),
623                get_swapchain_images_khr: load(b"vkGetSwapchainImagesKHR\0").map(|f| std::mem::transmute(f)),
624                acquire_next_image2_khr: load(b"vkAcquireNextImage2KHR\0").map(|f| std::mem::transmute(f)),
625                queue_present_khr: load(b"vkQueuePresentKHR\0").map(|f| std::mem::transmute(f)),
626                cmd_build_acceleration_structures_khr: load(b"vkCmdBuildAccelerationStructuresKHR\0").map(|f| std::mem::transmute(f)),
627                cmd_trace_rays_khr: load(b"vkCmdTraceRaysKHR\0").map(|f| std::mem::transmute(f)),
628                cmd_trace_rays_indirect2_khr: load(b"vkCmdTraceRaysIndirect2KHR\0").map(|f| std::mem::transmute(f)),
629            },
630            handle: device,
631        })
632    }
633
634    #[must_use]
635    pub fn handle(&self) -> vk::Device {
636        self.handle
637    }
638
639    #[must_use]
640    pub fn fns(&self) -> &DeviceFunctions {
641        &self.fns
642    }
643
644    #[inline]
645    #[doc = "**Chapter**: Devices and Queues"]
646    #[doc = "<br>"]
647    #[doc = "**Description**: Destroy a logical device"]
648    #[doc = "<br>"]
649    #[doc = "**Provided by**: [`VK_VERSION_1_0`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_VERSION_1_0.html)"]
650    #[doc = "<br>"]
651    #[doc = "**Reference**: [`vkDestroyDevice`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkDestroyDevice.html)"]
652    pub unsafe fn destroy_device(&self) {
653        (self.fns.destroy_device.unwrap_unchecked())(self.handle, std::ptr::null());
654    }
655
656    #[must_use]
657    #[inline]
658    #[doc = "**Chapter**: Devices and Queues"]
659    #[doc = "<br>"]
660    #[doc = "**Description**: Get a queue handle from a device"]
661    #[doc = "<br>"]
662    #[doc = "**Provided by**: [`VK_VERSION_1_1`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_VERSION_1_1.html)"]
663    #[doc = "<br>"]
664    #[doc = "**Reference**: [`vkGetDeviceQueue2`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetDeviceQueue2.html)"]
665    pub unsafe fn get_device_queue2(&self, p_queue_info: *const vk::DeviceQueueInfo2) -> vk::Queue {
666        let mut p_queue = std::mem::MaybeUninit::uninit();
667        (self.fns.get_device_queue2.unwrap_unchecked())(self.handle, p_queue_info, p_queue.as_mut_ptr());
668        p_queue.assume_init()
669    }
670
671    #[inline]
672    #[doc = "**Chapter**: Command Buffers"]
673    #[doc = "<br>"]
674    #[doc = "**Description**: Create a new command pool object"]
675    #[doc = "<br>"]
676    #[doc = "**Provided by**: [`VK_VERSION_1_0`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_VERSION_1_0.html)"]
677    #[doc = "<br>"]
678    #[doc = "**Reference**: [`vkCreateCommandPool`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCreateCommandPool.html)"]
679    pub unsafe fn create_command_pool(&self, p_create_info: *const vk::CommandPoolCreateInfo) -> Result<vk::CommandPool, Error> {
680        let mut p_command_pool = std::mem::MaybeUninit::uninit();
681        match (self.fns.create_command_pool.unwrap_unchecked())(self.handle, p_create_info, std::ptr::null(), p_command_pool.as_mut_ptr()) {
682            vk::Result::Success => Ok(p_command_pool.assume_init()),
683            result => Err(Error::Vulkan(result)),
684        }
685    }
686
687    #[inline]
688    #[doc = "**Chapter**: Command Buffers"]
689    #[doc = "<br>"]
690    #[doc = "**Description**: Reset a command pool"]
691    #[doc = "<br>"]
692    #[doc = "**Provided by**: [`VK_VERSION_1_0`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_VERSION_1_0.html)"]
693    #[doc = "<br>"]
694    #[doc = "**Reference**: [`vkResetCommandPool`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkResetCommandPool.html)"]
695    pub unsafe fn reset_command_pool(&self, command_pool: vk::CommandPool, flags: vk::CommandPoolResetFlags) -> Result<(), Error> {
696        match (self.fns.reset_command_pool.unwrap_unchecked())(self.handle, command_pool, flags) {
697            vk::Result::Success => Ok(()),
698            result => Err(Error::Vulkan(result)),
699        }
700    }
701
702    #[inline]
703    #[doc = "**Chapter**: Command Buffers"]
704    #[doc = "<br>"]
705    #[doc = "**Description**: Destroy a command pool object"]
706    #[doc = "<br>"]
707    #[doc = "**Provided by**: [`VK_VERSION_1_0`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_VERSION_1_0.html)"]
708    #[doc = "<br>"]
709    #[doc = "**Reference**: [`vkDestroyCommandPool`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkDestroyCommandPool.html)"]
710    pub unsafe fn destroy_command_pool(&self, command_pool: vk::CommandPool) {
711        (self.fns.destroy_command_pool.unwrap_unchecked())(self.handle, command_pool, std::ptr::null());
712    }
713
714    #[inline]
715    #[doc = "**Chapter**: Command Buffers"]
716    #[doc = "<br>"]
717    #[doc = "**Description**: Allocate command buffers from an existing command pool"]
718    #[doc = "<br>"]
719    #[doc = "**Provided by**: [`VK_VERSION_1_0`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_VERSION_1_0.html)"]
720    #[doc = "<br>"]
721    #[doc = "**Reference**: [`vkAllocateCommandBuffers`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkAllocateCommandBuffers.html)"]
722    pub unsafe fn allocate_command_buffers(&self, p_allocate_info: *const vk::CommandBufferAllocateInfo, p_command_buffers: *mut vk::CommandBuffer) -> Result<(), Error> {
723        match (self.fns.allocate_command_buffers.unwrap_unchecked())(self.handle, p_allocate_info, p_command_buffers) {
724            vk::Result::Success => Ok(()),
725            result => Err(Error::Vulkan(result)),
726        }
727    }
728
729    #[inline]
730    #[doc = "**Chapter**: Command Buffers"]
731    #[doc = "<br>"]
732    #[doc = "**Description**: Reset a command buffer to the initial state"]
733    #[doc = "<br>"]
734    #[doc = "**Provided by**: [`VK_VERSION_1_0`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_VERSION_1_0.html)"]
735    #[doc = "<br>"]
736    #[doc = "**Reference**: [`vkResetCommandBuffer`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkResetCommandBuffer.html)"]
737    pub unsafe fn reset_command_buffer(&self, command_buffer: vk::CommandBuffer, flags: vk::CommandBufferResetFlags) -> Result<(), Error> {
738        match (self.fns.reset_command_buffer.unwrap_unchecked())(command_buffer, flags) {
739            vk::Result::Success => Ok(()),
740            result => Err(Error::Vulkan(result)),
741        }
742    }
743
744    #[inline]
745    #[doc = "**Chapter**: Command Buffers"]
746    #[doc = "<br>"]
747    #[doc = "**Description**: Free command buffers"]
748    #[doc = "<br>"]
749    #[doc = "**Provided by**: [`VK_VERSION_1_0`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_VERSION_1_0.html)"]
750    #[doc = "<br>"]
751    #[doc = "**Reference**: [`vkFreeCommandBuffers`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkFreeCommandBuffers.html)"]
752    pub unsafe fn free_command_buffers(&self, command_pool: vk::CommandPool, command_buffer_count: u32, p_command_buffers: *const vk::CommandBuffer) {
753        (self.fns.free_command_buffers.unwrap_unchecked())(self.handle, command_pool, command_buffer_count, p_command_buffers);
754    }
755
756    #[inline]
757    #[doc = "**Chapter**: Command Buffers"]
758    #[doc = "<br>"]
759    #[doc = "**Description**: Start recording a command buffer"]
760    #[doc = "<br>"]
761    #[doc = "**Provided by**: [`VK_VERSION_1_0`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_VERSION_1_0.html)"]
762    #[doc = "<br>"]
763    #[doc = "**Reference**: [`vkBeginCommandBuffer`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkBeginCommandBuffer.html)"]
764    pub unsafe fn begin_command_buffer(&self, command_buffer: vk::CommandBuffer, p_begin_info: *const vk::CommandBufferBeginInfo) -> Result<(), Error> {
765        match (self.fns.begin_command_buffer.unwrap_unchecked())(command_buffer, p_begin_info) {
766            vk::Result::Success => Ok(()),
767            result => Err(Error::Vulkan(result)),
768        }
769    }
770
771    #[inline]
772    #[doc = "**Chapter**: Command Buffers"]
773    #[doc = "<br>"]
774    #[doc = "**Description**: Finish recording a command buffer"]
775    #[doc = "<br>"]
776    #[doc = "**Provided by**: [`VK_VERSION_1_0`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_VERSION_1_0.html)"]
777    #[doc = "<br>"]
778    #[doc = "**Reference**: [`vkEndCommandBuffer`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkEndCommandBuffer.html)"]
779    pub unsafe fn end_command_buffer(&self, command_buffer: vk::CommandBuffer) -> Result<(), Error> {
780        match (self.fns.end_command_buffer.unwrap_unchecked())(command_buffer) {
781            vk::Result::Success => Ok(()),
782            result => Err(Error::Vulkan(result)),
783        }
784    }
785
786    #[inline]
787    #[doc = "**Chapter**: Command Buffers"]
788    #[doc = "<br>"]
789    #[doc = "**Description**: Submits command buffers to a queue"]
790    #[doc = "<br>"]
791    #[doc = "**Provided by**: [`VK_VERSION_1_3`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_VERSION_1_3.html)"]
792    #[doc = "<br>"]
793    #[doc = "**Reference**: [`vkQueueSubmit2`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkQueueSubmit2.html)"]
794    pub unsafe fn queue_submit2(&self, queue: vk::Queue, submit_count: u32, p_submits: *const vk::SubmitInfo2, fence: vk::Fence) -> Result<(), Error> {
795        match (self.fns.queue_submit2.unwrap_unchecked())(queue, submit_count, p_submits, fence) {
796            vk::Result::Success => Ok(()),
797            result => Err(Error::Vulkan(result)),
798        }
799    }
800
801    #[inline]
802    #[doc = "**Chapter**: Synchronization and Cache Control"]
803    #[doc = "<br>"]
804    #[doc = "**Description**: Create a new queue semaphore object"]
805    #[doc = "<br>"]
806    #[doc = "**Provided by**: [`VK_VERSION_1_0`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_VERSION_1_0.html)"]
807    #[doc = "<br>"]
808    #[doc = "**Reference**: [`vkCreateSemaphore`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCreateSemaphore.html)"]
809    pub unsafe fn create_semaphore(&self, p_create_info: *const vk::SemaphoreCreateInfo) -> Result<vk::Semaphore, Error> {
810        let mut p_semaphore = std::mem::MaybeUninit::uninit();
811        match (self.fns.create_semaphore.unwrap_unchecked())(self.handle, p_create_info, std::ptr::null(), p_semaphore.as_mut_ptr()) {
812            vk::Result::Success => Ok(p_semaphore.assume_init()),
813            result => Err(Error::Vulkan(result)),
814        }
815    }
816
817    #[inline]
818    #[doc = "**Chapter**: Synchronization and Cache Control"]
819    #[doc = "<br>"]
820    #[doc = "**Description**: Destroy a semaphore object"]
821    #[doc = "<br>"]
822    #[doc = "**Provided by**: [`VK_VERSION_1_0`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_VERSION_1_0.html)"]
823    #[doc = "<br>"]
824    #[doc = "**Reference**: [`vkDestroySemaphore`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkDestroySemaphore.html)"]
825    pub unsafe fn destroy_semaphore(&self, semaphore: vk::Semaphore) {
826        (self.fns.destroy_semaphore.unwrap_unchecked())(self.handle, semaphore, std::ptr::null());
827    }
828
829    #[inline]
830    #[doc = "**Chapter**: Synchronization and Cache Control"]
831    #[doc = "<br>"]
832    #[doc = "**Description**: Query the current state of a timeline semaphore"]
833    #[doc = "<br>"]
834    #[doc = "**Provided by**: [`VK_VERSION_1_2`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_VERSION_1_2.html)"]
835    #[doc = "<br>"]
836    #[doc = "**Reference**: [`vkGetSemaphoreCounterValue`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetSemaphoreCounterValue.html)"]
837    pub unsafe fn get_semaphore_counter_value(&self, semaphore: vk::Semaphore) -> Result<u64, Error> {
838        let mut p_value = std::mem::MaybeUninit::uninit();
839        match (self.fns.get_semaphore_counter_value.unwrap_unchecked())(self.handle, semaphore, p_value.as_mut_ptr()) {
840            vk::Result::Success => Ok(p_value.assume_init()),
841            result => Err(Error::Vulkan(result)),
842        }
843    }
844
845    #[inline]
846    #[doc = "**Chapter**: Synchronization and Cache Control"]
847    #[doc = "<br>"]
848    #[doc = "**Description**: Wait for timeline semaphores on the host"]
849    #[doc = "<br>"]
850    #[doc = "**Provided by**: [`VK_VERSION_1_2`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_VERSION_1_2.html)"]
851    #[doc = "<br>"]
852    #[doc = "**Reference**: [`vkWaitSemaphores`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkWaitSemaphores.html)"]
853    pub unsafe fn wait_semaphores(&self, p_wait_info: *const vk::SemaphoreWaitInfo, timeout: u64) -> Result<(), Error> {
854        match (self.fns.wait_semaphores.unwrap_unchecked())(self.handle, p_wait_info, timeout) {
855            vk::Result::Success => Ok(()),
856            result => Err(Error::Vulkan(result)),
857        }
858    }
859
860    #[inline]
861    #[doc = "**Chapter**: Synchronization and Cache Control"]
862    #[doc = "<br>"]
863    #[doc = "**Description**: Signal a timeline semaphore on the host"]
864    #[doc = "<br>"]
865    #[doc = "**Provided by**: [`VK_VERSION_1_2`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_VERSION_1_2.html)"]
866    #[doc = "<br>"]
867    #[doc = "**Reference**: [`vkSignalSemaphore`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkSignalSemaphore.html)"]
868    pub unsafe fn signal_semaphore(&self, p_signal_info: *const vk::SemaphoreSignalInfo) -> Result<(), Error> {
869        match (self.fns.signal_semaphore.unwrap_unchecked())(self.handle, p_signal_info) {
870            vk::Result::Success => Ok(()),
871            result => Err(Error::Vulkan(result)),
872        }
873    }
874
875    #[inline]
876    #[doc = "**Chapter**: Synchronization and Cache Control"]
877    #[doc = "<br>"]
878    #[doc = "**Description**: Insert a memory dependency"]
879    #[doc = "<br>"]
880    #[doc = "**Provided by**: [`VK_VERSION_1_3`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_VERSION_1_3.html)"]
881    #[doc = "<br>"]
882    #[doc = "**Reference**: [`vkCmdPipelineBarrier2`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdPipelineBarrier2.html)"]
883    pub unsafe fn cmd_pipeline_barrier2(&self, command_buffer: vk::CommandBuffer, p_dependency_info: *const vk::DependencyInfo) {
884        (self.fns.cmd_pipeline_barrier2.unwrap_unchecked())(command_buffer, p_dependency_info);
885    }
886
887    #[inline]
888    #[doc = "**Chapter**: Synchronization and Cache Control"]
889    #[doc = "<br>"]
890    #[doc = "**Description**: Wait for a queue to become idle"]
891    #[doc = "<br>"]
892    #[doc = "**Provided by**: [`VK_VERSION_1_0`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_VERSION_1_0.html)"]
893    #[doc = "<br>"]
894    #[doc = "**Reference**: [`vkQueueWaitIdle`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkQueueWaitIdle.html)"]
895    pub unsafe fn queue_wait_idle(&self, queue: vk::Queue) -> Result<(), Error> {
896        match (self.fns.queue_wait_idle.unwrap_unchecked())(queue) {
897            vk::Result::Success => Ok(()),
898            result => Err(Error::Vulkan(result)),
899        }
900    }
901
902    #[inline]
903    #[doc = "**Chapter**: Synchronization and Cache Control"]
904    #[doc = "<br>"]
905    #[doc = "**Description**: Wait for a device to become idle"]
906    #[doc = "<br>"]
907    #[doc = "**Provided by**: [`VK_VERSION_1_0`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_VERSION_1_0.html)"]
908    #[doc = "<br>"]
909    #[doc = "**Reference**: [`vkDeviceWaitIdle`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkDeviceWaitIdle.html)"]
910    pub unsafe fn device_wait_idle(&self) -> Result<(), Error> {
911        match (self.fns.device_wait_idle.unwrap_unchecked())(self.handle) {
912            vk::Result::Success => Ok(()),
913            result => Err(Error::Vulkan(result)),
914        }
915    }
916
917    #[inline]
918    #[doc = "**Chapter**: Synchronization and Cache Control"]
919    #[doc = "<br>"]
920    #[doc = "**Description**: Query calibrated timestamps"]
921    #[doc = "<br>"]
922    #[doc = "**Provided by**: [`VK_EXT_calibrated_timestamps`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_EXT_calibrated_timestamps.html)"]
923    #[doc = "<br>"]
924    #[doc = "**Reference**: [`vkGetCalibratedTimestampsEXT`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetCalibratedTimestampsEXT.html)"]
925    pub unsafe fn get_calibrated_timestamps_ext(
926        &self,
927        timestamp_count: u32,
928        p_timestamp_infos: *const vk::CalibratedTimestampInfoEXT,
929        p_timestamps: *mut u64,
930        p_max_deviation: *mut u64,
931    ) -> Result<(), Error> {
932        match (self.fns.get_calibrated_timestamps_ext.unwrap_unchecked())(self.handle, timestamp_count, p_timestamp_infos, p_timestamps, p_max_deviation) {
933            vk::Result::Success => Ok(()),
934            result => Err(Error::Vulkan(result)),
935        }
936    }
937
938    #[inline]
939    #[doc = "**Chapter**: Render Pass"]
940    #[doc = "<br>"]
941    #[doc = "**Description**: Begin a dynamic render pass instance"]
942    #[doc = "<br>"]
943    #[doc = "**Provided by**: [`VK_VERSION_1_3`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_VERSION_1_3.html)"]
944    #[doc = "<br>"]
945    #[doc = "**Reference**: [`vkCmdBeginRendering`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdBeginRendering.html)"]
946    pub unsafe fn cmd_begin_rendering(&self, command_buffer: vk::CommandBuffer, p_rendering_info: *const vk::RenderingInfo) {
947        (self.fns.cmd_begin_rendering.unwrap_unchecked())(command_buffer, p_rendering_info);
948    }
949
950    #[inline]
951    #[doc = "**Chapter**: Render Pass"]
952    #[doc = "<br>"]
953    #[doc = "**Description**: End a dynamic render pass instance"]
954    #[doc = "<br>"]
955    #[doc = "**Provided by**: [`VK_VERSION_1_3`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_VERSION_1_3.html)"]
956    #[doc = "<br>"]
957    #[doc = "**Reference**: [`vkCmdEndRendering`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdEndRendering.html)"]
958    pub unsafe fn cmd_end_rendering(&self, command_buffer: vk::CommandBuffer) {
959        (self.fns.cmd_end_rendering.unwrap_unchecked())(command_buffer);
960    }
961
962    #[inline]
963    #[doc = "**Chapter**: Shaders"]
964    #[doc = "<br>"]
965    #[doc = "**Description**: Create one or more new shaders"]
966    #[doc = "<br>"]
967    #[doc = "**Provided by**: [`VK_EXT_shader_object`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_EXT_shader_object.html)"]
968    #[doc = "<br>"]
969    #[doc = "**Reference**: [`vkCreateShadersEXT`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCreateShadersEXT.html)"]
970    pub unsafe fn create_shaders_ext(&self, create_info_count: u32, p_create_infos: *const vk::ShaderCreateInfoEXT, p_shaders: *mut vk::ShaderEXT) -> Result<(), Error> {
971        match (self.fns.create_shaders_ext.unwrap_unchecked())(self.handle, create_info_count, p_create_infos, std::ptr::null(), p_shaders) {
972            vk::Result::Success => Ok(()),
973            result => Err(Error::Vulkan(result)),
974        }
975    }
976
977    #[inline]
978    #[doc = "**Chapter**: Shaders"]
979    #[doc = "<br>"]
980    #[doc = "**Description**: Bind shader objects to a command buffer"]
981    #[doc = "<br>"]
982    #[doc = "**Provided by**: [`VK_EXT_shader_object`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_EXT_shader_object.html)"]
983    #[doc = "<br>"]
984    #[doc = "**Reference**: [`vkCmdBindShadersEXT`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdBindShadersEXT.html)"]
985    pub unsafe fn cmd_bind_shaders_ext(&self, command_buffer: vk::CommandBuffer, stage_count: u32, p_stages: *const vk::ShaderStageFlagBits, p_shaders: *const vk::ShaderEXT) {
986        (self.fns.cmd_bind_shaders_ext.unwrap_unchecked())(command_buffer, stage_count, p_stages, p_shaders);
987    }
988
989    #[inline]
990    #[doc = "**Chapter**: Shaders"]
991    #[doc = "<br>"]
992    #[doc = "**Description**: Destroy a shader object"]
993    #[doc = "<br>"]
994    #[doc = "**Provided by**: [`VK_EXT_shader_object`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_EXT_shader_object.html)"]
995    #[doc = "<br>"]
996    #[doc = "**Reference**: [`vkDestroyShaderEXT`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkDestroyShaderEXT.html)"]
997    pub unsafe fn destroy_shader_ext(&self, shader: vk::ShaderEXT) {
998        (self.fns.destroy_shader_ext.unwrap_unchecked())(self.handle, shader, std::ptr::null());
999    }
1000
1001    #[inline]
1002    #[doc = "**Chapter**: Shaders"]
1003    #[doc = "<br>"]
1004    #[doc = "**Description**: Creates a new shader module object"]
1005    #[doc = "<br>"]
1006    #[doc = "**Provided by**: [`VK_VERSION_1_0`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_VERSION_1_0.html)"]
1007    #[doc = "<br>"]
1008    #[doc = "**Reference**: [`vkCreateShaderModule`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCreateShaderModule.html)"]
1009    pub unsafe fn create_shader_module(&self, p_create_info: *const vk::ShaderModuleCreateInfo) -> Result<vk::ShaderModule, Error> {
1010        let mut p_shader_module = std::mem::MaybeUninit::uninit();
1011        match (self.fns.create_shader_module.unwrap_unchecked())(self.handle, p_create_info, std::ptr::null(), p_shader_module.as_mut_ptr()) {
1012            vk::Result::Success => Ok(p_shader_module.assume_init()),
1013            result => Err(Error::Vulkan(result)),
1014        }
1015    }
1016
1017    #[inline]
1018    #[doc = "**Chapter**: Shaders"]
1019    #[doc = "<br>"]
1020    #[doc = "**Description**: Destroy a shader module"]
1021    #[doc = "<br>"]
1022    #[doc = "**Provided by**: [`VK_VERSION_1_0`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_VERSION_1_0.html)"]
1023    #[doc = "<br>"]
1024    #[doc = "**Reference**: [`vkDestroyShaderModule`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkDestroyShaderModule.html)"]
1025    pub unsafe fn destroy_shader_module(&self, shader_module: vk::ShaderModule) {
1026        (self.fns.destroy_shader_module.unwrap_unchecked())(self.handle, shader_module, std::ptr::null());
1027    }
1028
1029    #[inline]
1030    #[doc = "**Chapter**: Pipelines"]
1031    #[doc = "<br>"]
1032    #[doc = "**Description**: Creates a new ray tracing pipeline object"]
1033    #[doc = "<br>"]
1034    #[doc = "**Provided by**: [`VK_KHR_ray_tracing_pipeline`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_KHR_ray_tracing_pipeline.html)"]
1035    #[doc = "<br>"]
1036    #[doc = "**Reference**: [`vkCreateRayTracingPipelinesKHR`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCreateRayTracingPipelinesKHR.html)"]
1037    pub unsafe fn create_ray_tracing_pipelines_khr(
1038        &self,
1039        deferred_operation: vk::DeferredOperationKHR,
1040        pipeline_cache: vk::PipelineCache,
1041        create_info_count: u32,
1042        p_create_infos: *const vk::RayTracingPipelineCreateInfoKHR,
1043        p_pipelines: *mut vk::Pipeline,
1044    ) -> Result<(), Error> {
1045        match (self.fns.create_ray_tracing_pipelines_khr.unwrap_unchecked())(self.handle, deferred_operation, pipeline_cache, create_info_count, p_create_infos, std::ptr::null(), p_pipelines) {
1046            vk::Result::Success => Ok(()),
1047            result => Err(Error::Vulkan(result)),
1048        }
1049    }
1050
1051    #[inline]
1052    #[doc = "**Chapter**: Pipelines"]
1053    #[doc = "<br>"]
1054    #[doc = "**Description**: Query ray tracing pipeline shader group handles"]
1055    #[doc = "<br>"]
1056    #[doc = "**Provided by**: [`VK_KHR_ray_tracing_pipeline`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_KHR_ray_tracing_pipeline.html)"]
1057    #[doc = "<br>"]
1058    #[doc = "**Reference**: [`vkGetRayTracingShaderGroupHandlesKHR`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetRayTracingShaderGroupHandlesKHR.html)"]
1059    pub unsafe fn get_ray_tracing_shader_group_handles_khr(&self, pipeline: vk::Pipeline, first_group: u32, group_count: u32, data_size: usize, p_data: *mut c_void) -> Result<(), Error> {
1060        match (self.fns.get_ray_tracing_shader_group_handles_khr.unwrap_unchecked())(self.handle, pipeline, first_group, group_count, data_size, p_data) {
1061            vk::Result::Success => Ok(()),
1062            result => Err(Error::Vulkan(result)),
1063        }
1064    }
1065
1066    #[inline]
1067    #[doc = "**Chapter**: Pipelines"]
1068    #[doc = "<br>"]
1069    #[doc = "**Description**: Destroy a pipeline object"]
1070    #[doc = "<br>"]
1071    #[doc = "**Provided by**: [`VK_VERSION_1_0`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_VERSION_1_0.html)"]
1072    #[doc = "<br>"]
1073    #[doc = "**Reference**: [`vkDestroyPipeline`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkDestroyPipeline.html)"]
1074    pub unsafe fn destroy_pipeline(&self, pipeline: vk::Pipeline) {
1075        (self.fns.destroy_pipeline.unwrap_unchecked())(self.handle, pipeline, std::ptr::null());
1076    }
1077
1078    #[inline]
1079    #[doc = "**Chapter**: Pipelines"]
1080    #[doc = "<br>"]
1081    #[doc = "**Description**: Bind a pipeline object to a command buffer"]
1082    #[doc = "<br>"]
1083    #[doc = "**Provided by**: [`VK_VERSION_1_0`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_VERSION_1_0.html)"]
1084    #[doc = "<br>"]
1085    #[doc = "**Reference**: [`vkCmdBindPipeline`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdBindPipeline.html)"]
1086    pub unsafe fn cmd_bind_pipeline(&self, command_buffer: vk::CommandBuffer, pipeline_bind_point: vk::PipelineBindPoint, pipeline: vk::Pipeline) {
1087        (self.fns.cmd_bind_pipeline.unwrap_unchecked())(command_buffer, pipeline_bind_point, pipeline);
1088    }
1089
1090    #[inline]
1091    #[doc = "**Chapter**: Memory Allocation"]
1092    #[doc = "<br>"]
1093    #[doc = "**Description**: Allocate device memory"]
1094    #[doc = "<br>"]
1095    #[doc = "**Provided by**: [`VK_VERSION_1_0`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_VERSION_1_0.html)"]
1096    #[doc = "<br>"]
1097    #[doc = "**Reference**: [`vkAllocateMemory`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkAllocateMemory.html)"]
1098    pub unsafe fn allocate_memory(&self, p_allocate_info: *const vk::MemoryAllocateInfo) -> Result<vk::DeviceMemory, Error> {
1099        let mut p_memory = std::mem::MaybeUninit::uninit();
1100        match (self.fns.allocate_memory.unwrap_unchecked())(self.handle, p_allocate_info, std::ptr::null(), p_memory.as_mut_ptr()) {
1101            vk::Result::Success => Ok(p_memory.assume_init()),
1102            result => Err(Error::Vulkan(result)),
1103        }
1104    }
1105
1106    #[inline]
1107    #[doc = "**Chapter**: Memory Allocation"]
1108    #[doc = "<br>"]
1109    #[doc = "**Description**: Free device memory"]
1110    #[doc = "<br>"]
1111    #[doc = "**Provided by**: [`VK_VERSION_1_0`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_VERSION_1_0.html)"]
1112    #[doc = "<br>"]
1113    #[doc = "**Reference**: [`vkFreeMemory`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkFreeMemory.html)"]
1114    pub unsafe fn free_memory(&self, memory: vk::DeviceMemory) {
1115        (self.fns.free_memory.unwrap_unchecked())(self.handle, memory, std::ptr::null());
1116    }
1117
1118    #[inline]
1119    #[doc = "**Chapter**: Memory Allocation"]
1120    #[doc = "<br>"]
1121    #[doc = "**Description**: Map a memory object into application address space"]
1122    #[doc = "<br>"]
1123    #[doc = "**Provided by**: [`VK_KHR_map_memory2`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_KHR_map_memory2.html)"]
1124    #[doc = "<br>"]
1125    #[doc = "**Reference**: [`vkMapMemory2KHR`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkMapMemory2KHR.html)"]
1126    pub unsafe fn map_memory2_khr(&self, p_memory_map_info: *const vk::MemoryMapInfoKHR) -> Result<*mut c_void, Error> {
1127        let mut pp_data = std::mem::MaybeUninit::uninit();
1128        match (self.fns.map_memory2_khr.unwrap_unchecked())(self.handle, p_memory_map_info, pp_data.as_mut_ptr()) {
1129            vk::Result::Success => Ok(pp_data.assume_init()),
1130            result => Err(Error::Vulkan(result)),
1131        }
1132    }
1133
1134    #[inline]
1135    #[doc = "**Chapter**: Memory Allocation"]
1136    #[doc = "<br>"]
1137    #[doc = "**Description**: Unmap a previously mapped memory object"]
1138    #[doc = "<br>"]
1139    #[doc = "**Provided by**: [`VK_KHR_map_memory2`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_KHR_map_memory2.html)"]
1140    #[doc = "<br>"]
1141    #[doc = "**Reference**: [`vkUnmapMemory2KHR`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkUnmapMemory2KHR.html)"]
1142    pub unsafe fn unmap_memory2_khr(&self, p_memory_unmap_info: *const vk::MemoryUnmapInfoKHR) -> Result<(), Error> {
1143        match (self.fns.unmap_memory2_khr.unwrap_unchecked())(self.handle, p_memory_unmap_info) {
1144            vk::Result::Success => Ok(()),
1145            result => Err(Error::Vulkan(result)),
1146        }
1147    }
1148
1149    #[inline]
1150    #[doc = "**Chapter**: Resource Creation"]
1151    #[doc = "<br>"]
1152    #[doc = "**Description**: Create a new buffer object"]
1153    #[doc = "<br>"]
1154    #[doc = "**Provided by**: [`VK_VERSION_1_0`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_VERSION_1_0.html)"]
1155    #[doc = "<br>"]
1156    #[doc = "**Reference**: [`vkCreateBuffer`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCreateBuffer.html)"]
1157    pub unsafe fn create_buffer(&self, p_create_info: *const vk::BufferCreateInfo) -> Result<vk::Buffer, Error> {
1158        let mut p_buffer = std::mem::MaybeUninit::uninit();
1159        match (self.fns.create_buffer.unwrap_unchecked())(self.handle, p_create_info, std::ptr::null(), p_buffer.as_mut_ptr()) {
1160            vk::Result::Success => Ok(p_buffer.assume_init()),
1161            result => Err(Error::Vulkan(result)),
1162        }
1163    }
1164
1165    #[inline]
1166    #[doc = "**Chapter**: Resource Creation"]
1167    #[doc = "<br>"]
1168    #[doc = "**Description**: Destroy a buffer object"]
1169    #[doc = "<br>"]
1170    #[doc = "**Provided by**: [`VK_VERSION_1_0`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_VERSION_1_0.html)"]
1171    #[doc = "<br>"]
1172    #[doc = "**Reference**: [`vkDestroyBuffer`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkDestroyBuffer.html)"]
1173    pub unsafe fn destroy_buffer(&self, buffer: vk::Buffer) {
1174        (self.fns.destroy_buffer.unwrap_unchecked())(self.handle, buffer, std::ptr::null());
1175    }
1176
1177    #[inline]
1178    #[doc = "**Chapter**: Resource Creation"]
1179    #[doc = "<br>"]
1180    #[doc = "**Description**: Create a new image object"]
1181    #[doc = "<br>"]
1182    #[doc = "**Provided by**: [`VK_VERSION_1_0`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_VERSION_1_0.html)"]
1183    #[doc = "<br>"]
1184    #[doc = "**Reference**: [`vkCreateImage`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCreateImage.html)"]
1185    pub unsafe fn create_image(&self, p_create_info: *const vk::ImageCreateInfo) -> Result<vk::Image, Error> {
1186        let mut p_image = std::mem::MaybeUninit::uninit();
1187        match (self.fns.create_image.unwrap_unchecked())(self.handle, p_create_info, std::ptr::null(), p_image.as_mut_ptr()) {
1188            vk::Result::Success => Ok(p_image.assume_init()),
1189            result => Err(Error::Vulkan(result)),
1190        }
1191    }
1192
1193    #[inline]
1194    #[doc = "**Chapter**: Resource Creation"]
1195    #[doc = "<br>"]
1196    #[doc = "**Description**: Destroy an image object"]
1197    #[doc = "<br>"]
1198    #[doc = "**Provided by**: [`VK_VERSION_1_0`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_VERSION_1_0.html)"]
1199    #[doc = "<br>"]
1200    #[doc = "**Reference**: [`vkDestroyImage`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkDestroyImage.html)"]
1201    pub unsafe fn destroy_image(&self, image: vk::Image) {
1202        (self.fns.destroy_image.unwrap_unchecked())(self.handle, image, std::ptr::null());
1203    }
1204
1205    #[inline]
1206    #[doc = "**Chapter**: Resource Creation"]
1207    #[doc = "<br>"]
1208    #[doc = "**Description**: Create an image view from an existing image"]
1209    #[doc = "<br>"]
1210    #[doc = "**Provided by**: [`VK_VERSION_1_0`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_VERSION_1_0.html)"]
1211    #[doc = "<br>"]
1212    #[doc = "**Reference**: [`vkCreateImageView`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCreateImageView.html)"]
1213    pub unsafe fn create_image_view(&self, p_create_info: *const vk::ImageViewCreateInfo) -> Result<vk::ImageView, Error> {
1214        let mut p_view = std::mem::MaybeUninit::uninit();
1215        match (self.fns.create_image_view.unwrap_unchecked())(self.handle, p_create_info, std::ptr::null(), p_view.as_mut_ptr()) {
1216            vk::Result::Success => Ok(p_view.assume_init()),
1217            result => Err(Error::Vulkan(result)),
1218        }
1219    }
1220
1221    #[inline]
1222    #[doc = "**Chapter**: Resource Creation"]
1223    #[doc = "<br>"]
1224    #[doc = "**Description**: Destroy an image view object"]
1225    #[doc = "<br>"]
1226    #[doc = "**Provided by**: [`VK_VERSION_1_0`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_VERSION_1_0.html)"]
1227    #[doc = "<br>"]
1228    #[doc = "**Reference**: [`vkDestroyImageView`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkDestroyImageView.html)"]
1229    pub unsafe fn destroy_image_view(&self, image_view: vk::ImageView) {
1230        (self.fns.destroy_image_view.unwrap_unchecked())(self.handle, image_view, std::ptr::null());
1231    }
1232
1233    #[inline]
1234    #[doc = "**Chapter**: Resource Creation"]
1235    #[doc = "<br>"]
1236    #[doc = "**Description**: Create a new acceleration structure object"]
1237    #[doc = "<br>"]
1238    #[doc = "**Provided by**: [`VK_KHR_acceleration_structure`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_KHR_acceleration_structure.html)"]
1239    #[doc = "<br>"]
1240    #[doc = "**Reference**: [`vkCreateAccelerationStructureKHR`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCreateAccelerationStructureKHR.html)"]
1241    pub unsafe fn create_acceleration_structure_khr(&self, p_create_info: *const vk::AccelerationStructureCreateInfoKHR) -> Result<vk::AccelerationStructureKHR, Error> {
1242        let mut p_acceleration_structure = std::mem::MaybeUninit::uninit();
1243        match (self.fns.create_acceleration_structure_khr.unwrap_unchecked())(self.handle, p_create_info, std::ptr::null(), p_acceleration_structure.as_mut_ptr()) {
1244            vk::Result::Success => Ok(p_acceleration_structure.assume_init()),
1245            result => Err(Error::Vulkan(result)),
1246        }
1247    }
1248
1249    #[inline]
1250    #[doc = "**Chapter**: Resource Creation"]
1251    #[doc = "<br>"]
1252    #[doc = "**Description**: Retrieve the required size for an acceleration structure"]
1253    #[doc = "<br>"]
1254    #[doc = "**Provided by**: [`VK_KHR_acceleration_structure`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_KHR_acceleration_structure.html)"]
1255    #[doc = "<br>"]
1256    #[doc = "**Reference**: [`vkGetAccelerationStructureBuildSizesKHR`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetAccelerationStructureBuildSizesKHR.html)"]
1257    pub unsafe fn get_acceleration_structure_build_sizes_khr(
1258        &self,
1259        build_type: vk::AccelerationStructureBuildTypeKHR,
1260        p_build_info: *const vk::AccelerationStructureBuildGeometryInfoKHR,
1261        p_max_primitive_counts: *const u32,
1262        p_size_info: *mut vk::AccelerationStructureBuildSizesInfoKHR,
1263    ) {
1264        (self.fns.get_acceleration_structure_build_sizes_khr.unwrap_unchecked())(self.handle, build_type, p_build_info, p_max_primitive_counts, p_size_info);
1265    }
1266
1267    #[inline]
1268    #[doc = "**Chapter**: Resource Creation"]
1269    #[doc = "<br>"]
1270    #[doc = "**Description**: Destroy an acceleration structure object"]
1271    #[doc = "<br>"]
1272    #[doc = "**Provided by**: [`VK_KHR_acceleration_structure`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_KHR_acceleration_structure.html)"]
1273    #[doc = "<br>"]
1274    #[doc = "**Reference**: [`vkDestroyAccelerationStructureKHR`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkDestroyAccelerationStructureKHR.html)"]
1275    pub unsafe fn destroy_acceleration_structure_khr(&self, acceleration_structure: vk::AccelerationStructureKHR) {
1276        (self.fns.destroy_acceleration_structure_khr.unwrap_unchecked())(self.handle, acceleration_structure, std::ptr::null());
1277    }
1278
1279    #[must_use]
1280    #[inline]
1281    #[doc = "**Chapter**: Resource Creation"]
1282    #[doc = "<br>"]
1283    #[doc = "**Description**: Query an address of a acceleration structure"]
1284    #[doc = "<br>"]
1285    #[doc = "**Provided by**: [`VK_KHR_acceleration_structure`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_KHR_acceleration_structure.html)"]
1286    #[doc = "<br>"]
1287    #[doc = "**Reference**: [`vkGetAccelerationStructureDeviceAddressKHR`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetAccelerationStructureDeviceAddressKHR.html)"]
1288    pub unsafe fn get_acceleration_structure_device_address_khr(&self, p_info: *const vk::AccelerationStructureDeviceAddressInfoKHR) -> vk::DeviceAddress {
1289        (self.fns.get_acceleration_structure_device_address_khr.unwrap_unchecked())(self.handle, p_info)
1290    }
1291
1292    #[inline]
1293    #[doc = "**Chapter**: Resource Creation"]
1294    #[doc = "<br>"]
1295    #[doc = "**Description**: Returns the memory requirements for specified Vulkan object"]
1296    #[doc = "<br>"]
1297    #[doc = "**Provided by**: [`VK_VERSION_1_3`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_VERSION_1_3.html)"]
1298    #[doc = "<br>"]
1299    #[doc = "**Reference**: [`vkGetDeviceBufferMemoryRequirements`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetDeviceBufferMemoryRequirements.html)"]
1300    pub unsafe fn get_device_buffer_memory_requirements(&self, p_info: *const vk::DeviceBufferMemoryRequirements, p_memory_requirements: *mut vk::MemoryRequirements2) {
1301        (self.fns.get_device_buffer_memory_requirements.unwrap_unchecked())(self.handle, p_info, p_memory_requirements);
1302    }
1303
1304    #[inline]
1305    #[doc = "**Chapter**: Resource Creation"]
1306    #[doc = "<br>"]
1307    #[doc = "**Description**: Returns the memory requirements for specified Vulkan object"]
1308    #[doc = "<br>"]
1309    #[doc = "**Provided by**: [`VK_VERSION_1_3`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_VERSION_1_3.html)"]
1310    #[doc = "<br>"]
1311    #[doc = "**Reference**: [`vkGetDeviceImageMemoryRequirements`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetDeviceImageMemoryRequirements.html)"]
1312    pub unsafe fn get_device_image_memory_requirements(&self, p_info: *const vk::DeviceImageMemoryRequirements, p_memory_requirements: *mut vk::MemoryRequirements2) {
1313        (self.fns.get_device_image_memory_requirements.unwrap_unchecked())(self.handle, p_info, p_memory_requirements);
1314    }
1315
1316    #[inline]
1317    #[doc = "**Chapter**: Resource Creation"]
1318    #[doc = "<br>"]
1319    #[doc = "**Description**: Bind device memory to buffer objects"]
1320    #[doc = "<br>"]
1321    #[doc = "**Provided by**: [`VK_VERSION_1_1`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_VERSION_1_1.html)"]
1322    #[doc = "<br>"]
1323    #[doc = "**Reference**: [`vkBindBufferMemory2`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkBindBufferMemory2.html)"]
1324    pub unsafe fn bind_buffer_memory2(&self, bind_info_count: u32, p_bind_infos: *const vk::BindBufferMemoryInfo) -> Result<(), Error> {
1325        match (self.fns.bind_buffer_memory2.unwrap_unchecked())(self.handle, bind_info_count, p_bind_infos) {
1326            vk::Result::Success => Ok(()),
1327            result => Err(Error::Vulkan(result)),
1328        }
1329    }
1330
1331    #[inline]
1332    #[doc = "**Chapter**: Resource Creation"]
1333    #[doc = "<br>"]
1334    #[doc = "**Description**: Bind device memory to image objects"]
1335    #[doc = "<br>"]
1336    #[doc = "**Provided by**: [`VK_VERSION_1_1`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_VERSION_1_1.html)"]
1337    #[doc = "<br>"]
1338    #[doc = "**Reference**: [`vkBindImageMemory2`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkBindImageMemory2.html)"]
1339    pub unsafe fn bind_image_memory2(&self, bind_info_count: u32, p_bind_infos: *const vk::BindImageMemoryInfo) -> Result<(), Error> {
1340        match (self.fns.bind_image_memory2.unwrap_unchecked())(self.handle, bind_info_count, p_bind_infos) {
1341            vk::Result::Success => Ok(()),
1342            result => Err(Error::Vulkan(result)),
1343        }
1344    }
1345
1346    #[inline]
1347    #[doc = "**Chapter**: Samplers"]
1348    #[doc = "<br>"]
1349    #[doc = "**Description**: Create a new sampler object"]
1350    #[doc = "<br>"]
1351    #[doc = "**Provided by**: [`VK_VERSION_1_0`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_VERSION_1_0.html)"]
1352    #[doc = "<br>"]
1353    #[doc = "**Reference**: [`vkCreateSampler`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCreateSampler.html)"]
1354    pub unsafe fn create_sampler(&self, p_create_info: *const vk::SamplerCreateInfo) -> Result<vk::Sampler, Error> {
1355        let mut p_sampler = std::mem::MaybeUninit::uninit();
1356        match (self.fns.create_sampler.unwrap_unchecked())(self.handle, p_create_info, std::ptr::null(), p_sampler.as_mut_ptr()) {
1357            vk::Result::Success => Ok(p_sampler.assume_init()),
1358            result => Err(Error::Vulkan(result)),
1359        }
1360    }
1361
1362    #[inline]
1363    #[doc = "**Chapter**: Samplers"]
1364    #[doc = "<br>"]
1365    #[doc = "**Description**: Destroy a sampler object"]
1366    #[doc = "<br>"]
1367    #[doc = "**Provided by**: [`VK_VERSION_1_0`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_VERSION_1_0.html)"]
1368    #[doc = "<br>"]
1369    #[doc = "**Reference**: [`vkDestroySampler`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkDestroySampler.html)"]
1370    pub unsafe fn destroy_sampler(&self, sampler: vk::Sampler) {
1371        (self.fns.destroy_sampler.unwrap_unchecked())(self.handle, sampler, std::ptr::null());
1372    }
1373
1374    #[inline]
1375    #[doc = "**Chapter**: Resource Descriptors"]
1376    #[doc = "<br>"]
1377    #[doc = "**Description**: Create a new descriptor set layout"]
1378    #[doc = "<br>"]
1379    #[doc = "**Provided by**: [`VK_VERSION_1_0`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_VERSION_1_0.html)"]
1380    #[doc = "<br>"]
1381    #[doc = "**Reference**: [`vkCreateDescriptorSetLayout`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCreateDescriptorSetLayout.html)"]
1382    pub unsafe fn create_descriptor_set_layout(&self, p_create_info: *const vk::DescriptorSetLayoutCreateInfo) -> Result<vk::DescriptorSetLayout, Error> {
1383        let mut p_set_layout = std::mem::MaybeUninit::uninit();
1384        match (self.fns.create_descriptor_set_layout.unwrap_unchecked())(self.handle, p_create_info, std::ptr::null(), p_set_layout.as_mut_ptr()) {
1385            vk::Result::Success => Ok(p_set_layout.assume_init()),
1386            result => Err(Error::Vulkan(result)),
1387        }
1388    }
1389
1390    #[inline]
1391    #[doc = "**Chapter**: Resource Descriptors"]
1392    #[doc = "<br>"]
1393    #[doc = "**Description**: Destroy a descriptor set layout object"]
1394    #[doc = "<br>"]
1395    #[doc = "**Provided by**: [`VK_VERSION_1_0`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_VERSION_1_0.html)"]
1396    #[doc = "<br>"]
1397    #[doc = "**Reference**: [`vkDestroyDescriptorSetLayout`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkDestroyDescriptorSetLayout.html)"]
1398    pub unsafe fn destroy_descriptor_set_layout(&self, descriptor_set_layout: vk::DescriptorSetLayout) {
1399        (self.fns.destroy_descriptor_set_layout.unwrap_unchecked())(self.handle, descriptor_set_layout, std::ptr::null());
1400    }
1401
1402    #[inline]
1403    #[doc = "**Chapter**: Resource Descriptors"]
1404    #[doc = "<br>"]
1405    #[doc = "**Description**: Creates a new pipeline layout object"]
1406    #[doc = "<br>"]
1407    #[doc = "**Provided by**: [`VK_VERSION_1_0`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_VERSION_1_0.html)"]
1408    #[doc = "<br>"]
1409    #[doc = "**Reference**: [`vkCreatePipelineLayout`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCreatePipelineLayout.html)"]
1410    pub unsafe fn create_pipeline_layout(&self, p_create_info: *const vk::PipelineLayoutCreateInfo) -> Result<vk::PipelineLayout, Error> {
1411        let mut p_pipeline_layout = std::mem::MaybeUninit::uninit();
1412        match (self.fns.create_pipeline_layout.unwrap_unchecked())(self.handle, p_create_info, std::ptr::null(), p_pipeline_layout.as_mut_ptr()) {
1413            vk::Result::Success => Ok(p_pipeline_layout.assume_init()),
1414            result => Err(Error::Vulkan(result)),
1415        }
1416    }
1417
1418    #[inline]
1419    #[doc = "**Chapter**: Resource Descriptors"]
1420    #[doc = "<br>"]
1421    #[doc = "**Description**: Destroy a pipeline layout object"]
1422    #[doc = "<br>"]
1423    #[doc = "**Provided by**: [`VK_VERSION_1_0`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_VERSION_1_0.html)"]
1424    #[doc = "<br>"]
1425    #[doc = "**Reference**: [`vkDestroyPipelineLayout`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkDestroyPipelineLayout.html)"]
1426    pub unsafe fn destroy_pipeline_layout(&self, pipeline_layout: vk::PipelineLayout) {
1427        (self.fns.destroy_pipeline_layout.unwrap_unchecked())(self.handle, pipeline_layout, std::ptr::null());
1428    }
1429
1430    #[inline]
1431    #[doc = "**Chapter**: Resource Descriptors"]
1432    #[doc = "<br>"]
1433    #[doc = "**Description**: Update the values of push constants"]
1434    #[doc = "<br>"]
1435    #[doc = "**Provided by**: [`VK_VERSION_1_0`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_VERSION_1_0.html)"]
1436    #[doc = "<br>"]
1437    #[doc = "**Reference**: [`vkCmdPushConstants`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdPushConstants.html)"]
1438    pub unsafe fn cmd_push_constants(&self, command_buffer: vk::CommandBuffer, layout: vk::PipelineLayout, stage_flags: vk::ShaderStageFlags, offset: u32, size: u32, p_values: *const c_void) {
1439        (self.fns.cmd_push_constants.unwrap_unchecked())(command_buffer, layout, stage_flags, offset, size, p_values);
1440    }
1441
1442    #[must_use]
1443    #[inline]
1444    #[doc = "**Chapter**: Resource Descriptors"]
1445    #[doc = "<br>"]
1446    #[doc = "**Description**: Query an address of a buffer"]
1447    #[doc = "<br>"]
1448    #[doc = "**Provided by**: [`VK_VERSION_1_2`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_VERSION_1_2.html)"]
1449    #[doc = "<br>"]
1450    #[doc = "**Reference**: [`vkGetBufferDeviceAddress`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetBufferDeviceAddress.html)"]
1451    pub unsafe fn get_buffer_device_address(&self, p_info: *const vk::BufferDeviceAddressInfo) -> vk::DeviceAddress {
1452        (self.fns.get_buffer_device_address.unwrap_unchecked())(self.handle, p_info)
1453    }
1454
1455    #[must_use]
1456    #[inline]
1457    #[doc = "**Chapter**: Resource Descriptors"]
1458    #[doc = "<br>"]
1459    #[doc = "**Description**: Get the size of a descriptor set layout in memory"]
1460    #[doc = "<br>"]
1461    #[doc = "**Provided by**: [`VK_EXT_descriptor_buffer`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_EXT_descriptor_buffer.html)"]
1462    #[doc = "<br>"]
1463    #[doc = "**Reference**: [`vkGetDescriptorSetLayoutSizeEXT`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetDescriptorSetLayoutSizeEXT.html)"]
1464    pub unsafe fn get_descriptor_set_layout_size_ext(&self, layout: vk::DescriptorSetLayout) -> vk::DeviceSize {
1465        let mut p_layout_size_in_bytes = std::mem::MaybeUninit::uninit();
1466        (self.fns.get_descriptor_set_layout_size_ext.unwrap_unchecked())(self.handle, layout, p_layout_size_in_bytes.as_mut_ptr());
1467        p_layout_size_in_bytes.assume_init()
1468    }
1469
1470    #[must_use]
1471    #[inline]
1472    #[doc = "**Chapter**: Resource Descriptors"]
1473    #[doc = "<br>"]
1474    #[doc = "**Description**: Get the offset of a binding within a descriptor set layout"]
1475    #[doc = "<br>"]
1476    #[doc = "**Provided by**: [`VK_EXT_descriptor_buffer`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_EXT_descriptor_buffer.html)"]
1477    #[doc = "<br>"]
1478    #[doc = "**Reference**: [`vkGetDescriptorSetLayoutBindingOffsetEXT`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetDescriptorSetLayoutBindingOffsetEXT.html)"]
1479    pub unsafe fn get_descriptor_set_layout_binding_offset_ext(&self, layout: vk::DescriptorSetLayout, binding: u32) -> vk::DeviceSize {
1480        let mut p_offset = std::mem::MaybeUninit::uninit();
1481        (self.fns.get_descriptor_set_layout_binding_offset_ext.unwrap_unchecked())(self.handle, layout, binding, p_offset.as_mut_ptr());
1482        p_offset.assume_init()
1483    }
1484
1485    #[inline]
1486    #[doc = "**Chapter**: Resource Descriptors"]
1487    #[doc = "<br>"]
1488    #[doc = "**Description**: To get a descriptor to place in a buffer"]
1489    #[doc = "<br>"]
1490    #[doc = "**Provided by**: [`VK_EXT_descriptor_buffer`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_EXT_descriptor_buffer.html)"]
1491    #[doc = "<br>"]
1492    #[doc = "**Reference**: [`vkGetDescriptorEXT`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetDescriptorEXT.html)"]
1493    pub unsafe fn get_descriptor_ext(&self, p_descriptor_info: *const vk::DescriptorGetInfoEXT, data_size: usize, p_descriptor: *mut c_void) {
1494        (self.fns.get_descriptor_ext.unwrap_unchecked())(self.handle, p_descriptor_info, data_size, p_descriptor);
1495    }
1496
1497    #[inline]
1498    #[doc = "**Chapter**: Resource Descriptors"]
1499    #[doc = "<br>"]
1500    #[doc = "**Description**: Binding descriptor buffers to a command buffer"]
1501    #[doc = "<br>"]
1502    #[doc = "**Provided by**: [`VK_EXT_descriptor_buffer`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_EXT_descriptor_buffer.html)"]
1503    #[doc = "<br>"]
1504    #[doc = "**Reference**: [`vkCmdBindDescriptorBuffersEXT`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdBindDescriptorBuffersEXT.html)"]
1505    pub unsafe fn cmd_bind_descriptor_buffers_ext(&self, command_buffer: vk::CommandBuffer, buffer_count: u32, p_binding_infos: *const vk::DescriptorBufferBindingInfoEXT) {
1506        (self.fns.cmd_bind_descriptor_buffers_ext.unwrap_unchecked())(command_buffer, buffer_count, p_binding_infos);
1507    }
1508
1509    #[inline]
1510    #[doc = "**Chapter**: Resource Descriptors"]
1511    #[doc = "<br>"]
1512    #[doc = "**Description**: Setting descriptor buffer offsets in a command buffer"]
1513    #[doc = "<br>"]
1514    #[doc = "**Provided by**: [`VK_EXT_descriptor_buffer`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_EXT_descriptor_buffer.html)"]
1515    #[doc = "<br>"]
1516    #[doc = "**Reference**: [`vkCmdSetDescriptorBufferOffsetsEXT`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetDescriptorBufferOffsetsEXT.html)"]
1517    pub unsafe fn cmd_set_descriptor_buffer_offsets_ext(
1518        &self,
1519        command_buffer: vk::CommandBuffer,
1520        pipeline_bind_point: vk::PipelineBindPoint,
1521        layout: vk::PipelineLayout,
1522        first_set: u32,
1523        set_count: u32,
1524        p_buffer_indices: *const u32,
1525        p_offsets: *const vk::DeviceSize,
1526    ) {
1527        (self.fns.cmd_set_descriptor_buffer_offsets_ext.unwrap_unchecked())(command_buffer, pipeline_bind_point, layout, first_set, set_count, p_buffer_indices, p_offsets);
1528    }
1529
1530    #[inline]
1531    #[doc = "**Chapter**: Queries"]
1532    #[doc = "<br>"]
1533    #[doc = "**Description**: Create a new query pool object"]
1534    #[doc = "<br>"]
1535    #[doc = "**Provided by**: [`VK_VERSION_1_0`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_VERSION_1_0.html)"]
1536    #[doc = "<br>"]
1537    #[doc = "**Reference**: [`vkCreateQueryPool`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCreateQueryPool.html)"]
1538    pub unsafe fn create_query_pool(&self, p_create_info: *const vk::QueryPoolCreateInfo) -> Result<vk::QueryPool, Error> {
1539        let mut p_query_pool = std::mem::MaybeUninit::uninit();
1540        match (self.fns.create_query_pool.unwrap_unchecked())(self.handle, p_create_info, std::ptr::null(), p_query_pool.as_mut_ptr()) {
1541            vk::Result::Success => Ok(p_query_pool.assume_init()),
1542            result => Err(Error::Vulkan(result)),
1543        }
1544    }
1545
1546    #[inline]
1547    #[doc = "**Chapter**: Queries"]
1548    #[doc = "<br>"]
1549    #[doc = "**Description**: Destroy a query pool object"]
1550    #[doc = "<br>"]
1551    #[doc = "**Provided by**: [`VK_VERSION_1_0`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_VERSION_1_0.html)"]
1552    #[doc = "<br>"]
1553    #[doc = "**Reference**: [`vkDestroyQueryPool`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkDestroyQueryPool.html)"]
1554    pub unsafe fn destroy_query_pool(&self, query_pool: vk::QueryPool) {
1555        (self.fns.destroy_query_pool.unwrap_unchecked())(self.handle, query_pool, std::ptr::null());
1556    }
1557
1558    #[inline]
1559    #[doc = "**Chapter**: Queries"]
1560    #[doc = "<br>"]
1561    #[doc = "**Description**: Reset queries in a query pool"]
1562    #[doc = "<br>"]
1563    #[doc = "**Provided by**: [`VK_VERSION_1_2`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_VERSION_1_2.html)"]
1564    #[doc = "<br>"]
1565    #[doc = "**Reference**: [`vkResetQueryPool`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkResetQueryPool.html)"]
1566    pub unsafe fn reset_query_pool(&self, query_pool: vk::QueryPool, first_query: u32, query_count: u32) {
1567        (self.fns.reset_query_pool.unwrap_unchecked())(self.handle, query_pool, first_query, query_count);
1568    }
1569
1570    #[inline]
1571    #[doc = "**Chapter**: Queries"]
1572    #[doc = "<br>"]
1573    #[doc = "**Description**: Begin a query"]
1574    #[doc = "<br>"]
1575    #[doc = "**Provided by**: [`VK_VERSION_1_0`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_VERSION_1_0.html)"]
1576    #[doc = "<br>"]
1577    #[doc = "**Reference**: [`vkCmdBeginQuery`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdBeginQuery.html)"]
1578    pub unsafe fn cmd_begin_query(&self, command_buffer: vk::CommandBuffer, query_pool: vk::QueryPool, query: u32, flags: vk::QueryControlFlags) {
1579        (self.fns.cmd_begin_query.unwrap_unchecked())(command_buffer, query_pool, query, flags);
1580    }
1581
1582    #[inline]
1583    #[doc = "**Chapter**: Queries"]
1584    #[doc = "<br>"]
1585    #[doc = "**Description**: Ends a query"]
1586    #[doc = "<br>"]
1587    #[doc = "**Provided by**: [`VK_VERSION_1_0`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_VERSION_1_0.html)"]
1588    #[doc = "<br>"]
1589    #[doc = "**Reference**: [`vkCmdEndQuery`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdEndQuery.html)"]
1590    pub unsafe fn cmd_end_query(&self, command_buffer: vk::CommandBuffer, query_pool: vk::QueryPool, query: u32) {
1591        (self.fns.cmd_end_query.unwrap_unchecked())(command_buffer, query_pool, query);
1592    }
1593
1594    #[inline]
1595    #[doc = "**Chapter**: Queries"]
1596    #[doc = "<br>"]
1597    #[doc = "**Description**: Copy results of queries in a query pool to a host memory region"]
1598    #[doc = "<br>"]
1599    #[doc = "**Provided by**: [`VK_VERSION_1_0`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_VERSION_1_0.html)"]
1600    #[doc = "<br>"]
1601    #[doc = "**Reference**: [`vkGetQueryPoolResults`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetQueryPoolResults.html)"]
1602    pub unsafe fn get_query_pool_results(
1603        &self,
1604        query_pool: vk::QueryPool,
1605        first_query: u32,
1606        query_count: u32,
1607        data_size: usize,
1608        p_data: *mut c_void,
1609        stride: vk::DeviceSize,
1610        flags: vk::QueryResultFlags,
1611    ) -> Result<(), Error> {
1612        match (self.fns.get_query_pool_results.unwrap_unchecked())(self.handle, query_pool, first_query, query_count, data_size, p_data, stride, flags) {
1613            vk::Result::Success => Ok(()),
1614            result => Err(Error::Vulkan(result)),
1615        }
1616    }
1617
1618    #[inline]
1619    #[doc = "**Chapter**: Queries"]
1620    #[doc = "<br>"]
1621    #[doc = "**Description**: Write a device timestamp into a query object"]
1622    #[doc = "<br>"]
1623    #[doc = "**Provided by**: [`VK_VERSION_1_3`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_VERSION_1_3.html)"]
1624    #[doc = "<br>"]
1625    #[doc = "**Reference**: [`vkCmdWriteTimestamp2`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdWriteTimestamp2.html)"]
1626    pub unsafe fn cmd_write_timestamp2(&self, command_buffer: vk::CommandBuffer, stage: vk::PipelineStageFlags2, query_pool: vk::QueryPool, query: u32) {
1627        (self.fns.cmd_write_timestamp2.unwrap_unchecked())(command_buffer, stage, query_pool, query);
1628    }
1629
1630    #[inline]
1631    #[doc = "**Chapter**: Copy Commands"]
1632    #[doc = "<br>"]
1633    #[doc = "**Description**: Copy data between buffer regions"]
1634    #[doc = "<br>"]
1635    #[doc = "**Provided by**: [`VK_VERSION_1_3`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_VERSION_1_3.html)"]
1636    #[doc = "<br>"]
1637    #[doc = "**Reference**: [`vkCmdCopyBuffer2`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdCopyBuffer2.html)"]
1638    pub unsafe fn cmd_copy_buffer2(&self, command_buffer: vk::CommandBuffer, p_copy_buffer_info: *const vk::CopyBufferInfo2) {
1639        (self.fns.cmd_copy_buffer2.unwrap_unchecked())(command_buffer, p_copy_buffer_info);
1640    }
1641
1642    #[inline]
1643    #[doc = "**Chapter**: Copy Commands"]
1644    #[doc = "<br>"]
1645    #[doc = "**Description**: Copy data between images"]
1646    #[doc = "<br>"]
1647    #[doc = "**Provided by**: [`VK_VERSION_1_3`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_VERSION_1_3.html)"]
1648    #[doc = "<br>"]
1649    #[doc = "**Reference**: [`vkCmdCopyImage2`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdCopyImage2.html)"]
1650    pub unsafe fn cmd_copy_image2(&self, command_buffer: vk::CommandBuffer, p_copy_image_info: *const vk::CopyImageInfo2) {
1651        (self.fns.cmd_copy_image2.unwrap_unchecked())(command_buffer, p_copy_image_info);
1652    }
1653
1654    #[inline]
1655    #[doc = "**Chapter**: Copy Commands"]
1656    #[doc = "<br>"]
1657    #[doc = "**Description**: Copy data from a buffer into an image"]
1658    #[doc = "<br>"]
1659    #[doc = "**Provided by**: [`VK_VERSION_1_3`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_VERSION_1_3.html)"]
1660    #[doc = "<br>"]
1661    #[doc = "**Reference**: [`vkCmdCopyBufferToImage2`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdCopyBufferToImage2.html)"]
1662    pub unsafe fn cmd_copy_buffer_to_image2(&self, command_buffer: vk::CommandBuffer, p_copy_buffer_to_image_info: *const vk::CopyBufferToImageInfo2) {
1663        (self.fns.cmd_copy_buffer_to_image2.unwrap_unchecked())(command_buffer, p_copy_buffer_to_image_info);
1664    }
1665
1666    #[inline]
1667    #[doc = "**Chapter**: Copy Commands"]
1668    #[doc = "<br>"]
1669    #[doc = "**Description**: Copy image data into a buffer"]
1670    #[doc = "<br>"]
1671    #[doc = "**Provided by**: [`VK_VERSION_1_3`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_VERSION_1_3.html)"]
1672    #[doc = "<br>"]
1673    #[doc = "**Reference**: [`vkCmdCopyImageToBuffer2`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdCopyImageToBuffer2.html)"]
1674    pub unsafe fn cmd_copy_image_to_buffer2(&self, command_buffer: vk::CommandBuffer, p_copy_image_to_buffer_info: *const vk::CopyImageToBufferInfo2) {
1675        (self.fns.cmd_copy_image_to_buffer2.unwrap_unchecked())(command_buffer, p_copy_image_to_buffer_info);
1676    }
1677
1678    #[inline]
1679    #[doc = "**Chapter**: Drawing Commands"]
1680    #[doc = "<br>"]
1681    #[doc = "**Description**: Draw mesh task work items"]
1682    #[doc = "<br>"]
1683    #[doc = "**Provided by**: [`VK_EXT_mesh_shader`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_EXT_mesh_shader.html)"]
1684    #[doc = "<br>"]
1685    #[doc = "**Reference**: [`vkCmdDrawMeshTasksEXT`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdDrawMeshTasksEXT.html)"]
1686    pub unsafe fn cmd_draw_mesh_tasks_ext(&self, command_buffer: vk::CommandBuffer, group_count_x: u32, group_count_y: u32, group_count_z: u32) {
1687        (self.fns.cmd_draw_mesh_tasks_ext.unwrap_unchecked())(command_buffer, group_count_x, group_count_y, group_count_z);
1688    }
1689
1690    #[inline]
1691    #[doc = "**Chapter**: Drawing Commands"]
1692    #[doc = "<br>"]
1693    #[doc = "**Description**: Issue an indirect mesh tasks draw into a command buffer"]
1694    #[doc = "<br>"]
1695    #[doc = "**Provided by**: [`VK_EXT_mesh_shader`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_EXT_mesh_shader.html)"]
1696    #[doc = "<br>"]
1697    #[doc = "**Reference**: [`vkCmdDrawMeshTasksIndirectEXT`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdDrawMeshTasksIndirectEXT.html)"]
1698    pub unsafe fn cmd_draw_mesh_tasks_indirect_ext(&self, command_buffer: vk::CommandBuffer, buffer: vk::Buffer, offset: vk::DeviceSize, draw_count: u32, stride: u32) {
1699        (self.fns.cmd_draw_mesh_tasks_indirect_ext.unwrap_unchecked())(command_buffer, buffer, offset, draw_count, stride);
1700    }
1701
1702    #[inline]
1703    #[doc = "**Chapter**: Drawing Commands"]
1704    #[doc = "<br>"]
1705    #[doc = "**Description**: Perform an indirect mesh tasks draw with the draw count sourced from a buffer"]
1706    #[doc = "<br>"]
1707    #[doc = "**Provided by**: [`VK_EXT_mesh_shader`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_EXT_mesh_shader.html)"]
1708    #[doc = "<br>"]
1709    #[doc = "**Reference**: [`vkCmdDrawMeshTasksIndirectCountEXT`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdDrawMeshTasksIndirectCountEXT.html)"]
1710    pub unsafe fn cmd_draw_mesh_tasks_indirect_count_ext(
1711        &self,
1712        command_buffer: vk::CommandBuffer,
1713        buffer: vk::Buffer,
1714        offset: vk::DeviceSize,
1715        count_buffer: vk::Buffer,
1716        count_buffer_offset: vk::DeviceSize,
1717        max_draw_count: u32,
1718        stride: u32,
1719    ) {
1720        (self.fns.cmd_draw_mesh_tasks_indirect_count_ext.unwrap_unchecked())(command_buffer, buffer, offset, count_buffer, count_buffer_offset, max_draw_count, stride);
1721    }
1722
1723    #[inline]
1724    #[doc = "**Chapter**: Fixed-Function Vertex Post-Processing"]
1725    #[doc = "<br>"]
1726    #[doc = "**Description**: Set the viewport count and viewports dynamically for a command buffer"]
1727    #[doc = "<br>"]
1728    #[doc = "**Provided by**: [`VK_VERSION_1_3`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_VERSION_1_3.html)"]
1729    #[doc = "<br>"]
1730    #[doc = "**Reference**: [`vkCmdSetViewportWithCount`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetViewportWithCount.html)"]
1731    pub unsafe fn cmd_set_viewport_with_count(&self, command_buffer: vk::CommandBuffer, viewport_count: u32, p_viewports: *const vk::Viewport) {
1732        (self.fns.cmd_set_viewport_with_count.unwrap_unchecked())(command_buffer, viewport_count, p_viewports);
1733    }
1734
1735    #[inline]
1736    #[doc = "**Chapter**: Fixed-Function Vertex Post-Processing"]
1737    #[doc = "<br>"]
1738    #[doc = "**Description**: Set the scissor count and scissor rectangular bounds dynamically for a command buffer"]
1739    #[doc = "<br>"]
1740    #[doc = "**Provided by**: [`VK_VERSION_1_3`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_VERSION_1_3.html)"]
1741    #[doc = "<br>"]
1742    #[doc = "**Reference**: [`vkCmdSetScissorWithCount`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetScissorWithCount.html)"]
1743    pub unsafe fn cmd_set_scissor_with_count(&self, command_buffer: vk::CommandBuffer, scissor_count: u32, p_scissors: *const vk::Rect2D) {
1744        (self.fns.cmd_set_scissor_with_count.unwrap_unchecked())(command_buffer, scissor_count, p_scissors);
1745    }
1746
1747    #[inline]
1748    #[doc = "**Chapter**: Rasterization"]
1749    #[doc = "<br>"]
1750    #[doc = "**Description**: Specify the rasterization samples dynamically for a command buffer"]
1751    #[doc = "<br>"]
1752    #[doc = "**Provided by**: [`VK_EXT_extended_dynamic_state3`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_EXT_extended_dynamic_state3.html)"]
1753    #[doc = "<br>"]
1754    #[doc = "**Reference**: [`vkCmdSetRasterizationSamplesEXT`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetRasterizationSamplesEXT.html)"]
1755    pub unsafe fn cmd_set_rasterization_samples_ext(&self, command_buffer: vk::CommandBuffer, rasterization_samples: vk::SampleCountFlagBits) {
1756        (self.fns.cmd_set_rasterization_samples_ext.unwrap_unchecked())(command_buffer, rasterization_samples);
1757    }
1758
1759    #[inline]
1760    #[doc = "**Chapter**: Rasterization"]
1761    #[doc = "<br>"]
1762    #[doc = "**Description**: Set front face orientation dynamically for a command buffer"]
1763    #[doc = "<br>"]
1764    #[doc = "**Provided by**: [`VK_VERSION_1_3`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_VERSION_1_3.html)"]
1765    #[doc = "<br>"]
1766    #[doc = "**Reference**: [`vkCmdSetFrontFace`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetFrontFace.html)"]
1767    pub unsafe fn cmd_set_front_face(&self, command_buffer: vk::CommandBuffer, front_face: vk::FrontFace) {
1768        (self.fns.cmd_set_front_face.unwrap_unchecked())(command_buffer, front_face);
1769    }
1770
1771    #[inline]
1772    #[doc = "**Chapter**: Rasterization"]
1773    #[doc = "<br>"]
1774    #[doc = "**Description**: Set cull mode dynamically for a command buffer"]
1775    #[doc = "<br>"]
1776    #[doc = "**Provided by**: [`VK_VERSION_1_3`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_VERSION_1_3.html)"]
1777    #[doc = "<br>"]
1778    #[doc = "**Reference**: [`vkCmdSetCullMode`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetCullMode.html)"]
1779    pub unsafe fn cmd_set_cull_mode(&self, command_buffer: vk::CommandBuffer, cull_mode: vk::CullModeFlags) {
1780        (self.fns.cmd_set_cull_mode.unwrap_unchecked())(command_buffer, cull_mode);
1781    }
1782
1783    #[inline]
1784    #[doc = "**Chapter**: Fragment Operations"]
1785    #[doc = "<br>"]
1786    #[doc = "**Description**: Set depth test enable dynamically for a command buffer"]
1787    #[doc = "<br>"]
1788    #[doc = "**Provided by**: [`VK_VERSION_1_3`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_VERSION_1_3.html)"]
1789    #[doc = "<br>"]
1790    #[doc = "**Reference**: [`vkCmdSetDepthTestEnable`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetDepthTestEnable.html)"]
1791    pub unsafe fn cmd_set_depth_test_enable(&self, command_buffer: vk::CommandBuffer, depth_test_enable: vk::Bool32) {
1792        (self.fns.cmd_set_depth_test_enable.unwrap_unchecked())(command_buffer, depth_test_enable);
1793    }
1794
1795    #[inline]
1796    #[doc = "**Chapter**: Fragment Operations"]
1797    #[doc = "<br>"]
1798    #[doc = "**Description**: Set depth comparison operator dynamically for a command buffer"]
1799    #[doc = "<br>"]
1800    #[doc = "**Provided by**: [`VK_VERSION_1_3`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_VERSION_1_3.html)"]
1801    #[doc = "<br>"]
1802    #[doc = "**Reference**: [`vkCmdSetDepthCompareOp`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetDepthCompareOp.html)"]
1803    pub unsafe fn cmd_set_depth_compare_op(&self, command_buffer: vk::CommandBuffer, depth_compare_op: vk::CompareOp) {
1804        (self.fns.cmd_set_depth_compare_op.unwrap_unchecked())(command_buffer, depth_compare_op);
1805    }
1806
1807    #[inline]
1808    #[doc = "**Chapter**: Fragment Operations"]
1809    #[doc = "<br>"]
1810    #[doc = "**Description**: Set depth write enable dynamically for a command buffer"]
1811    #[doc = "<br>"]
1812    #[doc = "**Provided by**: [`VK_VERSION_1_3`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_VERSION_1_3.html)"]
1813    #[doc = "<br>"]
1814    #[doc = "**Reference**: [`vkCmdSetDepthWriteEnable`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetDepthWriteEnable.html)"]
1815    pub unsafe fn cmd_set_depth_write_enable(&self, command_buffer: vk::CommandBuffer, depth_write_enable: vk::Bool32) {
1816        (self.fns.cmd_set_depth_write_enable.unwrap_unchecked())(command_buffer, depth_write_enable);
1817    }
1818
1819    #[inline]
1820    #[doc = "**Chapter**: The Framebuffer"]
1821    #[doc = "<br>"]
1822    #[doc = "**Description**: Specify the pname:blendEnable for each attachment dynamically for a command buffer"]
1823    #[doc = "<br>"]
1824    #[doc = "**Provided by**: [`VK_EXT_extended_dynamic_state3`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_EXT_extended_dynamic_state3.html)"]
1825    #[doc = "<br>"]
1826    #[doc = "**Reference**: [`vkCmdSetColorBlendEnableEXT`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetColorBlendEnableEXT.html)"]
1827    pub unsafe fn cmd_set_color_blend_enable_ext(&self, command_buffer: vk::CommandBuffer, first_attachment: u32, attachment_count: u32, p_color_blend_enables: *const vk::Bool32) {
1828        (self.fns.cmd_set_color_blend_enable_ext.unwrap_unchecked())(command_buffer, first_attachment, attachment_count, p_color_blend_enables);
1829    }
1830
1831    #[inline]
1832    #[doc = "**Chapter**: The Framebuffer"]
1833    #[doc = "<br>"]
1834    #[doc = "**Description**: Specify the blend factors and operations dynamically for a command buffer"]
1835    #[doc = "<br>"]
1836    #[doc = "**Provided by**: [`VK_EXT_extended_dynamic_state3`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_EXT_extended_dynamic_state3.html)"]
1837    #[doc = "<br>"]
1838    #[doc = "**Reference**: [`vkCmdSetColorBlendEquationEXT`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetColorBlendEquationEXT.html)"]
1839    pub unsafe fn cmd_set_color_blend_equation_ext(&self, command_buffer: vk::CommandBuffer, first_attachment: u32, attachment_count: u32, p_color_blend_equations: *const vk::ColorBlendEquationEXT) {
1840        (self.fns.cmd_set_color_blend_equation_ext.unwrap_unchecked())(command_buffer, first_attachment, attachment_count, p_color_blend_equations);
1841    }
1842
1843    #[inline]
1844    #[doc = "**Chapter**: The Framebuffer"]
1845    #[doc = "<br>"]
1846    #[doc = "**Description**: Specify the color write masks for each attachment dynamically for a command buffer"]
1847    #[doc = "<br>"]
1848    #[doc = "**Provided by**: [`VK_EXT_extended_dynamic_state3`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_EXT_extended_dynamic_state3.html)"]
1849    #[doc = "<br>"]
1850    #[doc = "**Reference**: [`vkCmdSetColorWriteMaskEXT`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetColorWriteMaskEXT.html)"]
1851    pub unsafe fn cmd_set_color_write_mask_ext(&self, command_buffer: vk::CommandBuffer, first_attachment: u32, attachment_count: u32, p_color_write_masks: *const vk::ColorComponentFlags) {
1852        (self.fns.cmd_set_color_write_mask_ext.unwrap_unchecked())(command_buffer, first_attachment, attachment_count, p_color_write_masks);
1853    }
1854
1855    #[inline]
1856    #[doc = "**Chapter**: Dispatching Commands"]
1857    #[doc = "<br>"]
1858    #[doc = "**Description**: Dispatch compute work items"]
1859    #[doc = "<br>"]
1860    #[doc = "**Provided by**: [`VK_VERSION_1_0`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_VERSION_1_0.html)"]
1861    #[doc = "<br>"]
1862    #[doc = "**Reference**: [`vkCmdDispatch`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdDispatch.html)"]
1863    pub unsafe fn cmd_dispatch(&self, command_buffer: vk::CommandBuffer, group_count_x: u32, group_count_y: u32, group_count_z: u32) {
1864        (self.fns.cmd_dispatch.unwrap_unchecked())(command_buffer, group_count_x, group_count_y, group_count_z);
1865    }
1866
1867    #[inline]
1868    #[doc = "**Chapter**: Dispatching Commands"]
1869    #[doc = "<br>"]
1870    #[doc = "**Description**: Dispatch compute work items with indirect parameters"]
1871    #[doc = "<br>"]
1872    #[doc = "**Provided by**: [`VK_VERSION_1_0`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_VERSION_1_0.html)"]
1873    #[doc = "<br>"]
1874    #[doc = "**Reference**: [`vkCmdDispatchIndirect`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdDispatchIndirect.html)"]
1875    pub unsafe fn cmd_dispatch_indirect(&self, command_buffer: vk::CommandBuffer, buffer: vk::Buffer, offset: vk::DeviceSize) {
1876        (self.fns.cmd_dispatch_indirect.unwrap_unchecked())(command_buffer, buffer, offset);
1877    }
1878
1879    #[inline]
1880    #[doc = "**Chapter**: Window System Integration (WSI)"]
1881    #[doc = "<br>"]
1882    #[doc = "**Description**: Create a swapchain"]
1883    #[doc = "<br>"]
1884    #[doc = "**Provided by**: [`VK_KHR_swapchain`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_KHR_swapchain.html)"]
1885    #[doc = "<br>"]
1886    #[doc = "**Reference**: [`vkCreateSwapchainKHR`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCreateSwapchainKHR.html)"]
1887    pub unsafe fn create_swapchain_khr(&self, p_create_info: *const vk::SwapchainCreateInfoKHR) -> Result<vk::SwapchainKHR, Error> {
1888        let mut p_swapchain = std::mem::MaybeUninit::uninit();
1889        match (self.fns.create_swapchain_khr.unwrap_unchecked())(self.handle, p_create_info, std::ptr::null(), p_swapchain.as_mut_ptr()) {
1890            vk::Result::Success => Ok(p_swapchain.assume_init()),
1891            result => Err(Error::Vulkan(result)),
1892        }
1893    }
1894
1895    #[inline]
1896    #[doc = "**Chapter**: Window System Integration (WSI)"]
1897    #[doc = "<br>"]
1898    #[doc = "**Description**: Destroy a swapchain object"]
1899    #[doc = "<br>"]
1900    #[doc = "**Provided by**: [`VK_KHR_swapchain`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_KHR_swapchain.html)"]
1901    #[doc = "<br>"]
1902    #[doc = "**Reference**: [`vkDestroySwapchainKHR`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkDestroySwapchainKHR.html)"]
1903    pub unsafe fn destroy_swapchain_khr(&self, swapchain: vk::SwapchainKHR) {
1904        (self.fns.destroy_swapchain_khr.unwrap_unchecked())(self.handle, swapchain, std::ptr::null());
1905    }
1906
1907    #[inline]
1908    #[doc = "**Chapter**: Window System Integration (WSI)"]
1909    #[doc = "<br>"]
1910    #[doc = "**Description**: Obtain the array of presentable images associated with a swapchain"]
1911    #[doc = "<br>"]
1912    #[doc = "**Provided by**: [`VK_KHR_swapchain`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_KHR_swapchain.html)"]
1913    #[doc = "<br>"]
1914    #[doc = "**Reference**: [`vkGetSwapchainImagesKHR`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetSwapchainImagesKHR.html)"]
1915    pub unsafe fn get_swapchain_images_khr(&self, swapchain: vk::SwapchainKHR, p_swapchain_image_count: *mut u32, p_swapchain_images: *mut vk::Image) -> Result<(), Error> {
1916        match (self.fns.get_swapchain_images_khr.unwrap_unchecked())(self.handle, swapchain, p_swapchain_image_count, p_swapchain_images) {
1917            vk::Result::Success => Ok(()),
1918            result => Err(Error::Vulkan(result)),
1919        }
1920    }
1921
1922    #[inline]
1923    #[doc = "**Chapter**: Window System Integration (WSI)"]
1924    #[doc = "<br>"]
1925    #[doc = "**Description**: Retrieve the index of the next available presentable image"]
1926    #[doc = "<br>"]
1927    #[doc = "**Provided by**: [`VK_KHR_swapchain`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_KHR_swapchain.html)"]
1928    #[doc = "<br>"]
1929    #[doc = "**Reference**: [`vkAcquireNextImage2KHR`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkAcquireNextImage2KHR.html)"]
1930    pub unsafe fn acquire_next_image2_khr(&self, p_acquire_info: *const vk::AcquireNextImageInfoKHR) -> Result<u32, Error> {
1931        let mut p_image_index = std::mem::MaybeUninit::uninit();
1932        match (self.fns.acquire_next_image2_khr.unwrap_unchecked())(self.handle, p_acquire_info, p_image_index.as_mut_ptr()) {
1933            vk::Result::Success => Ok(p_image_index.assume_init()),
1934            result => Err(Error::Vulkan(result)),
1935        }
1936    }
1937
1938    #[inline]
1939    #[doc = "**Chapter**: Window System Integration (WSI)"]
1940    #[doc = "<br>"]
1941    #[doc = "**Description**: Queue an image for presentation"]
1942    #[doc = "<br>"]
1943    #[doc = "**Provided by**: [`VK_KHR_swapchain`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_KHR_swapchain.html)"]
1944    #[doc = "<br>"]
1945    #[doc = "**Reference**: [`vkQueuePresentKHR`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkQueuePresentKHR.html)"]
1946    pub unsafe fn queue_present_khr(&self, queue: vk::Queue, p_present_info: *const vk::PresentInfoKHR) -> Result<(), Error> {
1947        match (self.fns.queue_present_khr.unwrap_unchecked())(queue, p_present_info) {
1948            vk::Result::Success => Ok(()),
1949            result => Err(Error::Vulkan(result)),
1950        }
1951    }
1952
1953    #[inline]
1954    #[doc = "**Chapter**: Acceleration Structures"]
1955    #[doc = "<br>"]
1956    #[doc = "**Description**: Build an acceleration structure"]
1957    #[doc = "<br>"]
1958    #[doc = "**Provided by**: [`VK_KHR_acceleration_structure`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_KHR_acceleration_structure.html)"]
1959    #[doc = "<br>"]
1960    #[doc = "**Reference**: [`vkCmdBuildAccelerationStructuresKHR`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdBuildAccelerationStructuresKHR.html)"]
1961    pub unsafe fn cmd_build_acceleration_structures_khr(
1962        &self,
1963        command_buffer: vk::CommandBuffer,
1964        info_count: u32,
1965        p_infos: *const vk::AccelerationStructureBuildGeometryInfoKHR,
1966        pp_build_range_infos: *const *const vk::AccelerationStructureBuildRangeInfoKHR,
1967    ) {
1968        (self.fns.cmd_build_acceleration_structures_khr.unwrap_unchecked())(command_buffer, info_count, p_infos, pp_build_range_infos);
1969    }
1970
1971    #[inline]
1972    #[doc = "**Chapter**: Ray Tracing"]
1973    #[doc = "<br>"]
1974    #[doc = "**Description**: Initialize a ray tracing dispatch"]
1975    #[doc = "<br>"]
1976    #[doc = "**Provided by**: [`VK_KHR_ray_tracing_pipeline`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_KHR_ray_tracing_pipeline.html)"]
1977    #[doc = "<br>"]
1978    #[doc = "**Reference**: [`vkCmdTraceRaysKHR`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdTraceRaysKHR.html)"]
1979    pub unsafe fn cmd_trace_rays_khr(
1980        &self,
1981        command_buffer: vk::CommandBuffer,
1982        p_raygen_shader_binding_table: *const vk::StridedDeviceAddressRegionKHR,
1983        p_miss_shader_binding_table: *const vk::StridedDeviceAddressRegionKHR,
1984        p_hit_shader_binding_table: *const vk::StridedDeviceAddressRegionKHR,
1985        p_callable_shader_binding_table: *const vk::StridedDeviceAddressRegionKHR,
1986        width: u32,
1987        height: u32,
1988        depth: u32,
1989    ) {
1990        (self.fns.cmd_trace_rays_khr.unwrap_unchecked())(
1991            command_buffer,
1992            p_raygen_shader_binding_table,
1993            p_miss_shader_binding_table,
1994            p_hit_shader_binding_table,
1995            p_callable_shader_binding_table,
1996            width,
1997            height,
1998            depth,
1999        );
2000    }
2001
2002    #[inline]
2003    #[doc = "**Chapter**: Ray Tracing"]
2004    #[doc = "<br>"]
2005    #[doc = "**Description**: Initialize an indirect ray tracing dispatch with indirect shader binding tables"]
2006    #[doc = "<br>"]
2007    #[doc = "**Provided by**: [`VK_KHR_ray_tracing_maintenance1`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_KHR_ray_tracing_maintenance1.html)"]
2008    #[doc = "<br>"]
2009    #[doc = "**Reference**: [`vkCmdTraceRaysIndirect2KHR`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdTraceRaysIndirect2KHR.html)"]
2010    pub unsafe fn cmd_trace_rays_indirect2_khr(&self, command_buffer: vk::CommandBuffer, indirect_device_address: vk::DeviceAddress) {
2011        (self.fns.cmd_trace_rays_indirect2_khr.unwrap_unchecked())(command_buffer, indirect_device_address);
2012    }
2013}