ash/extensions/khr/
get_memory_requirements2.rs
1use 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 pub unsafe fn get_buffer_memory_requirements2(
24 &self,
25 info: &vk::BufferMemoryRequirementsInfo2KHR,
26 memory_requirements: &mut vk::MemoryRequirements2KHR,
27 ) {
28 (self.fp.get_buffer_memory_requirements2_khr)(self.handle, info, memory_requirements);
29 }
30
31 pub unsafe fn get_image_memory_requirements2(
33 &self,
34 info: &vk::ImageMemoryRequirementsInfo2KHR,
35 memory_requirements: &mut vk::MemoryRequirements2KHR,
36 ) {
37 (self.fp.get_image_memory_requirements2_khr)(self.handle, info, memory_requirements);
38 }
39
40 pub unsafe fn get_image_sparse_memory_requirements2_len(
42 &self,
43 info: &vk::ImageSparseMemoryRequirementsInfo2KHR,
44 ) -> usize {
45 let mut count = 0;
46 (self.fp.get_image_sparse_memory_requirements2_khr)(
47 self.handle,
48 info,
49 &mut count,
50 ptr::null_mut(),
51 );
52 count as usize
53 }
54
55 pub unsafe fn get_image_sparse_memory_requirements2(
60 &self,
61 info: &vk::ImageSparseMemoryRequirementsInfo2KHR,
62 out: &mut [vk::SparseImageMemoryRequirements2KHR],
63 ) {
64 let mut count = out.len() as u32;
65 (self.fp.get_image_sparse_memory_requirements2_khr)(
66 self.handle,
67 info,
68 &mut count,
69 out.as_mut_ptr(),
70 );
71 assert_eq!(count as usize, out.len());
72 }
73
74 pub const fn name() -> &'static CStr {
75 vk::KhrGetMemoryRequirements2Fn::name()
76 }
77
78 pub fn fp(&self) -> &vk::KhrGetMemoryRequirements2Fn {
79 &self.fp
80 }
81
82 pub fn device(&self) -> vk::Device {
83 self.handle
84 }
85}