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