/*************
* 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 *
****************/
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);
*/
#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);
};
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);
+}
+
+