public class EXTDebugMarker
extends java.lang.Object
VK_EXT_debug_marker extension is a device extension. It introduces concepts of object naming and tagging, for better tracking of Vulkan objects, as well as additional commands for recording annotations of named sections of a workload to aid organization and offline analysis in external tools.
Example 1
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_vkDebugMarkerSetObjectNameEXT pfnDebugMarkerSetObjectNameEXT = (PFN_vkDebugMarkerSetObjectNameEXT)vkGetDeviceProcAddr(device, "vkDebugMarkerSetObjectNameEXT");
// Set a name on the image
const VkDebugMarkerObjectNameInfoEXT imageNameInfo =
{
VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT, // sType
NULL, // pNext
VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT, // objectType
(uint64_t)image, // object
"Brick Diffuse Texture", // pObjectName
};
pfnDebugMarkerSetObjectNameEXT(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 2
Annotating regions of a workload with naming information so that offline analysis tools can display a more usable visualisation of the commands submitted.
extern VkDevice device;
extern VkCommandBuffer commandBuffer;
// Must call extension functions through a function pointer:
PFN_vkCmdDebugMarkerBeginEXT pfnCmdDebugMarkerBeginEXT = (PFN_vkCmdDebugMarkerBeginEXT)vkGetDeviceProcAddr(device, "vkCmdDebugMarkerBeginEXT");
PFN_vkCmdDebugMarkerEndEXT pfnCmdDebugMarkerEndEXT = (PFN_vkCmdDebugMarkerEndEXT)vkGetDeviceProcAddr(device, "vkCmdDebugMarkerEndEXT");
PFN_vkCmdDebugMarkerInsertEXT pfnCmdDebugMarkerInsertEXT = (PFN_vkCmdDebugMarkerInsertEXT)vkGetDeviceProcAddr(device, "vkCmdDebugMarkerInsertEXT");
// Describe the area being rendered
const VkDebugMarkerMarkerInfoEXT houseMarker =
{
VK_STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT, // sType
NULL, // pNext
"Brick House", // pMarkerName
{ 1.0f, 0.0f, 0.0f, 1.0f }, // color
};
// Start an annotated group of calls under the 'Brick House' name
pfnCmdDebugMarkerBeginEXT(commandBuffer, &houseMarker);
{
// A mutable structure for each part being rendered
VkDebugMarkerMarkerInfoEXT housePartMarker =
{
VK_STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT, // sType
NULL, // pNext
NULL, // pMarkerName
{ 0.0f, 0.0f, 0.0f, 0.0f }, // color
};
// Set the name and insert the marker
housePartMarker.pMarkerName = "Walls";
pfnCmdDebugMarkerInsertEXT(commandBuffer, &housePartMarker);
// Insert the drawcall for the walls
vkCmdDrawIndexed(commandBuffer, 1000, 1, 0, 0, 0);
// Insert a recursive region for two sets of windows
housePartMarker.pMarkerName = "Windows";
pfnCmdDebugMarkerBeginEXT(commandBuffer, &housePartMarker);
{
vkCmdDrawIndexed(commandBuffer, 75, 6, 1000, 0, 0);
vkCmdDrawIndexed(commandBuffer, 100, 2, 1450, 0, 0);
}
pfnCmdDebugMarkerEndEXT(commandBuffer);
housePartMarker.pMarkerName = "Front Door";
pfnCmdDebugMarkerInsertEXT(commandBuffer, &housePartMarker);
vkCmdDrawIndexed(commandBuffer, 350, 1, 1650, 0, 0);
housePartMarker.pMarkerName = "Roof";
pfnCmdDebugMarkerInsertEXT(commandBuffer, &housePartMarker);
vkCmdDrawIndexed(commandBuffer, 500, 1, 2000, 0, 0);
}
// End the house annotation started above
pfnCmdDebugMarkerEndEXT(commandBuffer);
VK_EXT_debug_markerVK_EXT_debug_reportVK_EXT_debug_utils extension| Modifier and Type | Field and Description |
|---|---|
static java.lang.String |
VK_EXT_DEBUG_MARKER_EXTENSION_NAME
The extension name.
|
static int |
VK_EXT_DEBUG_MARKER_SPEC_VERSION
The extension specification version.
|
static int |
VK_STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT
Extends
VkStructureType. |
static int |
VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT
Extends
VkStructureType. |
static int |
VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_TAG_INFO_EXT
Extends
VkStructureType. |
| Modifier and Type | Method and Description |
|---|---|
static void |
nvkCmdDebugMarkerBeginEXT(org.lwjgl.vulkan.VkCommandBuffer commandBuffer,
long pMarkerInfo)
Unsafe version of:
CmdDebugMarkerBeginEXT |
static void |
nvkCmdDebugMarkerInsertEXT(org.lwjgl.vulkan.VkCommandBuffer commandBuffer,
long pMarkerInfo)
Unsafe version of:
CmdDebugMarkerInsertEXT |
static int |
nvkDebugMarkerSetObjectNameEXT(org.lwjgl.vulkan.VkDevice device,
long pNameInfo)
Unsafe version of:
DebugMarkerSetObjectNameEXT |
static int |
nvkDebugMarkerSetObjectTagEXT(org.lwjgl.vulkan.VkDevice device,
long pTagInfo)
Unsafe version of:
DebugMarkerSetObjectTagEXT |
static void |
vkCmdDebugMarkerBeginEXT(org.lwjgl.vulkan.VkCommandBuffer commandBuffer,
VkDebugMarkerMarkerInfoEXT pMarkerInfo)
Open a command buffer marker region.
|
static void |
vkCmdDebugMarkerEndEXT(org.lwjgl.vulkan.VkCommandBuffer commandBuffer)
Close a command buffer marker region.
|
static void |
vkCmdDebugMarkerInsertEXT(org.lwjgl.vulkan.VkCommandBuffer commandBuffer,
VkDebugMarkerMarkerInfoEXT pMarkerInfo)
Insert a marker label into a command buffer.
|
static int |
vkDebugMarkerSetObjectNameEXT(org.lwjgl.vulkan.VkDevice device,
VkDebugMarkerObjectNameInfoEXT pNameInfo)
Give a user-friendly name to an object.
|
static int |
vkDebugMarkerSetObjectTagEXT(org.lwjgl.vulkan.VkDevice device,
VkDebugMarkerObjectTagInfoEXT pTagInfo)
Attach arbitrary data to an object.
|
public static final int VK_EXT_DEBUG_MARKER_SPEC_VERSION
public static final java.lang.String VK_EXT_DEBUG_MARKER_EXTENSION_NAME
public static final int VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT
VkStructureType.
public static final int VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_TAG_INFO_EXT
VkStructureType.
public static final int VK_STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT
VkStructureType.
public static int nvkDebugMarkerSetObjectTagEXT(org.lwjgl.vulkan.VkDevice device,
long pTagInfo)
DebugMarkerSetObjectTagEXTpublic static int vkDebugMarkerSetObjectTagEXT(org.lwjgl.vulkan.VkDevice device,
VkDebugMarkerObjectTagInfoEXT pTagInfo)
In addition to setting a name for an object, debugging and validation layers may have uses for additional binary data on a per-object basis that has no other place in the Vulkan API. For example, a VkShaderModule could have additional debugging data attached to it to aid in offline shader tracing. To attach data to an object, call:
VkResult vkDebugMarkerSetObjectTagEXT(
VkDevice device,
const VkDebugMarkerObjectTagInfoEXT* pTagInfo);
device must be a valid VkDevice handlepTagInfo must be a valid pointer to a valid VkDebugMarkerObjectTagInfoEXT structurepTagInfo.object must be externally synchronizeddevice - the device that created the object.pTagInfo - a pointer to a VkDebugMarkerObjectTagInfoEXT structure specifying the parameters of the tag to attach to the object.public static int nvkDebugMarkerSetObjectNameEXT(org.lwjgl.vulkan.VkDevice device,
long pNameInfo)
DebugMarkerSetObjectNameEXTpublic static int vkDebugMarkerSetObjectNameEXT(org.lwjgl.vulkan.VkDevice device,
VkDebugMarkerObjectNameInfoEXT pNameInfo)
An object can be given a user-friendly name by calling:
VkResult vkDebugMarkerSetObjectNameEXT(
VkDevice device,
const VkDebugMarkerObjectNameInfoEXT* pNameInfo);
device must be a valid VkDevice handlepNameInfo must be a valid pointer to a valid VkDebugMarkerObjectNameInfoEXT structurepNameInfo.object must be externally synchronizeddevice - the device that created the object.pNameInfo - a pointer to a VkDebugMarkerObjectNameInfoEXT structure specifying the parameters of the name to set on the object.public static void nvkCmdDebugMarkerBeginEXT(org.lwjgl.vulkan.VkCommandBuffer commandBuffer,
long pMarkerInfo)
CmdDebugMarkerBeginEXTpublic static void vkCmdDebugMarkerBeginEXT(org.lwjgl.vulkan.VkCommandBuffer commandBuffer,
VkDebugMarkerMarkerInfoEXT pMarkerInfo)
A marker region can be opened by calling:
void vkCmdDebugMarkerBeginEXT(
VkCommandBuffer commandBuffer,
const VkDebugMarkerMarkerInfoEXT* pMarkerInfo);
commandBuffer must be a valid VkCommandBuffer handlepMarkerInfo must be a valid pointer to a valid VkDebugMarkerMarkerInfoEXT 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.pMarkerInfo - a pointer to a VkDebugMarkerMarkerInfoEXT structure specifying the parameters of the marker region to open.public static void vkCmdDebugMarkerEndEXT(org.lwjgl.vulkan.VkCommandBuffer commandBuffer)
A marker region can be closed by calling:
void vkCmdDebugMarkerEndEXT(
VkCommandBuffer commandBuffer);
An application may open a marker region in one command buffer and close it in another, or otherwise split marker regions across multiple command buffers or multiple queue submissions. When viewed from the linear series of submissions to a single queue, the calls to vkCmdDebugMarkerBeginEXT and vkCmdDebugMarkerEndEXT must be matched and balanced.
CmdDebugMarkerBeginEXT command prior to the vkCmdDebugMarkerEndEXT on the queue that commandBuffer is submitted tocommandBuffer is a secondary command buffer, there must be an outstanding CmdDebugMarkerBeginEXT command recorded to commandBuffer that has not previously been ended by a call to CmdDebugMarkerEndEXT.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 nvkCmdDebugMarkerInsertEXT(org.lwjgl.vulkan.VkCommandBuffer commandBuffer,
long pMarkerInfo)
CmdDebugMarkerInsertEXTpublic static void vkCmdDebugMarkerInsertEXT(org.lwjgl.vulkan.VkCommandBuffer commandBuffer,
VkDebugMarkerMarkerInfoEXT pMarkerInfo)
A single marker label can be inserted into a command buffer by calling:
void vkCmdDebugMarkerInsertEXT(
VkCommandBuffer commandBuffer,
const VkDebugMarkerMarkerInfoEXT* pMarkerInfo);
commandBuffer must be a valid VkCommandBuffer handlepMarkerInfo must be a valid pointer to a valid VkDebugMarkerMarkerInfoEXT 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.pMarkerInfo - a pointer to a VkDebugMarkerMarkerInfoEXT structure specifying the parameters of the marker to insert.Copyright LWJGL. All Rights Reserved. License terms.