1 use crate::prelude::*; 2 use crate::{vk, RawPtr}; 3 use crate::{EntryCustom, Instance}; 4 use std::ffi::CStr; 5 use std::mem; 6 7 #[derive(Clone)] 8 pub struct DebugUtils { 9 handle: vk::Instance, 10 debug_utils_fn: vk::ExtDebugUtilsFn, 11 } 12 13 impl DebugUtils { new<L>(entry: &EntryCustom<L>, instance: &Instance) -> Self14 pub fn new<L>(entry: &EntryCustom<L>, instance: &Instance) -> Self { 15 let debug_utils_fn = vk::ExtDebugUtilsFn::load(|name| unsafe { 16 mem::transmute(entry.get_instance_proc_addr(instance.handle(), name.as_ptr())) 17 }); 18 Self { 19 handle: instance.handle(), 20 debug_utils_fn, 21 } 22 } 23 name() -> &'static CStr24 pub fn name() -> &'static CStr { 25 vk::ExtDebugUtilsFn::name() 26 } 27 28 #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkSetDebugUtilsObjectNameEXT.html>"] debug_utils_set_object_name( &self, device: vk::Device, name_info: &vk::DebugUtilsObjectNameInfoEXT, ) -> VkResult<()>29 pub unsafe fn debug_utils_set_object_name( 30 &self, 31 device: vk::Device, 32 name_info: &vk::DebugUtilsObjectNameInfoEXT, 33 ) -> VkResult<()> { 34 self.debug_utils_fn 35 .set_debug_utils_object_name_ext(device, name_info) 36 .into() 37 } 38 39 #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkSetDebugUtilsObjectTagEXT.html>"] debug_utils_set_object_tag( &self, device: vk::Device, tag_info: &vk::DebugUtilsObjectTagInfoEXT, ) -> VkResult<()>40 pub unsafe fn debug_utils_set_object_tag( 41 &self, 42 device: vk::Device, 43 tag_info: &vk::DebugUtilsObjectTagInfoEXT, 44 ) -> VkResult<()> { 45 self.debug_utils_fn 46 .set_debug_utils_object_tag_ext(device, tag_info) 47 .into() 48 } 49 50 #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdBeginDebugUtilsLabelEXT.html>"] cmd_begin_debug_utils_label( &self, command_buffer: vk::CommandBuffer, label: &vk::DebugUtilsLabelEXT, )51 pub unsafe fn cmd_begin_debug_utils_label( 52 &self, 53 command_buffer: vk::CommandBuffer, 54 label: &vk::DebugUtilsLabelEXT, 55 ) { 56 self.debug_utils_fn 57 .cmd_begin_debug_utils_label_ext(command_buffer, label); 58 } 59 60 #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdEndDebugUtilsLabelEXT.html>"] cmd_end_debug_utils_label(&self, command_buffer: vk::CommandBuffer)61 pub unsafe fn cmd_end_debug_utils_label(&self, command_buffer: vk::CommandBuffer) { 62 self.debug_utils_fn 63 .cmd_end_debug_utils_label_ext(command_buffer); 64 } 65 66 #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdInsertDebugUtilsLabelEXT.html>"] cmd_insert_debug_utils_label( &self, command_buffer: vk::CommandBuffer, label: &vk::DebugUtilsLabelEXT, )67 pub unsafe fn cmd_insert_debug_utils_label( 68 &self, 69 command_buffer: vk::CommandBuffer, 70 label: &vk::DebugUtilsLabelEXT, 71 ) { 72 self.debug_utils_fn 73 .cmd_insert_debug_utils_label_ext(command_buffer, label); 74 } 75 76 #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkQueueBeginDebugUtilsLabelEXT.html>"] queue_begin_debug_utils_label( &self, queue: vk::Queue, label: &vk::DebugUtilsLabelEXT, )77 pub unsafe fn queue_begin_debug_utils_label( 78 &self, 79 queue: vk::Queue, 80 label: &vk::DebugUtilsLabelEXT, 81 ) { 82 self.debug_utils_fn 83 .queue_begin_debug_utils_label_ext(queue, label); 84 } 85 86 #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkQueueEndDebugUtilsLabelEXT.html>"] queue_end_debug_utils_label(&self, queue: vk::Queue)87 pub unsafe fn queue_end_debug_utils_label(&self, queue: vk::Queue) { 88 self.debug_utils_fn.queue_end_debug_utils_label_ext(queue); 89 } 90 91 #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkQueueInsertDebugUtilsLabelEXT.html>"] queue_insert_debug_utils_label( &self, queue: vk::Queue, label: &vk::DebugUtilsLabelEXT, )92 pub unsafe fn queue_insert_debug_utils_label( 93 &self, 94 queue: vk::Queue, 95 label: &vk::DebugUtilsLabelEXT, 96 ) { 97 self.debug_utils_fn 98 .queue_insert_debug_utils_label_ext(queue, label); 99 } 100 101 #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCreateDebugUtilsMessengerEXT.html>"] create_debug_utils_messenger( &self, create_info: &vk::DebugUtilsMessengerCreateInfoEXT, allocator: Option<&vk::AllocationCallbacks>, ) -> VkResult<vk::DebugUtilsMessengerEXT>102 pub unsafe fn create_debug_utils_messenger( 103 &self, 104 create_info: &vk::DebugUtilsMessengerCreateInfoEXT, 105 allocator: Option<&vk::AllocationCallbacks>, 106 ) -> VkResult<vk::DebugUtilsMessengerEXT> { 107 let mut messenger = mem::zeroed(); 108 self.debug_utils_fn 109 .create_debug_utils_messenger_ext( 110 self.handle, 111 create_info, 112 allocator.as_raw_ptr(), 113 &mut messenger, 114 ) 115 .result_with_success(messenger) 116 } 117 118 #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkDestroyDebugUtilsMessengerEXT.html>"] destroy_debug_utils_messenger( &self, messenger: vk::DebugUtilsMessengerEXT, allocator: Option<&vk::AllocationCallbacks>, )119 pub unsafe fn destroy_debug_utils_messenger( 120 &self, 121 messenger: vk::DebugUtilsMessengerEXT, 122 allocator: Option<&vk::AllocationCallbacks>, 123 ) { 124 self.debug_utils_fn.destroy_debug_utils_messenger_ext( 125 self.handle, 126 messenger, 127 allocator.as_raw_ptr(), 128 ); 129 } 130 131 #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkSubmitDebugUtilsMessageEXT.html>"] submit_debug_utils_message( &self, instance: vk::Instance, message_severity: vk::DebugUtilsMessageSeverityFlagsEXT, message_types: vk::DebugUtilsMessageTypeFlagsEXT, callback_data: &vk::DebugUtilsMessengerCallbackDataEXT, )132 pub unsafe fn submit_debug_utils_message( 133 &self, 134 instance: vk::Instance, 135 message_severity: vk::DebugUtilsMessageSeverityFlagsEXT, 136 message_types: vk::DebugUtilsMessageTypeFlagsEXT, 137 callback_data: &vk::DebugUtilsMessengerCallbackDataEXT, 138 ) { 139 self.debug_utils_fn.submit_debug_utils_message_ext( 140 instance, 141 message_severity, 142 message_types, 143 callback_data, 144 ); 145 } 146 fp(&self) -> &vk::ExtDebugUtilsFn147 pub fn fp(&self) -> &vk::ExtDebugUtilsFn { 148 &self.debug_utils_fn 149 } 150 instance(&self) -> vk::Instance151 pub fn instance(&self) -> vk::Instance { 152 self.handle 153 } 154 } 155