diff options
author | Petr Kraus <petr_kraus@email.cz> | 2019-02-07 00:00:39 +0100 |
---|---|---|
committer | jeremyk-lunarg <jeremyk@lunarg.com> | 2019-02-07 09:56:21 -0700 |
commit | 91b17fd866b2e9cfb875bf516b05536d059416b1 (patch) | |
tree | 6c2710179c8fc86366cc0f7671477d7d5466fbf6 | |
parent | f7af5edd21ab73597885faa66cd4e963b4d506da (diff) | |
download | vulkan-tools-91b17fd866b2e9cfb875bf516b05536d059416b1.tar.gz |
vulkaninfo: Reintroduce vkCreateInstance pNext debug report callback
-rw-r--r-- | vulkaninfo/vulkaninfo.c | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/vulkaninfo/vulkaninfo.c b/vulkaninfo/vulkaninfo.c index 02337d44..c1fa4818 100644 --- a/vulkaninfo/vulkaninfo.c +++ b/vulkaninfo/vulkaninfo.c @@ -199,6 +199,35 @@ struct AppGpu { VkExtensionProperties *device_extensions; }; +// return most severe flag only +static const char *DebugReportFlagString(const VkDebugReportFlagsEXT flags) { + switch (flags) { + case VK_DEBUG_REPORT_ERROR_BIT_EXT: + return "ERROR"; + case VK_DEBUG_REPORT_WARNING_BIT_EXT: + return "WARNING"; + case VK_DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT: + return "PERF"; + case VK_DEBUG_REPORT_INFORMATION_BIT_EXT: + return "INFO"; + case VK_DEBUG_REPORT_DEBUG_BIT_EXT: + return "DEBUG"; + default: + return "UNKNOWN"; + } +} + +static VKAPI_ATTR VkBool32 VKAPI_CALL DbgCallback(VkDebugReportFlagsEXT msgFlags, VkDebugReportObjectTypeEXT objType, + uint64_t srcObject, size_t location, int32_t msgCode, const char *pLayerPrefix, + const char *pMsg, void *pUserData) { + fprintf(stderr, "%s: [%s] Code %d : %s\n", DebugReportFlagString(msgFlags), pLayerPrefix, msgCode, pMsg); + fflush(stderr); + + // True is reserved for layer developers, and MAY mean calls are not distributed down the layer chain after validation error. + // False SHOULD always be returned by apps: + return VK_FALSE; +} + static const char *VkResultString(VkResult err) { switch (err) { #define STR(r) \ @@ -833,6 +862,10 @@ static void AppCreateInstance(struct AppInstance *inst) { AppGetInstanceExtensions(inst); + const VkDebugReportCallbackCreateInfoEXT dbg_info = {.sType = VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT, + .flags = VK_DEBUG_REPORT_ERROR_BIT_EXT | VK_DEBUG_REPORT_WARNING_BIT_EXT, + .pfnCallback = DbgCallback}; + const VkApplicationInfo app_info = {.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO, .pApplicationName = APP_SHORT_NAME, .applicationVersion = 1, @@ -840,6 +873,7 @@ static void AppCreateInstance(struct AppInstance *inst) { AppCompileInstanceExtensionsToEnable(inst); const VkInstanceCreateInfo inst_info = {.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO, + .pNext = &dbg_info, .pApplicationInfo = &app_info, .enabledExtensionCount = inst->inst_extensions_count, .ppEnabledExtensionNames = inst->inst_extensions}; |