ash/extensions/khr/
synchronization2.rs

1use crate::prelude::*;
2use crate::vk;
3use crate::{Device, Instance};
4use std::ffi::CStr;
5use std::mem;
6
7#[derive(Clone)]
8pub struct Synchronization2 {
9    fp: vk::KhrSynchronization2Fn,
10}
11
12impl Synchronization2 {
13    pub fn new(instance: &Instance, device: &Device) -> Self {
14        let fp = vk::KhrSynchronization2Fn::load(|name| unsafe {
15            mem::transmute(instance.get_device_proc_addr(device.handle(), name.as_ptr()))
16        });
17        Self { fp }
18    }
19
20    /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdPipelineBarrier2KHR.html>
21    #[inline]
22    pub unsafe fn cmd_pipeline_barrier2(
23        &self,
24        command_buffer: vk::CommandBuffer,
25        dependency_info: &vk::DependencyInfoKHR,
26    ) {
27        (self.fp.cmd_pipeline_barrier2_khr)(command_buffer, dependency_info)
28    }
29
30    /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdResetEvent2KHR.html>
31    #[inline]
32    pub unsafe fn cmd_reset_event2(
33        &self,
34        command_buffer: vk::CommandBuffer,
35        event: vk::Event,
36        stage_mask: vk::PipelineStageFlags2KHR,
37    ) {
38        (self.fp.cmd_reset_event2_khr)(command_buffer, event, stage_mask)
39    }
40
41    /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetEvent2KHR.html>
42    #[inline]
43    pub unsafe fn cmd_set_event2(
44        &self,
45        command_buffer: vk::CommandBuffer,
46        event: vk::Event,
47        dependency_info: &vk::DependencyInfoKHR,
48    ) {
49        (self.fp.cmd_set_event2_khr)(command_buffer, event, dependency_info)
50    }
51
52    /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdWaitEvents2KHR.html>
53    #[inline]
54    pub unsafe fn cmd_wait_events2(
55        &self,
56        command_buffer: vk::CommandBuffer,
57        events: &[vk::Event],
58        dependency_infos: &[vk::DependencyInfoKHR],
59    ) {
60        assert_eq!(events.len(), dependency_infos.len());
61        (self.fp.cmd_wait_events2_khr)(
62            command_buffer,
63            events.len() as u32,
64            events.as_ptr(),
65            dependency_infos.as_ptr(),
66        )
67    }
68
69    /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdWriteTimestamp2KHR.html>
70    #[inline]
71    pub unsafe fn cmd_write_timestamp2(
72        &self,
73        command_buffer: vk::CommandBuffer,
74        stage: vk::PipelineStageFlags2KHR,
75        query_pool: vk::QueryPool,
76        query: u32,
77    ) {
78        (self.fp.cmd_write_timestamp2_khr)(command_buffer, stage, query_pool, query)
79    }
80
81    /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkQueueSubmit2KHR.html>
82    #[inline]
83    pub unsafe fn queue_submit2(
84        &self,
85        queue: vk::Queue,
86        submits: &[vk::SubmitInfo2KHR],
87        fence: vk::Fence,
88    ) -> VkResult<()> {
89        (self.fp.queue_submit2_khr)(queue, submits.len() as u32, submits.as_ptr(), fence).result()
90    }
91
92    #[inline]
93    pub const fn name() -> &'static CStr {
94        vk::KhrSynchronization2Fn::name()
95    }
96
97    #[inline]
98    pub fn fp(&self) -> &vk::KhrSynchronization2Fn {
99        &self.fp
100    }
101}