Class EXTDebugReport

java.lang.Object
org.lwjgl.vulkan.EXTDebugReport

public class EXTDebugReport extends Object
Due to the nature of the Vulkan interface, there is very little error information available to the developer and application. By enabling optional validation layers and using the VK_EXT_debug_report extension, developers can obtain much more detailed feedback on the application’s use of Vulkan. This extension defines a way for layers and the implementation to call back to the application for events of interest to the application.
Examples

VK_EXT_debug_report allows an application to register multiple callbacks with the validation layers. Some callbacks may log the information to a file, others may cause a debug break point or other application defined behavior. An application can register callbacks even when no validation layers are enabled, but they will only be called for loader and, if implemented, driver events.

To capture events that occur while creating or destroying an instance an application can link a VkDebugReportCallbackCreateInfoEXT structure to the pNext element of the VkInstanceCreateInfo structure given to CreateInstance.

Example uses: Create three callback objects. One will log errors and warnings to the debug console using Windows OutputDebugString. The second will cause the debugger to break at that callback when an error happens and the third will log warnings to stdout.


     VkResult res;
     VkDebugReportCallbackEXT cb1, cb2, cb3;
 
     VkDebugReportCallbackCreateInfoEXT callback1 = {
         .sType = VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT,
         .pNext = NULL,
         .flags = VK_DEBUG_REPORT_ERROR_BIT_EXT |
                  VK_DEBUG_REPORT_WARNING_BIT_EXT,
         .pfnCallback = myOutputDebugString,
         .pUserData = NULL
     };
     res = vkCreateDebugReportCallbackEXT(instance, &callback1, &cb1);
     if (res != VK_SUCCESS)
        // Do error handling for VK_ERROR_OUT_OF_MEMORY 
 
     callback.flags = VK_DEBUG_REPORT_ERROR_BIT_EXT;
     callback.pfnCallback = myDebugBreak;
     callback.pUserData = NULL;
     res = vkCreateDebugReportCallbackEXT(instance, &callback, &cb2);
     if (res != VK_SUCCESS)
        // Do error handling for VK_ERROR_OUT_OF_MEMORY 
 
     VkDebugReportCallbackCreateInfoEXT callback3 = {
         .sType = VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT,
         .pNext = NULL,
         .flags = VK_DEBUG_REPORT_WARNING_BIT_EXT,
         .pfnCallback = mystdOutLogger,
         .pUserData = NULL
     };
     res = vkCreateDebugReportCallbackEXT(instance, &callback3, &cb3);
     if (res != VK_SUCCESS)
        // Do error handling for VK_ERROR_OUT_OF_MEMORY 
 
     ...
 
     // remove callbacks when cleaning up 
     vkDestroyDebugReportCallbackEXT(instance, cb1);
     vkDestroyDebugReportCallbackEXT(instance, cb2);
     vkDestroyDebugReportCallbackEXT(instance, cb3);
VK_EXT_debug_report
Name String
VK_EXT_debug_report
Extension Type
Instance extension
Registered Extension Number
12
Revision
10
Deprecation State
Special Use
Contact
Other Extension Metadata
Last Modified Date
2020-12-14
IP Status
No known IP claims.
Contributors
  • Courtney Goeltzenleuchter, LunarG
  • Dan Ginsburg, Valve
  • Jon Ashburn, LunarG
  • Mark Lobodzinski, LunarG