fix debug callback segfaulting in some situations

This commit is contained in:
Matthew 2025-08-24 18:08:22 +10:00
parent b0d96f26fe
commit 6c081177ac

View File

@ -15,61 +15,68 @@ DebugCallback(
{ {
string ms, mt; string ms, mt;
const(char)[] msg = callback_data.pMessage[0 .. strlen(callback_data.pMessage)]; if (callback_data.pMessage != null)
bool debug_printf = strcmp(callback_data.pMessageIdName, "WARNING-DEBUG-PRINTF") == 0;
switch (message_severity) {
case VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT:
ms = "VERBOSE";
break;
case VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT:
ms = "INFO";
break;
case VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT:
ms = "WARNING";
break;
case VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT:
ms = "ERROR";
break;
default:
ms = "UNKNOWN";
break;
}
switch (message_type) {
case VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT:
mt = "General";
break;
case VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT:
mt = "Validation";
break;
case VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT:
mt = "Validation | General";
break;
case VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT:
mt = "Performance";
break;
case VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT:
mt = "General | Performance";
break;
case VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT:
mt = "Validation | Performance";
break;
case VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT:
mt = "General | Validation | Performance";
break;
default:
mt = "Unknown";
break;
}
if (debug_printf)
{ {
writefln("SHADER PRINT: %s", msg); const(char)[] msg = callback_data.pMessage[0 .. strlen(callback_data.pMessage)];
} bool debug_printf = false;
else if (callback_data.pMessageIdName != null)
{ {
writefln("[%s: %s]\n%r\n", ms, mt, msg); debug_printf = (strcmp(callback_data.pMessageIdName, "WARNING-DEBUG-PRINTF") == 0);
}
switch (message_severity) {
case VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT:
ms = "VERBOSE";
break;
case VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT:
ms = "INFO";
break;
case VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT:
ms = "WARNING";
break;
case VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT:
ms = "ERROR";
break;
default:
ms = "UNKNOWN";
break;
}
switch (message_type) {
case VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT:
mt = "General";
break;
case VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT:
mt = "Validation";
break;
case VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT:
mt = "Validation | General";
break;
case VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT:
mt = "Performance";
break;
case VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT:
mt = "General | Performance";
break;
case VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT:
mt = "Validation | Performance";
break;
case VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT:
mt = "General | Validation | Performance";
break;
default:
mt = "Unknown";
break;
}
if (debug_printf)
{
writefln("SHADER PRINT: %s", msg);
}
else
{
writefln("[%s: %s]\n%r 12345", ms, mt, msg);
}
} }
return VK_FALSE; return VK_FALSE;