1use super::{vk, Error};
6use std::ffi::{c_char, c_void};
7
8pub 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 #[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 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 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
92pub 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
411pub 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}