ash/extensions/khr/
external_memory_fd.rs1use crate::prelude::*;
2use crate::vk;
3use crate::{Device, Instance};
4use std::ffi::CStr;
5use std::mem;
6
7#[derive(Clone)]
8pub struct ExternalMemoryFd {
9 handle: vk::Device,
10 fp: vk::KhrExternalMemoryFdFn,
11}
12
13impl ExternalMemoryFd {
14 pub fn new(instance: &Instance, device: &Device) -> Self {
15 let handle = device.handle();
16 let fp = vk::KhrExternalMemoryFdFn::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_memory_fd(&self, get_fd_info: &vk::MemoryGetFdInfoKHR) -> VkResult<i32> {
25 let mut fd = -1;
26 (self.fp.get_memory_fd_khr)(self.handle, get_fd_info, &mut fd).result_with_success(fd)
27 }
28
29 #[inline]
31 pub unsafe fn get_memory_fd_properties(
32 &self,
33 handle_type: vk::ExternalMemoryHandleTypeFlags,
34 fd: i32,
35 ) -> VkResult<vk::MemoryFdPropertiesKHR> {
36 let mut memory_fd_properties = Default::default();
37 (self.fp.get_memory_fd_properties_khr)(
38 self.handle,
39 handle_type,
40 fd,
41 &mut memory_fd_properties,
42 )
43 .result_with_success(memory_fd_properties)
44 }
45
46 #[inline]
47 pub const fn name() -> &'static CStr {
48 vk::KhrExternalMemoryFdFn::name()
49 }
50
51 #[inline]
52 pub fn fp(&self) -> &vk::KhrExternalMemoryFdFn {
53 &self.fp
54 }
55
56 #[inline]
57 pub fn device(&self) -> vk::Device {
58 self.handle
59 }
60}