HORIZON HASKELLDocslts/ghc-10.0.xfc4e5982026-10-11Search names, modules, packages, or :: a typeCtrl K

GHC 10.0.0.20260917 · lts/ghc-10.0.x · fc4e598 · 2026-10-11

Modulevulkan-3.27GHC2021

Vulkan.Extensions.VK_EXT_debug_report

Name

VK_EXT_debug_report - instance extension

VK_EXT_debug_report

Name String

VK_EXT_debug_report

Extension Type

Instance extension

Registered Extension Number

12

Revision

10

Ratification Status

Not ratified

Extension and Version Dependencies

None

API Interactions
  • Interacts with VK_VERSION_1_1

Deprecation State
Special Use
Contact

Other Extension Metadata

Last Modified Date

2020-12-14

IP Status

No known IP claims.

Contributors
  • Courtney Goeltzenleuchter, LunarG

  • Dan Ginsburg, Valve

  • Jon Ashburn, LunarG

  • Mark Lobodzinski, LunarG

Description

Due to the nature of the Vulkan interface, there is very little error information available to the developer and application. By enabling optional validation layers and using the VK_EXT_debug_report extension, developers can obtain much more detailed feedback on the application’s use of Vulkan. This extension defines a way for layers and the implementation to call back to the application for events of interest to the application.

New Object Types

New Commands

New Structures

New Function Pointers

New Enums

New Bitmasks

New Enum Constants

If Vulkan Version 1.1 is supported:

Examples

VK_EXT_debug_report allows an application to register multiple callbacks with the validation layers. Some callbacks may log the information to a file, others may cause a debug break point or other application-defined behavior. An application can register callbacks even when no validation layers are enabled, but they will only be called for loader and, if implemented, driver events.

To capture events that occur while creating or destroying an instance an application can link a DebugReportCallbackCreateInfoEXT structure to the pNext chain of the InstanceCreateInfo structure passed to createInstance.

Example uses: Create three callback objects. One will log errors and warnings to the debug console using Windows OutputDebugString. The second will cause the debugger to break at that callback when an error happens and the third will log warnings to stdout.

    VkResult res;
    VkDebugReportCallbackEXT cb1, cb2, cb3;

    VkDebugReportCallbackCreateInfoEXT callback1 = {
        .sType = VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT,
        .pNext = NULL,
        .flags = VK_DEBUG_REPORT_ERROR_BIT_EXT |
                 VK_DEBUG_REPORT_WARNING_BIT_EXT,
        .pfnCallback = myOutputDebugString,
        .pUserData = NULL
    };
    res = vkCreateDebugReportCallbackEXT(instance, &callback1, &cb1);
    if (res != VK_SUCCESS)
       

    callback.flags = VK_DEBUG_REPORT_ERROR_BIT_EXT;
    callback.pfnCallback = myDebugBreak;
    callback.pUserData = NULL;
    res = vkCreateDebugReportCallbackEXT(instance, &callback, &cb2);
    if (res != VK_SUCCESS)
       

    VkDebugReportCallbackCreateInfoEXT callback3 = {
        .sType = VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT,
        .pNext = NULL,
        .flags = VK_DEBUG_REPORT_WARNING_BIT_EXT,
        .pfnCallback = mystdOutLogger,
        .pUserData = NULL
    };
    res = vkCreateDebugReportCallbackEXT(instance, &callback3, &cb3);
    if (res != VK_SUCCESS)
       

    ...

    
    vkDestroyDebugReportCallbackEXT(instance, cb1);
    vkDestroyDebugReportCallbackEXT(instance, cb2);
    vkDestroyDebugReportCallbackEXT(instance, cb3);

In the initial release of the VK_EXT_debug_report extension, the token STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT was used. Starting in version 2 of the extension branch, STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT is used instead for consistency with Vulkan naming rules. The older enum is still available for backwards compatibility.

In the initial release of the VK_EXT_debug_report extension, the token DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_EXT was used. Starting in version 8 of the extension branch, DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT_EXT is used instead for consistency with Vulkan naming rules. The older enum is still available for backwards compatibility.

Issues

1) What is the hierarchy / seriousness of the message flags? E.g. ERROR > WARN > PERF_WARN …​

RESOLVED: There is no specific hierarchy. Each bit is independent and should be checked via bitwise AND. For example:

    if (localFlags & VK_DEBUG_REPORT_ERROR_BIT_EXT) {
        process error message
    }
    if (localFlags & VK_DEBUG_REPORT_DEBUG_BIT_EXT) {
        process debug message
    }

The validation layers do use them in a hierarchical way (ERROR > WARN > PERF, WARN > DEBUG > INFO) and they (at least at the time of this writing) only set one bit at a time. But it is not a requirement of this extension.

It is possible that a layer may intercept and change, or augment the flags with extension values the application’s debug report handler may not be familiar with, so it is important to treat each flag independently.

2) Should there be a VU requiring DebugReportCallbackCreateInfoEXT::flags to be non-zero?

RESOLVED: It may not be very useful, but we do not need VU statement requiring the DebugReportCallbackCreateInfoEXT::msgFlags at create-time to be non-zero. One can imagine that apps may prefer it as it allows them to set the mask as desired - including nothing - at runtime without having to check.

3) What is the difference between DEBUG_REPORT_DEBUG_BIT_EXT and DEBUG_REPORT_INFORMATION_BIT_EXT?

RESOLVED: DEBUG_REPORT_DEBUG_BIT_EXT specifies information that could be useful debugging the Vulkan implementation itself.

4) How do you compare handles returned by the debug_report callback to the application’s handles?

RESOLVED: Due to the different nature of dispatchable and nondispatchable handles there is no generic way (that we know of) that works for common C and C++ compilers in both 32-bit and 64-bit ABIs. We recommend applications use the same cast that the validation layers use:

+

reinterpret_cast<uint64_t &>(dispatchableHandle)
(uint64_t)(nondispatchableHandle)

+ This does require that the application treat dispatchable and nondispatchable handles differently.

Version History

  • Revision 1, 2015-05-20 (Courtney Goetzenleuchter)

    • Initial draft, based on LunarG KHR spec, other KHR specs

  • Revision 2, 2016-02-16 (Courtney Goetzenleuchter)

    • Update usage, documentation

  • Revision 3, 2016-06-14 (Courtney Goetzenleuchter)

    • Update VK_EXT_DEBUG_REPORT_SPEC_VERSION to indicate added support for vkCreateInstance and vkDestroyInstance

  • Revision 4, 2016-12-08 (Mark Lobodzinski)

    • Added Display_KHR, DisplayModeKHR extension objects

    • Added ObjectTable_NVX, IndirectCommandsLayout_NVX extension objects

    • Bumped spec revision

    • Retroactively added version history

  • Revision 5, 2017-01-31 (Baldur Karlsson)

  • Revision 6, 2017-01-31 (Baldur Karlsson)

    • Added VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_KHR_EXT

  • Revision 7, 2017-04-20 (Courtney Goeltzenleuchter)

    • Clarify wording and address questions from developers.

  • Revision 8, 2017-04-21 (Courtney Goeltzenleuchter)

    • Remove unused enum VkDebugReportErrorEXT

  • Revision 9, 2017-09-12 (Tobias Hector)

    • Added interactions with Vulkan 1.1

  • Revision 10, 2020-12-14 (Courtney Goetzenleuchter)

    • Add issue 4 discussing matching handles returned by the extension, based on suggestion in public issue 368.

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.

  • 9 types
  • 4 values
  • Packagevulkan-3.27
  • Exports65
  • LanguageGHC2021
  • LicenceBSD-3-Clause
  • SourceVK_EXT_debug_report.hs
valuecreateDebugReportCallbackEXT
  1. :: MonadIO io
  2. => Instance

    instance is the instance the callback will be logged on.

  3. -> DebugReportCallbackCreateInfoEXT

    pCreateInfo is a pointer to a DebugReportCallbackCreateInfoEXT structure defining the conditions under which this callback will be called.

  4. -> "allocator" ::: Maybe AllocationCallbacks

    pAllocator controls host memory allocation as described in the Memory Allocation chapter.

  5. -> io DebugReportCallbackEXT
#

vkCreateDebugReportCallbackEXT - Create a debug report callback object

Valid Usage (Implicit)

  • instance must be a valid Instance handle

Return Codes

Success
Failure

See Also

VK_EXT_debug_report, AllocationCallbacks, DebugReportCallbackCreateInfoEXT, DebugReportCallbackEXT, Instance

A convenience wrapper to make a compatible pair of calls to createDebugReportCallbackEXT and destroyDebugReportCallbackEXT

To ensure that destroyDebugReportCallbackEXT is always called: pass bracket (or the allocate function from your favourite resource management library) as the last argument. To just extract the pair pass (,) as the last argument.

valuedestroyDebugReportCallbackEXT
  1. :: MonadIO io
  2. => Instance

    instance is the instance where the callback was created.

  3. -> DebugReportCallbackEXT

    callback is the DebugReportCallbackEXT object to destroy. callback is an externally synchronized object and must not be used on more than one thread at a time. This means that destroyDebugReportCallbackEXT must not be called when a callback is active.

  4. -> "allocator" ::: Maybe AllocationCallbacks

    pAllocator controls host memory allocation as described in the Memory Allocation chapter.

  5. -> io ()
#

vkDestroyDebugReportCallbackEXT - Destroy a debug report callback object

Valid Usage

  • If AllocationCallbacks were provided when callback was created, a compatible set of callbacks must be provided here

Valid Usage (Implicit)

  • instance must be a valid Instance handle

  • If callback is not NULL_HANDLE, callback must be a valid DebugReportCallbackEXT handle

  • If pAllocator is not NULL, pAllocator must be a valid pointer to a valid AllocationCallbacks structure

  • If callback is a valid handle, it must have been created, allocated, or retrieved from instance

Host Synchronization

  • Host access to callback must be externally synchronized

See Also

VK_EXT_debug_report, AllocationCallbacks, DebugReportCallbackEXT, Instance

valuedebugReportMessageEXT
  1. :: MonadIO io
  2. => Instance

    instance is the debug stream’s Instance.

  3. -> DebugReportFlagsEXT

    flags specifies the DebugReportFlagBitsEXT classification of this event/message.

  4. -> DebugReportObjectTypeEXT

    objectType is a DebugReportObjectTypeEXT specifying the type of object being used or created at the time the event was triggered.

  5. -> "object" ::: Word64

    object is the object where the issue was detected. object can be NULL_HANDLE if there is no object associated with the event.

  6. -> "location" ::: Word64

    location is an application-defined value.

  7. -> "messageCode" ::: Int32

    messageCode is an application-defined value.

  8. -> "layerPrefix" ::: ByteString

    pLayerPrefix is the abbreviation of the component making this event/message.

  9. -> "message" ::: ByteString

    pMessage is a null-terminated UTF-8 string detailing the trigger conditions.

  10. -> io ()
#

vkDebugReportMessageEXT - Inject a message into a debug stream

Description

The call will propagate through the layers and generate callback(s) as indicated by the message’s flags. The parameters are passed on to the callback in addition to the pUserData value that was defined at the time the callback was registered.

Valid Usage

Valid Usage (Implicit)

  • instance must be a valid Instance handle

  • flags must be a valid combination of DebugReportFlagBitsEXT values

  • flags must not be 0

  • objectType must be a valid DebugReportObjectTypeEXT value

  • pLayerPrefix must be a null-terminated UTF-8 string

  • pMessage must be a null-terminated UTF-8 string

See Also

VK_EXT_debug_report, DebugReportFlagsEXT, DebugReportObjectTypeEXT, Instance

VkDebugReportCallbackCreateInfoEXT - Structure specifying parameters of a newly created debug report callback

Description

For each DebugReportCallbackEXT that is created the DebugReportCallbackCreateInfoEXT::flags determine when that DebugReportCallbackCreateInfoEXT::pfnCallback is called. When an event happens, the implementation will do a bitwise AND of the event’s DebugReportFlagBitsEXT flags to each DebugReportCallbackEXT object’s flags. For each non-zero result the corresponding callback will be called. The callback will come directly from the component that detected the event, unless some other layer intercepts the calls for its own purposes (filter them in a different way, log to a system error log, etc.).

An application may receive multiple callbacks if multiple DebugReportCallbackEXT objects were created. A callback will always be executed in the same thread as the originating Vulkan call.

A callback may be called from multiple threads simultaneously (if the application is making Vulkan calls from multiple threads).

Structure Chaining

Extends the structure

See Also

PFN_vkDebugReportCallbackEXT, VK_EXT_debug_report, DebugReportFlagsEXT, StructureType, createDebugReportCallbackEXT

Constructors

Instances5Show, Storable, FromCStruct, ToCStruct, Zero
newtypenewtype DebugReportFlagBitsEXT
#

VkDebugReportFlagBitsEXT - Bitmask specifying events which cause a debug report callback

Description

See Also

VK_EXT_debug_report, DebugReportFlagsEXT

Instances8Eq, Ord, Read, Show, Bits, FiniteBits, …
newtypenewtype DebugReportObjectTypeEXT
#

VkDebugReportObjectTypeEXT - Specify the type of an object handle

Description

'

DebugReportObjectTypeEXT

Vulkan Handle Type

DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT

Unknown/Undefined Handle

DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT

Instance

DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT

PhysicalDevice

DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT

Device

DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT

Queue

DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT

Semaphore

DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT

CommandBuffer

DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT

Fence

DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT

DeviceMemory

DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT

Buffer

DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT

Image

DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT

Event

DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT

QueryPool

DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT

BufferView

DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT

ImageView

DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT

ShaderModule

DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT

PipelineCache

DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT

PipelineLayout

DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT

RenderPass

DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT

Pipeline

DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT

DescriptorSetLayout

DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT

Sampler

DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT

DescriptorPool

DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT

DescriptorSet

DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT

Framebuffer

DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT

CommandPool

DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT

SurfaceKHR

DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT

SwapchainKHR

DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT_EXT

DebugReportCallbackEXT

DEBUG_REPORT_OBJECT_TYPE_DISPLAY_KHR_EXT

DisplayKHR

DEBUG_REPORT_OBJECT_TYPE_DISPLAY_MODE_KHR_EXT

DisplayModeKHR

DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_EXT

DescriptorUpdateTemplate

DebugReportObjectTypeEXT and Vulkan Handle Relationship

The primary expected use of ERROR_VALIDATION_FAILED_EXT is for validation layer testing to prevent invalid commands from reaching the ICD. It is not expected that an application would see this error code during normal use of the validation layers. If an application returns TRUE in DebugUtilsMessengerCallbackDataEXT, the validation layers will return this error code instead of passing the command down the dispatch chain.

See Also

PFN_vkDebugReportCallbackEXT, VK_EXT_debug_marker, VK_EXT_debug_report, DebugMarkerObjectNameInfoEXT, DebugMarkerObjectTagInfoEXT, debugReportMessageEXT

Instances6Eq, Ord, Read, Show, Storable, Zero

PFN_vkDebugReportCallbackEXT - Application-defined debug report callback function

Description

The callback must not call destroyDebugReportCallbackEXT.

The callback returns a Bool32, which is interpreted in a layer-specified manner. The application should always return FALSE. The TRUE value is reserved for use in layer development.

object must be a Vulkan object or NULL_HANDLE. If objectType is not DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT and object is not NULL_HANDLE, object must be a Vulkan object of the corresponding type associated with objectType as defined in https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#debug-report-object-types.

See Also

VK_EXT_debug_report, Bool32, DebugReportCallbackCreateInfoEXT, DebugReportFlagsEXT, DebugReportObjectTypeEXT

newtypenewtype DebugReportCallbackEXT
#

VkDebugReportCallbackEXT - Opaque handle to a debug report callback object

See Also

VK_DEFINE_NON_DISPATCHABLE_HANDLE, VK_EXT_debug_report, createDebugReportCallbackEXT, destroyDebugReportCallbackEXT

Instances7Eq, Ord, Show, Storable, HasObjectType, IsHandle, …