Safe Haskell | None |
---|---|
Language | Haskell2010 |
Name
VK_EXT_tooling_info - device extension
VK_EXT_tooling_info
- Name String
VK_EXT_tooling_info
- Extension Type
- Device extension
- Registered Extension Number
- 246
- Revision
- 1
- Extension and Version Dependencies
- Requires Vulkan 1.0
- Contact
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
New Structures
New Enums
New Bitmasks
New Enum Constants
EXT_TOOLING_INFO_SPEC_VERSION
Extending
StructureType
:
If VK_EXT_debug_marker is supported:
If VK_EXT_debug_report is supported:
If VK_EXT_debug_utils is supported:
Extending
ToolPurposeFlagBitsEXT
:
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. - and so tying this information directly to layers would’ve been awkward at best.
Version History
Revision 1, 2018-11-05 (Tobias Hector)
- Initial draft
See Also
PhysicalDeviceToolPropertiesEXT
, ToolPurposeFlagBitsEXT
,
ToolPurposeFlagsEXT
, getPhysicalDeviceToolPropertiesEXT
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.
Synopsis
- getPhysicalDeviceToolPropertiesEXT :: forall io. MonadIO io => PhysicalDevice -> io (Result, "toolProperties" ::: Vector PhysicalDeviceToolPropertiesEXT)
- data PhysicalDeviceToolPropertiesEXT = PhysicalDeviceToolPropertiesEXT {}
- type ToolPurposeFlagsEXT = ToolPurposeFlagBitsEXT
- newtype ToolPurposeFlagBitsEXT where
- ToolPurposeFlagBitsEXT Flags
- pattern TOOL_PURPOSE_VALIDATION_BIT_EXT :: ToolPurposeFlagBitsEXT
- pattern TOOL_PURPOSE_PROFILING_BIT_EXT :: ToolPurposeFlagBitsEXT
- pattern TOOL_PURPOSE_TRACING_BIT_EXT :: ToolPurposeFlagBitsEXT
- pattern TOOL_PURPOSE_ADDITIONAL_FEATURES_BIT_EXT :: ToolPurposeFlagBitsEXT
- pattern TOOL_PURPOSE_MODIFYING_FEATURES_BIT_EXT :: ToolPurposeFlagBitsEXT
- pattern TOOL_PURPOSE_DEBUG_MARKERS_BIT_EXT :: ToolPurposeFlagBitsEXT
- pattern TOOL_PURPOSE_DEBUG_REPORTING_BIT_EXT :: ToolPurposeFlagBitsEXT
- type EXT_TOOLING_INFO_SPEC_VERSION = 1
- pattern EXT_TOOLING_INFO_SPEC_VERSION :: forall a. Integral a => a
- type EXT_TOOLING_INFO_EXTENSION_NAME = "VK_EXT_tooling_info"
- pattern EXT_TOOLING_INFO_EXTENSION_NAME :: forall a. (Eq a, IsString a) => a
Documentation
getPhysicalDeviceToolPropertiesEXT Source #
:: forall io. MonadIO io | |
=> PhysicalDevice |
|
-> io (Result, "toolProperties" ::: Vector PhysicalDeviceToolPropertiesEXT) |
vkGetPhysicalDeviceToolPropertiesEXT - Reports properties of tools active on the specified physical device
Description
If pToolProperties
is NULL
, then the number of tools currently
active on physicalDevice
is returned in pToolCount
. Otherwise,
pToolCount
must point to a variable set by the user to the number of
elements in the pToolProperties
array, and on return the variable is
overwritten with the number of structures actually written to
pToolProperties
. If pToolCount
is less than the number of currently
active tools, at most pToolCount
structures will be written.
The count and properties of active tools may change in response to events outside the scope of the specification. An application should assume these properties might change at any given time.
Valid Usage (Implicit)
-
physicalDevice
must be a validPhysicalDevice
handle
-
pToolCount
must be a valid pointer to auint32_t
value -
If the value referenced by
pToolCount
is not0
, andpToolProperties
is notNULL
,pToolProperties
must be a valid pointer to an array ofpToolCount
PhysicalDeviceToolPropertiesEXT
structures
Return Codes
See Also
data PhysicalDeviceToolPropertiesEXT Source #
VkPhysicalDeviceToolPropertiesEXT - Structure providing information about an active tool
Valid Usage (Implicit)
See Also
StructureType
,
ToolPurposeFlagsEXT
, getPhysicalDeviceToolPropertiesEXT
PhysicalDeviceToolPropertiesEXT | |
|
Instances
newtype ToolPurposeFlagBitsEXT Source #
VkToolPurposeFlagBitsEXT - Bitmask specifying the purposes of an active tool
See Also
Instances
type EXT_TOOLING_INFO_SPEC_VERSION = 1 Source #
pattern EXT_TOOLING_INFO_SPEC_VERSION :: forall a. Integral a => a Source #
type EXT_TOOLING_INFO_EXTENSION_NAME = "VK_EXT_tooling_info" Source #
pattern EXT_TOOLING_INFO_EXTENSION_NAME :: forall a. (Eq a, IsString a) => a Source #