• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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