Add VK_KHR_timeline_semaphore
extension support (#276)
* TimelineSemaphore struct added presenting `VK_KHR_timeline_semaphore` extension. * Unused import removed. * Empty newline added. * TimelineSemaphore extension object now provides functions for work with timeline semaphores. * Function pointers removed from TimelineSemaphore as no longer needed. *_khr postfix removed from TimelineSemaphore functions to follow the same code style as in other extensions. * Tiny code reformatting to fit Rustfmt requirements. * Another attempt to fit Rustfmt requirements.
This commit is contained in:
parent
6bdc403330
commit
e84c1c4e2d
2 changed files with 89 additions and 0 deletions
|
@ -6,6 +6,7 @@ pub use self::push_descriptor::PushDescriptor;
|
|||
pub use self::ray_tracing::RayTracing;
|
||||
pub use self::surface::Surface;
|
||||
pub use self::swapchain::Swapchain;
|
||||
pub use self::timeline_semaphore::TimelineSemaphore;
|
||||
pub use self::wayland_surface::WaylandSurface;
|
||||
pub use self::win32_surface::Win32Surface;
|
||||
pub use self::xcb_surface::XcbSurface;
|
||||
|
@ -19,6 +20,7 @@ mod push_descriptor;
|
|||
mod ray_tracing;
|
||||
mod surface;
|
||||
mod swapchain;
|
||||
mod timeline_semaphore;
|
||||
mod wayland_surface;
|
||||
mod win32_surface;
|
||||
mod xcb_surface;
|
||||
|
|
87
ash/src/extensions/khr/timeline_semaphore.rs
Normal file
87
ash/src/extensions/khr/timeline_semaphore.rs
Normal file
|
@ -0,0 +1,87 @@
|
|||
#![allow(dead_code)]
|
||||
use crate::prelude::*;
|
||||
use crate::version::{EntryV1_0, InstanceV1_0};
|
||||
use crate::vk;
|
||||
use std::ffi::CStr;
|
||||
use std::mem;
|
||||
|
||||
#[derive(Clone)]
|
||||
pub struct TimelineSemaphore {
|
||||
handle: vk::Instance,
|
||||
timeline_semaphore_fn: vk::KhrTimelineSemaphoreFn,
|
||||
}
|
||||
|
||||
impl TimelineSemaphore {
|
||||
pub fn new<E: EntryV1_0, I: InstanceV1_0>(entry: &E, instance: &I) -> TimelineSemaphore {
|
||||
let timeline_semaphore_fn = vk::KhrTimelineSemaphoreFn::load(|name| unsafe {
|
||||
mem::transmute(entry.get_instance_proc_addr(instance.handle(), name.as_ptr()))
|
||||
});
|
||||
|
||||
TimelineSemaphore {
|
||||
handle: instance.handle(),
|
||||
timeline_semaphore_fn,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn name() -> &'static CStr {
|
||||
vk::KhrTimelineSemaphoreFn::name()
|
||||
}
|
||||
|
||||
#[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkGetSemaphoreCounterValueKHR>"]
|
||||
pub unsafe fn get_semaphore_counter_value(
|
||||
&self,
|
||||
device: vk::Device,
|
||||
semaphore: vk::Semaphore,
|
||||
) -> VkResult<u64> {
|
||||
let mut value = 0;
|
||||
let err_code = self
|
||||
.timeline_semaphore_fn
|
||||
.get_semaphore_counter_value_khr(device, semaphore, &mut value);
|
||||
|
||||
match err_code {
|
||||
vk::Result::SUCCESS => Ok(value),
|
||||
_ => Err(err_code),
|
||||
}
|
||||
}
|
||||
|
||||
#[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkWaitSemaphoresKHR>"]
|
||||
pub unsafe fn wait_semaphores(
|
||||
&self,
|
||||
device: vk::Device,
|
||||
wait_info: &vk::SemaphoreWaitInfo,
|
||||
timeout: u64,
|
||||
) -> VkResult<()> {
|
||||
let err_code = self
|
||||
.timeline_semaphore_fn
|
||||
.wait_semaphores_khr(device, wait_info, timeout);
|
||||
|
||||
match err_code {
|
||||
vk::Result::SUCCESS => Ok(()),
|
||||
_ => Err(err_code),
|
||||
}
|
||||
}
|
||||
|
||||
#[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkSignalSemaphoreKHR>"]
|
||||
pub unsafe fn signal_semaphore(
|
||||
&self,
|
||||
device: vk::Device,
|
||||
signal_info: &vk::SemaphoreSignalInfo,
|
||||
) -> VkResult<()> {
|
||||
let err_code = self
|
||||
.timeline_semaphore_fn
|
||||
.signal_semaphore_khr(device, signal_info);
|
||||
|
||||
match err_code {
|
||||
vk::Result::SUCCESS => Ok(()),
|
||||
_ => Err(err_code),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn fp(&self) -> &vk::KhrTimelineSemaphoreFn {
|
||||
&self.timeline_semaphore_fn
|
||||
}
|
||||
|
||||
pub fn instance(&self) -> vk::Instance {
|
||||
self.handle
|
||||
}
|
||||
}
|
Loading…
Add table
Reference in a new issue