Skip to main content

jay_ash/extensions/khr/
maintenance4.rs

1//! <https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VK_KHR_maintenance4.html>
2
3use crate::vk;
4use core::mem;
5use core::ptr;
6
7impl crate::khr::maintenance4::Device {
8    /// <https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/vkGetDeviceBufferMemoryRequirementsKHR.html>
9    #[inline]
10    pub unsafe fn get_device_buffer_memory_requirements(
11        &self,
12        memory_requirements: &vk::DeviceBufferMemoryRequirementsKHR<'_>,
13        out: &mut vk::MemoryRequirements2<'_>,
14    ) {
15        unsafe {
16            (self.fp.get_device_buffer_memory_requirements_khr)(
17                self.handle,
18                memory_requirements,
19                out,
20            )
21        }
22    }
23
24    /// <https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/vkGetDeviceImageMemoryRequirementsKHR.html>
25    #[inline]
26    pub unsafe fn get_device_image_memory_requirements(
27        &self,
28        memory_requirements: &vk::DeviceImageMemoryRequirementsKHR<'_>,
29        out: &mut vk::MemoryRequirements2<'_>,
30    ) {
31        unsafe {
32            (self.fp.get_device_image_memory_requirements_khr)(
33                self.handle,
34                memory_requirements,
35                out,
36            )
37        }
38    }
39
40    /// Retrieve the number of elements to pass to [`get_device_image_sparse_memory_requirements()`][Self::get_device_image_sparse_memory_requirements()]
41    #[inline]
42    pub unsafe fn get_device_image_sparse_memory_requirements_len(
43        &self,
44        memory_requirements: &vk::DeviceImageMemoryRequirementsKHR<'_>,
45    ) -> usize {
46        unsafe {
47            let mut count = mem::MaybeUninit::uninit();
48            (self.fp.get_device_image_sparse_memory_requirements_khr)(
49                self.handle,
50                memory_requirements,
51                count.as_mut_ptr(),
52                ptr::null_mut(),
53            );
54            count.assume_init() as usize
55        }
56    }
57
58    /// <https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/vkGetDeviceImageSparseMemoryRequirementsKHR.html>
59    ///
60    /// Call [`get_device_image_sparse_memory_requirements_len()`][Self::get_device_image_sparse_memory_requirements_len()] to query the number of elements to pass to `out`.
61    /// Be sure to [`Default::default()`]-initialize these elements and optionally set their `p_next` pointer.
62    #[inline]
63    pub unsafe fn get_device_image_sparse_memory_requirements(
64        &self,
65        memory_requirements: &vk::DeviceImageMemoryRequirementsKHR<'_>,
66        out: &mut [vk::SparseImageMemoryRequirements2<'_>],
67    ) {
68        unsafe {
69            let mut count = out.len() as u32;
70            (self.fp.get_device_image_sparse_memory_requirements_khr)(
71                self.handle,
72                memory_requirements,
73                &mut count,
74                out.as_mut_ptr(),
75            );
76            assert_eq!(count as usize, out.len());
77        }
78    }
79}