ash/extensions/khr/
external_fence_fd.rs1use crate::prelude::*;
2use crate::vk;
3use crate::{Device, Instance};
4use std::ffi::CStr;
5use std::mem;
6
7#[derive(Clone)]
8pub struct ExternalFenceFd {
9 handle: vk::Device,
10 fp: vk::KhrExternalFenceFdFn,
11}
12
13impl ExternalFenceFd {
14 pub fn new(instance: &Instance, device: &Device) -> Self {
15 let handle = device.handle();
16 let fp = vk::KhrExternalFenceFdFn::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 import_fence_fd(&self, import_info: &vk::ImportFenceFdInfoKHR) -> VkResult<()> {
25 (self.fp.import_fence_fd_khr)(self.handle, import_info).result()
26 }
27
28 #[inline]
30 pub unsafe fn get_fence_fd(&self, get_info: &vk::FenceGetFdInfoKHR) -> VkResult<i32> {
31 let mut fd = -1;
32 (self.fp.get_fence_fd_khr)(self.handle, get_info, &mut fd).result_with_success(fd)
33 }
34
35 #[inline]
36 pub const fn name() -> &'static CStr {
37 vk::KhrExternalFenceFdFn::name()
38 }
39
40 #[inline]
41 pub fn fp(&self) -> &vk::KhrExternalFenceFdFn {
42 &self.fp
43 }
44
45 #[inline]
46 pub fn device(&self) -> vk::Device {
47 self.handle
48 }
49}