• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 use crate::prelude::*;
2 use crate::vk;
3 use crate::{Device, Instance};
4 use std::ffi::CStr;
5 use std::mem;
6 
7 #[derive(Clone)]
8 pub struct ExternalSemaphoreFd {
9     handle: vk::Device,
10     external_semaphore_fd_fn: vk::KhrExternalSemaphoreFdFn,
11 }
12 
13 impl ExternalSemaphoreFd {
new(instance: &Instance, device: &Device) -> Self14     pub fn new(instance: &Instance, device: &Device) -> Self {
15         let external_semaphore_fd_fn = vk::KhrExternalSemaphoreFdFn::load(|name| unsafe {
16             mem::transmute(instance.get_device_proc_addr(device.handle(), name.as_ptr()))
17         });
18         Self {
19             handle: device.handle(),
20             external_semaphore_fd_fn,
21         }
22     }
23 
name() -> &'static CStr24     pub fn name() -> &'static CStr {
25         vk::KhrExternalSemaphoreFdFn::name()
26     }
27 
28     #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkImportSemaphoreFdKHR.html>"]
import_semaphore_fd( &self, import_info: &vk::ImportSemaphoreFdInfoKHR, ) -> VkResult<()>29     pub unsafe fn import_semaphore_fd(
30         &self,
31         import_info: &vk::ImportSemaphoreFdInfoKHR,
32     ) -> VkResult<()> {
33         self.external_semaphore_fd_fn
34             .import_semaphore_fd_khr(self.handle, import_info)
35             .result()
36     }
37 
38     #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkGetSemaphoreFdKHR.html>"]
get_semaphore_fd(&self, get_info: &vk::SemaphoreGetFdInfoKHR) -> VkResult<i32>39     pub unsafe fn get_semaphore_fd(&self, get_info: &vk::SemaphoreGetFdInfoKHR) -> VkResult<i32> {
40         let mut fd = -1;
41 
42         self.external_semaphore_fd_fn
43             .get_semaphore_fd_khr(self.handle, get_info, &mut fd)
44             .result_with_success(fd)
45     }
46 
fp(&self) -> &vk::KhrExternalSemaphoreFdFn47     pub fn fp(&self) -> &vk::KhrExternalSemaphoreFdFn {
48         &self.external_semaphore_fd_fn
49     }
50 
device(&self) -> vk::Device51     pub fn device(&self) -> vk::Device {
52         self.handle
53     }
54 }
55