ash/extensions/khr/
maintenance4.rs1use crate::vk;
2use crate::{Device, Instance};
3use std::ffi::CStr;
4use std::mem;
5
6#[derive(Clone)]
7pub struct Maintenance4 {
8 handle: vk::Device,
9 fp: vk::KhrMaintenance4Fn,
10}
11
12impl Maintenance4 {
13 pub fn new(instance: &Instance, device: &Device) -> Self {
14 let handle = device.handle();
15 let fp = vk::KhrMaintenance4Fn::load(|name| unsafe {
16 mem::transmute(instance.get_device_proc_addr(handle, name.as_ptr()))
17 });
18 Self { handle, fp }
19 }
20
21 #[inline]
23 pub unsafe fn get_device_buffer_memory_requirements(
24 &self,
25 memory_requirements: &vk::DeviceBufferMemoryRequirementsKHR,
26 out: &mut vk::MemoryRequirements2,
27 ) {
28 (self.fp.get_device_buffer_memory_requirements_khr)(self.handle, memory_requirements, out)
29 }
30
31 #[inline]
33 pub unsafe fn get_device_image_memory_requirements(
34 &self,
35 memory_requirements: &vk::DeviceImageMemoryRequirementsKHR,
36 out: &mut vk::MemoryRequirements2,
37 ) {
38 (self.fp.get_device_image_memory_requirements_khr)(self.handle, memory_requirements, out)
39 }
40
41 #[inline]
43 pub unsafe fn get_device_image_sparse_memory_requirements_len(
44 &self,
45 memory_requirements: &vk::DeviceImageMemoryRequirementsKHR,
46 ) -> usize {
47 let mut count = 0;
48 (self.fp.get_device_image_sparse_memory_requirements_khr)(
49 self.handle,
50 memory_requirements,
51 &mut count,
52 std::ptr::null_mut(),
53 );
54 count as usize
55 }
56
57 #[inline]
62 pub unsafe fn get_device_image_sparse_memory_requirements(
63 &self,
64 memory_requirements: &vk::DeviceImageMemoryRequirementsKHR,
65 out: &mut [vk::SparseImageMemoryRequirements2],
66 ) {
67 let mut count = out.len() as u32;
68 (self.fp.get_device_image_sparse_memory_requirements_khr)(
69 self.handle,
70 memory_requirements,
71 &mut count,
72 out.as_mut_ptr(),
73 );
74 assert_eq!(count as usize, out.len());
75 }
76
77 #[inline]
78 pub const fn name() -> &'static CStr {
79 vk::KhrMaintenance4Fn::name()
80 }
81
82 #[inline]
83 pub fn fp(&self) -> &vk::KhrMaintenance4Fn {
84 &self.fp
85 }
86
87 #[inline]
88 pub fn device(&self) -> vk::Device {
89 self.handle
90 }
91}