Skip to content

Instantly share code, notes, and snippets.

@xenobrain
Last active December 19, 2021 20:02
Show Gist options
  • Save xenobrain/67e7fc0ad38edb5390a4350f489c6ae4 to your computer and use it in GitHub Desktop.
Save xenobrain/67e7fc0ad38edb5390a4350f489c6ae4 to your computer and use it in GitHub Desktop.
SDL_LOG macros and vk::DebugUtilsMessengerCreateInfo
#define LOG_INFO(fmt, ...) do { SDL_LogInfo (SDL_LOG_CATEGORY_APPLICATION, "%s:%d \n\t%s()\n\t\t" fmt, __FILE__, __LINE__, __func__, __VA_ARGS__); } while (0)
#define LOG_WARN(fmt, ...) do { SDL_LogWarn (SDL_LOG_CATEGORY_APPLICATION, "%s:%d \n\t%s()\n\t\t" fmt, __FILE__, __LINE__, __func__, __VA_ARGS__); } while (0)
#define LOG_ERROR(fmt, ...) do { char message[120]; snprintf(message, 120, "%s:%d \n\t%s()\n\t\t" fmt, __FILE__, __LINE__, __func__, __VA_ARGS__); if (SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR, "Error", message, nullptr) < 0) SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "%s:%d \n\t%s()\n\t\t" fmt, __FILE__, __LINE__, __func__, __VA_ARGS__); } while (0)
#define LOG_VERBOSE(fmt, ...) do { SDL_LogVerbose(SDL_LOG_CATEGORY_APPLICATION, "%s:%d \n\t%s()\n\t\t" fmt, __FILE__, __LINE__, __func__, __VA_ARGS__); } while (0)
auto static default_debug_utils_messenger() -> vk::DebugUtilsMessengerCreateInfoEXT{
return vk::DebugUtilsMessengerCreateInfoEXT{
vk::DebugUtilsMessengerCreateFlagsEXT{},
vk::DebugUtilsMessageSeverityFlagsEXT{
vk::DebugUtilsMessageSeverityFlagBitsEXT::eError |
vk::DebugUtilsMessageSeverityFlagBitsEXT::eWarning
},
vk::DebugUtilsMessageTypeFlagsEXT{
vk::DebugUtilsMessageTypeFlagBitsEXT::eGeneral |
vk::DebugUtilsMessageTypeFlagBitsEXT::eValidation |
vk::DebugUtilsMessageTypeFlagBitsEXT::ePerformance
},
[](auto const message_severity, auto const message_type, auto const* data, auto*) {
auto message = std::stringstream{};
message << vk::to_string(static_cast<vk::DebugUtilsMessageSeverityFlagBitsEXT>(message_severity)) << ": "
<< vk::to_string(static_cast<vk::DebugUtilsMessageTypeFlagsEXT>(message_type)) << ":\n"
<< "\tmessageIDName = <" << data->pMessageIdName << ">\n"
<< "\tmessageIdNumber = " << data->messageIdNumber << "\n"
<< "\tmessage = <" << data->pMessage << ">\n";
if (data->queueLabelCount > 0) {
message << "\tQueue Labels:\n";
for (auto i {std::uint8_t{}}; i < data->queueLabelCount; ++i)
message << "\t\tlabelName = <" << data->pQueueLabels[i].pLabelName << ">\n";
}
if (data->cmdBufLabelCount > 0) {
message << "\tCommandBuffer Labels:\n";
for (auto i {std::uint8_t{}}; i < data->cmdBufLabelCount; ++i)
message << "\t\tlabelName = <" << data->pCmdBufLabels[i].pLabelName << ">\n";
}
if (data->objectCount > 0) {
message << "\tObjects:\n";
for (auto i {std::uint8_t{}}; i < data->objectCount; ++i) {
message << "\t\tObject " << i << "\n"
<< "\t\t\tobjectType = "
<< vk::to_string( static_cast<vk::ObjectType>(data->pObjects[i].objectType ) ) << "\n"
<< "\t\t\tobjectHandle = " << data->pObjects[i].objectHandle << "\n";
if (data->pObjects[i].pObjectName)
message << "\t\t\tobjectName = <" << data->pObjects[i].pObjectName << ">\n";
}
}
switch (static_cast<vk::DebugUtilsMessageSeverityFlagBitsEXT>(message_severity)) {
case vk::DebugUtilsMessageSeverityFlagBitsEXT::eInfo: LOG_INFO("%s", message.str().c_str());
case vk::DebugUtilsMessageSeverityFlagBitsEXT::eError: LOG_ERROR("%s", message.str().c_str());
case vk::DebugUtilsMessageSeverityFlagBitsEXT::eWarning: LOG_WARN("%s", message.str().c_str());
case vk::DebugUtilsMessageSeverityFlagBitsEXT::eVerbose: LOG_VERBOSE("%s", message.str().c_str());
}
return vk::Bool32{false};
}
};
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment