Using the VkObjectType enumeration, applications can determine whether a Vulkan object has a particular handle type. In addition, VkObjectType can be used to associate debug information with objects. It also defines the value that is used to determine whether a callback should be called. This information can then be used to associate objects with a debug messenger.
The Vulkan interface has several callbacks. For example, the vkEndCommandBuffer callback can be used to report run time errors. Other callbacks can cause the application to define its own behavior. Some callbacks cause debug break points and log debug information to a file. Others, such as the performance-critical commands, defer reporting run time errors until a particular point. Other callbacks are not used directly in the API.
The VkDebugReportObjectTypeEXT enumeration defines the type of object that will be reported. If there is no object associated with an event, the type will be VK_NULL_HANDLE. If an object is associated with an event, the type will be the type of the object. In addition, the enumeration defines a special type of object, VkDebugReportCallbackEXT. This object is externally synchronized, and is called when a debug report is generated. The callback is always executed in the same thread as the originating Vulkan call.
This extension is designed to provide more information about debug messages. Specifically, it adds a search index for chunked HTML targets. It also adds a Vk_NV_SCREEN variable. This variable is added to the VK_NV_SCREEN_DEFINED_SET. It also adds the VkDebugReportObjectTypeEXT and VkDebugReportFlagBitsEXT enums. In addition, the Data Format Specification has been updated to include new spelling and date rules.
The Vk_EXT_debug_utils extension provides additional error information for Vulkan objects. This extension is intended to be used in conjunction with validation layers. It can also be used alone, or in combination with other extensions. Using the VK_EXT_debug_utils and Vk_EXT_debug_report extensions, the user can define a debug messenger. The Vk_EXT_debug_marker and Vk_EXT_debug_report functions return the object name, object labels, and location. The Vk_EXT_debug_marker function also uses the VkDebugReportObjectTypeEXT to report a debug marker.
In addition to providing additional information, the Vulkan_EXT_debug_utils adds functionality to the Vulkan API that was not available prior to this extension. Specifically, the Vulkan_EXT_debug_utils can be used to create a debug messenger, and can also be used in combination with the validation layers. The extension can also be combined with the Vulkan_EXT_debug_report extension to create an externally synchronized debug messenger.
In addition to the new information provided by the VK_EXT_debug_utils, the Vulkan API also provides information about the debugging process itself. The Vulkan_EXT_debug_marker extension uses the VkDebugReportObjectTypeEXT, VkDebugReportObjectTypeEXT, and VkDebugReportCallbackEXT enums to provide information about the debugging process. These extensions are not fully synchronized, but are implemented bitwise ANDs of the VkDebugReportCallbackEXT and VkDebugReportObjectTypeEXT.
In addition, the Vulkan_EXT_debug_utils also provides a new command that is not found in the standard Vulkan API. This command is the VkDebugReportCallbackEXT. The VkDebugReportCallbackEXT is externally synchronized, and is always called when a debug report is generated. It is possible to register multiple callbacks, but the callbacks are only called for driver events.