ash/extensions/khr/
external_memory_fd.rs
1use 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 pub unsafe fn get_memory_fd(&self, create_info: &vk::MemoryGetFdInfoKHR) -> VkResult<i32> {
24 let mut fd = -1;
25 (self.fp.get_memory_fd_khr)(self.handle, create_info, &mut fd).result_with_success(fd)
26 }
27
28 pub unsafe fn get_memory_fd_properties(
30 &self,
31 handle_type: vk::ExternalMemoryHandleTypeFlags,
32 fd: i32,
33 ) -> VkResult<vk::MemoryFdPropertiesKHR> {
34 let mut memory_fd_properties = Default::default();
35 (self.fp.get_memory_fd_properties_khr)(
36 self.handle,
37 handle_type,
38 fd,
39 &mut memory_fd_properties,
40 )
41 .result_with_success(memory_fd_properties)
42 }
43
44 pub const fn name() -> &'static CStr {
45 vk::KhrExternalMemoryFdFn::name()
46 }
47
48 pub fn fp(&self) -> &vk::KhrExternalMemoryFdFn {
49 &self.fp
50 }
51
52 pub fn device(&self) -> vk::Device {
53 self.handle
54 }
55}