• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 use crate::prelude::*;
2 use crate::vk;
3 use crate::{EntryCustom, Instance};
4 use std::ffi::CStr;
5 use std::mem;
6 
7 #[derive(Clone)]
8 pub struct TimelineSemaphore {
9     handle: vk::Instance,
10     timeline_semaphore_fn: vk::KhrTimelineSemaphoreFn,
11 }
12 
13 impl TimelineSemaphore {
new<L>(entry: &EntryCustom<L>, instance: &Instance) -> Self14     pub fn new<L>(entry: &EntryCustom<L>, instance: &Instance) -> Self {
15         let timeline_semaphore_fn = vk::KhrTimelineSemaphoreFn::load(|name| unsafe {
16             mem::transmute(entry.get_instance_proc_addr(instance.handle(), name.as_ptr()))
17         });
18         Self {
19             handle: instance.handle(),
20             timeline_semaphore_fn,
21         }
22     }
23 
name() -> &'static CStr24     pub fn name() -> &'static CStr {
25         vk::KhrTimelineSemaphoreFn::name()
26     }
27 
28     #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkGetSemaphoreCounterValue.html>"]
get_semaphore_counter_value( &self, device: vk::Device, semaphore: vk::Semaphore, ) -> VkResult<u64>29     pub unsafe fn get_semaphore_counter_value(
30         &self,
31         device: vk::Device,
32         semaphore: vk::Semaphore,
33     ) -> VkResult<u64> {
34         let mut value = 0;
35         self.timeline_semaphore_fn
36             .get_semaphore_counter_value_khr(device, semaphore, &mut value)
37             .result_with_success(value)
38     }
39 
40     #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkWaitSemaphores.html>"]
wait_semaphores( &self, device: vk::Device, wait_info: &vk::SemaphoreWaitInfo, timeout: u64, ) -> VkResult<()>41     pub unsafe fn wait_semaphores(
42         &self,
43         device: vk::Device,
44         wait_info: &vk::SemaphoreWaitInfo,
45         timeout: u64,
46     ) -> VkResult<()> {
47         self.timeline_semaphore_fn
48             .wait_semaphores_khr(device, wait_info, timeout)
49             .into()
50     }
51 
52     #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkSignalSemaphore.html>"]
signal_semaphore( &self, device: vk::Device, signal_info: &vk::SemaphoreSignalInfo, ) -> VkResult<()>53     pub unsafe fn signal_semaphore(
54         &self,
55         device: vk::Device,
56         signal_info: &vk::SemaphoreSignalInfo,
57     ) -> VkResult<()> {
58         self.timeline_semaphore_fn
59             .signal_semaphore_khr(device, signal_info)
60             .into()
61     }
62 
fp(&self) -> &vk::KhrTimelineSemaphoreFn63     pub fn fp(&self) -> &vk::KhrTimelineSemaphoreFn {
64         &self.timeline_semaphore_fn
65     }
66 
instance(&self) -> vk::Instance67     pub fn instance(&self) -> vk::Instance {
68         self.handle
69     }
70 }
71