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 Synchronization2 {
9     fp: vk::KhrSynchronization2Fn,
10 }
11 
12 impl Synchronization2 {
new(instance: &Instance, device: &Device) -> Self13     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]
cmd_pipeline_barrier2( &self, command_buffer: vk::CommandBuffer, dependency_info: &vk::DependencyInfoKHR, )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]
cmd_reset_event2( &self, command_buffer: vk::CommandBuffer, event: vk::Event, stage_mask: vk::PipelineStageFlags2KHR, )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]
cmd_set_event2( &self, command_buffer: vk::CommandBuffer, event: vk::Event, dependency_info: &vk::DependencyInfoKHR, )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]
cmd_wait_events2( &self, command_buffer: vk::CommandBuffer, events: &[vk::Event], dependency_infos: &[vk::DependencyInfoKHR], )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]
cmd_write_timestamp2( &self, command_buffer: vk::CommandBuffer, stage: vk::PipelineStageFlags2KHR, query_pool: vk::QueryPool, query: u32, )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]
queue_submit2( &self, queue: vk::Queue, submits: &[vk::SubmitInfo2KHR], fence: vk::Fence, ) -> VkResult<()>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]
name() -> &'static CStr93     pub const fn name() -> &'static CStr {
94         vk::KhrSynchronization2Fn::name()
95     }
96 
97     #[inline]
fp(&self) -> &vk::KhrSynchronization2Fn98     pub fn fp(&self) -> &vk::KhrSynchronization2Fn {
99         &self.fp
100     }
101 }
102