ash/extensions/khr/
external_semaphore_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 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 pub unsafe fn import_semaphore_fd(
24 &self,
25 import_info: &vk::ImportSemaphoreFdInfoKHR,
26 ) -> VkResult<()> {
27 (self.fp.import_semaphore_fd_khr)(self.handle, import_info).result()
28 }
29
30 pub unsafe fn get_semaphore_fd(&self, get_info: &vk::SemaphoreGetFdInfoKHR) -> VkResult<i32> {
32 let mut fd = -1;
33 (self.fp.get_semaphore_fd_khr)(self.handle, get_info, &mut fd).result_with_success(fd)
34 }
35
36 pub const fn name() -> &'static CStr {
37 vk::KhrExternalSemaphoreFdFn::name()
38 }
39
40 pub fn fp(&self) -> &vk::KhrExternalSemaphoreFdFn {
41 &self.fp
42 }
43
44 pub fn device(&self) -> vk::Device {
45 self.handle
46 }
47}