Skip to content

Commit ec63013

Browse files
Merge pull request #1156 from vsg-dev/VulkanDebugMessageCallback
Vulkan debug message callback
2 parents 82e2023 + 9710258 commit ec63013

File tree

2 files changed

+35
-0
lines changed

2 files changed

+35
-0
lines changed

include/vsg/vk/Instance.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,8 @@ namespace vsg
9595
PhysicalDevices _physicalDevices;
9696

9797
ref_ptr<InstanceExtensions> _extensions;
98+
99+
VkDebugUtilsMessengerEXT _debugUtilsMessenger = VK_NULL_HANDLE;
98100
};
99101
VSG_type_name(vsg::Instance);
100102

src/vsg/vk/Instance.cpp

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,24 @@ Names vsg::validateInstancelayerNames(const Names& names)
9292
return validatedNames;
9393
}
9494

95+
static VKAPI_ATTR VkBool32 VKAPI_CALL debugUtilsMessengerCallback(
96+
VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity,
97+
VkDebugUtilsMessageTypeFlagsEXT /*messageType*/,
98+
const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData,
99+
void* /*pUserData*/)
100+
{
101+
vsg::Logger::Level level = vsg::Logger::LOGGER_INFO;
102+
if ((messageSeverity & VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT) != 0) level = vsg::Logger::LOGGER_ERROR;
103+
else if ((messageSeverity & VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT) != 0) level = vsg::Logger::LOGGER_WARN;
104+
else if ((messageSeverity & VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT) != 0) level = vsg::Logger::LOGGER_INFO;
105+
else if ((messageSeverity & VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT) != 0) level = vsg::Logger::LOGGER_DEBUG;
106+
107+
vsg::log(level, "[Vulkan] ", pCallbackData->pMessage);
108+
109+
return VK_FALSE;
110+
}
111+
112+
95113
Instance::Instance(Names instanceExtensions, Names layers, uint32_t vulkanApiVersion, AllocationCallbacks* allocator) :
96114
apiVersion(vulkanApiVersion)
97115
{
@@ -145,6 +163,16 @@ Instance::Instance(Names instanceExtensions, Names layers, uint32_t vulkanApiVer
145163
}
146164

147165
_extensions = InstanceExtensions::create(this);
166+
167+
if (isExtensionSupported(VK_EXT_DEBUG_UTILS_EXTENSION_NAME) && _extensions->vkCreateDebugUtilsMessengerEXT)
168+
{
169+
VkDebugUtilsMessengerCreateInfoEXT debugUtilsMessengerCreateInfo{};
170+
debugUtilsMessengerCreateInfo.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT;
171+
debugUtilsMessengerCreateInfo.messageSeverity = VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT;
172+
debugUtilsMessengerCreateInfo.messageType = VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT;
173+
debugUtilsMessengerCreateInfo.pfnUserCallback = debugUtilsMessengerCallback;
174+
result = _extensions->vkCreateDebugUtilsMessengerEXT(instance, &debugUtilsMessengerCreateInfo, nullptr, &_debugUtilsMessenger);
175+
}
148176
}
149177

150178
Instance::~Instance()
@@ -153,6 +181,11 @@ Instance::~Instance()
153181

154182
if (_instance)
155183
{
184+
if (_debugUtilsMessenger != VK_NULL_HANDLE && _extensions->vkDestroyDebugUtilsMessengerEXT)
185+
{
186+
_extensions->vkDestroyDebugUtilsMessengerEXT(_instance, _debugUtilsMessenger, nullptr);
187+
}
188+
156189
vkDestroyInstance(_instance, _allocator);
157190
}
158191
}

0 commit comments

Comments
 (0)