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