ash/extensions/khr/
present_wait.rs

1use crate::prelude::*;
2use crate::vk;
3use crate::{Device, Instance};
4use std::ffi::CStr;
5use std::mem;
6
7#[derive(Clone)]
8pub struct PresentWait {
9    handle: vk::Device,
10    fp: vk::KhrPresentWaitFn,
11}
12
13impl PresentWait {
14    pub fn new(instance: &Instance, device: &Device) -> Self {
15        let handle = device.handle();
16        let fp = vk::KhrPresentWaitFn::load(|name| unsafe {
17            mem::transmute(instance.get_device_proc_addr(handle, name.as_ptr()))
18        });
19        Self { handle, fp }
20    }
21
22    /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkWaitForPresentKHR.html>
23    #[inline]
24    pub unsafe fn wait_for_present(
25        &self,
26        swapchain: vk::SwapchainKHR,
27        present_id: u64,
28        timeout: u64,
29    ) -> VkResult<()> {
30        (self.fp.wait_for_present_khr)(self.handle, swapchain, present_id, timeout).result()
31    }
32
33    #[inline]
34    pub const fn name() -> &'static CStr {
35        vk::KhrPresentWaitFn::name()
36    }
37
38    #[inline]
39    pub fn fp(&self) -> &vk::KhrPresentWaitFn {
40        &self.fp
41    }
42
43    #[inline]
44    pub fn device(&self) -> vk::Device {
45        self.handle
46    }
47}