ash/extensions/khr/
maintenance4.rs
1use 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 pub unsafe fn get_device_buffer_memory_requirements(
23 &self,
24 create_info: &vk::DeviceBufferMemoryRequirementsKHR,
25 out: &mut vk::MemoryRequirements2,
26 ) {
27 (self.fp.get_device_buffer_memory_requirements_khr)(self.handle, create_info, out)
28 }
29
30 pub unsafe fn get_device_image_memory_requirements(
32 &self,
33 create_info: &vk::DeviceImageMemoryRequirementsKHR,
34 out: &mut vk::MemoryRequirements2,
35 ) {
36 (self.fp.get_device_image_memory_requirements_khr)(self.handle, create_info, out)
37 }
38
39 pub unsafe fn get_device_image_sparse_memory_requirements_len(
41 &self,
42 create_info: &vk::DeviceImageMemoryRequirementsKHR,
43 ) -> usize {
44 let mut count = 0;
45 (self.fp.get_device_image_sparse_memory_requirements_khr)(
46 self.handle,
47 create_info,
48 &mut count,
49 std::ptr::null_mut(),
50 );
51 count as usize
52 }
53
54 pub unsafe fn get_device_image_sparse_memory_requirements(
59 &self,
60 create_info: &vk::DeviceImageMemoryRequirementsKHR,
61 out: &mut [vk::SparseImageMemoryRequirements2],
62 ) {
63 let mut count = out.len() as u32;
64 (self.fp.get_device_image_sparse_memory_requirements_khr)(
65 self.handle,
66 create_info,
67 &mut count,
68 out.as_mut_ptr(),
69 );
70 assert_eq!(count as usize, out.len());
71 }
72
73 pub const fn name() -> &'static CStr {
74 vk::KhrMaintenance4Fn::name()
75 }
76
77 pub fn fp(&self) -> &vk::KhrMaintenance4Fn {
78 &self.fp
79 }
80
81 pub fn device(&self) -> vk::Device {
82 self.handle
83 }
84}