VK_EXT_tooling_info(3)

# VK_EXT_tooling_info(3) Manual Page

## Name

VK_EXT_tooling_info - device extension

## Registered Extension Number

246

## Revision

1

## Ratification Status

Not ratified

## Extension and Version Dependencies

None

## API Interactions

- Interacts with VK_EXT_debug_marker

- Interacts with VK_EXT_debug_report

- Interacts with VK_EXT_debug_utils

## Deprecation State

- Promoted to Vulkan 1.3

## Contact

- Tobias Hector [GitHub]tobski

## Other Extension Metadata

Last Modified Date

  2018-11-05

Contributors

  - Rolando Caloca

  - Matthaeus Chajdas

  - Baldur Karlsson

  - Daniel Rakos

## Description

When an error occurs during application development, a common question is "What tools are actually running right now?" This extension adds the ability to query that information directly from the Vulkan implementation.

Outdated versions of one tool might not play nicely with another, or perhaps a tool is not actually running when it should have been. Trying to figure that out can cause headaches as it is necessary to consult each known tool to figure out what is going on — in some cases the tool might not even be known.

Typically, the expectation is that developers will simply print out this information for visual inspection when an issue occurs, however a small amount of semantic information about what the tool is doing is provided to help identify it programmatically. For example, if the advertised limits or features of an implementation are unexpected, is there a tool active which modifies these limits? Or if an application is providing debug markers, but the implementation is not actually doing anything with that information, this can quickly point that out.

## New Commands

- vkGetPhysicalDeviceToolPropertiesEXT

## New Structures

- VkPhysicalDeviceToolPropertiesEXT

## New Enums

- VkToolPurposeFlagBitsEXT

## New Bitmasks

- VkToolPurposeFlagsEXT

## New Enum Constants

- `VK_EXT_TOOLING_INFO_EXTENSION_NAME`

- `VK_EXT_TOOLING_INFO_SPEC_VERSION`

- Extending VkStructureType:

  - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TOOL_PROPERTIES_EXT

- Extending VkToolPurposeFlagBits:

  - VK_TOOL_PURPOSE_ADDITIONAL_FEATURES_BIT_EXT

  - VK_TOOL_PURPOSE_MODIFYING_FEATURES_BIT_EXT

  - VK_TOOL_PURPOSE_PROFILING_BIT_EXT

  - VK_TOOL_PURPOSE_TRACING_BIT_EXT

  - VK_TOOL_PURPOSE_VALIDATION_BIT_EXT

If VK_EXT_debug_marker is supported:

- Extending VkToolPurposeFlagBits:

  - VK_TOOL_PURPOSE_DEBUG_MARKERS_BIT_EXT

If VK_EXT_debug_report is supported:

- Extending VkToolPurposeFlagBits:

  - VK_TOOL_PURPOSE_DEBUG_REPORTING_BIT_EXT

If VK_EXT_debug_utils is supported:

- Extending VkToolPurposeFlagBits:

  - VK_TOOL_PURPOSE_DEBUG_MARKERS_BIT_EXT

  - VK_TOOL_PURPOSE_DEBUG_REPORTING_BIT_EXT

## Promotion to Vulkan 1.3

Vulkan APIs in this extension are included in core Vulkan 1.3, with the EXT suffix omitted. External interactions defined by this extension, such as SPIR-V token names, retain their original names. The original Vulkan API names are still available as aliases of the core functionality.

## Examples

Printing Tool Information

    uint32_t num_tools;
    VkPhysicalDeviceToolPropertiesEXT *pToolProperties;
    vkGetPhysicalDeviceToolPropertiesEXT(physicalDevice, &num_tools, NULL);

    pToolProperties = (VkPhysicalDeviceToolPropertiesEXT*)malloc(sizeof(VkPhysicalDeviceToolPropertiesEXT) * num_tools);

    vkGetPhysicalDeviceToolPropertiesEXT(physicalDevice, &num_tools, pToolProperties);

    for (int i = 0; i < num_tools; ++i) {
        printf("%s:\n", pToolProperties[i].name);
        printf("Version:\n");
        printf("%s:\n", pToolProperties[i].version);
        printf("Description:\n");
        printf("\t%s\n", pToolProperties[i].description);
        printf("Purposes:\n");
        printf("\t%s\n", VkToolPurposeFlagBitsEXT_to_string(pToolProperties[i].purposes));
        if (strnlen_s(pToolProperties[i].layer,VK_MAX_EXTENSION_NAME_SIZE) > 0) {
            printf("Corresponding Layer:\n");
            printf("\t%s\n", pToolProperties[i].layer);
        }
    }

## Issues

1) Why is this information separate from the layer mechanism?

Some tooling may be built into a driver, or be part of the Vulkan loader etc. Tying this information directly to layers would have been awkward at best.

## Version History

- Revision 1, 2018-11-05 (Tobias Hector)

  - Initial draft

## See Also

No cross-references are available

## Document Notes

For more information, see the Vulkan Specification.

This page is a generated document. Fixes and changes should be made to the generator scripts, not directly.

## Copyright

Copyright 2014-2026 The Khronos Group Inc.

SPDX-License-Identifier: CC-BY-4.0