]> O.S.I.I.S - jp/vkhelpers.git/commitdiff
add debug report, debug marker sigsev
authorJean-Philippe Bruyère <jp_bruyere@hotmail.com>
Mon, 29 Apr 2019 15:20:21 +0000 (17:20 +0200)
committerJean-Philippe Bruyère <jp_bruyere@hotmail.com>
Mon, 29 Apr 2019 15:20:21 +0000 (17:20 +0200)
include/vkh.h
src/vkh_device.c
src/vkh_device.h
src/vkh_image.c

index b408dfb40f981c2da043033e26c541dd68628433..ce9684f4ea8c15e57875445302beb22b775b0cf0 100644 (file)
@@ -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);
index 865a965f9272cfee8ff75d5c00bed3425d3f0f66..6ebbaccca8b17f81e051a6d5d17d6cd23957c279 100644 (file)
  */
 #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);
+}
+
+
index 3a157989b8d6ee79f7687fcb37ca8e9f2d8a1dfb..fd11dbdaffc1c92736630d15e8b58aa2324a43e3 100644 (file)
@@ -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;
index f6c4f6faa3ffe26ceb8c04a568d23eef13649f52..10798de171b15197f32d7adb1754e18620de0c99 100644 (file)
@@ -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);
+}