ash/extensions/ext/
debug_marker.rs

1use crate::prelude::*;
2use crate::vk;
3use crate::{Device, Instance};
4use std::ffi::CStr;
5use std::mem;
6
7#[derive(Clone)]
8pub struct DebugMarker {
9    handle: vk::Device,
10    fp: vk::ExtDebugMarkerFn,
11}
12
13impl DebugMarker {
14    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]
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]
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]
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]
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]
58    pub const fn name() -> &'static CStr {
59        vk::ExtDebugMarkerFn::name()
60    }
61
62    #[inline]
63    pub fn fp(&self) -> &vk::ExtDebugMarkerFn {
64        &self.fp
65    }
66
67    #[inline]
68    pub fn device(&self) -> vk::Device {
69        self.handle
70    }
71}