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