From: Josh Simmons Date: Tue, 4 Jun 2024 20:41:17 +0000 (+0200) Subject: vulkan-sys: Add VK_EXT_debug_utils X-Git-Url: https://git.nega.tv//gitweb.cgi?a=commitdiff_plain;h=21451412cc6af595fb7592a032f2c30b2b7231bb;p=josh%2Fnarcissus vulkan-sys: Add VK_EXT_debug_utils --- diff --git a/external/vulkan-sys/src/enums.rs b/external/vulkan-sys/src/enums.rs index 9abeff3..a4ff4ce 100644 --- a/external/vulkan-sys/src/enums.rs +++ b/external/vulkan-sys/src/enums.rs @@ -1378,8 +1378,9 @@ pub enum StructureType { } #[repr(i32)] -#[derive(Copy, Clone, PartialEq, Eq)] +#[derive(Copy, Clone, PartialEq, Eq, Default)] pub enum ObjectType { + #[default] Unknown = 0, Instance = 1, PhysicalDevice = 2, diff --git a/external/vulkan-sys/src/flags.rs b/external/vulkan-sys/src/flags.rs index 4c8be05..b39c7d6 100644 --- a/external/vulkan-sys/src/flags.rs +++ b/external/vulkan-sys/src/flags.rs @@ -897,6 +897,32 @@ impl PresentGravityFlagsEXT { pub const CENTERED_EXT: Self = Self(0x00000004); } +#[repr(C)] +pub struct DebugUtilsMessengerCreateFlagsExt(u32); + +#[repr(C)] +pub struct DebugUtilsMessageSeverityFlagsExt(u32); + +impl DebugUtilsMessageSeverityFlagsExt { + pub const VERBOSE: Self = Self(0x00000001); + pub const INFO: Self = Self(0x00000010); + pub const WARNING: Self = Self(0x00000100); + pub const ERROR: Self = Self(0x00001000); +} + +#[repr(C)] +pub struct DebugUtilsMessageTypeFlagsExt(u32); + +impl DebugUtilsMessageTypeFlagsExt { + pub const GENERAL: Self = Self(0x00000001); + pub const VALIDATION: Self = Self(0x00000002); + pub const PERFORMANCE: Self = Self(0x00000004); + pub const DEVICE_ADDRESS_BINDING: Self = Self(0x00000008); +} + +#[repr(C)] +pub struct DebugUtilsMessengerCallbackDataFlagsExt(u32); + macro_rules! impl_flags_u32 { ($($t:ty),+) => { $( diff --git a/external/vulkan-sys/src/functions.rs b/external/vulkan-sys/src/functions.rs index 65beece..131009f 100644 --- a/external/vulkan-sys/src/functions.rs +++ b/external/vulkan-sys/src/functions.rs @@ -948,3 +948,42 @@ pub type FnGetPhysicalDeviceSurfaceFormats2KHR = extern "system" fn( surface_format_count: &mut u32, surface_formats: *mut SurfaceFormat2KHR, ) -> Result; + +pub type FnCmdBeginDebugUtilsLabelExt = + extern "system" fn(command_buffer: CommandBuffer, label_info: &DebugUtilsLabelExt); +pub type FnCmdEndDebugUtilsLabelExt = extern "system" fn(command_buffer: CommandBuffer); +pub type FnCmdInsertDebugUtilsLabelExt = + extern "system" fn(command_buffer: CommandBuffer, label_info: &DebugUtilsLabelExt); +pub type FnCreateDebugUtilsMessengerExt = extern "system" fn( + instance: Instance, + create_info: &DebugUtilsMessengerCreateInfoExt, + allocator: Option<&AllocationCallbacks>, + messenger: *mut DebugUtilsMessengerExt, +); +pub type FnDestroyDebugUtilsMessengerExt = extern "system" fn( + instance: Instance, + messenger: DebugUtilsMessengerExt, + allocator: Option<&AllocationCallbacks>, +); +pub type FnQueueBeginDebugUtilsLabelExt = + extern "system" fn(queue: Queue, label_info: &DebugUtilsLabelExt); +pub type FnQueueEndDebugUtilsLabelExt = extern "system" fn(queue: Queue); +pub type FnQueueInsertDebugUtilsLabelExt = + extern "system" fn(queue: Queue, label_info: &DebugUtilsLabelExt); +pub type FnSetDebugUtilsObjectNameExt = + extern "system" fn(device: Device, name_info: &DebugUtilsObjectNameInfoExt); +pub type FnSetDebugUtilsObjectTagExt = + extern "system" fn(device: Device, tag_info: &DebugUtilsObjectTagInfoExt); +pub type FnSubmitDebugUtilsMessageExt = extern "system" fn( + instance: Instance, + message_severity: DebugUtilsMessageSeverityFlagsExt, + message_types: DebugUtilsMessageTypeFlagsExt, + callback_data: &DebugUtilsMessengerCallbackDataExt, +); + +pub type FnDebugUtilsMessengerCallbackExt = extern "system" fn( + message_severity: DebugUtilsMessageSeverityFlagsExt, + message_types: DebugUtilsMessageTypeFlagsExt, + callback_data: &DebugUtilsMessengerCallbackDataExt, + user_data: *mut c_void, +) -> Bool32; diff --git a/external/vulkan-sys/src/handles.rs b/external/vulkan-sys/src/handles.rs index 85aad43..5befc95 100644 --- a/external/vulkan-sys/src/handles.rs +++ b/external/vulkan-sys/src/handles.rs @@ -118,6 +118,10 @@ pub struct SurfaceKHR(u64); #[derive(Copy, Clone, PartialEq, Eq, Default, Hash, Debug)] pub struct SwapchainKHR(u64); +#[repr(C)] +#[derive(Copy, Clone, PartialEq, Eq, Default, Hash, Debug)] +pub struct DebugUtilsMessengerExt(u64); + // impl Handle { // #[inline] // pub const fn null() -> Self { @@ -165,6 +169,7 @@ pub struct SwapchainKHR(u64); // DisplayModeKHR // SurfaceKHR // SwapchainKHR +// DebugUtilsMessengerExt impl Instance { #[inline] @@ -796,3 +801,24 @@ impl SwapchainKHR { Self(value) } } +impl DebugUtilsMessengerExt { + #[inline] + pub const fn null() -> Self { + Self(0) + } + + #[inline] + pub const fn is_null(self) -> bool { + self.0 == 0 + } + + #[inline] + pub fn as_raw(self) -> u64 { + self.0 + } + + #[inline] + pub fn from_raw(value: u64) -> Self { + Self(value) + } +} diff --git a/external/vulkan-sys/src/lib.rs b/external/vulkan-sys/src/lib.rs index efc805d..13669d8 100644 --- a/external/vulkan-sys/src/lib.rs +++ b/external/vulkan-sys/src/lib.rs @@ -2697,3 +2697,175 @@ impl SwapchainMaintenance1ExtFunctions { (self.release_swapchain_images_ext)(device, release_info) } } + +pub struct DebugUtilsFunctions { + cmd_begin_debug_utils_label_ext: FnCmdBeginDebugUtilsLabelExt, + cmd_end_debug_utils_label_ext: FnCmdEndDebugUtilsLabelExt, + cmd_insert_debug_utils_label_ext: FnCmdInsertDebugUtilsLabelExt, + create_debug_utils_messenger_ext: FnCreateDebugUtilsMessengerExt, + destroy_debug_utils_messenger_ext: FnDestroyDebugUtilsMessengerExt, + queue_begin_debug_utils_label_ext: FnQueueBeginDebugUtilsLabelExt, + queue_end_debug_utils_label_ext: FnQueueEndDebugUtilsLabelExt, + queue_insert_debug_utils_label_ext: FnQueueInsertDebugUtilsLabelExt, + set_debug_utils_object_name_ext: FnSetDebugUtilsObjectNameExt, + set_debug_utils_object_tag_ext: FnSetDebugUtilsObjectTagExt, + submit_debug_utils_message_ext: FnSubmitDebugUtilsMessageExt, +} + +impl DebugUtilsFunctions { + pub fn new( + global_functions: &GlobalFunctions, + instance_functions: &InstanceFunctions, + instance: Instance, + device: Device, + ) -> Self { + unsafe { + let load_instance = |name: &CStr| { + global_functions + .get_instance_proc_addr(instance, name) + .unwrap_or_else( + #[cold] + || { + panic!( + "failed to load instance function {}", + name.to_string_lossy() + ) + }, + ) + }; + let load_device = |name: &CStr| { + instance_functions + .get_device_proc_addr(device, name) + .unwrap_or_else( + #[cold] + || panic!("failed to load device function {}", name.to_string_lossy()), + ) + }; + Self { + cmd_begin_debug_utils_label_ext: transmute::<_, _>(load_device( + c"vkCmdBeginDebugUtilsLabelEXT", + )), + cmd_end_debug_utils_label_ext: transmute::<_, _>(load_device( + c"vkCmdEndDebugUtilsLabelEXT", + )), + cmd_insert_debug_utils_label_ext: transmute::<_, _>(load_device( + c"vkCmdInsertDebugUtilsLabelEXT", + )), + create_debug_utils_messenger_ext: transmute::<_, _>(load_instance( + c"vkCreateDebugUtilsMessengerEXT", + )), + destroy_debug_utils_messenger_ext: transmute::<_, _>(load_instance( + c"vkDestroyDebugUtilsMessengerEXT", + )), + queue_begin_debug_utils_label_ext: transmute::<_, _>(load_device( + c"vkQueueBeginDebugUtilsLabelEXT", + )), + queue_end_debug_utils_label_ext: transmute::<_, _>(load_device( + c"vkQueueEndDebugUtilsLabelEXT", + )), + queue_insert_debug_utils_label_ext: transmute::<_, _>(load_device( + c"vkQueueInsertDebugUtilsLabelEXT", + )), + set_debug_utils_object_name_ext: transmute::<_, _>(load_device( + c"vkSetDebugUtilsObjectNameEXT", + )), + set_debug_utils_object_tag_ext: transmute::<_, _>(load_device( + c"vkSetDebugUtilsObjectTagEXT", + )), + submit_debug_utils_message_ext: transmute::<_, _>(load_instance( + c"vkSubmitDebugUtilsMessageEXT", + )), + } + } + } + + pub unsafe fn cmd_begin_debug_utils_label_ext( + &self, + command_buffer: CommandBuffer, + label_info: &DebugUtilsLabelExt, + ) { + (self.cmd_begin_debug_utils_label_ext)(command_buffer, label_info) + } + + pub unsafe fn cmd_end_debug_utils_label_ext(&self, command_buffer: CommandBuffer) { + (self.cmd_end_debug_utils_label_ext)(command_buffer) + } + + pub unsafe fn cmd_insert_debug_utils_label_ext( + &self, + command_buffer: CommandBuffer, + label_info: &DebugUtilsLabelExt, + ) { + (self.cmd_insert_debug_utils_label_ext)(command_buffer, label_info) + } + + pub unsafe fn create_debug_utils_messenger_ext( + &self, + instance: Instance, + create_info: &DebugUtilsMessengerCreateInfoExt, + allocator: Option<&AllocationCallbacks>, + messenger: *mut DebugUtilsMessengerExt, + ) { + (self.create_debug_utils_messenger_ext)(instance, create_info, allocator, messenger) + } + + pub unsafe fn destroy_debug_utils_messenger_ext( + &self, + instance: Instance, + messenger: DebugUtilsMessengerExt, + allocator: Option<&AllocationCallbacks>, + ) { + (self.destroy_debug_utils_messenger_ext)(instance, messenger, allocator) + } + + pub unsafe fn queue_begin_debug_utils_label_ext( + &self, + queue: Queue, + label_info: &DebugUtilsLabelExt, + ) { + (self.queue_begin_debug_utils_label_ext)(queue, label_info) + } + + pub unsafe fn queue_end_debug_utils_label_ext(&self, queue: Queue) { + (self.queue_end_debug_utils_label_ext)(queue) + } + + pub unsafe fn queue_insert_debug_utils_label_ext( + &self, + queue: Queue, + label_info: &DebugUtilsLabelExt, + ) { + (self.queue_insert_debug_utils_label_ext)(queue, label_info) + } + + pub unsafe fn set_debug_utils_object_name_ext( + &self, + device: Device, + name_info: &DebugUtilsObjectNameInfoExt, + ) { + (self.set_debug_utils_object_name_ext)(device, name_info) + } + + pub unsafe fn set_debug_utils_object_tag_ext( + &self, + device: Device, + tag_info: &DebugUtilsObjectTagInfoExt, + ) { + (self.set_debug_utils_object_tag_ext)(device, tag_info) + } + + pub unsafe fn submit_debug_utils_message_ext( + &self, + instance: Instance, + message_severity: DebugUtilsMessageSeverityFlagsExt, + message_types: DebugUtilsMessageTypeFlagsExt, + callback_data: &DebugUtilsMessengerCallbackDataExt, + ) { + (self.submit_debug_utils_message_ext)( + instance, + message_severity, + message_types, + callback_data, + ) + } +} diff --git a/external/vulkan-sys/src/structs.rs b/external/vulkan-sys/src/structs.rs index 6393dc4..0ba737d 100644 --- a/external/vulkan-sys/src/structs.rs +++ b/external/vulkan-sys/src/structs.rs @@ -2167,6 +2167,99 @@ impl Default for ImageMemoryBarrier { } } +#[repr(C)] +pub struct DebugUtilsLabelExt { + pub _type: StructureType, + pub _next: *const c_void, + pub label_name: *const c_char, + pub color: [f32; 4], +} + +impl Default for DebugUtilsLabelExt { + fn default() -> Self { + DebugUtilsLabelExt { + _type: StructureType::DebugUtilsLabelExt, + _next: std::ptr::null(), + label_name: std::ptr::null(), + color: Default::default(), + } + } +} + +#[repr(C)] + +pub struct DebugUtilsObjectTagInfoExt { + pub _type: StructureType, + pub _next: *const c_void, + pub object_type: ObjectType, + pub object_handle: u64, + pub tag_name: u64, + pub tag_size: usize, + pub tag_data: *const c_void, +} + +impl Default for DebugUtilsObjectTagInfoExt { + fn default() -> Self { + Self { + _type: StructureType::DebugUtilsObjectTagInfoExt, + _next: std::ptr::null(), + object_type: ObjectType::Unknown, + object_handle: 0, + tag_name: 0, + tag_size: 0, + tag_data: std::ptr::null(), + } + } +} + +#[repr(C)] +pub struct DebugUtilsObjectNameInfoExt { + pub _type: StructureType, + pub _next: *const c_void, + pub object_type: ObjectType, + pub object_handle: u64, + pub object_name: *const c_char, +} + +impl Default for DebugUtilsObjectNameInfoExt { + fn default() -> Self { + Self { + _type: StructureType::DebugUtilsObjectNameInfoExt, + _next: std::ptr::null(), + object_type: ObjectType::Unknown, + object_handle: 0, + object_name: std::ptr::null(), + } + } +} + +#[repr(C)] +pub struct DebugUtilsMessengerCreateInfoExt { + pub _type: StructureType, + pub _next: *const c_void, + pub flags: DebugUtilsMessengerCreateFlagsExt, + pub message_severity: DebugUtilsMessageSeverityFlagsExt, + pub message_type: DebugUtilsMessageTypeFlagsExt, + pub user_callback: FnDebugUtilsMessengerCallbackExt, + pub user_data: *mut c_void, +} + +#[repr(C)] +pub struct DebugUtilsMessengerCallbackDataExt { + pub _type: StructureType, + pub _next: *const c_void, + pub flags: DebugUtilsMessengerCallbackDataFlagsExt, + pub message_id_name: *const c_char, + pub message_id_number: i32, + pub message: *const c_char, + pub queue_label_count: u32, + pub queue_labels: *const DebugUtilsLabelExt, + pub command_buffer_label_count: u32, + pub command_buffer_labels: *const DebugUtilsLabelExt, + pub object_count: u32, + pub objects: *const DebugUtilsObjectNameInfoExt, +} + #[repr(C)] pub struct PhysicalDeviceSparseProperties { /// Sparse resources support: GPU will access all 2D (single sample) sparse resources using the standard sparse image block shapes (based on pixel format)