# Debug Markers

Dawn provides debug tooling integration for each backend.

Debugging markers are exposed through this API:
```
partial GPUProgrammablePassEncoder {
    void pushDebugGroup(const char * markerLabel);
    void popDebugGroup();
    void insertDebugMarker(const char * markerLabel);
};
```

These APIs will result in silent no-ops if they are used without setting up
the execution environment properly. Each backend has a specific process
for setting up this environment.

## D3D12

Debug markers are currently unimplemented on D3D12 pending resolution of a licensing issue.

## Vulkan

Debug markers on Vulkan are implemented with [VK_EXT_debug_marker](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/html/vkspec.html#VK_EXT_debug_marker).

To enable marker functionality, you must launch your application from your debugging tool. Attaching to an already running application is not supported.

Vulkan markers have been tested with [RenderDoc](https://renderdoc.org/).

## Metal

Debug markers on Metal are used with the XCode debugger.

To enable marker functionality, you must launch your application from XCode and use [GPU Frame Capture](https://developer.apple.com/documentation/metal/tools_profiling_and_debugging/metal_gpu_capture).

## OpenGL

Debug markers on OpenGL are not implemented and will result in a silent no-op. This is due to low adoption of the GL_EXT_debug_marker extension in Linux device drivers.