From: Jean-Philippe Bruyère Date: Wed, 22 Jan 2020 21:45:03 +0000 (+0100) Subject: debug utils X-Git-Url: https://git.osiis.dedyn.io/?a=commitdiff_plain;h=8b50312b74b1c553df094666185c8a6183d42d69;p=jp%2Fvkhelpers.git debug utils --- diff --git a/include/vkh.h b/include/vkh.h index 1cabdfc..44f937b 100644 --- a/include/vkh.h +++ b/include/vkh.h @@ -69,6 +69,9 @@ VkInstance vkh_app_get_inst (VkhApp app); VkPhysicalDevice vkh_app_select_phy (VkhApp app, VkPhysicalDeviceType preferedPhyType); VkhPhyInfo* vkh_app_get_phyinfos (VkhApp app, uint32_t* count, VkSurfaceKHR surface); void vkh_app_free_phyinfos (uint32_t count, VkhPhyInfo* infos); +void vkh_app_enable_debug_messenger (VkhApp app, VkDebugUtilsMessageTypeFlagsEXT typeFlags, + VkDebugUtilsMessageSeverityFlagsEXT severityFlags, + PFN_vkDebugUtilsMessengerCallbackEXT callback); VkPhysicalDeviceProperties vkh_app_get_phy_properties (VkhApp app, uint32_t phyIndex); diff --git a/src/vkh_app.c b/src/vkh_app.c index 93b8ae8..cc387ab 100644 --- a/src/vkh_app.c +++ b/src/vkh_app.c @@ -25,6 +25,46 @@ #define ENGINE_NAME "vkhelpers" #define ENGINE_VERSION 1 + +static PFN_vkDestroyDebugUtilsMessengerEXT DestroyDebugUtilsMessenger; + +VkBool32 debugUtilsMessengerCallback ( + VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity, + VkDebugUtilsMessageTypeFlagsEXT messageTypes, + const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData, + void* pUserData) { + + switch (messageSeverity) { + case VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT: + printf (KGRN); + break; + case VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT: + printf (KYEL); + break; + case VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT: + printf (KRED); + break; + } + switch (messageTypes) { + case VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT: + printf ("GEN: "); + break; + case VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT: + printf ("VAL: "); + break; + case VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT: + printf ("PRF: "); + break; + } + + printf (KNRM); + printf ("%s\n", pCallbackData->pMessage); + + + fflush(stdout); + return VK_FALSE; +} + VkhApp vkh_app_create (const char* app_name, uint32_t enabledLayersCount, const char* enabledLayers[], uint32_t ext_count, const char* extentions[]) { VkhApp app = (VkhApp)malloc(sizeof(vkh_app_t)); @@ -44,10 +84,17 @@ VkhApp vkh_app_create (const char* app_name, uint32_t enabledLayersCount, const VK_CHECK_RESULT(vkCreateInstance (&inst_info, NULL, &app->inst)); app->infos = infos; + app->debugMessenger = VK_NULL_HANDLE; return app; } void vkh_app_destroy (VkhApp app){ + if (app->debugMessenger != VK_NULL_HANDLE) { + PFN_vkDestroyDebugUtilsMessengerEXT DestroyDebugUtilsMessenger = (PFN_vkDestroyDebugUtilsMessengerEXT) + vkGetInstanceProcAddr(app->inst, "vkDestroyDebugUtilsMessengerEXT"); + + DestroyDebugUtilsMessenger (app->inst, app->debugMessenger, VK_NULL_HANDLE); + } vkDestroyInstance (app->inst, NULL); free (app); } @@ -73,7 +120,34 @@ void vkh_app_free_phyinfos (uint32_t count, VkhPhyInfo* infos) { vkh_phyinfo_destroy (infos[i]); free (infos); } +/** + * @brief Add a Debug utils messenger to this VkhApp. It will be destroyed on VkhApp end. + * @param VKH application pointer containing vkInstance. + * @param Message type flags + * @param Message severity flags. + * @param optional message callback, if null a default one which print to stdout is configured. + */ +void vkh_app_enable_debug_messenger (VkhApp app, + VkDebugUtilsMessageTypeFlagsEXT typeFlags, + VkDebugUtilsMessageSeverityFlagsEXT severityFlags, + PFN_vkDebugUtilsMessengerCallbackEXT callback){ + + VkDebugUtilsMessengerCreateInfoEXT info = { .sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT, + .pNext = VK_NULL_HANDLE, + .flags = 0, + .messageSeverity = severityFlags, + .messageType = typeFlags, + .pUserData = NULL }; + if (callback == NULL) + info.pfnUserCallback = (PFN_vkDebugUtilsMessengerCallbackEXT)debugUtilsMessengerCallback; + else + info.pfnUserCallback = callback; + PFN_vkCreateDebugUtilsMessengerEXT CreateDebugUtilsMessenger = (PFN_vkCreateDebugUtilsMessengerEXT) + vkGetInstanceProcAddr(app->inst, "vkCreateDebugUtilsMessengerEXT"); + + CreateDebugUtilsMessenger(app->inst, &info, VK_NULL_HANDLE, &app->debugMessenger); +} VkPhysicalDevice vkh_app_select_phy (VkhApp app, VkPhysicalDeviceType preferedPhyType) { /*if (app->phyCount == 1) diff --git a/src/vkh_app.h b/src/vkh_app.h index 07cc394..76dee6c 100644 --- a/src/vkh_app.h +++ b/src/vkh_app.h @@ -28,9 +28,28 @@ extern "C" { #include "vkh.h" +//console colors for debug output on stdout with debug utils or debug report +#ifdef __unix__ + #define KNRM "\x1b[0m" + #define KRED "\x1B[41m\x1B[37m" + #define KGRN "\x1B[42m\x1B[30m" + #define KYEL "\x1B[43m\x1B[30m" + #define KBLU "\x1B[44m\x1B[30m" +#else + #define KNRM "" + #define KRED "" + #define KGRN "" + #define KYEL "" + #define KBLU "" + #define KMAG "" + #define KCYN "" + #define KWHT "" +#endif + typedef struct _vkh_app_t{ VkApplicationInfo infos; VkInstance inst; + VkDebugUtilsMessengerEXT debugMessenger; }vkh_app_t; #ifdef __cplusplus } diff --git a/src/vkh_device.c b/src/vkh_device.c index 9ec36cc..7f508b3 100644 --- a/src/vkh_device.c +++ b/src/vkh_device.c @@ -24,15 +24,6 @@ #include "vkh_app.h" #include "string.h" -#define KNRM "\x1B[0m\x1B[40m" -#define KRED "\x1B[31m\x1B[40m" -#define KGRN "\x1B[32m\x1B[40m" -#define KYEL "\x1B[33m\x1B[40m" -#define KBLU "\x1B[34m\x1B[40m" -#define KMAG "\x1B[35m\x1B[40m" -#define KCYN "\x1B[36m\x1B[40m" -#define KWHT "\x1B[37m\x1B[40m" - static VkDebugReportCallbackEXT msgCallback; static PFN_vkDebugMarkerSetObjectNameEXT DebugMarkerSetObjectNameEXT; //I add debug markers here for convenience even if device is not part of the signature. @@ -40,7 +31,7 @@ static PFN_vkCmdDebugMarkerBeginEXT CmdDebugMarkerBegin; static PFN_vkCmdDebugMarkerEndEXT CmdDebugMarkerEnd; static PFN_vkCmdDebugMarkerInsertEXT CmdDebugMarkerInsert; -VKAPI_ATTR VkBool32 VKAPI_CALL messageCallback( +VkBool32 VKAPI_CALL messageCallback( VkDebugReportFlagsEXT flags, VkDebugReportObjectTypeEXT objType, uint64_t srcObject, @@ -52,22 +43,22 @@ VKAPI_ATTR VkBool32 VKAPI_CALL messageCallback( { switch (flags) { case VK_DEBUG_REPORT_ERROR_BIT_EXT: - printf ("%sERR: %s\n",KRED, pMsg); + printf ("%sERR: %s%s\n",KRED, pMsg, KNRM); break; case VK_DEBUG_REPORT_DEBUG_BIT_EXT: - printf ("%sDBG: %s\n",KMAG, pMsg); + printf ("%sDBG: %s%s\n",KNRM, pMsg, KNRM); break; case VK_DEBUG_REPORT_WARNING_BIT_EXT: - printf ("%sWRN: %s\n",KYEL, pMsg); + printf ("%sWRN: %s%s\n",KYEL, pMsg, KNRM); break; case VK_DEBUG_REPORT_INFORMATION_BIT_EXT: - printf ("%sNFO: %s\n",KCYN, pMsg); + printf ("%sNFO: %s%s\n",KGRN, pMsg, KNRM); break; case VK_DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT: - printf ("%sPRF: %s\n",KWHT, pMsg); + printf ("%sPRF: %s%s\n",KBLU, pMsg, KNRM); break; default: - printf ("%sMSG: %s\n",KBLU, pMsg); + printf ("%sMSG: %s%s\n",KBLU, pMsg, KNRM); break; } fflush(stdout);