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