1 use crate::vk; 2 use crate::{Device, Instance}; 3 use std::ffi::CStr; 4 use std::mem; 5 use std::ptr; 6 7 #[derive(Clone)] 8 pub struct GetMemoryRequirements2 { 9 handle: vk::Device, 10 get_memory_requirements2_fn: vk::KhrGetMemoryRequirements2Fn, 11 } 12 13 impl GetMemoryRequirements2 { new(instance: &Instance, device: &Device) -> Self14 pub fn new(instance: &Instance, device: &Device) -> Self { 15 let get_memory_requirements2_fn = vk::KhrGetMemoryRequirements2Fn::load(|name| unsafe { 16 mem::transmute(instance.get_device_proc_addr(device.handle(), name.as_ptr())) 17 }); 18 Self { 19 handle: device.handle(), 20 get_memory_requirements2_fn, 21 } 22 } 23 name() -> &'static CStr24 pub fn name() -> &'static CStr { 25 vk::KhrGetMemoryRequirements2Fn::name() 26 } 27 28 #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkGetBufferMemoryRequirements2KHR.html>"] get_buffer_memory_requirements2( &self, info: &vk::BufferMemoryRequirementsInfo2KHR, memory_requirements: &mut vk::MemoryRequirements2KHR, )29 pub unsafe fn get_buffer_memory_requirements2( 30 &self, 31 info: &vk::BufferMemoryRequirementsInfo2KHR, 32 memory_requirements: &mut vk::MemoryRequirements2KHR, 33 ) { 34 self.get_memory_requirements2_fn 35 .get_buffer_memory_requirements2_khr(self.handle, info, memory_requirements); 36 } 37 38 #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkGetImageMemoryRequirements2KHR.html>"] get_image_memory_requirements2( &self, info: &vk::ImageMemoryRequirementsInfo2KHR, memory_requirements: &mut vk::MemoryRequirements2KHR, )39 pub unsafe fn get_image_memory_requirements2( 40 &self, 41 info: &vk::ImageMemoryRequirementsInfo2KHR, 42 memory_requirements: &mut vk::MemoryRequirements2KHR, 43 ) { 44 self.get_memory_requirements2_fn 45 .get_image_memory_requirements2_khr(self.handle, info, memory_requirements); 46 } 47 get_image_sparse_memory_requirements2_len( &self, info: &vk::ImageSparseMemoryRequirementsInfo2KHR, ) -> usize48 pub unsafe fn get_image_sparse_memory_requirements2_len( 49 &self, 50 info: &vk::ImageSparseMemoryRequirementsInfo2KHR, 51 ) -> usize { 52 let mut count = 0; 53 self.get_memory_requirements2_fn 54 .get_image_sparse_memory_requirements2_khr( 55 self.handle, 56 info, 57 &mut count, 58 ptr::null_mut(), 59 ); 60 count as usize 61 } 62 63 #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkGetImageSparseMemoryRequirements2KHR.html>"] get_image_sparse_memory_requirements2( &self, info: &vk::ImageSparseMemoryRequirementsInfo2KHR, sparse_memory_requirements: &mut [vk::SparseImageMemoryRequirements2KHR], )64 pub unsafe fn get_image_sparse_memory_requirements2( 65 &self, 66 info: &vk::ImageSparseMemoryRequirementsInfo2KHR, 67 sparse_memory_requirements: &mut [vk::SparseImageMemoryRequirements2KHR], 68 ) { 69 let mut count = sparse_memory_requirements.len() as u32; 70 self.get_memory_requirements2_fn 71 .get_image_sparse_memory_requirements2_khr( 72 self.handle, 73 info, 74 &mut count, 75 sparse_memory_requirements.as_mut_ptr(), 76 ); 77 } 78 fp(&self) -> &vk::KhrGetMemoryRequirements2Fn79 pub fn fp(&self) -> &vk::KhrGetMemoryRequirements2Fn { 80 &self.get_memory_requirements2_fn 81 } 82 device(&self) -> vk::Device83 pub fn device(&self) -> vk::Device { 84 self.handle 85 } 86 } 87