• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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     handle: vk::Device,
10     synchronization2_fn: vk::KhrSynchronization2Fn,
11 }
12 
13 impl Synchronization2 {
new(instance: &Instance, device: &Device) -> Self14     pub fn new(instance: &Instance, device: &Device) -> Self {
15         let synchronization2_fn = vk::KhrSynchronization2Fn::load(|name| unsafe {
16             mem::transmute(instance.get_device_proc_addr(device.handle(), name.as_ptr()))
17         });
18         Self {
19             handle: device.handle(),
20             synchronization2_fn,
21         }
22     }
23 
name() -> &'static CStr24     pub fn name() -> &'static CStr {
25         vk::KhrSynchronization2Fn::name()
26     }
27 
fp(&self) -> &vk::KhrSynchronization2Fn28     pub fn fp(&self) -> &vk::KhrSynchronization2Fn {
29         &self.synchronization2_fn
30     }
31 
device(&self) -> vk::Device32     pub fn device(&self) -> vk::Device {
33         self.handle
34     }
35 
36     #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdPipelineBarrier2KHR.html>"]
cmd_pipeline_barrier2( &self, command_buffer: vk::CommandBuffer, dependency_info: &vk::DependencyInfoKHR, )37     pub unsafe fn cmd_pipeline_barrier2(
38         &self,
39         command_buffer: vk::CommandBuffer,
40         dependency_info: &vk::DependencyInfoKHR,
41     ) {
42         self.synchronization2_fn
43             .cmd_pipeline_barrier2_khr(command_buffer, dependency_info)
44     }
45 
46     #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdResetEvent2KHR.html>"]
cmd_reset_event2( &self, command_buffer: vk::CommandBuffer, event: vk::Event, stage_mask: vk::PipelineStageFlags2KHR, )47     pub unsafe fn cmd_reset_event2(
48         &self,
49         command_buffer: vk::CommandBuffer,
50         event: vk::Event,
51         stage_mask: vk::PipelineStageFlags2KHR,
52     ) {
53         self.synchronization2_fn
54             .cmd_reset_event2_khr(command_buffer, event, stage_mask)
55     }
56 
57     #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdSetEvent2KHR.html>"]
cmd_set_event2( &self, command_buffer: vk::CommandBuffer, event: vk::Event, dependency_info: &vk::DependencyInfoKHR, )58     pub unsafe fn cmd_set_event2(
59         &self,
60         command_buffer: vk::CommandBuffer,
61         event: vk::Event,
62         dependency_info: &vk::DependencyInfoKHR,
63     ) {
64         self.synchronization2_fn
65             .cmd_set_event2_khr(command_buffer, event, dependency_info)
66     }
67 
68     #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdWaitEvents2KHR.html>"]
cmd_wait_events2( &self, command_buffer: vk::CommandBuffer, events: &[vk::Event], dependency_infos: &[vk::DependencyInfoKHR], )69     pub unsafe fn cmd_wait_events2(
70         &self,
71         command_buffer: vk::CommandBuffer,
72         events: &[vk::Event],
73         dependency_infos: &[vk::DependencyInfoKHR],
74     ) {
75         assert_eq!(events.len(), dependency_infos.len());
76         self.synchronization2_fn.cmd_wait_events2_khr(
77             command_buffer,
78             events.len() as u32,
79             events.as_ptr(),
80             dependency_infos.as_ptr(),
81         )
82     }
83 
84     #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdWriteTimestamp2KHR.html>"]
cmd_write_timestamp2( &self, command_buffer: vk::CommandBuffer, stage: vk::PipelineStageFlags2KHR, query_pool: vk::QueryPool, query: u32, )85     pub unsafe fn cmd_write_timestamp2(
86         &self,
87         command_buffer: vk::CommandBuffer,
88         stage: vk::PipelineStageFlags2KHR,
89         query_pool: vk::QueryPool,
90         query: u32,
91     ) {
92         self.synchronization2_fn
93             .cmd_write_timestamp2_khr(command_buffer, stage, query_pool, query)
94     }
95 
96     #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkQueueSubmit2KHR.html>"]
queue_submit2( &self, queue: vk::Queue, submits: &[vk::SubmitInfo2KHR], fence: vk::Fence, ) -> VkResult<()>97     pub unsafe fn queue_submit2(
98         &self,
99         queue: vk::Queue,
100         submits: &[vk::SubmitInfo2KHR],
101         fence: vk::Fence,
102     ) -> VkResult<()> {
103         self.synchronization2_fn
104             .queue_submit2_khr(queue, submits.len() as u32, submits.as_ptr(), fence)
105             .result()
106     }
107 }
108