public class EXTDebugUtils
extends java.lang.Object
VK_EXT_debug_utils extension, developers can obtain more information. When combined with validation layers, even more detailed feedback on the application's use of Vulkan will be provided.
This extension provides the following capabilities:
VkQueue or VkCommandBuffer using labels to aid organization and offline analysis in external tools.The main difference between this extension and VK_EXT_debug_report and VK_EXT_debug_marker is that those extensions use VkDebugReportObjectTypeEXT to identify objects. This extension uses the core VkObjectType in place of VkDebugReportObjectTypeEXT. The primary reason for this move is that no future object type handle enumeration values will be added to VkDebugReportObjectTypeEXT since the creation of VkObjectType.
In addition, this extension combines the functionality of both VK_EXT_debug_report and VK_EXT_debug_marker by allowing object name and debug markers (now called labels) to be returned to the application's callback function. This should assist in clarifying the details of a debug message including: what objects are involved and potentially which location within a VkQueue or VkCommandBuffer the message occurred.
Example 1
VK_EXT_debug_utils allows an application to register multiple callbacks with any Vulkan component wishing to report debug information. 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 VkDebugUtilsMessengerCreateInfoEXT structure to the pNext element of the VkInstanceCreateInfo structure given to CreateInstance. This callback is only valid for the duration of the CreateInstance and the DestroyInstance call. Use CreateDebugUtilsMessengerEXT to create persistent callback objects.
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.
extern VkInstance instance;
VkResult res;
VkDebugUtilsMessengerEXT cb1, cb2, cb3;
// Must call extension functions through a function pointer:
PFN_vkCreateDebugUtilsMessengerEXT pfnCreateDebugUtilsMessengerEXT = (PFN_vkCreateDebugUtilsMessengerEXT)vkGetDeviceProcAddr(device, "vkCreateDebugUtilsMessengerEXT");
PFN_vkDestroyDebugUtilsMessengerEXT pfnDestroyDebugUtilsMessengerEXT = (PFN_vkDestroyDebugUtilsMessengerEXT)vkGetDeviceProcAddr(device, "vkDestroyDebugUtilsMessengerEXT");
VkDebugUtilsMessengeCreateInfoEXT callback1 = {
VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT, // sType
NULL, // pNext
0, // flags
VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT | // messageSeverity
VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT,
VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT | // messageType
VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT,
myOutputDebugString, // pfnUserCallback
NULL // pUserData
};
res = pfnCreateDebugUtilsMessengerEXT(instance, &callback1, NULL, &cb1);
if (res != VK_SUCCESS) {
// Do error handling for VK_ERROR_OUT_OF_MEMORY
}
callback1.messageSeverity = VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT;
callback1.pfnCallback = myDebugBreak;
callback1.pUserData = NULL;
res = pfnCreateDebugUtilsMessengerEXT(instance, &callback1, NULL, &cb2);
if (res != VK_SUCCESS) {
// Do error handling for VK_ERROR_OUT_OF_MEMORY
}
VkDebugUtilsMessengerCreateInfoEXT callback3 = {
VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT, // sType
NULL, // pNext
0, // flags
VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT, // messageSeverity
VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT | // messageType
VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT,
mystdOutLogger, // pfnUserCallback
NULL // pUserData
};
res = pfnCreateDebugUtilsMessengerEXT(instance, &callback3, NULL, &cb3);
if (res != VK_SUCCESS) {
// Do error handling for VK_ERROR_OUT_OF_MEMORY
}
...
// Remove callbacks when cleaning up
pfnDestroyDebugUtilsMessengerEXT(instance, cb1, NULL);
pfnDestroyDebugUtilsMessengerEXT(instance, cb2, NULL);
pfnDestroyDebugUtilsMessengerEXT(instance, cb3, NULL);
Example 2
Associate a name with an image, for easier debugging in external tools or with validation layers that can print a friendly name when referring to objects in error messages.
extern VkDevice device;
extern VkImage image;
// Must call extension functions through a function pointer:
PFN_vkSetDebugUtilsObjectNameEXT pfnSetDebugUtilsObjectNameEXT = (PFN_vkSetDebugUtilsObjectNameEXT)vkGetDeviceProcAddr(device, "vkSetDebugUtilsObjectNameEXT");
// Set a name on the image
const VkDebugUtilsObjectNameInfoEXT imageNameInfo =
{
VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT, // sType
NULL, // pNext
VK_OBJECT_TYPE_IMAGE, // objectType
(uint64_t)image, // object
"Brick Diffuse Texture", // pObjectName
};
pfnSetDebugUtilsObjectNameEXT(device, &imageNameInfo);
// A subsequent error might print:
// Image 'Brick Diffuse Texture' (0xc0dec0dedeadbeef) is used in a
// command buffer with no memory bound to it.
Example 3
Annotating regions of a workload with naming information so that offline analysis tools can display a more usable visualization of the commands submitted.
extern VkDevice device;
extern VkCommandBuffer commandBuffer;
// Must call extension functions through a function pointer:
PFN_vkQueueBeginDebugUtilsLabelEXT pfnQueueBeginDebugUtilsLabelEXT = (PFN_vkQueueBeginDebugUtilsLabelEXT)vkGetDeviceProcAddr(device, "vkQueueBeginDebugUtilsLabelEXT");
PFN_vkQueueEndDebugUtilsLabelEXT pfnQueueEndDebugUtilsLabelEXT = (PFN_vkQueueEndDebugUtilsLabelEXT)vkGetDeviceProcAddr(device, "vkQueueEndDebugUtilsLabelEXT");
PFN_vkCmdBeginDebugUtilsLabelEXT pfnCmdBeginDebugUtilsLabelEXT = (PFN_vkCmdBeginDebugUtilsLabelEXT)vkGetDeviceProcAddr(device, "vkCmdBeginDebugUtilsLabelEXT");
PFN_vkCmdEndDebugUtilsLabelEXT pfnCmdEndDebugUtilsLabelEXT = (PFN_vkCmdEndDebugUtilsLabelEXT)vkGetDeviceProcAddr(device, "vkCmdEndDebugUtilsLabelEXT");
PFN_vkCmdInsertDebugUtilsLabelEXT pfnCmdInsertDebugUtilsLabelEXT = (PFN_vkCmdInsertDebugUtilsLabelEXT)vkGetDeviceProcAddr(device, "vkCmdInsertDebugUtilsLabelEXT");
// Describe the area being rendered
const VkDebugUtilsLabelEXT houseLabel =
{
VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT, // sType
NULL, // pNext
"Brick House", // pLabelName
{ 1.0f, 0.0f, 0.0f, 1.0f }, // color
};
// Start an annotated group of calls under the 'Brick House' name
pfnCmdBeginDebugUtilsLabelEXT(commandBuffer, &houseLabel);
{
// A mutable structure for each part being rendered
VkDebugUtilsLabelEXT housePartLabel =
{
VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT, // sType
NULL, // pNext
NULL, // pLabelName
{ 0.0f, 0.0f, 0.0f, 0.0f }, // color
};
// Set the name and insert the marker
housePartLabel.pLabelName = "Walls";
pfnCmdInsertDebugUtilsLabelEXT(commandBuffer, &housePartLabel);
// Insert the drawcall for the walls
vkCmdDrawIndexed(commandBuffer, 1000, 1, 0, 0, 0);
// Insert a recursive region for two sets of windows
housePartLabel.pLabelName = "Windows";
pfnCmdBeginDebugUtilsLabelEXT(commandBuffer, &housePartLabel);
{
vkCmdDrawIndexed(commandBuffer, 75, 6, 1000, 0, 0);
vkCmdDrawIndexed(commandBuffer, 100, 2, 1450, 0, 0);
}
pfnCmdEndDebugUtilsLabelEXT(commandBuffer);
housePartLabel.pLabelName = "Front Door";
pfnCmdInsertDebugUtilsLabelEXT(commandBuffer, &housePartLabel);
vkCmdDrawIndexed(commandBuffer, 350, 1, 1650, 0, 0);
housePartLabel.pLabelName = "Roof";
pfnCmdInsertDebugUtilsLabelEXT(commandBuffer, &housePartLabel);
vkCmdDrawIndexed(commandBuffer, 500, 1, 2000, 0, 0);
}
// End the house annotation started above
pfnCmdEndDebugUtilsLabelEXT(commandBuffer);
// Do other work
vkEndCommandBuffer(commandBuffer);
// Describe the queue being used
const VkDebugUtilsLabelEXT queueLabel =
{
VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT, // sType
NULL, // pNext
"Main Render Work", // pLabelName
{ 0.0f, 1.0f, 0.0f, 1.0f }, // color
};
// Identify the queue label region
pfnQueueBeginDebugUtilsLabelEXT(queue, &queueLabel);
// Submit the work for the main render thread
const VkCommandBuffer cmd_bufs[] = {commandBuffer};
VkSubmitInfo submit_info = {.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO,
.pNext = NULL,
.waitSemaphoreCount = 0,
.pWaitSemaphores = NULL,
.pWaitDstStageMask = NULL,
.commandBufferCount = 1,
.pCommandBuffers = cmd_bufs,
.signalSemaphoreCount = 0,
.pSignalSemaphores = NULL};
vkQueueSubmit(queue, 1, &submit_info, fence);
// End the queue label region
pfnQueueEndDebugUtilsLabelEXT(queue);
VK_EXT_debug_utilsVkObjectType| Modifier and Type | Field and Description |
|---|---|
static int |
VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT
VkDebugUtilsMessageSeverityFlagBitsEXT - Bitmask specifying which severities of events cause a debug messenger callback
|
static int |
VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT
VkDebugUtilsMessageSeverityFlagBitsEXT - Bitmask specifying which severities of events cause a debug messenger callback
|
static int |
VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT
VkDebugUtilsMessageSeverityFlagBitsEXT - Bitmask specifying which severities of events cause a debug messenger callback
|
static int |
VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT
VkDebugUtilsMessageSeverityFlagBitsEXT - Bitmask specifying which severities of events cause a debug messenger callback
|
static int |
VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT
VkDebugUtilsMessageTypeFlagBitsEXT - Bitmask specifying which types of events cause a debug messenger callback
|
static int |
VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT
VkDebugUtilsMessageTypeFlagBitsEXT - Bitmask specifying which types of events cause a debug messenger callback
|
static int |
VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT
VkDebugUtilsMessageTypeFlagBitsEXT - Bitmask specifying which types of events cause a debug messenger callback
|
static java.lang.String |
VK_EXT_DEBUG_UTILS_EXTENSION_NAME
The extension name.
|
static int |
VK_EXT_DEBUG_UTILS_SPEC_VERSION
The extension specification version.
|
static int |
VK_OBJECT_TYPE_DEBUG_UTILS_MESSENGER_EXT
Extends
VkObjectType. |
static int |
VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT
Extends
VkStructureType. |
static int |
VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT
Extends
VkStructureType. |
static int |
VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT
Extends
VkStructureType. |
static int |
VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT
Extends
VkStructureType. |
static int |
VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_TAG_INFO_EXT
Extends
VkStructureType. |
| Modifier and Type | Method and Description |
|---|---|
static void |
nvkCmdBeginDebugUtilsLabelEXT(org.lwjgl.vulkan.VkCommandBuffer commandBuffer,
long pLabelInfo)
Unsafe version of:
CmdBeginDebugUtilsLabelEXT |
static void |
nvkCmdInsertDebugUtilsLabelEXT(org.lwjgl.vulkan.VkCommandBuffer commandBuffer,
long pLabelInfo)
Unsafe version of:
CmdInsertDebugUtilsLabelEXT |
static int |
nvkCreateDebugUtilsMessengerEXT(org.lwjgl.vulkan.VkInstance instance,
long pCreateInfo,
long pAllocator,
long pMessenger)
Unsafe version of:
CreateDebugUtilsMessengerEXT |
static void |
nvkDestroyDebugUtilsMessengerEXT(org.lwjgl.vulkan.VkInstance instance,
long messenger,
long pAllocator)
Unsafe version of:
DestroyDebugUtilsMessengerEXT |
static void |
nvkQueueBeginDebugUtilsLabelEXT(org.lwjgl.vulkan.VkQueue queue,
long pLabelInfo)
Unsafe version of:
QueueBeginDebugUtilsLabelEXT |
static void |
nvkQueueInsertDebugUtilsLabelEXT(org.lwjgl.vulkan.VkQueue queue,
long pLabelInfo)
Unsafe version of:
QueueInsertDebugUtilsLabelEXT |
static int |
nvkSetDebugUtilsObjectNameEXT(org.lwjgl.vulkan.VkDevice device,
long pNameInfo)
Unsafe version of:
SetDebugUtilsObjectNameEXT |
static int |
nvkSetDebugUtilsObjectTagEXT(org.lwjgl.vulkan.VkDevice device,
long pTagInfo)
Unsafe version of:
SetDebugUtilsObjectTagEXT |
static void |
nvkSubmitDebugUtilsMessageEXT(org.lwjgl.vulkan.VkInstance instance,
int messageSeverity,
int messageTypes,
long pCallbackData)
Unsafe version of:
SubmitDebugUtilsMessageEXT |
static void |
vkCmdBeginDebugUtilsLabelEXT(org.lwjgl.vulkan.VkCommandBuffer commandBuffer,
VkDebugUtilsLabelEXT pLabelInfo)
Open a command buffer debug label region.
|
static void |
vkCmdEndDebugUtilsLabelEXT(org.lwjgl.vulkan.VkCommandBuffer commandBuffer)
Close a command buffer label region.
|
static void |
vkCmdInsertDebugUtilsLabelEXT(org.lwjgl.vulkan.VkCommandBuffer commandBuffer,
VkDebugUtilsLabelEXT pLabelInfo)
Insert a label into a command buffer.
|
static int |
vkCreateDebugUtilsMessengerEXT(org.lwjgl.vulkan.VkInstance instance,
VkDebugUtilsMessengerCreateInfoEXT pCreateInfo,
VkAllocationCallbacks pAllocator,
long[] pMessenger)
Array version of:
CreateDebugUtilsMessengerEXT |
static int |
vkCreateDebugUtilsMessengerEXT(org.lwjgl.vulkan.VkInstance instance,
VkDebugUtilsMessengerCreateInfoEXT pCreateInfo,
VkAllocationCallbacks pAllocator,
java.nio.LongBuffer pMessenger)
Create a debug messenger object.
|
static void |
vkDestroyDebugUtilsMessengerEXT(org.lwjgl.vulkan.VkInstance instance,
long messenger,
VkAllocationCallbacks pAllocator)
Destroy a debug messenger object.
|
static void |
vkQueueBeginDebugUtilsLabelEXT(org.lwjgl.vulkan.VkQueue queue,
VkDebugUtilsLabelEXT pLabelInfo)
Open a queue debug label region.
|
static void |
vkQueueEndDebugUtilsLabelEXT(org.lwjgl.vulkan.VkQueue queue)
Close a queue debug label region.
|
static void |
vkQueueInsertDebugUtilsLabelEXT(org.lwjgl.vulkan.VkQueue queue,
VkDebugUtilsLabelEXT pLabelInfo)
Insert a label into a queue.
|
static int |
vkSetDebugUtilsObjectNameEXT(org.lwjgl.vulkan.VkDevice device,
VkDebugUtilsObjectNameInfoEXT pNameInfo)
Give a user-friendly name to an object.
|
static int |
vkSetDebugUtilsObjectTagEXT(org.lwjgl.vulkan.VkDevice device,
VkDebugUtilsObjectTagInfoEXT pTagInfo)
Attach arbitrary data to an object.
|
static void |
vkSubmitDebugUtilsMessageEXT(org.lwjgl.vulkan.VkInstance instance,
int messageSeverity,
int messageTypes,
VkDebugUtilsMessengerCallbackDataEXT pCallbackData)
Inject a message into a debug stream.
|
public static final int VK_EXT_DEBUG_UTILS_SPEC_VERSION
public static final java.lang.String VK_EXT_DEBUG_UTILS_EXTENSION_NAME
public static final int VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT
VkStructureType.
public static final int VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_TAG_INFO_EXT
VkStructureType.
public static final int VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT
VkStructureType.
public static final int VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT
VkStructureType.
public static final int VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT
VkStructureType.
public static final int VK_OBJECT_TYPE_DEBUG_UTILS_MESSENGER_EXT
VkObjectType.public static final int VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT
DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT specifies the most verbose output indicating all diagnostic messages from the Vulkan loader, layers, and drivers should be captured.DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT specifies an informational message such as resource details that may be handy when debugging an application.DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT specifies use of Vulkan that may expose an app bug. Such cases may not be immediately harmful, such as a fragment shader outputting to a location with no attachment. Other cases may point to behavior that is almost certainly bad when unintended such as using an image whose memory has not been filled. In general if you see a warning but you know that the behavior is intended/desired, then simply ignore the warning.DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT specifies that the application has violated a valid usage condition of the specification.VkDebugUtilsMessageSeverityFlagsEXT, SubmitDebugUtilsMessageEXT
public static final int VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT
DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT specifies the most verbose output indicating all diagnostic messages from the Vulkan loader, layers, and drivers should be captured.DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT specifies an informational message such as resource details that may be handy when debugging an application.DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT specifies use of Vulkan that may expose an app bug. Such cases may not be immediately harmful, such as a fragment shader outputting to a location with no attachment. Other cases may point to behavior that is almost certainly bad when unintended such as using an image whose memory has not been filled. In general if you see a warning but you know that the behavior is intended/desired, then simply ignore the warning.DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT specifies that the application has violated a valid usage condition of the specification.VkDebugUtilsMessageSeverityFlagsEXT, SubmitDebugUtilsMessageEXT
public static final int VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT
DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT specifies the most verbose output indicating all diagnostic messages from the Vulkan loader, layers, and drivers should be captured.DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT specifies an informational message such as resource details that may be handy when debugging an application.DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT specifies use of Vulkan that may expose an app bug. Such cases may not be immediately harmful, such as a fragment shader outputting to a location with no attachment. Other cases may point to behavior that is almost certainly bad when unintended such as using an image whose memory has not been filled. In general if you see a warning but you know that the behavior is intended/desired, then simply ignore the warning.DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT specifies that the application has violated a valid usage condition of the specification.VkDebugUtilsMessageSeverityFlagsEXT, SubmitDebugUtilsMessageEXT
public static final int VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT
DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT specifies the most verbose output indicating all diagnostic messages from the Vulkan loader, layers, and drivers should be captured.DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT specifies an informational message such as resource details that may be handy when debugging an application.DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT specifies use of Vulkan that may expose an app bug. Such cases may not be immediately harmful, such as a fragment shader outputting to a location with no attachment. Other cases may point to behavior that is almost certainly bad when unintended such as using an image whose memory has not been filled. In general if you see a warning but you know that the behavior is intended/desired, then simply ignore the warning.DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT specifies that the application has violated a valid usage condition of the specification.VkDebugUtilsMessageSeverityFlagsEXT, SubmitDebugUtilsMessageEXT
public static final int VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT
DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT specifies that some general event has occurred. This is typically a non-specification, non-performance event.DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT specifies that something has occurred during validation against the Vulkan specification that may indicate invalid behavior.DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT specifies a potentially non-optimal use of Vulkan, e.g. using CmdClearColorImage when setting VkAttachmentDescription::loadOp to ATTACHMENT_LOAD_OP_CLEAR would have worked.VkDebugUtilsMessageTypeFlagsEXT
public static final int VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT
DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT specifies that some general event has occurred. This is typically a non-specification, non-performance event.DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT specifies that something has occurred during validation against the Vulkan specification that may indicate invalid behavior.DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT specifies a potentially non-optimal use of Vulkan, e.g. using CmdClearColorImage when setting VkAttachmentDescription::loadOp to ATTACHMENT_LOAD_OP_CLEAR would have worked.VkDebugUtilsMessageTypeFlagsEXT
public static final int VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT
DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT specifies that some general event has occurred. This is typically a non-specification, non-performance event.DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT specifies that something has occurred during validation against the Vulkan specification that may indicate invalid behavior.DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT specifies a potentially non-optimal use of Vulkan, e.g. using CmdClearColorImage when setting VkAttachmentDescription::loadOp to ATTACHMENT_LOAD_OP_CLEAR would have worked.VkDebugUtilsMessageTypeFlagsEXT
public static int nvkSetDebugUtilsObjectNameEXT(org.lwjgl.vulkan.VkDevice device,
long pNameInfo)
SetDebugUtilsObjectNameEXTpublic static int vkSetDebugUtilsObjectNameEXT(org.lwjgl.vulkan.VkDevice device,
VkDebugUtilsObjectNameInfoEXT pNameInfo)
VkResult vkSetDebugUtilsObjectNameEXT(
VkDevice device,
const VkDebugUtilsObjectNameInfoEXT* pNameInfo);
pNameInfo->objectType must not be OBJECT_TYPE_UNKNOWNpNameInfo->objectHandle must not be NULL_HANDLEdevice must be a valid VkDevice handlepNameInfo must be a valid pointer to a valid VkDebugUtilsObjectNameInfoEXT structurepNameInfo.objectHandle must be externally synchronizeddevice - the device that created the object.pNameInfo - a pointer to a VkDebugUtilsObjectNameInfoEXT structure specifying parameters of the name to set on the object.public static int nvkSetDebugUtilsObjectTagEXT(org.lwjgl.vulkan.VkDevice device,
long pTagInfo)
SetDebugUtilsObjectTagEXTpublic static int vkSetDebugUtilsObjectTagEXT(org.lwjgl.vulkan.VkDevice device,
VkDebugUtilsObjectTagInfoEXT pTagInfo)
VkResult vkSetDebugUtilsObjectTagEXT(
VkDevice device,
const VkDebugUtilsObjectTagInfoEXT* pTagInfo);
device must be a valid VkDevice handlepTagInfo must be a valid pointer to a valid VkDebugUtilsObjectTagInfoEXT structurepTagInfo.objectHandle must be externally synchronizeddevice - the device that created the object.pTagInfo - a pointer to a VkDebugUtilsObjectTagInfoEXT structure specifying parameters of the tag to attach to the object.public static void nvkQueueBeginDebugUtilsLabelEXT(org.lwjgl.vulkan.VkQueue queue,
long pLabelInfo)
QueueBeginDebugUtilsLabelEXTpublic static void vkQueueBeginDebugUtilsLabelEXT(org.lwjgl.vulkan.VkQueue queue,
VkDebugUtilsLabelEXT pLabelInfo)
A queue debug label region is opened by calling:
void vkQueueBeginDebugUtilsLabelEXT(
VkQueue queue,
const VkDebugUtilsLabelEXT* pLabelInfo);
queue must be a valid VkQueue handlepLabelInfo must be a valid pointer to a valid VkDebugUtilsLabelEXT structure| Command Buffer Levels | Render Pass Scope | Supported Queue Types | Pipeline Type |
|---|---|---|---|
| - | - | Any | - |
queue - the queue in which to start a debug label region.pLabelInfo - a pointer to a VkDebugUtilsLabelEXT structure specifying parameters of the label region to open.public static void vkQueueEndDebugUtilsLabelEXT(org.lwjgl.vulkan.VkQueue queue)
A queue debug label region is closed by calling:
void vkQueueEndDebugUtilsLabelEXT(
VkQueue queue);
The calls to QueueBeginDebugUtilsLabelEXT and QueueEndDebugUtilsLabelEXT must be matched and balanced.
vkQueueBeginDebugUtilsLabelEXT command prior to the vkQueueEndDebugUtilsLabelEXT on the queuequeue must be a valid VkQueue handle| Command Buffer Levels | Render Pass Scope | Supported Queue Types | Pipeline Type |
|---|---|---|---|
| - | - | Any | - |
queue - the queue in which a debug label region should be closed.public static void nvkQueueInsertDebugUtilsLabelEXT(org.lwjgl.vulkan.VkQueue queue,
long pLabelInfo)
QueueInsertDebugUtilsLabelEXTpublic static void vkQueueInsertDebugUtilsLabelEXT(org.lwjgl.vulkan.VkQueue queue,
VkDebugUtilsLabelEXT pLabelInfo)
A single label can be inserted into a queue by calling:
void vkQueueInsertDebugUtilsLabelEXT(
VkQueue queue,
const VkDebugUtilsLabelEXT* pLabelInfo);
queue must be a valid VkQueue handlepLabelInfo must be a valid pointer to a valid VkDebugUtilsLabelEXT structure| Command Buffer Levels | Render Pass Scope | Supported Queue Types | Pipeline Type |
|---|---|---|---|
| - | - | Any | - |
queue - the queue into which a debug label will be inserted.pLabelInfo - a pointer to a VkDebugUtilsLabelEXT structure specifying parameters of the label to insert.public static void nvkCmdBeginDebugUtilsLabelEXT(org.lwjgl.vulkan.VkCommandBuffer commandBuffer,
long pLabelInfo)
CmdBeginDebugUtilsLabelEXTpublic static void vkCmdBeginDebugUtilsLabelEXT(org.lwjgl.vulkan.VkCommandBuffer commandBuffer,
VkDebugUtilsLabelEXT pLabelInfo)
A command buffer debug label region can be opened by calling:
void vkCmdBeginDebugUtilsLabelEXT(
VkCommandBuffer commandBuffer,
const VkDebugUtilsLabelEXT* pLabelInfo);
commandBuffer must be a valid VkCommandBuffer handlepLabelInfo must be a valid pointer to a valid VkDebugUtilsLabelEXT structurecommandBuffer must be in the recording stateVkCommandPool that commandBuffer was allocated from must support graphics, or compute operationsVkCommandPool that commandBuffer was allocated from must be externally synchronized| Command Buffer Levels | Render Pass Scope | Supported Queue Types | Pipeline Type |
|---|---|---|---|
| Primary Secondary | Both | Graphics Compute |
commandBuffer - the command buffer into which the command is recorded.pLabelInfo - a pointer to a VkDebugUtilsLabelEXT structure specifying parameters of the label region to open.public static void vkCmdEndDebugUtilsLabelEXT(org.lwjgl.vulkan.VkCommandBuffer commandBuffer)
A command buffer label region can be closed by calling:
void vkCmdEndDebugUtilsLabelEXT(
VkCommandBuffer commandBuffer);
An application may open a debug label region in one command buffer and close it in another, or otherwise split debug label regions across multiple command buffers or multiple queue submissions. When viewed from the linear series of submissions to a single queue, the calls to CmdBeginDebugUtilsLabelEXT and CmdEndDebugUtilsLabelEXT must be matched and balanced.
vkCmdBeginDebugUtilsLabelEXT command prior to the vkCmdEndDebugUtilsLabelEXT on the queue that commandBuffer is submitted tocommandBuffer is a secondary command buffer, there must be an outstanding vkCmdBeginDebugUtilsLabelEXT command recorded to commandBuffer that has not previously been ended by a call to vkCmdEndDebugUtilsLabelEXT.commandBuffer must be a valid VkCommandBuffer handlecommandBuffer must be in the recording stateVkCommandPool that commandBuffer was allocated from must support graphics, or compute operationsVkCommandPool that commandBuffer was allocated from must be externally synchronized| Command Buffer Levels | Render Pass Scope | Supported Queue Types | Pipeline Type |
|---|---|---|---|
| Primary Secondary | Both | Graphics Compute |
commandBuffer - the command buffer into which the command is recorded.public static void nvkCmdInsertDebugUtilsLabelEXT(org.lwjgl.vulkan.VkCommandBuffer commandBuffer,
long pLabelInfo)
CmdInsertDebugUtilsLabelEXTpublic static void vkCmdInsertDebugUtilsLabelEXT(org.lwjgl.vulkan.VkCommandBuffer commandBuffer,
VkDebugUtilsLabelEXT pLabelInfo)
A single debug label can be inserted into a command buffer by calling:
void vkCmdInsertDebugUtilsLabelEXT(
VkCommandBuffer commandBuffer,
const VkDebugUtilsLabelEXT* pLabelInfo);
commandBuffer must be a valid VkCommandBuffer handlepLabelInfo must be a valid pointer to a valid VkDebugUtilsLabelEXT structurecommandBuffer must be in the recording stateVkCommandPool that commandBuffer was allocated from must support graphics, or compute operationsVkCommandPool that commandBuffer was allocated from must be externally synchronized| Command Buffer Levels | Render Pass Scope | Supported Queue Types | Pipeline Type |
|---|---|---|---|
| Primary Secondary | Both | Graphics Compute |
commandBuffer - the command buffer into which the command is recorded.public static int nvkCreateDebugUtilsMessengerEXT(org.lwjgl.vulkan.VkInstance instance,
long pCreateInfo,
long pAllocator,
long pMessenger)
CreateDebugUtilsMessengerEXTpublic static int vkCreateDebugUtilsMessengerEXT(org.lwjgl.vulkan.VkInstance instance,
VkDebugUtilsMessengerCreateInfoEXT pCreateInfo,
@Nullable
VkAllocationCallbacks pAllocator,
java.nio.LongBuffer pMessenger)
A debug messenger triggers a debug callback with a debug message when an event of interest occurs. To create a debug messenger which will trigger a debug callback, call:
VkResult vkCreateDebugUtilsMessengerEXT(
VkInstance instance,
const VkDebugUtilsMessengerCreateInfoEXT* pCreateInfo,
const VkAllocationCallbacks* pAllocator,
VkDebugUtilsMessengerEXT* pMessenger);
instance must be a valid VkInstance handlepCreateInfo must be a valid pointer to a valid VkDebugUtilsMessengerCreateInfoEXT structurepAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structurepMessenger must be a valid pointer to a VkDebugUtilsMessengerEXT handleThe application must ensure that CreateDebugUtilsMessengerEXT is not executed in parallel with any Vulkan command that is also called with instance or child of instance as the dispatchable argument.
instance - the instance the messenger will be used with.pCreateInfo - a pointer to a VkDebugUtilsMessengerCreateInfoEXT structure containing the callback pointer, as well as defining conditions under which this messenger will trigger the callback.pAllocator - controls host memory allocation as described in the Memory Allocation chapter.pMessenger - a pointer to a VkDebugUtilsMessengerEXT handle in which the created object is returned.public static void nvkDestroyDebugUtilsMessengerEXT(org.lwjgl.vulkan.VkInstance instance,
long messenger,
long pAllocator)
DestroyDebugUtilsMessengerEXTpublic static void vkDestroyDebugUtilsMessengerEXT(org.lwjgl.vulkan.VkInstance instance,
long messenger,
@Nullable
VkAllocationCallbacks pAllocator)
To destroy a VkDebugUtilsMessengerEXT object, call:
void vkDestroyDebugUtilsMessengerEXT(
VkInstance instance,
VkDebugUtilsMessengerEXT messenger,
const VkAllocationCallbacks* pAllocator);
VkAllocationCallbacks were provided when messenger was created, a compatible set of callbacks must be provided hereVkAllocationCallbacks were provided when messenger was created, pAllocator must be NULLinstance must be a valid VkInstance handlemessenger must be a valid VkDebugUtilsMessengerEXT handlepAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structuremessenger must have been created, allocated, or retrieved from instancemessenger must be externally synchronizedThe application must ensure that DestroyDebugUtilsMessengerEXT is not executed in parallel with any Vulkan command that is also called with instance or child of instance as the dispatchable argument.
instance - the instance where the callback was created.messenger - the VkDebugUtilsMessengerEXT object to destroy. messenger is an externally synchronized object and must not be used on more than one thread at a time. This means that vkDestroyDebugUtilsMessengerEXT must not be called when a callback is active.pAllocator - controls host memory allocation as described in the Memory Allocation chapter.public static void nvkSubmitDebugUtilsMessageEXT(org.lwjgl.vulkan.VkInstance instance,
int messageSeverity,
int messageTypes,
long pCallbackData)
SubmitDebugUtilsMessageEXTpublic static void vkSubmitDebugUtilsMessageEXT(org.lwjgl.vulkan.VkInstance instance,
int messageSeverity,
int messageTypes,
VkDebugUtilsMessengerCallbackDataEXT pCallbackData)
There may be times that a user wishes to intentionally submit a debug message. To do this, call:
void vkSubmitDebugUtilsMessageEXT(
VkInstance instance,
VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity,
VkDebugUtilsMessageTypeFlagsEXT messageTypes,
const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData);
The call will propagate through the layers and generate callback(s) as indicated by the message's flags. The parameters are passed on to the callback in addition to the pUserData value that was defined at the time the messenger was registered.
objectType member of each element of pCallbackData->pObjects must not be OBJECT_TYPE_UNKNOWNinstance must be a valid VkInstance handlemessageSeverity must be a valid VkDebugUtilsMessageSeverityFlagBitsEXT valuemessageTypes must be a valid combination of VkDebugUtilsMessageTypeFlagBitsEXT valuesmessageTypes must not be 0pCallbackData must be a valid pointer to a valid VkDebugUtilsMessengerCallbackDataEXT structureinstance - the debug stream’s VkInstance.messageSeverity - the VkDebugUtilsMessageSeverityFlagBitsEXT severity of this event/message.messageTypes - a bitmask of VkDebugUtilsMessageTypeFlagBitsEXT specifying which type of event(s) to identify with this message.pCallbackData - contains all the callback related data in the VkDebugUtilsMessengerCallbackDataEXT structure.public static int vkCreateDebugUtilsMessengerEXT(org.lwjgl.vulkan.VkInstance instance,
VkDebugUtilsMessengerCreateInfoEXT pCreateInfo,
@Nullable
VkAllocationCallbacks pAllocator,
long[] pMessenger)
CreateDebugUtilsMessengerEXTCopyright LWJGL. All Rights Reserved. License terms.