From cd9887df6a1dcc03280306fcbea241bb92ddb0cd Mon Sep 17 00:00:00 2001 From: Karl Schultz Date: Fri, 25 Mar 2016 14:25:16 -0600 Subject: demos: Implement --break for cube and tri. This argument makes the program stop in the debugger on a validation error. Only makes sense to use it with --validate. --- demos/cube.c | 29 +++++++++-------------------- demos/tri.c | 15 ++++++++++++++- 2 files changed, 23 insertions(+), 21 deletions(-) (limited to 'demos') diff --git a/demos/cube.c b/demos/cube.c index f0257ad1..e6d66bd9 100644 --- a/demos/cube.c +++ b/demos/cube.c @@ -2283,20 +2283,17 @@ static void demo_init_vk(struct demo *demo) { .enabledExtensionCount = enabled_extension_count, .ppEnabledExtensionNames = (const char *const *)extension_names, }; + + /* + * This is info for a temp callback to use during CreateInstance. + * After the instance is created, we use the instance-based + * function to register the final callback. + */ VkDebugReportCallbackCreateInfoEXT dbgCreateInfo; - PFN_vkDebugReportCallbackEXT callback; if (demo->validate) { - if (!demo->use_break) { - callback = dbgFunc; - } else { - callback = dbgFunc; - // TODO add a break callback defined locally since there is no - // longer - // one included in the loader - } dbgCreateInfo.sType = VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT; dbgCreateInfo.pNext = NULL; - dbgCreateInfo.pfnCallback = callback; + dbgCreateInfo.pfnCallback = demo->use_break ? BreakCallback : dbgFunc; dbgCreateInfo.pUserData = NULL; dbgCreateInfo.flags = VK_DEBUG_REPORT_ERROR_BIT_EXT | VK_DEBUG_REPORT_WARNING_BIT_EXT; @@ -2440,17 +2437,9 @@ static void demo_init_vk(struct demo *demo) { "vkGetProcAddr Failure"); } - PFN_vkDebugReportCallbackEXT callback; - - if (!demo->use_break) { - callback = dbgFunc; - } else { - callback = dbgFunc; - // TODO add a break callback defined locally since there is no - // longer - // one included in the loader - } VkDebugReportCallbackCreateInfoEXT dbgCreateInfo; + PFN_vkDebugReportCallbackEXT callback; + callback = demo->use_break ? BreakCallback : dbgFunc; dbgCreateInfo.sType = VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT; dbgCreateInfo.pNext = NULL; dbgCreateInfo.pfnCallback = callback; diff --git a/demos/tri.c b/demos/tri.c index a7366255..bb85565a 100644 --- a/demos/tri.c +++ b/demos/tri.c @@ -152,6 +152,19 @@ dbgFunc(VkFlags msgFlags, VkDebugReportObjectTypeEXT objType, return false; } +VkBool32 BreakCallback(VkFlags msgFlags, VkDebugReportObjectTypeEXT objType, + uint64_t srcObject, size_t location, int32_t msgCode, + const char *pLayerPrefix, const char *pMsg, + void *pUserData) { +#ifndef WIN32 + raise(SIGTRAP); +#else + DebugBreak(); +#endif + + return false; +} + typedef struct _SwapchainBuffers { VkImage image; VkCommandBuffer cmd; @@ -2040,7 +2053,7 @@ static void demo_init_vk(struct demo *demo) { dbgCreateInfo.sType = VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT; dbgCreateInfo.flags = VK_DEBUG_REPORT_ERROR_BIT_EXT | VK_DEBUG_REPORT_WARNING_BIT_EXT; - dbgCreateInfo.pfnCallback = dbgFunc; + dbgCreateInfo.pfnCallback = demo->use_break ? BreakCallback : dbgFunc; dbgCreateInfo.pUserData = NULL; dbgCreateInfo.pNext = NULL; err = demo->CreateDebugReportCallback(demo->inst, &dbgCreateInfo, NULL, -- cgit v1.2.3