jay_ash/extensions/khr/device_group_creation.rs
1//! <https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VK_KHR_device_group_creation.html>
2
3use crate::prelude::*;
4use crate::vk;
5use core::mem;
6use core::ptr;
7
8impl crate::khr::device_group_creation::Instance {
9 /// Retrieve the number of elements to pass to [`enumerate_physical_device_groups()`][Self::enumerate_physical_device_groups()]
10 #[inline]
11 pub unsafe fn enumerate_physical_device_groups_len(&self) -> VkResult<usize> {
12 unsafe {
13 let mut group_count = mem::MaybeUninit::uninit();
14 (self.fp.enumerate_physical_device_groups_khr)(
15 self.handle,
16 group_count.as_mut_ptr(),
17 ptr::null_mut(),
18 )
19 .assume_init_on_success(group_count)
20 .map(|c| c as usize)
21 }
22 }
23
24 /// <https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/vkEnumeratePhysicalDeviceGroupsKHR.html>
25 ///
26 /// Call [`enumerate_physical_device_groups_len()`][Self::enumerate_physical_device_groups_len()] to query the number of elements to pass to `out`.
27 /// Be sure to [`Default::default()`]-initialize these elements and optionally set their `p_next` pointer.
28 #[inline]
29 pub unsafe fn enumerate_physical_device_groups(
30 &self,
31 out: &mut [vk::PhysicalDeviceGroupProperties<'_>],
32 ) -> VkResult<()> {
33 unsafe {
34 let mut count = out.len() as u32;
35 (self.fp.enumerate_physical_device_groups_khr)(
36 self.handle,
37 &mut count,
38 out.as_mut_ptr(),
39 )
40 .result()?;
41 assert_eq!(count as usize, out.len());
42 Ok(())
43 }
44 }
45}