vulkan-3.21.1: Bindings to the Vulkan graphics API.
Safe HaskellNone
LanguageHaskell2010

Vulkan.Extensions.VK_EXT_debug_utils

Description

Name

VK_EXT_debug_utils - instance extension

VK_EXT_debug_utils

Name String
VK_EXT_debug_utils
Extension Type
Instance extension
Registered Extension Number
129
Revision
2
Extension and Version Dependencies
  • Requires support for Vulkan 1.0
Special Use
Contact

Other Extension Metadata

Last Modified Date
2020-04-03
Revision
2
IP Status
No known IP claims.
Dependencies
  • This extension is written against version 1.0 of the Vulkan API.
  • Requires ObjectType
Contributors
  • Mark Young, LunarG
  • Baldur Karlsson
  • Ian Elliott, Google
  • Courtney Goeltzenleuchter, Google
  • Karl Schultz, LunarG
  • Mark Lobodzinski, LunarG
  • Mike Schuchardt, LunarG
  • Jaakko Konttinen, AMD
  • Dan Ginsburg, Valve Software
  • Rolando Olivares, Epic Games
  • Dan Baker, Oxide Games
  • Kyle Spagnoli, NVIDIA
  • Jon Ashburn, LunarG
  • Piers Daniell, NVIDIA

Description

Due to the nature of the Vulkan interface, there is very little error information available to the developer and application. By using the VK_EXT_debug_utils extension, developers can obtain more information. When combined with validation layers, even more detailed feedback on the application’s use of Vulkan will be provided.

This extension provides the following capabilities:

  • The ability to create a debug messenger which will pass along debug messages to an application supplied callback.
  • The ability to identify specific Vulkan objects using a name or tag to improve tracking.
  • The ability to identify specific sections within a Queue or CommandBuffer using labels to aid organization and offline analysis in external tools.

The main difference between this extension and VK_EXT_debug_report and VK_EXT_debug_marker is that those extensions use DebugReportObjectTypeEXT to identify objects. This extension uses the core ObjectType in place of DebugReportObjectTypeEXT. The primary reason for this move is that no future object type handle enumeration values will be added to DebugReportObjectTypeEXT since the creation of ObjectType.

In addition, this extension combines the functionality of both VK_EXT_debug_report and VK_EXT_debug_marker by allowing object name and debug markers (now called labels) to be returned to the application’s callback function. This should assist in clarifying the details of a debug message including: what objects are involved and potentially which location within a Queue or CommandBuffer the message occurred.

New Object Types

New Commands

New Structures

New Function Pointers

New Enums

New Bitmasks

New Enum Constants

Examples

Example 1

VK_EXT_debug_utils allows an application to register multiple callbacks with any Vulkan component wishing to report debug information. 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 DebugUtilsMessengerCreateInfoEXT structure to the pNext element of the InstanceCreateInfo structure given 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.

    extern VkInstance instance;
    VkResult res;
    VkDebugUtilsMessengerEXT cb1, cb2, cb3;

    // Must call extension functions through a function pointer:
    PFN_vkCreateDebugUtilsMessengerEXT pfnCreateDebugUtilsMessengerEXT = (PFN_vkCreateDebugUtilsMessengerEXT)vkGetInstanceProcAddr(instance, "vkCreateDebugUtilsMessengerEXT");
    PFN_vkDestroyDebugUtilsMessengerEXT pfnDestroyDebugUtilsMessengerEXT = (PFN_vkDestroyDebugUtilsMessengerEXT)vkGetInstanceProcAddr(instance, "vkDestroyDebugUtilsMessengerEXT");

    VkDebugUtilsMessengerCreateInfoEXT callback1 = {
            VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT,  // sType
            NULL,                                                     // pNext
            0,                                                        // flags
            VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT |           // messageSeverity
            VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT,
            VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT |             // messageType
            VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT,
            myOutputDebugString,                                      // pfnUserCallback
            NULL                                                      // pUserData
    };
    res = pfnCreateDebugUtilsMessengerEXT(instance, &callback1, NULL, &cb1);
    if (res != VK_SUCCESS) {
       // Do error handling for VK_ERROR_OUT_OF_MEMORY
    }

    callback1.messageSeverity = VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT;
    callback1.pfnUserCallback = myDebugBreak;
    callback1.pUserData = NULL;
    res = pfnCreateDebugUtilsMessengerEXT(instance, &callback1, NULL, &cb2);
    if (res != VK_SUCCESS) {
       // Do error handling for VK_ERROR_OUT_OF_MEMORY
    }

    VkDebugUtilsMessengerCreateInfoEXT callback3 = {
            VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT,  // sType
            NULL,                                                     // pNext
            0,                                                        // flags
            VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT,          // messageSeverity
            VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT |             // messageType
            VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT,
            mystdOutLogger,                                           // pfnUserCallback
            NULL                                                      // pUserData
    };
    res = pfnCreateDebugUtilsMessengerEXT(instance, &callback3, NULL, &cb3);
    if (res != VK_SUCCESS) {
       // Do error handling for VK_ERROR_OUT_OF_MEMORY
    }

    ...

    // Remove callbacks when cleaning up
    pfnDestroyDebugUtilsMessengerEXT(instance, cb1, NULL);
    pfnDestroyDebugUtilsMessengerEXT(instance, cb2, NULL);
    pfnDestroyDebugUtilsMessengerEXT(instance, cb3, NULL);

Example 2

Associate a name with an image, for easier debugging in external tools or with validation layers that can print a friendly name when referring to objects in error messages.

    extern VkInstance instance;
    extern VkDevice device;
    extern VkImage image;

    // Must call extension functions through a function pointer:
    PFN_vkSetDebugUtilsObjectNameEXT pfnSetDebugUtilsObjectNameEXT = (PFN_vkSetDebugUtilsObjectNameEXT)vkGetInstanceProcAddr(instance, "vkSetDebugUtilsObjectNameEXT");

    // Set a name on the image
    const VkDebugUtilsObjectNameInfoEXT imageNameInfo =
    {
        VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT, // sType
        NULL,                                               // pNext
        VK_OBJECT_TYPE_IMAGE,                               // objectType
        (uint64_t)image,                                    // objectHandle
        "Brick Diffuse Texture",                            // pObjectName
    };

    pfnSetDebugUtilsObjectNameEXT(device, &imageNameInfo);

    // A subsequent error might print:
    //   Image 'Brick Diffuse Texture' (0xc0dec0dedeadbeef) is used in a
    //   command buffer with no memory bound to it.

Example 3

Annotating regions of a workload with naming information so that offline analysis tools can display a more usable visualization of the commands submitted.

    extern VkInstance instance;
    extern VkCommandBuffer commandBuffer;

    // Must call extension functions through a function pointer:
    PFN_vkQueueBeginDebugUtilsLabelEXT pfnQueueBeginDebugUtilsLabelEXT = (PFN_vkQueueBeginDebugUtilsLabelEXT)vkGetInstanceProcAddr(instance, "vkQueueBeginDebugUtilsLabelEXT");
    PFN_vkQueueEndDebugUtilsLabelEXT pfnQueueEndDebugUtilsLabelEXT = (PFN_vkQueueEndDebugUtilsLabelEXT)vkGetInstanceProcAddr(instance, "vkQueueEndDebugUtilsLabelEXT");
    PFN_vkCmdBeginDebugUtilsLabelEXT pfnCmdBeginDebugUtilsLabelEXT = (PFN_vkCmdBeginDebugUtilsLabelEXT)vkGetInstanceProcAddr(instance, "vkCmdBeginDebugUtilsLabelEXT");
    PFN_vkCmdEndDebugUtilsLabelEXT pfnCmdEndDebugUtilsLabelEXT = (PFN_vkCmdEndDebugUtilsLabelEXT)vkGetInstanceProcAddr(instance, "vkCmdEndDebugUtilsLabelEXT");
    PFN_vkCmdInsertDebugUtilsLabelEXT pfnCmdInsertDebugUtilsLabelEXT = (PFN_vkCmdInsertDebugUtilsLabelEXT)vkGetInstanceProcAddr(instance, "vkCmdInsertDebugUtilsLabelEXT");

    // Describe the area being rendered
    const VkDebugUtilsLabelEXT houseLabel =
    {
        VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT, // sType
        NULL,                                    // pNext
        "Brick House",                           // pLabelName
        { 1.0f, 0.0f, 0.0f, 1.0f },              // color
    };

    // Start an annotated group of calls under the 'Brick House' name
    pfnCmdBeginDebugUtilsLabelEXT(commandBuffer, &houseLabel);
    {
        // A mutable structure for each part being rendered
        VkDebugUtilsLabelEXT housePartLabel =
        {
            VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT, // sType
            NULL,                                    // pNext
            NULL,                                    // pLabelName
            { 0.0f, 0.0f, 0.0f, 0.0f },              // color
        };

        // Set the name and insert the marker
        housePartLabel.pLabelName = "Walls";
        pfnCmdInsertDebugUtilsLabelEXT(commandBuffer, &housePartLabel);

        // Insert the drawcall for the walls
        vkCmdDrawIndexed(commandBuffer, 1000, 1, 0, 0, 0);

        // Insert a recursive region for two sets of windows
        housePartLabel.pLabelName = "Windows";
        pfnCmdBeginDebugUtilsLabelEXT(commandBuffer, &housePartLabel);
        {
            vkCmdDrawIndexed(commandBuffer, 75, 6, 1000, 0, 0);
            vkCmdDrawIndexed(commandBuffer, 100, 2, 1450, 0, 0);
        }
        pfnCmdEndDebugUtilsLabelEXT(commandBuffer);

        housePartLabel.pLabelName = "Front Door";
        pfnCmdInsertDebugUtilsLabelEXT(commandBuffer, &housePartLabel);

        vkCmdDrawIndexed(commandBuffer, 350, 1, 1650, 0, 0);

        housePartLabel.pLabelName = "Roof";
        pfnCmdInsertDebugUtilsLabelEXT(commandBuffer, &housePartLabel);

        vkCmdDrawIndexed(commandBuffer, 500, 1, 2000, 0, 0);
    }
    // End the house annotation started above
    pfnCmdEndDebugUtilsLabelEXT(commandBuffer);

    // Do other work

    vkEndCommandBuffer(commandBuffer);

    // Describe the queue being used
    const VkDebugUtilsLabelEXT queueLabel =
    {
        VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT, // sType
        NULL,                                    // pNext
        "Main Render Work",                      // pLabelName
        { 0.0f, 1.0f, 0.0f, 1.0f },              // color
    };

    // Identify the queue label region
    pfnQueueBeginDebugUtilsLabelEXT(queue, &queueLabel);

    // Submit the work for the main render thread
    const VkCommandBuffer cmd_bufs[] = {commandBuffer};
    VkSubmitInfo submit_info = {.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO,
                                .pNext = NULL,
                                .waitSemaphoreCount = 0,
                                .pWaitSemaphores = NULL,
                                .pWaitDstStageMask = NULL,
                                .commandBufferCount = 1,
                                .pCommandBuffers = cmd_bufs,
                                .signalSemaphoreCount = 0,
                                .pSignalSemaphores = NULL};
    vkQueueSubmit(queue, 1, &submit_info, fence);

    // End the queue label region
    pfnQueueEndDebugUtilsLabelEXT(queue);

Issues

1) Should we just name this extension VK_EXT_debug_report2

RESOLVED: No. There is enough additional changes to the structures to break backwards compatibility. So, a new name was decided that would not indicate any interaction with the previous extension.

2) Will validation layers immediately support all the new features.

RESOLVED: Not immediately. As one can imagine, there is a lot of work involved with converting the validation layer logging over to the new functionality. Basic logging, as seen in the origin VK_EXT_debug_report extension will be made available immediately. However, adding the labels and object names will take time. Since the priority for Khronos at this time is to continue focusing on Valid Usage statements, it may take a while before the new functionality is fully exposed.

3) If the validation layers will not expose the new functionality immediately, then what is the point of this extension?

RESOLVED: We needed a replacement for VK_EXT_debug_report because the DebugReportObjectTypeEXT enumeration will no longer be updated and any new objects will need to be debugged using the new functionality provided by this extension.

4) Should this extension be split into two separate parts (1 extension that is an instance extension providing the callback functionality, and another device extension providing the general debug marker and annotation functionality)?

RESOLVED: No, the functionality for this extension is too closely related. If we did split up the extension, where would the structures and enums live, and how would you define that the device behavior in the instance extension is really only valid if the device extension is enabled, and the functionality is passed in. It is cleaner to just define this all as an instance extension, plus it allows the application to enable all debug functionality provided with one enable string during createInstance.

Version History

  • Revision 1, 2017-09-14 (Mark Young and all listed Contributors)

    • Initial draft, based on VK_EXT_debug_report and VK_EXT_debug_marker in addition to previous feedback supplied from various companies including Valve, Epic, and Oxide games.
  • Revision 2, 2020-04-03 (Mark Young and Piers Daniell)

    • Updated to allow either NULL or an empty string to be passed in for pObjectName in DebugUtilsObjectNameInfoEXT, because the loader and various drivers support NULL already.

See Also

PFN_vkDebugUtilsMessengerCallbackEXT, DebugUtilsLabelEXT, DebugUtilsMessageSeverityFlagBitsEXT, DebugUtilsMessageSeverityFlagsEXT, DebugUtilsMessageTypeFlagBitsEXT, DebugUtilsMessageTypeFlagsEXT, DebugUtilsMessengerCallbackDataEXT, DebugUtilsMessengerCallbackDataFlagsEXT, DebugUtilsMessengerCreateFlagsEXT, DebugUtilsMessengerCreateInfoEXT, DebugUtilsMessengerEXT, DebugUtilsObjectNameInfoEXT, DebugUtilsObjectTagInfoEXT, cmdBeginDebugUtilsLabelEXT, cmdEndDebugUtilsLabelEXT, cmdInsertDebugUtilsLabelEXT, createDebugUtilsMessengerEXT, destroyDebugUtilsMessengerEXT, queueBeginDebugUtilsLabelEXT, queueEndDebugUtilsLabelEXT, queueInsertDebugUtilsLabelEXT, setDebugUtilsObjectNameEXT, setDebugUtilsObjectTagEXT, submitDebugUtilsMessageEXT

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

Documentation

setDebugUtilsObjectNameEXT Source #

Arguments

:: forall io. MonadIO io 
=> Device

device is the device that created the object.

-> DebugUtilsObjectNameInfoEXT

pNameInfo is a pointer to a DebugUtilsObjectNameInfoEXT structure specifying parameters of the name to set on the object.

-> io () 

vkSetDebugUtilsObjectNameEXT - Give a user-friendly name to an object

Valid Usage

Valid Usage (Implicit)

  • device must be a valid Device handle

Host Synchronization

  • Host access to pNameInfo->objectHandle must be externally synchronized

Return Codes

Success
Failure

See Also

VK_EXT_debug_utils, DebugUtilsObjectNameInfoEXT, Device

setDebugUtilsObjectTagEXT Source #

Arguments

:: forall io. MonadIO io 
=> Device

device is the device that created the object.

-> DebugUtilsObjectTagInfoEXT

pTagInfo is a pointer to a DebugUtilsObjectTagInfoEXT structure specifying parameters of the tag to attach to the object.

-> io () 

vkSetDebugUtilsObjectTagEXT - Attach arbitrary data to an object

Valid Usage (Implicit)

  • device must be a valid Device handle

Host Synchronization

  • Host access to pTagInfo->objectHandle must be externally synchronized

Return Codes

Success
Failure

See Also

VK_EXT_debug_utils, DebugUtilsObjectTagInfoEXT, Device

queueBeginDebugUtilsLabelEXT Source #

Arguments

:: forall io. MonadIO io 
=> Queue

queue is the queue in which to start a debug label region.

queue must be a valid Queue handle

-> ("labelInfo" ::: DebugUtilsLabelEXT)

pLabelInfo is a pointer to a DebugUtilsLabelEXT structure specifying parameters of the label region to open.

pLabelInfo must be a valid pointer to a valid DebugUtilsLabelEXT structure

-> io () 

vkQueueBeginDebugUtilsLabelEXT - Open a queue debug label region

Command Properties

'

Command Buffer LevelsRender Pass ScopeVideo Coding ScopeSupported Queue Types
---Any

See Also

VK_EXT_debug_utils, DebugUtilsLabelEXT, Queue

queueEndDebugUtilsLabelEXT Source #

Arguments

:: forall io. MonadIO io 
=> Queue

queue is the queue in which a debug label region should be closed.

-> io () 

vkQueueEndDebugUtilsLabelEXT - Close a queue debug label region

Description

The calls to queueBeginDebugUtilsLabelEXT and queueEndDebugUtilsLabelEXT must be matched and balanced.

Valid Usage

Valid Usage (Implicit)

  • queue must be a valid Queue handle

Command Properties

'

Command Buffer LevelsRender Pass ScopeVideo Coding ScopeSupported Queue Types
---Any

See Also

VK_EXT_debug_utils, Queue

queueInsertDebugUtilsLabelEXT Source #

Arguments

:: forall io. MonadIO io 
=> Queue

queue is the queue into which a debug label will be inserted.

queue must be a valid Queue handle

-> ("labelInfo" ::: DebugUtilsLabelEXT)

pLabelInfo is a pointer to a DebugUtilsLabelEXT structure specifying parameters of the label to insert.

pLabelInfo must be a valid pointer to a valid DebugUtilsLabelEXT structure

-> io () 

vkQueueInsertDebugUtilsLabelEXT - Insert a label into a queue

Command Properties

'

Command Buffer LevelsRender Pass ScopeVideo Coding ScopeSupported Queue Types
---Any

See Also

VK_EXT_debug_utils, DebugUtilsLabelEXT, Queue

cmdBeginDebugUtilsLabelEXT Source #

Arguments

:: forall io. MonadIO io 
=> CommandBuffer

commandBuffer is the command buffer into which the command is recorded.

-> ("labelInfo" ::: DebugUtilsLabelEXT)

pLabelInfo is a pointer to a DebugUtilsLabelEXT structure specifying parameters of the label region to open.

-> io () 

vkCmdBeginDebugUtilsLabelEXT - Open a command buffer debug label region

Valid Usage (Implicit)

  • pLabelInfo must be a valid pointer to a valid DebugUtilsLabelEXT structure
  • commandBuffer must be in the recording state
  • The CommandPool that commandBuffer was allocated from must support graphics, or compute operations
  • This command must only be called outside of a video coding scope

Host Synchronization

  • Host access to commandBuffer must be externally synchronized
  • Host access to the CommandPool that commandBuffer was allocated from must be externally synchronized

Command Properties

'

Command Buffer LevelsRender Pass ScopeVideo Coding ScopeSupported Queue Types
Primary SecondaryBoth Outside Graphics Compute

See Also

VK_EXT_debug_utils, CommandBuffer, DebugUtilsLabelEXT

cmdUseDebugUtilsLabelEXT :: forall io r. MonadIO io => CommandBuffer -> DebugUtilsLabelEXT -> io r -> io r Source #

This function will call the supplied action between calls to cmdBeginDebugUtilsLabelEXT and cmdEndDebugUtilsLabelEXT

Note that cmdEndDebugUtilsLabelEXT is *not* called if an exception is thrown by the inner action.

cmdEndDebugUtilsLabelEXT Source #

Arguments

:: forall io. MonadIO io 
=> CommandBuffer

commandBuffer is the command buffer into which the command is recorded.

-> io () 

vkCmdEndDebugUtilsLabelEXT - Close a command buffer label region

Description

An application may open a debug label region in one command buffer and close it in another, or otherwise split debug label regions across multiple command buffers or multiple queue submissions. When viewed from the linear series of submissions to a single queue, the calls to cmdBeginDebugUtilsLabelEXT and cmdEndDebugUtilsLabelEXT must be matched and balanced.

There can be problems reporting command buffer debug labels during the recording process because command buffers may be recorded out of sequence with the resulting execution order. Since the recording order may be different, a solitary command buffer may have an inconsistent view of the debug label regions by itself. Therefore, if an issue occurs during the recording of a command buffer, and the environment requires returning debug labels, the implementation may return only those labels it is aware of. This is true even if the implementation is aware of only the debug labels within the command buffer being actively recorded.

Valid Usage

Valid Usage (Implicit)

  • commandBuffer must be in the recording state
  • The CommandPool that commandBuffer was allocated from must support graphics, or compute operations
  • This command must only be called outside of a video coding scope

Host Synchronization

  • Host access to commandBuffer must be externally synchronized
  • Host access to the CommandPool that commandBuffer was allocated from must be externally synchronized

Command Properties

'

Command Buffer LevelsRender Pass ScopeVideo Coding ScopeSupported Queue Types
Primary SecondaryBoth Outside Graphics Compute

See Also

VK_EXT_debug_utils, CommandBuffer

cmdInsertDebugUtilsLabelEXT Source #

Arguments

:: forall io. MonadIO io 
=> CommandBuffer

commandBuffer is the command buffer into which the command is recorded.

-> ("labelInfo" ::: DebugUtilsLabelEXT) 
-> io () 

vkCmdInsertDebugUtilsLabelEXT - Insert a label into a command buffer

Valid Usage (Implicit)

  • pLabelInfo must be a valid pointer to a valid DebugUtilsLabelEXT structure
  • commandBuffer must be in the recording state
  • The CommandPool that commandBuffer was allocated from must support graphics, or compute operations
  • This command must only be called outside of a video coding scope

Host Synchronization

  • Host access to commandBuffer must be externally synchronized
  • Host access to the CommandPool that commandBuffer was allocated from must be externally synchronized

Command Properties

'

Command Buffer LevelsRender Pass ScopeVideo Coding ScopeSupported Queue Types
Primary SecondaryBoth Outside Graphics Compute

See Also

VK_EXT_debug_utils, CommandBuffer, DebugUtilsLabelEXT

createDebugUtilsMessengerEXT Source #

Arguments

:: forall io. MonadIO io 
=> Instance

instance is the instance the messenger will be used with.

-> DebugUtilsMessengerCreateInfoEXT

pCreateInfo is a pointer to a DebugUtilsMessengerCreateInfoEXT structure containing the callback pointer, as well as defining conditions under which this messenger will trigger the callback.

-> ("allocator" ::: Maybe AllocationCallbacks)

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

-> io DebugUtilsMessengerEXT 

vkCreateDebugUtilsMessengerEXT - Create a debug messenger object

Valid Usage (Implicit)

  • instance must be a valid Instance handle

Return Codes

Success
Failure

The application must ensure that createDebugUtilsMessengerEXT is not executed in parallel with any Vulkan command that is also called with instance or child of instance as the dispatchable argument.

See Also

VK_EXT_debug_utils, AllocationCallbacks, DebugUtilsMessengerCreateInfoEXT, DebugUtilsMessengerEXT, Instance

withDebugUtilsMessengerEXT :: forall io r. MonadIO io => Instance -> DebugUtilsMessengerCreateInfoEXT -> Maybe AllocationCallbacks -> (io DebugUtilsMessengerEXT -> (DebugUtilsMessengerEXT -> io ()) -> r) -> r Source #

A convenience wrapper to make a compatible pair of calls to createDebugUtilsMessengerEXT and destroyDebugUtilsMessengerEXT

To ensure that destroyDebugUtilsMessengerEXT 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.

destroyDebugUtilsMessengerEXT Source #

Arguments

:: forall io. MonadIO io 
=> Instance

instance is the instance where the callback was created.

-> DebugUtilsMessengerEXT

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

-> ("allocator" ::: Maybe AllocationCallbacks)

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

-> io () 

vkDestroyDebugUtilsMessengerEXT - Destroy a debug messenger object

Valid Usage

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

Valid Usage (Implicit)

  • instance must be a valid Instance handle
  • If messenger is not NULL_HANDLE, messenger must be a valid DebugUtilsMessengerEXT handle
  • If pAllocator is not NULL, pAllocator must be a valid pointer to a valid AllocationCallbacks structure
  • If messenger is a valid handle, it must have been created, allocated, or retrieved from instance

Host Synchronization

  • Host access to messenger must be externally synchronized

The application must ensure that destroyDebugUtilsMessengerEXT is not executed in parallel with any Vulkan command that is also called with instance or child of instance as the dispatchable argument.

See Also

VK_EXT_debug_utils, AllocationCallbacks, DebugUtilsMessengerEXT, Instance

submitDebugUtilsMessageEXT Source #

Arguments

:: forall io. MonadIO io 
=> Instance

instance is the debug stream’s Instance.

-> DebugUtilsMessageSeverityFlagBitsEXT

messageSeverity is a DebugUtilsMessageSeverityFlagBitsEXT value specifying the severity of this event/message.

-> ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)

messageTypes is a bitmask of DebugUtilsMessageTypeFlagBitsEXT specifying which type of event(s) to identify with this message.

-> DebugUtilsMessengerCallbackDataEXT

pCallbackData contains all the callback related data in the DebugUtilsMessengerCallbackDataEXT structure.

-> io () 

vkSubmitDebugUtilsMessageEXT - 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 messenger was registered.

Valid Usage

  • The objectType member of each element of pCallbackData->pObjects must not be OBJECT_TYPE_UNKNOWN

Valid Usage (Implicit)

  • instance must be a valid Instance handle

See Also

VK_EXT_debug_utils, DebugUtilsMessageSeverityFlagBitsEXT, DebugUtilsMessageTypeFlagsEXT, DebugUtilsMessengerCallbackDataEXT, Instance

data DebugUtilsObjectNameInfoEXT Source #

VkDebugUtilsObjectNameInfoEXT - Specify parameters of a name to give to an object

Description

Applications may change the name associated with an object simply by calling setDebugUtilsObjectNameEXT again with a new string. If pObjectName is either NULL or an empty string, then any previously set name is removed.

The graphicsPipelineLibrary feature allows the specification of pipelines without the creation of ShaderModule objects beforehand. In order to continue to allow naming these shaders independently, DebugUtilsObjectNameInfoEXT can be included in the pNext chain of PipelineShaderStageCreateInfo, which associates a static name with that particular shader.

Valid Usage

Valid Usage (Implicit)

  • objectType must be a valid ObjectType value
  • If pObjectName is not NULL, pObjectName must be a null-terminated UTF-8 string

See Also

VK_EXT_debug_utils, DebugUtilsMessengerCallbackDataEXT, ObjectType, StructureType, setDebugUtilsObjectNameEXT

Constructors

DebugUtilsObjectNameInfoEXT 

Fields

data DebugUtilsObjectTagInfoEXT Source #

VkDebugUtilsObjectTagInfoEXT - Specify parameters of a tag to attach to an object

Description

The 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 (Implicit)

See Also

VK_EXT_debug_utils, ObjectType, StructureType, setDebugUtilsObjectTagEXT

Constructors

DebugUtilsObjectTagInfoEXT 

Fields

  • objectType :: ObjectType

    objectType is a ObjectType specifying the type of the object to be named.

    objectType must not be OBJECT_TYPE_UNKNOWN

    objectType must be a valid ObjectType value

  • objectHandle :: Word64

    objectHandle is the object to be tagged.

    objectHandle must be a valid Vulkan handle of the type associated with objectType as defined in the and Vulkan Handle Relationship table

  • tagName :: Word64

    tagName is a numerical identifier of the tag.

  • tagSize :: Word64

    tagSize is the number of bytes of data to attach to the object.

    tagSize must be greater than 0

  • tag :: Ptr ()

    pTag is a pointer to an array of tagSize bytes containing the data to be associated with the object.

    pTag must be a valid pointer to an array of tagSize bytes

Instances

Instances details
Show DebugUtilsObjectTagInfoEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_debug_utils

Storable DebugUtilsObjectTagInfoEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_debug_utils

FromCStruct DebugUtilsObjectTagInfoEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_debug_utils

ToCStruct DebugUtilsObjectTagInfoEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_debug_utils

Zero DebugUtilsObjectTagInfoEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_debug_utils

data DebugUtilsLabelEXT Source #

Constructors

DebugUtilsLabelEXT 

Fields

  • labelName :: ByteString

    pLabelName is a pointer to a null-terminated UTF-8 string containing the name of the label.

    pLabelName must be a null-terminated UTF-8 string

  • color :: (Float, Float, Float, Float)

    color is an optional RGBA color value that can be associated with the label. 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 color are set to 0.0 then it is ignored.

data DebugUtilsMessengerCreateInfoEXT Source #

VkDebugUtilsMessengerCreateInfoEXT - Structure specifying parameters of a newly created debug messenger

Description

For each DebugUtilsMessengerEXT that is created the DebugUtilsMessengerCreateInfoEXT::messageSeverity and DebugUtilsMessengerCreateInfoEXT::messageType determine when that DebugUtilsMessengerCreateInfoEXT::pfnUserCallback is called. The process to determine if the user’s pfnUserCallback is triggered when an event occurs is as follows:

  1. The implementation will perform a bitwise AND of the event’s DebugUtilsMessageSeverityFlagBitsEXT with the messageSeverity provided during creation of the DebugUtilsMessengerEXT object.

    1. If the value is 0, the message is skipped.
  2. The implementation will perform bitwise AND of the event’s DebugUtilsMessageTypeFlagBitsEXT with the messageType provided during the creation of the DebugUtilsMessengerEXT object.

    1. If the value is 0, the message is skipped.
  3. The callback will trigger a debug message for the current event

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 can receive multiple callbacks if multiple DebugUtilsMessengerEXT objects are created. A callback will always be executed in the same thread as the originating Vulkan call.

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

Valid Usage (Implicit)

See Also

PFN_vkDebugUtilsMessengerCallbackEXT, VK_EXT_debug_utils, DebugUtilsMessageSeverityFlagsEXT, DebugUtilsMessageTypeFlagsEXT, DebugUtilsMessengerCreateFlagsEXT, StructureType, createDebugUtilsMessengerEXT

Constructors

DebugUtilsMessengerCreateInfoEXT 

Fields

Instances

Instances details
Show DebugUtilsMessengerCreateInfoEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_debug_utils

Storable DebugUtilsMessengerCreateInfoEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_debug_utils

FromCStruct DebugUtilsMessengerCreateInfoEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_debug_utils

ToCStruct DebugUtilsMessengerCreateInfoEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_debug_utils

Zero DebugUtilsMessengerCreateInfoEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_debug_utils

data DebugUtilsMessengerCallbackDataEXT Source #

VkDebugUtilsMessengerCallbackDataEXT - Structure specifying parameters returned to the callback

Description

Note

This structure should only be considered valid during the lifetime of the triggered callback.

Since adding queue and command buffer labels behaves like pushing and popping onto a stack, the order of both pQueueLabels and pCmdBufLabels is based on the order the labels were defined. The result is that the first label in either pQueueLabels or pCmdBufLabels will be the first defined (and therefore the oldest) while the last label in each list will be the most recent.

Note

pQueueLabels will only be non-NULL if one of the objects in pObjects can be related directly to a defined Queue which has had one or more labels associated with it.

Likewise, pCmdBufLabels will only be non-NULL if one of the objects in pObjects can be related directly to a defined CommandBuffer which has had one or more labels associated with it. Additionally, while command buffer labels allow for beginning and ending across different command buffers, the debug messaging framework cannot guarantee that labels in pCmdBufLables will contain those defined outside of the associated command buffer. This is partially due to the fact that the association of one command buffer with another may not have been defined at the time the debug message is triggered.

Valid Usage (Implicit)

  • pNext must be NULL
  • flags must be 0
  • If pMessageIdName is not NULL, pMessageIdName must be a null-terminated UTF-8 string
  • pMessage must be a null-terminated UTF-8 string
  • If queueLabelCount is not 0, pQueueLabels must be a valid pointer to an array of queueLabelCount valid DebugUtilsLabelEXT structures
  • If cmdBufLabelCount is not 0, pCmdBufLabels must be a valid pointer to an array of cmdBufLabelCount valid DebugUtilsLabelEXT structures
  • If objectCount is not 0, pObjects must be a valid pointer to an array of objectCount valid DebugUtilsObjectNameInfoEXT structures

See Also

VK_EXT_debug_utils, DebugUtilsLabelEXT, DebugUtilsMessengerCallbackDataFlagsEXT, DebugUtilsObjectNameInfoEXT, StructureType, submitDebugUtilsMessageEXT

Constructors

DebugUtilsMessengerCallbackDataEXT 

Fields

newtype DebugUtilsMessengerCreateFlagsEXT Source #

VkDebugUtilsMessengerCreateFlagsEXT - Reserved for future use

Description

DebugUtilsMessengerCreateFlagsEXT is a bitmask type for setting a mask, but is currently reserved for future use.

See Also

VK_EXT_debug_utils, DebugUtilsMessengerCreateInfoEXT

Instances

Instances details
Eq DebugUtilsMessengerCreateFlagsEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_debug_utils

Ord DebugUtilsMessengerCreateFlagsEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_debug_utils

Read DebugUtilsMessengerCreateFlagsEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_debug_utils

Show DebugUtilsMessengerCreateFlagsEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_debug_utils

Storable DebugUtilsMessengerCreateFlagsEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_debug_utils

Bits DebugUtilsMessengerCreateFlagsEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_debug_utils

Methods

(.&.) :: DebugUtilsMessengerCreateFlagsEXT -> DebugUtilsMessengerCreateFlagsEXT -> DebugUtilsMessengerCreateFlagsEXT #

(.|.) :: DebugUtilsMessengerCreateFlagsEXT -> DebugUtilsMessengerCreateFlagsEXT -> DebugUtilsMessengerCreateFlagsEXT #

xor :: DebugUtilsMessengerCreateFlagsEXT -> DebugUtilsMessengerCreateFlagsEXT -> DebugUtilsMessengerCreateFlagsEXT #

complement :: DebugUtilsMessengerCreateFlagsEXT -> DebugUtilsMessengerCreateFlagsEXT #

shift :: DebugUtilsMessengerCreateFlagsEXT -> Int -> DebugUtilsMessengerCreateFlagsEXT #

rotate :: DebugUtilsMessengerCreateFlagsEXT -> Int -> DebugUtilsMessengerCreateFlagsEXT #

zeroBits :: DebugUtilsMessengerCreateFlagsEXT #

bit :: Int -> DebugUtilsMessengerCreateFlagsEXT #

setBit :: DebugUtilsMessengerCreateFlagsEXT -> Int -> DebugUtilsMessengerCreateFlagsEXT #

clearBit :: DebugUtilsMessengerCreateFlagsEXT -> Int -> DebugUtilsMessengerCreateFlagsEXT #

complementBit :: DebugUtilsMessengerCreateFlagsEXT -> Int -> DebugUtilsMessengerCreateFlagsEXT #

testBit :: DebugUtilsMessengerCreateFlagsEXT -> Int -> Bool #

bitSizeMaybe :: DebugUtilsMessengerCreateFlagsEXT -> Maybe Int #

bitSize :: DebugUtilsMessengerCreateFlagsEXT -> Int #

isSigned :: DebugUtilsMessengerCreateFlagsEXT -> Bool #

shiftL :: DebugUtilsMessengerCreateFlagsEXT -> Int -> DebugUtilsMessengerCreateFlagsEXT #

unsafeShiftL :: DebugUtilsMessengerCreateFlagsEXT -> Int -> DebugUtilsMessengerCreateFlagsEXT #

shiftR :: DebugUtilsMessengerCreateFlagsEXT -> Int -> DebugUtilsMessengerCreateFlagsEXT #

unsafeShiftR :: DebugUtilsMessengerCreateFlagsEXT -> Int -> DebugUtilsMessengerCreateFlagsEXT #

rotateL :: DebugUtilsMessengerCreateFlagsEXT -> Int -> DebugUtilsMessengerCreateFlagsEXT #

rotateR :: DebugUtilsMessengerCreateFlagsEXT -> Int -> DebugUtilsMessengerCreateFlagsEXT #

popCount :: DebugUtilsMessengerCreateFlagsEXT -> Int #

FiniteBits DebugUtilsMessengerCreateFlagsEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_debug_utils

Zero DebugUtilsMessengerCreateFlagsEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_debug_utils

newtype DebugUtilsMessengerCallbackDataFlagsEXT Source #

VkDebugUtilsMessengerCallbackDataFlagsEXT - Reserved for future use

Description

DebugUtilsMessengerCallbackDataFlagsEXT is a bitmask type for setting a mask, but is currently reserved for future use.

See Also

VK_EXT_debug_utils, DebugUtilsMessengerCallbackDataEXT

Instances

Instances details
Eq DebugUtilsMessengerCallbackDataFlagsEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_debug_utils

Ord DebugUtilsMessengerCallbackDataFlagsEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_debug_utils

Read DebugUtilsMessengerCallbackDataFlagsEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_debug_utils

Show DebugUtilsMessengerCallbackDataFlagsEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_debug_utils

Storable DebugUtilsMessengerCallbackDataFlagsEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_debug_utils

Bits DebugUtilsMessengerCallbackDataFlagsEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_debug_utils

Methods

(.&.) :: DebugUtilsMessengerCallbackDataFlagsEXT -> DebugUtilsMessengerCallbackDataFlagsEXT -> DebugUtilsMessengerCallbackDataFlagsEXT #

(.|.) :: DebugUtilsMessengerCallbackDataFlagsEXT -> DebugUtilsMessengerCallbackDataFlagsEXT -> DebugUtilsMessengerCallbackDataFlagsEXT #

xor :: DebugUtilsMessengerCallbackDataFlagsEXT -> DebugUtilsMessengerCallbackDataFlagsEXT -> DebugUtilsMessengerCallbackDataFlagsEXT #

complement :: DebugUtilsMessengerCallbackDataFlagsEXT -> DebugUtilsMessengerCallbackDataFlagsEXT #

shift :: DebugUtilsMessengerCallbackDataFlagsEXT -> Int -> DebugUtilsMessengerCallbackDataFlagsEXT #

rotate :: DebugUtilsMessengerCallbackDataFlagsEXT -> Int -> DebugUtilsMessengerCallbackDataFlagsEXT #

zeroBits :: DebugUtilsMessengerCallbackDataFlagsEXT #

bit :: Int -> DebugUtilsMessengerCallbackDataFlagsEXT #

setBit :: DebugUtilsMessengerCallbackDataFlagsEXT -> Int -> DebugUtilsMessengerCallbackDataFlagsEXT #

clearBit :: DebugUtilsMessengerCallbackDataFlagsEXT -> Int -> DebugUtilsMessengerCallbackDataFlagsEXT #

complementBit :: DebugUtilsMessengerCallbackDataFlagsEXT -> Int -> DebugUtilsMessengerCallbackDataFlagsEXT #

testBit :: DebugUtilsMessengerCallbackDataFlagsEXT -> Int -> Bool #

bitSizeMaybe :: DebugUtilsMessengerCallbackDataFlagsEXT -> Maybe Int #

bitSize :: DebugUtilsMessengerCallbackDataFlagsEXT -> Int #

isSigned :: DebugUtilsMessengerCallbackDataFlagsEXT -> Bool #

shiftL :: DebugUtilsMessengerCallbackDataFlagsEXT -> Int -> DebugUtilsMessengerCallbackDataFlagsEXT #

unsafeShiftL :: DebugUtilsMessengerCallbackDataFlagsEXT -> Int -> DebugUtilsMessengerCallbackDataFlagsEXT #

shiftR :: DebugUtilsMessengerCallbackDataFlagsEXT -> Int -> DebugUtilsMessengerCallbackDataFlagsEXT #

unsafeShiftR :: DebugUtilsMessengerCallbackDataFlagsEXT -> Int -> DebugUtilsMessengerCallbackDataFlagsEXT #

rotateL :: DebugUtilsMessengerCallbackDataFlagsEXT -> Int -> DebugUtilsMessengerCallbackDataFlagsEXT #

rotateR :: DebugUtilsMessengerCallbackDataFlagsEXT -> Int -> DebugUtilsMessengerCallbackDataFlagsEXT #

popCount :: DebugUtilsMessengerCallbackDataFlagsEXT -> Int #

FiniteBits DebugUtilsMessengerCallbackDataFlagsEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_debug_utils

Zero DebugUtilsMessengerCallbackDataFlagsEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_debug_utils

newtype DebugUtilsMessageSeverityFlagBitsEXT Source #

VkDebugUtilsMessageSeverityFlagBitsEXT - Bitmask specifying which severities of events cause a debug messenger callback

Description

Note

The values of DebugUtilsMessageSeverityFlagBitsEXT are sorted based on severity. The higher the flag value, the more severe the message. This allows for simple boolean operation comparisons when looking at DebugUtilsMessageSeverityFlagBitsEXT values.

For example:

    if (messageSeverity >= VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT) {
        // Do something for warnings and errors
    }

In addition, space has been left between the enums to allow for later addition of new severities in between the existing values.

See Also

VK_EXT_debug_utils, DebugUtilsMessageSeverityFlagsEXT, submitDebugUtilsMessageEXT

Bundled Patterns

pattern DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT :: DebugUtilsMessageSeverityFlagBitsEXT

DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT specifies the most verbose output indicating all diagnostic messages from the Vulkan loader, layers, and drivers should be captured.

pattern DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT :: DebugUtilsMessageSeverityFlagBitsEXT

DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT specifies an informational message such as resource details that may be handy when debugging an application.

pattern DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT :: DebugUtilsMessageSeverityFlagBitsEXT

DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT specifies use of Vulkan that may expose an app bug. Such cases may not be immediately harmful, such as a fragment shader outputting to a location with no attachment. Other cases may point to behavior that is almost certainly bad when unintended such as using an image whose memory has not been filled. In general if you see a warning but you know that the behavior is intended/desired, then simply ignore the warning.

pattern DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT :: DebugUtilsMessageSeverityFlagBitsEXT

DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT specifies that the application has violated a valid usage condition of the specification.

Instances

Instances details
Eq DebugUtilsMessageSeverityFlagBitsEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_debug_utils

Ord DebugUtilsMessageSeverityFlagBitsEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_debug_utils

Read DebugUtilsMessageSeverityFlagBitsEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_debug_utils

Show DebugUtilsMessageSeverityFlagBitsEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_debug_utils

Storable DebugUtilsMessageSeverityFlagBitsEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_debug_utils

Bits DebugUtilsMessageSeverityFlagBitsEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_debug_utils

Methods

(.&.) :: DebugUtilsMessageSeverityFlagBitsEXT -> DebugUtilsMessageSeverityFlagBitsEXT -> DebugUtilsMessageSeverityFlagBitsEXT #

(.|.) :: DebugUtilsMessageSeverityFlagBitsEXT -> DebugUtilsMessageSeverityFlagBitsEXT -> DebugUtilsMessageSeverityFlagBitsEXT #

xor :: DebugUtilsMessageSeverityFlagBitsEXT -> DebugUtilsMessageSeverityFlagBitsEXT -> DebugUtilsMessageSeverityFlagBitsEXT #

complement :: DebugUtilsMessageSeverityFlagBitsEXT -> DebugUtilsMessageSeverityFlagBitsEXT #

shift :: DebugUtilsMessageSeverityFlagBitsEXT -> Int -> DebugUtilsMessageSeverityFlagBitsEXT #

rotate :: DebugUtilsMessageSeverityFlagBitsEXT -> Int -> DebugUtilsMessageSeverityFlagBitsEXT #

zeroBits :: DebugUtilsMessageSeverityFlagBitsEXT #

bit :: Int -> DebugUtilsMessageSeverityFlagBitsEXT #

setBit :: DebugUtilsMessageSeverityFlagBitsEXT -> Int -> DebugUtilsMessageSeverityFlagBitsEXT #

clearBit :: DebugUtilsMessageSeverityFlagBitsEXT -> Int -> DebugUtilsMessageSeverityFlagBitsEXT #

complementBit :: DebugUtilsMessageSeverityFlagBitsEXT -> Int -> DebugUtilsMessageSeverityFlagBitsEXT #

testBit :: DebugUtilsMessageSeverityFlagBitsEXT -> Int -> Bool #

bitSizeMaybe :: DebugUtilsMessageSeverityFlagBitsEXT -> Maybe Int #

bitSize :: DebugUtilsMessageSeverityFlagBitsEXT -> Int #

isSigned :: DebugUtilsMessageSeverityFlagBitsEXT -> Bool #

shiftL :: DebugUtilsMessageSeverityFlagBitsEXT -> Int -> DebugUtilsMessageSeverityFlagBitsEXT #

unsafeShiftL :: DebugUtilsMessageSeverityFlagBitsEXT -> Int -> DebugUtilsMessageSeverityFlagBitsEXT #

shiftR :: DebugUtilsMessageSeverityFlagBitsEXT -> Int -> DebugUtilsMessageSeverityFlagBitsEXT #

unsafeShiftR :: DebugUtilsMessageSeverityFlagBitsEXT -> Int -> DebugUtilsMessageSeverityFlagBitsEXT #

rotateL :: DebugUtilsMessageSeverityFlagBitsEXT -> Int -> DebugUtilsMessageSeverityFlagBitsEXT #

rotateR :: DebugUtilsMessageSeverityFlagBitsEXT -> Int -> DebugUtilsMessageSeverityFlagBitsEXT #

popCount :: DebugUtilsMessageSeverityFlagBitsEXT -> Int #

FiniteBits DebugUtilsMessageSeverityFlagBitsEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_debug_utils

Zero DebugUtilsMessageSeverityFlagBitsEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_debug_utils

newtype DebugUtilsMessageTypeFlagBitsEXT Source #

VkDebugUtilsMessageTypeFlagBitsEXT - Bitmask specifying which types of events cause a debug messenger callback

See Also

VK_EXT_debug_utils, DebugUtilsMessageTypeFlagsEXT

Bundled Patterns

pattern DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT :: DebugUtilsMessageTypeFlagBitsEXT

DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT specifies that some general event has occurred. This is typically a non-specification, non-performance event.

pattern DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT :: DebugUtilsMessageTypeFlagBitsEXT

DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT specifies that something has occurred during validation against the Vulkan specification that may indicate invalid behavior.

pattern DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT :: DebugUtilsMessageTypeFlagBitsEXT

DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT specifies a potentially non-optimal use of Vulkan, e.g. using cmdClearColorImage when setting AttachmentDescription::loadOp to ATTACHMENT_LOAD_OP_CLEAR would have worked.

Instances

Instances details
Eq DebugUtilsMessageTypeFlagBitsEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_debug_utils

Ord DebugUtilsMessageTypeFlagBitsEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_debug_utils

Read DebugUtilsMessageTypeFlagBitsEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_debug_utils

Show DebugUtilsMessageTypeFlagBitsEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_debug_utils

Storable DebugUtilsMessageTypeFlagBitsEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_debug_utils

Bits DebugUtilsMessageTypeFlagBitsEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_debug_utils

Methods

(.&.) :: DebugUtilsMessageTypeFlagBitsEXT -> DebugUtilsMessageTypeFlagBitsEXT -> DebugUtilsMessageTypeFlagBitsEXT #

(.|.) :: DebugUtilsMessageTypeFlagBitsEXT -> DebugUtilsMessageTypeFlagBitsEXT -> DebugUtilsMessageTypeFlagBitsEXT #

xor :: DebugUtilsMessageTypeFlagBitsEXT -> DebugUtilsMessageTypeFlagBitsEXT -> DebugUtilsMessageTypeFlagBitsEXT #

complement :: DebugUtilsMessageTypeFlagBitsEXT -> DebugUtilsMessageTypeFlagBitsEXT #

shift :: DebugUtilsMessageTypeFlagBitsEXT -> Int -> DebugUtilsMessageTypeFlagBitsEXT #

rotate :: DebugUtilsMessageTypeFlagBitsEXT -> Int -> DebugUtilsMessageTypeFlagBitsEXT #

zeroBits :: DebugUtilsMessageTypeFlagBitsEXT #

bit :: Int -> DebugUtilsMessageTypeFlagBitsEXT #

setBit :: DebugUtilsMessageTypeFlagBitsEXT -> Int -> DebugUtilsMessageTypeFlagBitsEXT #

clearBit :: DebugUtilsMessageTypeFlagBitsEXT -> Int -> DebugUtilsMessageTypeFlagBitsEXT #

complementBit :: DebugUtilsMessageTypeFlagBitsEXT -> Int -> DebugUtilsMessageTypeFlagBitsEXT #

testBit :: DebugUtilsMessageTypeFlagBitsEXT -> Int -> Bool #

bitSizeMaybe :: DebugUtilsMessageTypeFlagBitsEXT -> Maybe Int #

bitSize :: DebugUtilsMessageTypeFlagBitsEXT -> Int #

isSigned :: DebugUtilsMessageTypeFlagBitsEXT -> Bool #

shiftL :: DebugUtilsMessageTypeFlagBitsEXT -> Int -> DebugUtilsMessageTypeFlagBitsEXT #

unsafeShiftL :: DebugUtilsMessageTypeFlagBitsEXT -> Int -> DebugUtilsMessageTypeFlagBitsEXT #

shiftR :: DebugUtilsMessageTypeFlagBitsEXT -> Int -> DebugUtilsMessageTypeFlagBitsEXT #

unsafeShiftR :: DebugUtilsMessageTypeFlagBitsEXT -> Int -> DebugUtilsMessageTypeFlagBitsEXT #

rotateL :: DebugUtilsMessageTypeFlagBitsEXT -> Int -> DebugUtilsMessageTypeFlagBitsEXT #

rotateR :: DebugUtilsMessageTypeFlagBitsEXT -> Int -> DebugUtilsMessageTypeFlagBitsEXT #

popCount :: DebugUtilsMessageTypeFlagBitsEXT -> Int #

FiniteBits DebugUtilsMessageTypeFlagBitsEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_debug_utils

Zero DebugUtilsMessageTypeFlagBitsEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_debug_utils

type PFN_vkDebugUtilsMessengerCallbackEXT = FunPtr FN_vkDebugUtilsMessengerCallbackEXT Source #

PFN_vkDebugUtilsMessengerCallbackEXT - Application-defined debug messenger callback function

Description

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.

Valid Usage

  • The callback must not make calls to any Vulkan commands

See Also

VK_EXT_debug_utils, DebugUtilsMessengerCreateInfoEXT

pattern EXT_DEBUG_UTILS_SPEC_VERSION :: forall a. Integral a => a Source #

type EXT_DEBUG_UTILS_EXTENSION_NAME = "VK_EXT_debug_utils" Source #

pattern EXT_DEBUG_UTILS_EXTENSION_NAME :: forall a. (Eq a, IsString a) => a Source #

newtype DebugUtilsMessengerEXT Source #

VkDebugUtilsMessengerEXT - Opaque handle to a debug messenger object

Description

The debug messenger will provide detailed feedback on the application’s use of Vulkan when events of interest occur. When an event of interest does occur, the debug messenger will submit a debug message to the debug callback that was provided during its creation. Additionally, the debug messenger is responsible with filtering out debug messages that the callback is not interested in and will only provide desired debug messages.

See Also

VK_EXT_debug_utils, createDebugUtilsMessengerEXT, destroyDebugUtilsMessengerEXT

Instances

Instances details
Eq DebugUtilsMessengerEXT Source # 
Instance details

Defined in Vulkan.Extensions.Handles

Ord DebugUtilsMessengerEXT Source # 
Instance details

Defined in Vulkan.Extensions.Handles

Show DebugUtilsMessengerEXT Source # 
Instance details

Defined in Vulkan.Extensions.Handles

Storable DebugUtilsMessengerEXT Source # 
Instance details

Defined in Vulkan.Extensions.Handles

Zero DebugUtilsMessengerEXT Source # 
Instance details

Defined in Vulkan.Extensions.Handles

HasObjectType DebugUtilsMessengerEXT Source # 
Instance details

Defined in Vulkan.Extensions.Handles

IsHandle DebugUtilsMessengerEXT Source # 
Instance details

Defined in Vulkan.Extensions.Handles