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