diff options
| author | Karl Schultz <karl@lunarg.com> | 2016-03-25 14:25:16 -0600 |
|---|---|---|
| committer | Karl Schultz <karl@lunarg.com> | 2016-03-25 14:25:16 -0600 |
| commit | cd9887df6a1dcc03280306fcbea241bb92ddb0cd (patch) | |
| tree | 6a6690c644652b268667884e16f567499d0f9d10 /demos | |
| parent | b219adcede7e27d1e248dc5313bad00e8b418777 (diff) | |
| download | usermoji-cd9887df6a1dcc03280306fcbea241bb92ddb0cd.tar.xz | |
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.
Diffstat (limited to 'demos')
| -rw-r--r-- | demos/cube.c | 29 | ||||
| -rw-r--r-- | demos/tri.c | 15 |
2 files changed, 23 insertions, 21 deletions
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, |
