aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPetr Kraus <petr_kraus@email.cz>2019-02-07 00:00:39 +0100
committerjeremyk-lunarg <jeremyk@lunarg.com>2019-02-07 09:56:21 -0700
commit91b17fd866b2e9cfb875bf516b05536d059416b1 (patch)
tree6c2710179c8fc86366cc0f7671477d7d5466fbf6
parentf7af5edd21ab73597885faa66cd4e963b4d506da (diff)
downloadvulkan-tools-91b17fd866b2e9cfb875bf516b05536d059416b1.tar.gz
vulkaninfo: Reintroduce vkCreateInstance pNext debug report callback
-rw-r--r--vulkaninfo/vulkaninfo.c34
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};