ash/extensions/khr/
synchronization2.rs1use 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 #[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 #[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 #[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 #[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 #[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 #[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}