From: Jean-Philippe Bruyère Date: Mon, 29 Apr 2019 15:20:21 +0000 (+0200) Subject: add debug report, debug marker sigsev X-Git-Url: https://git.osiis.dedyn.io/?a=commitdiff_plain;h=f9a1b07cbafbb8b96fc47a25cb27d8f8218c96c8;p=jp%2Fvkhelpers.git add debug report, debug marker sigsev --- diff --git a/include/vkh.h b/include/vkh.h index b408dfb..ce9684f 100644 --- a/include/vkh.h +++ b/include/vkh.h @@ -81,9 +81,13 @@ void vkh_phyinfo_destroy (VkhPhyInfo phy); /************* * VkhDevice * *************/ -VkhDevice vkh_device_create (VkPhysicalDevice phy, VkDevice vkDev); +VkhDevice vkh_device_create (VkInstance inst, VkPhysicalDevice phy, VkDevice vkDev); void vkh_device_destroy (VkhDevice dev); +VkDebugReportCallbackEXT vkh_device_create_debug_report (VkhDevice dev, VkDebugReportFlagsEXT flags); +void vkh_device_destroy_debug_report (VkhDevice dev, VkDebugReportCallbackEXT dbgReport); +void vkh_device_set_object_name (VkhDevice dev, VkDebugReportObjectTypeEXT objectType, uint64_t handle, const char *name); + /**************** * VkhPresenter * ****************/ @@ -115,6 +119,7 @@ void vkh_image_set_layout_subres(VkCommandBuffer cmdBuff, VkhImage image, VkImag void vkh_image_destroy (VkhImage img); void* vkh_image_map (VkhImage img); void vkh_image_unmap (VkhImage img); +void vkh_image_set_name (VkhImage img, const char* name); VkImage vkh_image_get_vkimage (VkhImage img); VkImageView vkh_image_get_view (VkhImage img); diff --git a/src/vkh_device.c b/src/vkh_device.c index 865a965..6ebbacc 100644 --- a/src/vkh_device.c +++ b/src/vkh_device.c @@ -21,10 +21,56 @@ */ #include "vkh_device.h" -VkhDevice vkh_device_create (VkPhysicalDevice phy, VkDevice vkDev) { +#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; + +VKAPI_ATTR VkBool32 VKAPI_CALL messageCallback( + VkDebugReportFlagsEXT flags, + VkDebugReportObjectTypeEXT objType, + uint64_t srcObject, + size_t location, + int32_t msgCode, + const char* pLayerPrefix, + const char* pMsg, + void* pUserData) +{ + switch (flags) { + case VK_DEBUG_REPORT_ERROR_BIT_EXT: + printf ("%sERR: %s\n",KRED, pMsg); + break; + case VK_DEBUG_REPORT_DEBUG_BIT_EXT: + printf ("%sDBG: %s\n",KMAG, pMsg); + break; + case VK_DEBUG_REPORT_WARNING_BIT_EXT: + printf ("%sWRN: %s\n",KYEL, pMsg); + break; + case VK_DEBUG_REPORT_INFORMATION_BIT_EXT: + printf ("%sNFO: %s\n",KCYN, pMsg); + break; + case VK_DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT: + printf ("%sPRF: %s\n",KWHT, pMsg); + break; + default: + printf ("%sMSG: %s\n",KBLU, pMsg); + break; + } + return VK_FALSE; +} + +VkhDevice vkh_device_create (VkInstance inst, VkPhysicalDevice phy, VkDevice vkDev) { VkhDevice dev = (vkh_device_t*)malloc(sizeof(vkh_device_t)); dev->dev = vkDev; dev->phy = phy; + dev->instance = inst; vkGetPhysicalDeviceMemoryProperties (phy, &dev->phyMemProps); @@ -34,11 +80,44 @@ VkhDevice vkh_device_create (VkPhysicalDevice phy, VkDevice vkDev) { }; vmaCreateAllocator(&allocatorInfo, &dev->allocator); + DebugMarkerSetObjectNameEXT = (PFN_vkDebugMarkerSetObjectNameEXT)vkGetInstanceProcAddr(dev->instance, "vkDebugMarkerSetObjectNameEXT"); + return dev; } +VkDebugReportCallbackEXT vkh_device_create_debug_report (VkhDevice dev, VkDebugReportFlagsEXT flags) { + + CreateDebugReportCallback = (PFN_vkCreateDebugReportCallbackEXT)vkGetInstanceProcAddr(dev->instance, "vkCreateDebugReportCallbackEXT"); + DestroyDebugReportCallback = (PFN_vkDestroyDebugReportCallbackEXT)vkGetInstanceProcAddr(dev->instance, "vkDestroyDebugReportCallbackEXT"); + + VkDebugReportCallbackCreateInfoEXT dbgCreateInfo = { + .sType = VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT, + .flags = flags, + .pfnCallback = (PFN_vkDebugReportCallbackEXT)messageCallback + }; + + CreateDebugReportCallback (dev->instance, &dbgCreateInfo, VK_NULL_HANDLE, &msgCallback); + return msgCallback; +} +void vkh_device_destroy_debug_report (VkhDevice dev, VkDebugReportCallbackEXT dbgReport){ + DestroyDebugReportCallback (dev->instance, dbgReport, VK_NULL_HANDLE); +} + void vkh_device_destroy (VkhDevice dev) { vmaDestroyAllocator (dev->allocator); vkDestroyDevice (dev->dev, NULL); free (dev); } + +void vkh_device_set_object_name (VkhDevice dev, VkDebugReportObjectTypeEXT objectType, uint64_t handle, const char* name){ + VkDebugMarkerObjectNameInfoEXT info = { + .sType = VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT, + .pNext = 0, + .objectType = objectType, + .object = handle, + .pObjectName= name + }; + //DebugMarkerSetObjectNameEXT (dev->dev, &info); +} + + diff --git a/src/vkh_device.h b/src/vkh_device.h index 3a15798..fd11dbd 100644 --- a/src/vkh_device.h +++ b/src/vkh_device.h @@ -29,6 +29,10 @@ extern "C" { #include "vkh.h" #include "vk_mem_alloc.h" +PFN_vkCreateDebugReportCallbackEXT CreateDebugReportCallback; +PFN_vkDestroyDebugReportCallbackEXT DestroyDebugReportCallback; +PFN_vkDebugReportMessageEXT dbgBreakCallback; + typedef struct _vkh_device_t{ VkDevice dev; VkPhysicalDeviceMemoryProperties phyMemProps; diff --git a/src/vkh_image.c b/src/vkh_image.c index f6c4f6f..10798de 100644 --- a/src/vkh_image.c +++ b/src/vkh_image.c @@ -234,3 +234,6 @@ void* vkh_image_map (VkhImage img) { void vkh_image_unmap (VkhImage img) { vmaUnmapMemory(img->pDev->allocator, img->alloc); } +void vkh_image_set_name (VkhImage img, const char* name){ + vkh_device_set_object_name(img->pDev, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT, (uint64_t)img->image, name); +}