// This section is included inside the Debugging chapter (debugging.txt) [[debugging-debug-markers]] == Debug Markers Debug markers provide a flexible way for debugging and validation layers to receive annotation and debug information. The <<debugging-object-annotation,Object Annotation>> section describes how to associate a name or binary data with a Vulkan object. The <<debugging-command-buffer-markers,Command Buffer Markers>> section describes how to associate logical elements of the scene with commands in the command buffer. [[debugging-object-annotation]] === Object Annotation The commands in this section allow application developers to associate user-defined information with Vulkan objects at will. [open,refpage='vkDebugMarkerSetObjectNameEXT',desc='Give a user-friendly name to an object',type='protos'] -- An object can be given a user-friendly name by calling: include::../api/protos/vkDebugMarkerSetObjectNameEXT.txt[] * pname:device is the device that created the object. * pname:pNameInfo is a pointer to an instance of the slink:VkDebugMarkerObjectNameInfoEXT structure specifying the parameters of the name to set on the object. include::../validity/protos/vkDebugMarkerSetObjectNameEXT.txt[] -- [open,refpage='VkDebugMarkerObjectNameInfoEXT',desc='Specify parameters of a name to give to an object',type='structs'] -- The sname:VkDebugMarkerObjectNameInfoEXT structure is defined as: include::../api/structs/VkDebugMarkerObjectNameInfoEXT.txt[] * pname:sType is the type of this structure. * pname:pNext is `NULL` or a pointer to an extension-specific structure. * pname:objectType is a elink:VkDebugReportObjectTypeEXT specifying the type of the object to be named. * pname:object is the object to be named. * pname:pObjectName is a null-terminated UTF-8 string specifying the name to apply to pname:object. Applications may: change the name associated with an object simply by calling fname:vkDebugMarkerSetObjectNameEXT again with a new string. To remove a previously set name, pname:pObjectName should: be set to an empty string. .Valid Usage **** * [[VUID-VkDebugMarkerObjectNameInfoEXT-objectType-01490]] pname:objectType must: not be ename:VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT * [[VUID-VkDebugMarkerObjectNameInfoEXT-object-01491]] pname:object must: not be dlink:VK_NULL_HANDLE * [[VUID-VkDebugMarkerObjectNameInfoEXT-object-01492]] pname:object must: be a Vulkan object of the type associated with pname:objectType as defined in <<debug-report-object-types>>. **** include::../validity/structs/VkDebugMarkerObjectNameInfoEXT.txt[] -- [open,refpage='vkDebugMarkerSetObjectTagEXT',desc='Attach arbitrary data to an object',type='protos'] -- 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 sname:VkShaderModule could have additional debugging data attached to it to aid in offline shader tracing. To attach data to an object, call: include::../api/protos/vkDebugMarkerSetObjectTagEXT.txt[] * pname:device is the device that created the object. * pname:pTagInfo is a pointer to an instance of the slink:VkDebugMarkerObjectTagInfoEXT structure specifying the parameters of the tag to attach to the object. include::../validity/protos/vkDebugMarkerSetObjectTagEXT.txt[] -- [open,refpage='VkDebugMarkerObjectTagInfoEXT',desc='Specify parameters of a tag to attach to an object',type='structs'] -- The sname:VkDebugMarkerObjectTagInfoEXT structure is defined as: include::../api/structs/VkDebugMarkerObjectTagInfoEXT.txt[] * pname:sType is the type of this structure. * pname:pNext is `NULL` or a pointer to an extension-specific structure. * pname:objectType is a elink:VkDebugReportObjectTypeEXT specifying the type of the object to be named. * pname:object is the object to be tagged. * pname:tagName is a numerical identifier of the tag. * pname:tagSize is the number of bytes of data to attach to the object. * pname:pTag is an array of pname:tagSize bytes containing the data to be associated with the object. The pname:tagName parameter gives a name or identifier to the type of data being tagged. This can be used by debugging layers to easily filter for only data that can be used by that implementation. .Valid Usage **** * [[VUID-VkDebugMarkerObjectTagInfoEXT-objectType-01493]] pname:objectType must: not be ename:VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT * [[VUID-VkDebugMarkerObjectTagInfoEXT-object-01494]] pname:object must: not be dlink:VK_NULL_HANDLE * [[VUID-VkDebugMarkerObjectTagInfoEXT-object-01495]] pname:object must: be a Vulkan object of the type associated with pname:objectType as defined in <<debug-report-object-types>>. **** include::../validity/structs/VkDebugMarkerObjectTagInfoEXT.txt[] -- [[debugging-command-buffer-markers]] === Command Buffer Markers Typical Vulkan applications will submit many command buffers in each frame, with each command buffer containing a large number of individual commands. Being able to logically annotate regions of command buffers that belong together as well as hierarchically subdivide the frame is important to a developer's ability to navigate the commands viewed holistically. The marker commands fname:vkCmdDebugMarkerBeginEXT and fname:vkCmdDebugMarkerEndEXT define regions of a series of commands that are grouped together, and they can be nested to create a hierarchy. The fname:vkCmdDebugMarkerInsertEXT command allows insertion of a single label within a command buffer. [open,refpage='vkCmdDebugMarkerBeginEXT',desc='Open a command buffer marker region',type='protos'] -- A marker region can be opened by calling: include::../api/protos/vkCmdDebugMarkerBeginEXT.txt[] * pname:commandBuffer is the command buffer into which the command is recorded. * pname:pMarkerInfo is a pointer to an instance of the slink:VkDebugMarkerMarkerInfoEXT structure specifying the parameters of the marker region to open. include::../validity/protos/vkCmdDebugMarkerBeginEXT.txt[] -- [open,refpage='VkDebugMarkerMarkerInfoEXT',desc='Specify parameters of a command buffer marker region',type='structs'] -- The sname:VkDebugMarkerMarkerInfoEXT structure is defined as: include::../api/structs/VkDebugMarkerMarkerInfoEXT.txt[] * pname:sType is the type of this structure. * pname:pNext is `NULL` or a pointer to an extension-specific structure. * pname:pMarkerName is a pointer to a null-terminated UTF-8 string that contains the name of the marker. * pname:color is an optional: RGBA color value that can be associated with the marker. A particular implementation may: choose to ignore this color value. The values contain RGBA values in order, in the range 0.0 to 1.0. If all elements in pname:color are set to 0.0 then it is ignored. include::../validity/structs/VkDebugMarkerMarkerInfoEXT.txt[] -- [open,refpage='vkCmdDebugMarkerEndEXT',desc='Close a command buffer marker region',type='protos'] -- A marker region can be closed by calling: include::../api/protos/vkCmdDebugMarkerEndEXT.txt[] * pname:commandBuffer is the command buffer into which the command is recorded. 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 fname:vkCmdDebugMarkerBeginEXT and fname:vkCmdDebugMarkerEndEXT must: be matched and balanced. .Valid Usage **** * [[VUID-vkCmdDebugMarkerEndEXT-commandBuffer-01239]] There must: be an outstanding flink:vkCmdDebugMarkerBeginEXT command prior to the fname:vkCmdDebugMarkerEndEXT on the queue that pname:commandBuffer is submitted to * [[VUID-vkCmdDebugMarkerEndEXT-commandBuffer-01240]] If pname:commandBuffer is a secondary command buffer, there must: be an outstanding flink:vkCmdDebugMarkerBeginEXT command recorded to pname:commandBuffer that has not previously been ended by a call to flink:vkCmdDebugMarkerEndEXT. **** include::../validity/protos/vkCmdDebugMarkerEndEXT.txt[] -- [open,refpage='vkCmdDebugMarkerInsertEXT',desc='Insert a marker label into a command buffer',type='protos'] -- A single marker label can be inserted into a command buffer by calling: include::../api/protos/vkCmdDebugMarkerInsertEXT.txt[] * pname:commandBuffer is the command buffer into which the command is recorded. * pname:pMarkerInfo is a pointer to an instance of the slink:VkDebugMarkerMarkerInfoEXT structure specifying the parameters of the marker to insert. include::../validity/protos/vkCmdDebugMarkerInsertEXT.txt[] --