ash/extensions/ext/
debug_utils.rs
1use crate::prelude::*;
2use crate::{vk, RawPtr};
3use crate::{Entry, Instance};
4use std::ffi::CStr;
5use std::mem;
6
7#[derive(Clone)]
8pub struct DebugUtils {
9 handle: vk::Instance,
10 fp: vk::ExtDebugUtilsFn,
11}
12
13impl DebugUtils {
14 pub fn new(entry: &Entry, instance: &Instance) -> Self {
15 let handle = instance.handle();
16 let fp = vk::ExtDebugUtilsFn::load(|name| unsafe {
17 mem::transmute(entry.get_instance_proc_addr(handle, name.as_ptr()))
18 });
19 Self { handle, fp }
20 }
21
22 pub unsafe fn debug_utils_set_object_name(
24 &self,
25 device: vk::Device,
26 name_info: &vk::DebugUtilsObjectNameInfoEXT,
27 ) -> VkResult<()> {
28 (self.fp.set_debug_utils_object_name_ext)(device, name_info).result()
29 }
30
31 pub unsafe fn debug_utils_set_object_tag(
33 &self,
34 device: vk::Device,
35 tag_info: &vk::DebugUtilsObjectTagInfoEXT,
36 ) -> VkResult<()> {
37 (self.fp.set_debug_utils_object_tag_ext)(device, tag_info).result()
38 }
39
40 pub unsafe fn cmd_begin_debug_utils_label(
42 &self,
43 command_buffer: vk::CommandBuffer,
44 label: &vk::DebugUtilsLabelEXT,
45 ) {
46 (self.fp.cmd_begin_debug_utils_label_ext)(command_buffer, label);
47 }
48
49 pub unsafe fn cmd_end_debug_utils_label(&self, command_buffer: vk::CommandBuffer) {
51 (self.fp.cmd_end_debug_utils_label_ext)(command_buffer);
52 }
53
54 pub unsafe fn cmd_insert_debug_utils_label(
56 &self,
57 command_buffer: vk::CommandBuffer,
58 label: &vk::DebugUtilsLabelEXT,
59 ) {
60 (self.fp.cmd_insert_debug_utils_label_ext)(command_buffer, label);
61 }
62
63 pub unsafe fn queue_begin_debug_utils_label(
65 &self,
66 queue: vk::Queue,
67 label: &vk::DebugUtilsLabelEXT,
68 ) {
69 (self.fp.queue_begin_debug_utils_label_ext)(queue, label);
70 }
71
72 pub unsafe fn queue_end_debug_utils_label(&self, queue: vk::Queue) {
74 (self.fp.queue_end_debug_utils_label_ext)(queue);
75 }
76
77 pub unsafe fn queue_insert_debug_utils_label(
79 &self,
80 queue: vk::Queue,
81 label: &vk::DebugUtilsLabelEXT,
82 ) {
83 (self.fp.queue_insert_debug_utils_label_ext)(queue, label);
84 }
85
86 pub unsafe fn create_debug_utils_messenger(
88 &self,
89 create_info: &vk::DebugUtilsMessengerCreateInfoEXT,
90 allocator: Option<&vk::AllocationCallbacks>,
91 ) -> VkResult<vk::DebugUtilsMessengerEXT> {
92 let mut messenger = mem::zeroed();
93 (self.fp.create_debug_utils_messenger_ext)(
94 self.handle,
95 create_info,
96 allocator.as_raw_ptr(),
97 &mut messenger,
98 )
99 .result_with_success(messenger)
100 }
101
102 pub unsafe fn destroy_debug_utils_messenger(
104 &self,
105 messenger: vk::DebugUtilsMessengerEXT,
106 allocator: Option<&vk::AllocationCallbacks>,
107 ) {
108 (self.fp.destroy_debug_utils_messenger_ext)(self.handle, messenger, allocator.as_raw_ptr());
109 }
110
111 pub unsafe fn submit_debug_utils_message(
113 &self,
114 message_severity: vk::DebugUtilsMessageSeverityFlagsEXT,
115 message_types: vk::DebugUtilsMessageTypeFlagsEXT,
116 callback_data: &vk::DebugUtilsMessengerCallbackDataEXT,
117 ) {
118 (self.fp.submit_debug_utils_message_ext)(
119 self.handle,
120 message_severity,
121 message_types,
122 callback_data,
123 );
124 }
125
126 pub const fn name() -> &'static CStr {
127 vk::ExtDebugUtilsFn::name()
128 }
129
130 pub fn fp(&self) -> &vk::ExtDebugUtilsFn {
131 &self.fp
132 }
133
134 pub fn instance(&self) -> vk::Instance {
135 self.handle
136 }
137}