ash/extensions/khr/
external_fence_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 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 pub unsafe fn import_fence_fd(&self, import_info: &vk::ImportFenceFdInfoKHR) -> VkResult<()> {
24 (self.fp.import_fence_fd_khr)(self.handle, import_info).result()
25 }
26
27 pub unsafe fn get_fence_fd(&self, get_info: &vk::FenceGetFdInfoKHR) -> VkResult<i32> {
29 let mut fd = -1;
30 (self.fp.get_fence_fd_khr)(self.handle, get_info, &mut fd).result_with_success(fd)
31 }
32
33 pub const fn name() -> &'static CStr {
34 vk::KhrExternalFenceFdFn::name()
35 }
36
37 pub fn fp(&self) -> &vk::KhrExternalFenceFdFn {
38 &self.fp
39 }
40
41 pub fn device(&self) -> vk::Device {
42 self.handle
43 }
44}