46 lines
1.5 KiB
Rust
46 lines
1.5 KiB
Rust
|
use ash::extensions::ext::DebugUtils;
|
||
|
use ash::prelude::VkResult;
|
||
|
use ash::vk;
|
||
|
use ash::vk::{DebugUtilsMessengerEXT, PFN_vkDebugUtilsMessengerCallbackEXT};
|
||
|
|
||
|
pub struct VulkanDebug {
|
||
|
loader: DebugUtils,
|
||
|
messenger: DebugUtilsMessengerEXT
|
||
|
}
|
||
|
|
||
|
impl VulkanDebug {
|
||
|
pub fn new(entry: &ash::Entry, instance: &ash::Instance, callback: PFN_vkDebugUtilsMessengerCallbackEXT) -> VkResult<VulkanDebug>{
|
||
|
let debug_info = vk::DebugUtilsMessengerCreateInfoEXT::builder()
|
||
|
.message_severity(
|
||
|
vk::DebugUtilsMessageSeverityFlagsEXT::ERROR
|
||
|
| vk::DebugUtilsMessageSeverityFlagsEXT::WARNING
|
||
|
| vk::DebugUtilsMessageSeverityFlagsEXT::INFO,
|
||
|
)
|
||
|
.message_type(
|
||
|
vk::DebugUtilsMessageTypeFlagsEXT::GENERAL
|
||
|
| vk::DebugUtilsMessageTypeFlagsEXT::VALIDATION
|
||
|
| vk::DebugUtilsMessageTypeFlagsEXT::PERFORMANCE,
|
||
|
)
|
||
|
.pfn_user_callback(callback);
|
||
|
|
||
|
let debug_utils_loader = DebugUtils::new(entry, instance);
|
||
|
|
||
|
unsafe {
|
||
|
let debug_call_back = debug_utils_loader
|
||
|
.create_debug_utils_messenger(&debug_info, None)?;
|
||
|
|
||
|
Ok(VulkanDebug {
|
||
|
loader: debug_utils_loader,
|
||
|
messenger: debug_call_back
|
||
|
})
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
impl Drop for VulkanDebug {
|
||
|
fn drop(&mut self) {
|
||
|
unsafe {
|
||
|
self.loader.destroy_debug_utils_messenger(self.messenger, None);
|
||
|
}
|
||
|
}
|
||
|
}
|