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 DebugMarker {
9     handle: vk::Device,
10     fp: vk::ExtDebugMarkerFn,
11 }
12 
13 impl DebugMarker {
new(instance: &Instance, device: &Device) -> Self14     pub fn new(instance: &Instance, device: &Device) -> Self {
15         let handle = device.handle();
16         let fp = vk::ExtDebugMarkerFn::load(|name| unsafe {
17             mem::transmute(instance.get_device_proc_addr(handle, name.as_ptr()))
18         });
19         Self { handle, fp }
20     }
21 
22     /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkDebugMarkerSetObjectNameEXT.html>
23     #[inline]
debug_marker_set_object_name( &self, name_info: &vk::DebugMarkerObjectNameInfoEXT, ) -> VkResult<()>24     pub unsafe fn debug_marker_set_object_name(
25         &self,
26         name_info: &vk::DebugMarkerObjectNameInfoEXT,
27     ) -> VkResult<()> {
28         (self.fp.debug_marker_set_object_name_ext)(self.handle, name_info).result()
29     }
30 
31     /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdDebugMarkerBeginEXT.html>
32     #[inline]
cmd_debug_marker_begin( &self, command_buffer: vk::CommandBuffer, marker_info: &vk::DebugMarkerMarkerInfoEXT, )33     pub unsafe fn cmd_debug_marker_begin(
34         &self,
35         command_buffer: vk::CommandBuffer,
36         marker_info: &vk::DebugMarkerMarkerInfoEXT,
37     ) {
38         (self.fp.cmd_debug_marker_begin_ext)(command_buffer, marker_info);
39     }
40 
41     /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdDebugMarkerEndEXT.html>
42     #[inline]
cmd_debug_marker_end(&self, command_buffer: vk::CommandBuffer)43     pub unsafe fn cmd_debug_marker_end(&self, command_buffer: vk::CommandBuffer) {
44         (self.fp.cmd_debug_marker_end_ext)(command_buffer);
45     }
46 
47     /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdDebugMarkerInsertEXT.html>
48     #[inline]
cmd_debug_marker_insert( &self, command_buffer: vk::CommandBuffer, marker_info: &vk::DebugMarkerMarkerInfoEXT, )49     pub unsafe fn cmd_debug_marker_insert(
50         &self,
51         command_buffer: vk::CommandBuffer,
52         marker_info: &vk::DebugMarkerMarkerInfoEXT,
53     ) {
54         (self.fp.cmd_debug_marker_insert_ext)(command_buffer, marker_info);
55     }
56 
57     #[inline]
name() -> &'static CStr58     pub const fn name() -> &'static CStr {
59         vk::ExtDebugMarkerFn::name()
60     }
61 
62     #[inline]
fp(&self) -> &vk::ExtDebugMarkerFn63     pub fn fp(&self) -> &vk::ExtDebugMarkerFn {
64         &self.fp
65     }
66 
67     #[inline]
device(&self) -> vk::Device68     pub fn device(&self) -> vk::Device {
69         self.handle
70     }
71 }
72