ash/extensions/khr/
get_memory_requirements2.rs1use crate::vk;
2use crate::{Device, Instance};
3use std::ffi::CStr;
4use std::mem;
5use std::ptr;
6
7#[derive(Clone)]
8pub struct GetMemoryRequirements2 {
9 handle: vk::Device,
10 fp: vk::KhrGetMemoryRequirements2Fn,
11}
12
13impl GetMemoryRequirements2 {
14 pub fn new(instance: &Instance, device: &Device) -> Self {
15 let handle = device.handle();
16 let fp = vk::KhrGetMemoryRequirements2Fn::load(|name| unsafe {
17 mem::transmute(instance.get_device_proc_addr(handle, name.as_ptr()))
18 });
19 Self { handle, fp }
20 }
21
22 #[inline]
24 pub unsafe fn get_buffer_memory_requirements2(
25 &self,
26 info: &vk::BufferMemoryRequirementsInfo2KHR,
27 memory_requirements: &mut vk::MemoryRequirements2KHR,
28 ) {
29 (self.fp.get_buffer_memory_requirements2_khr)(self.handle, info, memory_requirements);
30 }
31
32 #[inline]
34 pub unsafe fn get_image_memory_requirements2(
35 &self,
36 info: &vk::ImageMemoryRequirementsInfo2KHR,
37 memory_requirements: &mut vk::MemoryRequirements2KHR,
38 ) {
39 (self.fp.get_image_memory_requirements2_khr)(self.handle, info, memory_requirements);
40 }
41
42 #[inline]
44 pub unsafe fn get_image_sparse_memory_requirements2_len(
45 &self,
46 info: &vk::ImageSparseMemoryRequirementsInfo2KHR,
47 ) -> usize {
48 let mut count = 0;
49 (self.fp.get_image_sparse_memory_requirements2_khr)(
50 self.handle,
51 info,
52 &mut count,
53 ptr::null_mut(),
54 );
55 count as usize
56 }
57
58 #[inline]
63 pub unsafe fn get_image_sparse_memory_requirements2(
64 &self,
65 info: &vk::ImageSparseMemoryRequirementsInfo2KHR,
66 out: &mut [vk::SparseImageMemoryRequirements2KHR],
67 ) {
68 let mut count = out.len() as u32;
69 (self.fp.get_image_sparse_memory_requirements2_khr)(
70 self.handle,
71 info,
72 &mut count,
73 out.as_mut_ptr(),
74 );
75 assert_eq!(count as usize, out.len());
76 }
77
78 #[inline]
79 pub const fn name() -> &'static CStr {
80 vk::KhrGetMemoryRequirements2Fn::name()
81 }
82
83 #[inline]
84 pub fn fp(&self) -> &vk::KhrGetMemoryRequirements2Fn {
85 &self.fp
86 }
87
88 #[inline]
89 pub fn device(&self) -> vk::Device {
90 self.handle
91 }
92}