{-# language CPP #-}
-- | = 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 Vulkan 1.0
--
-- [__Special Use__]
--
--     -   <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#extendingvulkan-compatibility-specialuse Debugging tools>
--
-- [__Contact__]
--
--     -   Mark Young
--         <https://github.com/KhronosGroup/Vulkan-Docs/issues/new?body=[VK_EXT_debug_utils] @marky-lunarg%0A<<Here describe the issue or question you have about the VK_EXT_debug_utils extension>> >
--
-- == 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 'Vulkan.Core10.Enums.ObjectType.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
--     'Vulkan.Core10.Handles.Queue' or
--     'Vulkan.Core10.Handles.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
-- 'Vulkan.Extensions.VK_EXT_debug_report.DebugReportObjectTypeEXT' to
-- identify objects. This extension uses the core
-- 'Vulkan.Core10.Enums.ObjectType.ObjectType' in place of
-- 'Vulkan.Extensions.VK_EXT_debug_report.DebugReportObjectTypeEXT'. The
-- primary reason for this move is that no future object type handle
-- enumeration values will be added to
-- 'Vulkan.Extensions.VK_EXT_debug_report.DebugReportObjectTypeEXT' since
-- the creation of 'Vulkan.Core10.Enums.ObjectType.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 'Vulkan.Core10.Handles.Queue' or
-- 'Vulkan.Core10.Handles.CommandBuffer' the message occurred.
--
-- == New Object Types
--
-- -   'Vulkan.Extensions.Handles.DebugUtilsMessengerEXT'
--
-- == New Commands
--
-- -   'cmdBeginDebugUtilsLabelEXT'
--
-- -   'cmdEndDebugUtilsLabelEXT'
--
-- -   'cmdInsertDebugUtilsLabelEXT'
--
-- -   'createDebugUtilsMessengerEXT'
--
-- -   'destroyDebugUtilsMessengerEXT'
--
-- -   'queueBeginDebugUtilsLabelEXT'
--
-- -   'queueEndDebugUtilsLabelEXT'
--
-- -   'queueInsertDebugUtilsLabelEXT'
--
-- -   'setDebugUtilsObjectNameEXT'
--
-- -   'setDebugUtilsObjectTagEXT'
--
-- -   'submitDebugUtilsMessageEXT'
--
-- == New Structures
--
-- -   'DebugUtilsLabelEXT'
--
-- -   'DebugUtilsMessengerCallbackDataEXT'
--
-- -   'DebugUtilsObjectNameInfoEXT'
--
-- -   'DebugUtilsObjectTagInfoEXT'
--
-- -   Extending 'Vulkan.Core10.DeviceInitialization.InstanceCreateInfo':
--
--     -   'DebugUtilsMessengerCreateInfoEXT'
--
-- == New Function Pointers
--
-- -   'PFN_vkDebugUtilsMessengerCallbackEXT'
--
-- == New Enums
--
-- -   'DebugUtilsMessageSeverityFlagBitsEXT'
--
-- -   'DebugUtilsMessageTypeFlagBitsEXT'
--
-- == New Bitmasks
--
-- -   'DebugUtilsMessageSeverityFlagsEXT'
--
-- -   'DebugUtilsMessageTypeFlagsEXT'
--
-- -   'DebugUtilsMessengerCallbackDataFlagsEXT'
--
-- -   'DebugUtilsMessengerCreateFlagsEXT'
--
-- == New Enum Constants
--
-- -   'EXT_DEBUG_UTILS_EXTENSION_NAME'
--
-- -   'EXT_DEBUG_UTILS_SPEC_VERSION'
--
-- -   Extending 'Vulkan.Core10.Enums.ObjectType.ObjectType':
--
--     -   'Vulkan.Core10.Enums.ObjectType.OBJECT_TYPE_DEBUG_UTILS_MESSENGER_EXT'
--
-- -   Extending 'Vulkan.Core10.Enums.StructureType.StructureType':
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_TAG_INFO_EXT'
--
-- == 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
-- 'Vulkan.Core10.DeviceInitialization.InstanceCreateInfo' structure given
-- to 'Vulkan.Core10.DeviceInitialization.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 'Vulkan.Extensions.VK_EXT_debug_report.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
-- 'Vulkan.Core10.DeviceInitialization.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',
-- 'Vulkan.Extensions.Handles.DebugUtilsMessengerEXT',
-- 'DebugUtilsObjectNameInfoEXT', 'DebugUtilsObjectTagInfoEXT',
-- 'cmdBeginDebugUtilsLabelEXT', 'cmdEndDebugUtilsLabelEXT',
-- 'cmdInsertDebugUtilsLabelEXT', 'createDebugUtilsMessengerEXT',
-- 'destroyDebugUtilsMessengerEXT', 'queueBeginDebugUtilsLabelEXT',
-- 'queueEndDebugUtilsLabelEXT', 'queueInsertDebugUtilsLabelEXT',
-- 'setDebugUtilsObjectNameEXT', 'setDebugUtilsObjectTagEXT',
-- 'submitDebugUtilsMessageEXT'
--
-- == Document Notes
--
-- For more information, see the
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_debug_utils Vulkan Specification>
--
-- This page is a generated document. Fixes and changes should be made to
-- the generator scripts, not directly.
module Vulkan.Extensions.VK_EXT_debug_utils  ( setDebugUtilsObjectNameEXT
                                             , setDebugUtilsObjectTagEXT
                                             , queueBeginDebugUtilsLabelEXT
                                             , queueEndDebugUtilsLabelEXT
                                             , queueInsertDebugUtilsLabelEXT
                                             , cmdBeginDebugUtilsLabelEXT
                                             , cmdUseDebugUtilsLabelEXT
                                             , cmdEndDebugUtilsLabelEXT
                                             , cmdInsertDebugUtilsLabelEXT
                                             , createDebugUtilsMessengerEXT
                                             , withDebugUtilsMessengerEXT
                                             , destroyDebugUtilsMessengerEXT
                                             , submitDebugUtilsMessageEXT
                                             , DebugUtilsObjectNameInfoEXT(..)
                                             , DebugUtilsObjectTagInfoEXT(..)
                                             , DebugUtilsLabelEXT(..)
                                             , DebugUtilsMessengerCreateInfoEXT(..)
                                             , DebugUtilsMessengerCallbackDataEXT(..)
                                             , DebugUtilsMessengerCreateFlagsEXT(..)
                                             , DebugUtilsMessengerCallbackDataFlagsEXT(..)
                                             , DebugUtilsMessageSeverityFlagsEXT
                                             , DebugUtilsMessageSeverityFlagBitsEXT( DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT
                                                                                   , DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT
                                                                                   , DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT
                                                                                   , DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT
                                                                                   , ..
                                                                                   )
                                             , DebugUtilsMessageTypeFlagsEXT
                                             , DebugUtilsMessageTypeFlagBitsEXT( DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT
                                                                               , DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT
                                                                               , DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT
                                                                               , ..
                                                                               )
                                             , PFN_vkDebugUtilsMessengerCallbackEXT
                                             , FN_vkDebugUtilsMessengerCallbackEXT
                                             , EXT_DEBUG_UTILS_SPEC_VERSION
                                             , pattern EXT_DEBUG_UTILS_SPEC_VERSION
                                             , EXT_DEBUG_UTILS_EXTENSION_NAME
                                             , pattern EXT_DEBUG_UTILS_EXTENSION_NAME
                                             , DebugUtilsMessengerEXT(..)
                                             ) where

import Vulkan.CStruct.Utils (FixedArray)
import Vulkan.Internal.Utils (enumReadPrec)
import Vulkan.Internal.Utils (enumShowsPrec)
import Vulkan.Internal.Utils (traceAroundEvent)
import Control.Exception.Base (bracket)
import Control.Monad (unless)
import Control.Monad.IO.Class (liftIO)
import Foreign.Marshal.Alloc (allocaBytes)
import Foreign.Marshal.Alloc (callocBytes)
import Foreign.Marshal.Alloc (free)
import Foreign.Marshal.Utils (maybePeek)
import GHC.Base (when)
import GHC.IO (throwIO)
import GHC.Ptr (nullFunPtr)
import Foreign.Ptr (nullPtr)
import Foreign.Ptr (plusPtr)
import GHC.Show (showString)
import Numeric (showHex)
import Data.ByteString (packCString)
import Data.ByteString (useAsCString)
import Data.Coerce (coerce)
import Control.Monad.Trans.Class (lift)
import Control.Monad.Trans.Cont (evalContT)
import Data.Vector (generateM)
import qualified Data.Vector (imapM_)
import qualified Data.Vector (length)
import Vulkan.CStruct (FromCStruct)
import Vulkan.CStruct (FromCStruct(..))
import Vulkan.CStruct (ToCStruct)
import Vulkan.CStruct (ToCStruct(..))
import Vulkan.Zero (Zero)
import Vulkan.Zero (Zero(..))
import Control.Monad.IO.Class (MonadIO)
import Data.Bits (Bits)
import Data.Bits (FiniteBits)
import Data.String (IsString)
import Data.Typeable (Typeable)
import Foreign.C.Types (CChar)
import Foreign.C.Types (CFloat)
import Foreign.C.Types (CFloat(..))
import Foreign.C.Types (CFloat(CFloat))
import Foreign.C.Types (CSize)
import Foreign.C.Types (CSize(..))
import Foreign.C.Types (CSize(CSize))
import Foreign.Storable (Storable)
import Foreign.Storable (Storable(peek))
import Foreign.Storable (Storable(poke))
import qualified Foreign.Storable (Storable(..))
import GHC.Generics (Generic)
import GHC.IO.Exception (IOErrorType(..))
import GHC.IO.Exception (IOException(..))
import Data.Int (Int32)
import Foreign.Ptr (FunPtr)
import Foreign.Ptr (Ptr)
import GHC.Read (Read(readPrec))
import GHC.Show (Show(showsPrec))
import Data.Word (Word32)
import Data.Word (Word64)
import Data.ByteString (ByteString)
import Data.Kind (Type)
import Control.Monad.Trans.Cont (ContT(..))
import Data.Vector (Vector)
import Vulkan.CStruct.Utils (advancePtrBytes)
import Vulkan.CStruct.Utils (lowerArrayPtr)
import Vulkan.NamedType ((:::))
import Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
import Vulkan.Core10.FundamentalTypes (Bool32)
import Vulkan.Core10.Handles (CommandBuffer)
import Vulkan.Core10.Handles (CommandBuffer(..))
import Vulkan.Core10.Handles (CommandBuffer(CommandBuffer))
import Vulkan.Core10.Handles (CommandBuffer_T)
import Vulkan.Extensions.Handles (DebugUtilsMessengerEXT)
import Vulkan.Extensions.Handles (DebugUtilsMessengerEXT(..))
import Vulkan.Core10.Handles (Device)
import Vulkan.Core10.Handles (Device(..))
import Vulkan.Core10.Handles (Device(Device))
import Vulkan.Dynamic (DeviceCmds(pVkCmdBeginDebugUtilsLabelEXT))
import Vulkan.Dynamic (DeviceCmds(pVkCmdEndDebugUtilsLabelEXT))
import Vulkan.Dynamic (DeviceCmds(pVkCmdInsertDebugUtilsLabelEXT))
import Vulkan.Dynamic (DeviceCmds(pVkQueueBeginDebugUtilsLabelEXT))
import Vulkan.Dynamic (DeviceCmds(pVkQueueEndDebugUtilsLabelEXT))
import Vulkan.Dynamic (DeviceCmds(pVkQueueInsertDebugUtilsLabelEXT))
import Vulkan.Dynamic (DeviceCmds(pVkSetDebugUtilsObjectNameEXT))
import Vulkan.Dynamic (DeviceCmds(pVkSetDebugUtilsObjectTagEXT))
import Vulkan.Core10.Handles (Device_T)
import Vulkan.Core10.FundamentalTypes (Flags)
import Vulkan.Core10.Handles (Instance)
import Vulkan.Core10.Handles (Instance(..))
import Vulkan.Core10.Handles (Instance(Instance))
import Vulkan.Dynamic (InstanceCmds(pVkCreateDebugUtilsMessengerEXT))
import Vulkan.Dynamic (InstanceCmds(pVkDestroyDebugUtilsMessengerEXT))
import Vulkan.Dynamic (InstanceCmds(pVkSubmitDebugUtilsMessageEXT))
import Vulkan.Core10.Handles (Instance_T)
import Vulkan.Core10.Enums.ObjectType (ObjectType)
import Vulkan.Core10.Handles (Queue)
import Vulkan.Core10.Handles (Queue(..))
import Vulkan.Core10.Handles (Queue(Queue))
import Vulkan.Core10.Handles (Queue_T)
import Vulkan.Core10.Enums.Result (Result)
import Vulkan.Core10.Enums.Result (Result(..))
import Vulkan.Core10.Enums.StructureType (StructureType)
import Vulkan.Exception (VulkanException(..))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_TAG_INFO_EXT))
import Vulkan.Core10.Enums.Result (Result(SUCCESS))
import Vulkan.Extensions.Handles (DebugUtilsMessengerEXT(..))
foreign import ccall
#if !defined(SAFE_FOREIGN_CALLS)
  unsafe
#endif
  "dynamic" mkVkSetDebugUtilsObjectNameEXT
  :: FunPtr (Ptr Device_T -> Ptr DebugUtilsObjectNameInfoEXT -> IO Result) -> Ptr Device_T -> Ptr DebugUtilsObjectNameInfoEXT -> IO Result

-- | vkSetDebugUtilsObjectNameEXT - Give a user-friendly name to an object
--
-- == Valid Usage
--
-- -   #VUID-vkSetDebugUtilsObjectNameEXT-pNameInfo-02587#
--     @pNameInfo->objectType@ /must/ not be
--     'Vulkan.Core10.Enums.ObjectType.OBJECT_TYPE_UNKNOWN'
--
-- -   #VUID-vkSetDebugUtilsObjectNameEXT-pNameInfo-02588#
--     @pNameInfo->objectHandle@ /must/ not be
--     'Vulkan.Core10.APIConstants.NULL_HANDLE'
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-vkSetDebugUtilsObjectNameEXT-device-parameter# @device@ /must/
--     be a valid 'Vulkan.Core10.Handles.Device' handle
--
-- -   #VUID-vkSetDebugUtilsObjectNameEXT-pNameInfo-parameter# @pNameInfo@
--     /must/ be a valid pointer to a valid 'DebugUtilsObjectNameInfoEXT'
--     structure
--
-- == Host Synchronization
--
-- -   Host access to @pNameInfo->objectHandle@ /must/ be externally
--     synchronized
--
-- == Return Codes
--
-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
--
--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
--
-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
--
--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
--
--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_debug_utils VK_EXT_debug_utils>,
-- 'DebugUtilsObjectNameInfoEXT', 'Vulkan.Core10.Handles.Device'
setDebugUtilsObjectNameEXT :: forall io
                            . (MonadIO io)
                           => -- | @device@ is the device that created the object.
                              Device
                           -> -- | @pNameInfo@ is a pointer to a 'DebugUtilsObjectNameInfoEXT' structure
                              -- specifying parameters of the name to set on the object.
                              DebugUtilsObjectNameInfoEXT
                           -> io ()
setDebugUtilsObjectNameEXT :: Device -> DebugUtilsObjectNameInfoEXT -> io ()
setDebugUtilsObjectNameEXT Device
device DebugUtilsObjectNameInfoEXT
nameInfo = IO () -> io ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> io ())
-> (ContT () IO () -> IO ()) -> ContT () IO () -> io ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ContT () IO () -> IO ()
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT () IO () -> io ()) -> ContT () IO () -> io ()
forall a b. (a -> b) -> a -> b
$ do
  let vkSetDebugUtilsObjectNameEXTPtr :: FunPtr
  (Ptr Device_T
   -> ("pNameInfo" ::: Ptr DebugUtilsObjectNameInfoEXT) -> IO Result)
vkSetDebugUtilsObjectNameEXTPtr = DeviceCmds
-> FunPtr
     (Ptr Device_T
      -> ("pNameInfo" ::: Ptr DebugUtilsObjectNameInfoEXT) -> IO Result)
pVkSetDebugUtilsObjectNameEXT (case Device
device of Device{DeviceCmds
$sel:deviceCmds:Device :: Device -> DeviceCmds
deviceCmds :: DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
  IO () -> ContT () IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (FunPtr
  (Ptr Device_T
   -> ("pNameInfo" ::: Ptr DebugUtilsObjectNameInfoEXT) -> IO Result)
vkSetDebugUtilsObjectNameEXTPtr FunPtr
  (Ptr Device_T
   -> ("pNameInfo" ::: Ptr DebugUtilsObjectNameInfoEXT) -> IO Result)
-> FunPtr
     (Ptr Device_T
      -> ("pNameInfo" ::: Ptr DebugUtilsObjectNameInfoEXT) -> IO Result)
-> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr
  (Ptr Device_T
   -> ("pNameInfo" ::: Ptr DebugUtilsObjectNameInfoEXT) -> IO Result)
forall a. FunPtr a
nullFunPtr) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
    IOException -> IO ()
forall e a. Exception e => e -> IO a
throwIO (IOException -> IO ()) -> IOException -> IO ()
forall a b. (a -> b) -> a -> b
$ Maybe Handle
-> IOErrorType
-> String
-> String
-> Maybe CInt
-> Maybe String
-> IOException
IOError Maybe Handle
forall a. Maybe a
Nothing IOErrorType
InvalidArgument String
"" String
"The function pointer for vkSetDebugUtilsObjectNameEXT is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkSetDebugUtilsObjectNameEXT' :: Ptr Device_T
-> ("pNameInfo" ::: Ptr DebugUtilsObjectNameInfoEXT) -> IO Result
vkSetDebugUtilsObjectNameEXT' = FunPtr
  (Ptr Device_T
   -> ("pNameInfo" ::: Ptr DebugUtilsObjectNameInfoEXT) -> IO Result)
-> Ptr Device_T
-> ("pNameInfo" ::: Ptr DebugUtilsObjectNameInfoEXT)
-> IO Result
mkVkSetDebugUtilsObjectNameEXT FunPtr
  (Ptr Device_T
   -> ("pNameInfo" ::: Ptr DebugUtilsObjectNameInfoEXT) -> IO Result)
vkSetDebugUtilsObjectNameEXTPtr
  "pNameInfo" ::: Ptr DebugUtilsObjectNameInfoEXT
pNameInfo <- ((("pNameInfo" ::: Ptr DebugUtilsObjectNameInfoEXT) -> IO ())
 -> IO ())
-> ContT () IO ("pNameInfo" ::: Ptr DebugUtilsObjectNameInfoEXT)
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((("pNameInfo" ::: Ptr DebugUtilsObjectNameInfoEXT) -> IO ())
  -> IO ())
 -> ContT () IO ("pNameInfo" ::: Ptr DebugUtilsObjectNameInfoEXT))
-> ((("pNameInfo" ::: Ptr DebugUtilsObjectNameInfoEXT) -> IO ())
    -> IO ())
-> ContT () IO ("pNameInfo" ::: Ptr DebugUtilsObjectNameInfoEXT)
forall a b. (a -> b) -> a -> b
$ DebugUtilsObjectNameInfoEXT
-> (("pNameInfo" ::: Ptr DebugUtilsObjectNameInfoEXT) -> IO ())
-> IO ()
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
withCStruct (DebugUtilsObjectNameInfoEXT
nameInfo)
  Result
r <- IO Result -> ContT () IO Result
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO Result -> ContT () IO Result)
-> IO Result -> ContT () IO Result
forall a b. (a -> b) -> a -> b
$ String -> IO Result -> IO Result
forall a. String -> IO a -> IO a
traceAroundEvent String
"vkSetDebugUtilsObjectNameEXT" (Ptr Device_T
-> ("pNameInfo" ::: Ptr DebugUtilsObjectNameInfoEXT) -> IO Result
vkSetDebugUtilsObjectNameEXT' (Device -> Ptr Device_T
deviceHandle (Device
device)) "pNameInfo" ::: Ptr DebugUtilsObjectNameInfoEXT
pNameInfo)
  IO () -> ContT () IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
when (Result
r Result -> Result -> Bool
forall a. Ord a => a -> a -> Bool
< Result
SUCCESS) (VulkanException -> IO ()
forall e a. Exception e => e -> IO a
throwIO (Result -> VulkanException
VulkanException Result
r))


foreign import ccall
#if !defined(SAFE_FOREIGN_CALLS)
  unsafe
#endif
  "dynamic" mkVkSetDebugUtilsObjectTagEXT
  :: FunPtr (Ptr Device_T -> Ptr DebugUtilsObjectTagInfoEXT -> IO Result) -> Ptr Device_T -> Ptr DebugUtilsObjectTagInfoEXT -> IO Result

-- | vkSetDebugUtilsObjectTagEXT - Attach arbitrary data to an object
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-vkSetDebugUtilsObjectTagEXT-device-parameter# @device@ /must/
--     be a valid 'Vulkan.Core10.Handles.Device' handle
--
-- -   #VUID-vkSetDebugUtilsObjectTagEXT-pTagInfo-parameter# @pTagInfo@
--     /must/ be a valid pointer to a valid 'DebugUtilsObjectTagInfoEXT'
--     structure
--
-- == Host Synchronization
--
-- -   Host access to @pTagInfo->objectHandle@ /must/ be externally
--     synchronized
--
-- == Return Codes
--
-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
--
--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
--
-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
--
--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
--
--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_debug_utils VK_EXT_debug_utils>,
-- 'DebugUtilsObjectTagInfoEXT', 'Vulkan.Core10.Handles.Device'
setDebugUtilsObjectTagEXT :: forall io
                           . (MonadIO io)
                          => -- | @device@ is the device that created the object.
                             Device
                          -> -- | @pTagInfo@ is a pointer to a 'DebugUtilsObjectTagInfoEXT' structure
                             -- specifying parameters of the tag to attach to the object.
                             DebugUtilsObjectTagInfoEXT
                          -> io ()
setDebugUtilsObjectTagEXT :: Device -> DebugUtilsObjectTagInfoEXT -> io ()
setDebugUtilsObjectTagEXT Device
device DebugUtilsObjectTagInfoEXT
tagInfo = IO () -> io ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> io ())
-> (ContT () IO () -> IO ()) -> ContT () IO () -> io ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ContT () IO () -> IO ()
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT () IO () -> io ()) -> ContT () IO () -> io ()
forall a b. (a -> b) -> a -> b
$ do
  let vkSetDebugUtilsObjectTagEXTPtr :: FunPtr
  (Ptr Device_T
   -> ("pTagInfo" ::: Ptr DebugUtilsObjectTagInfoEXT) -> IO Result)
vkSetDebugUtilsObjectTagEXTPtr = DeviceCmds
-> FunPtr
     (Ptr Device_T
      -> ("pTagInfo" ::: Ptr DebugUtilsObjectTagInfoEXT) -> IO Result)
pVkSetDebugUtilsObjectTagEXT (case Device
device of Device{DeviceCmds
deviceCmds :: DeviceCmds
$sel:deviceCmds:Device :: Device -> DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
  IO () -> ContT () IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (FunPtr
  (Ptr Device_T
   -> ("pTagInfo" ::: Ptr DebugUtilsObjectTagInfoEXT) -> IO Result)
vkSetDebugUtilsObjectTagEXTPtr FunPtr
  (Ptr Device_T
   -> ("pTagInfo" ::: Ptr DebugUtilsObjectTagInfoEXT) -> IO Result)
-> FunPtr
     (Ptr Device_T
      -> ("pTagInfo" ::: Ptr DebugUtilsObjectTagInfoEXT) -> IO Result)
-> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr
  (Ptr Device_T
   -> ("pTagInfo" ::: Ptr DebugUtilsObjectTagInfoEXT) -> IO Result)
forall a. FunPtr a
nullFunPtr) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
    IOException -> IO ()
forall e a. Exception e => e -> IO a
throwIO (IOException -> IO ()) -> IOException -> IO ()
forall a b. (a -> b) -> a -> b
$ Maybe Handle
-> IOErrorType
-> String
-> String
-> Maybe CInt
-> Maybe String
-> IOException
IOError Maybe Handle
forall a. Maybe a
Nothing IOErrorType
InvalidArgument String
"" String
"The function pointer for vkSetDebugUtilsObjectTagEXT is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkSetDebugUtilsObjectTagEXT' :: Ptr Device_T
-> ("pTagInfo" ::: Ptr DebugUtilsObjectTagInfoEXT) -> IO Result
vkSetDebugUtilsObjectTagEXT' = FunPtr
  (Ptr Device_T
   -> ("pTagInfo" ::: Ptr DebugUtilsObjectTagInfoEXT) -> IO Result)
-> Ptr Device_T
-> ("pTagInfo" ::: Ptr DebugUtilsObjectTagInfoEXT)
-> IO Result
mkVkSetDebugUtilsObjectTagEXT FunPtr
  (Ptr Device_T
   -> ("pTagInfo" ::: Ptr DebugUtilsObjectTagInfoEXT) -> IO Result)
vkSetDebugUtilsObjectTagEXTPtr
  "pTagInfo" ::: Ptr DebugUtilsObjectTagInfoEXT
pTagInfo <- ((("pTagInfo" ::: Ptr DebugUtilsObjectTagInfoEXT) -> IO ())
 -> IO ())
-> ContT () IO ("pTagInfo" ::: Ptr DebugUtilsObjectTagInfoEXT)
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((("pTagInfo" ::: Ptr DebugUtilsObjectTagInfoEXT) -> IO ())
  -> IO ())
 -> ContT () IO ("pTagInfo" ::: Ptr DebugUtilsObjectTagInfoEXT))
-> ((("pTagInfo" ::: Ptr DebugUtilsObjectTagInfoEXT) -> IO ())
    -> IO ())
-> ContT () IO ("pTagInfo" ::: Ptr DebugUtilsObjectTagInfoEXT)
forall a b. (a -> b) -> a -> b
$ DebugUtilsObjectTagInfoEXT
-> (("pTagInfo" ::: Ptr DebugUtilsObjectTagInfoEXT) -> IO ())
-> IO ()
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
withCStruct (DebugUtilsObjectTagInfoEXT
tagInfo)
  Result
r <- IO Result -> ContT () IO Result
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO Result -> ContT () IO Result)
-> IO Result -> ContT () IO Result
forall a b. (a -> b) -> a -> b
$ String -> IO Result -> IO Result
forall a. String -> IO a -> IO a
traceAroundEvent String
"vkSetDebugUtilsObjectTagEXT" (Ptr Device_T
-> ("pTagInfo" ::: Ptr DebugUtilsObjectTagInfoEXT) -> IO Result
vkSetDebugUtilsObjectTagEXT' (Device -> Ptr Device_T
deviceHandle (Device
device)) "pTagInfo" ::: Ptr DebugUtilsObjectTagInfoEXT
pTagInfo)
  IO () -> ContT () IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
when (Result
r Result -> Result -> Bool
forall a. Ord a => a -> a -> Bool
< Result
SUCCESS) (VulkanException -> IO ()
forall e a. Exception e => e -> IO a
throwIO (Result -> VulkanException
VulkanException Result
r))


foreign import ccall
#if !defined(SAFE_FOREIGN_CALLS)
  unsafe
#endif
  "dynamic" mkVkQueueBeginDebugUtilsLabelEXT
  :: FunPtr (Ptr Queue_T -> Ptr DebugUtilsLabelEXT -> IO ()) -> Ptr Queue_T -> Ptr DebugUtilsLabelEXT -> IO ()

-- | vkQueueBeginDebugUtilsLabelEXT - Open a queue debug label region
--
-- == Command Properties
--
-- \'
--
-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+
-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> |
-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+
-- | -                                                                                                                          | -                                                                                                                      | Any                                                                                                                   |
-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_debug_utils VK_EXT_debug_utils>,
-- 'DebugUtilsLabelEXT', 'Vulkan.Core10.Handles.Queue'
queueBeginDebugUtilsLabelEXT :: forall io
                              . (MonadIO io)
                             => -- | @queue@ is the queue in which to start a debug label region.
                                --
                                -- #VUID-vkQueueBeginDebugUtilsLabelEXT-queue-parameter# @queue@ /must/ be
                                -- a valid 'Vulkan.Core10.Handles.Queue' handle
                                Queue
                             -> -- | @pLabelInfo@ is a pointer to a 'DebugUtilsLabelEXT' structure specifying
                                -- parameters of the label region to open.
                                --
                                -- #VUID-vkQueueBeginDebugUtilsLabelEXT-pLabelInfo-parameter# @pLabelInfo@
                                -- /must/ be a valid pointer to a valid 'DebugUtilsLabelEXT' structure
                                ("labelInfo" ::: DebugUtilsLabelEXT)
                             -> io ()
queueBeginDebugUtilsLabelEXT :: Queue -> ("labelInfo" ::: DebugUtilsLabelEXT) -> io ()
queueBeginDebugUtilsLabelEXT Queue
queue "labelInfo" ::: DebugUtilsLabelEXT
labelInfo = IO () -> io ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> io ())
-> (ContT () IO () -> IO ()) -> ContT () IO () -> io ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ContT () IO () -> IO ()
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT () IO () -> io ()) -> ContT () IO () -> io ()
forall a b. (a -> b) -> a -> b
$ do
  let vkQueueBeginDebugUtilsLabelEXTPtr :: FunPtr
  (Ptr Queue_T
   -> ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
   -> IO ())
vkQueueBeginDebugUtilsLabelEXTPtr = DeviceCmds
-> FunPtr
     (Ptr Queue_T
      -> ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
      -> IO ())
pVkQueueBeginDebugUtilsLabelEXT (case Queue
queue of Queue{DeviceCmds
$sel:deviceCmds:Queue :: Queue -> DeviceCmds
deviceCmds :: DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
  IO () -> ContT () IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (FunPtr
  (Ptr Queue_T
   -> ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
   -> IO ())
vkQueueBeginDebugUtilsLabelEXTPtr FunPtr
  (Ptr Queue_T
   -> ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
   -> IO ())
-> FunPtr
     (Ptr Queue_T
      -> ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
      -> IO ())
-> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr
  (Ptr Queue_T
   -> ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
   -> IO ())
forall a. FunPtr a
nullFunPtr) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
    IOException -> IO ()
forall e a. Exception e => e -> IO a
throwIO (IOException -> IO ()) -> IOException -> IO ()
forall a b. (a -> b) -> a -> b
$ Maybe Handle
-> IOErrorType
-> String
-> String
-> Maybe CInt
-> Maybe String
-> IOException
IOError Maybe Handle
forall a. Maybe a
Nothing IOErrorType
InvalidArgument String
"" String
"The function pointer for vkQueueBeginDebugUtilsLabelEXT is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkQueueBeginDebugUtilsLabelEXT' :: Ptr Queue_T
-> ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
-> IO ()
vkQueueBeginDebugUtilsLabelEXT' = FunPtr
  (Ptr Queue_T
   -> ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
   -> IO ())
-> Ptr Queue_T
-> ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
-> IO ()
mkVkQueueBeginDebugUtilsLabelEXT FunPtr
  (Ptr Queue_T
   -> ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
   -> IO ())
vkQueueBeginDebugUtilsLabelEXTPtr
  "pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT)
pLabelInfo <- ((("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
  -> IO ())
 -> IO ())
-> ContT
     () IO ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
   -> IO ())
  -> IO ())
 -> ContT
      () IO ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT)))
-> ((("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
     -> IO ())
    -> IO ())
-> ContT
     () IO ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
forall a b. (a -> b) -> a -> b
$ ("labelInfo" ::: DebugUtilsLabelEXT)
-> (("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
    -> IO ())
-> IO ()
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
withCStruct ("labelInfo" ::: DebugUtilsLabelEXT
labelInfo)
  IO () -> ContT () IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ String -> IO () -> IO ()
forall a. String -> IO a -> IO a
traceAroundEvent String
"vkQueueBeginDebugUtilsLabelEXT" (Ptr Queue_T
-> ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
-> IO ()
vkQueueBeginDebugUtilsLabelEXT' (Queue -> Ptr Queue_T
queueHandle (Queue
queue)) "pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT)
pLabelInfo)
  () -> ContT () IO ()
forall (f :: * -> *) a. Applicative f => a -> f a
pure (() -> ContT () IO ()) -> () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ ()


foreign import ccall
#if !defined(SAFE_FOREIGN_CALLS)
  unsafe
#endif
  "dynamic" mkVkQueueEndDebugUtilsLabelEXT
  :: FunPtr (Ptr Queue_T -> IO ()) -> Ptr Queue_T -> IO ()

-- | vkQueueEndDebugUtilsLabelEXT - Close a queue debug label region
--
-- = Description
--
-- The calls to 'queueBeginDebugUtilsLabelEXT' and
-- 'queueEndDebugUtilsLabelEXT' /must/ be matched and balanced.
--
-- == Valid Usage
--
-- -   #VUID-vkQueueEndDebugUtilsLabelEXT-None-01911# There /must/ be an
--     outstanding 'queueBeginDebugUtilsLabelEXT' command prior to the
--     'queueEndDebugUtilsLabelEXT' on the queue
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-vkQueueEndDebugUtilsLabelEXT-queue-parameter# @queue@ /must/
--     be a valid 'Vulkan.Core10.Handles.Queue' handle
--
-- == Command Properties
--
-- \'
--
-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+
-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> |
-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+
-- | -                                                                                                                          | -                                                                                                                      | Any                                                                                                                   |
-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_debug_utils VK_EXT_debug_utils>,
-- 'Vulkan.Core10.Handles.Queue'
queueEndDebugUtilsLabelEXT :: forall io
                            . (MonadIO io)
                           => -- | @queue@ is the queue in which a debug label region should be closed.
                              Queue
                           -> io ()
queueEndDebugUtilsLabelEXT :: Queue -> io ()
queueEndDebugUtilsLabelEXT Queue
queue = IO () -> io ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> io ()) -> IO () -> io ()
forall a b. (a -> b) -> a -> b
$ do
  let vkQueueEndDebugUtilsLabelEXTPtr :: FunPtr (Ptr Queue_T -> IO ())
vkQueueEndDebugUtilsLabelEXTPtr = DeviceCmds -> FunPtr (Ptr Queue_T -> IO ())
pVkQueueEndDebugUtilsLabelEXT (case Queue
queue of Queue{DeviceCmds
deviceCmds :: DeviceCmds
$sel:deviceCmds:Queue :: Queue -> DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
  Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (FunPtr (Ptr Queue_T -> IO ())
vkQueueEndDebugUtilsLabelEXTPtr FunPtr (Ptr Queue_T -> IO ())
-> FunPtr (Ptr Queue_T -> IO ()) -> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr (Ptr Queue_T -> IO ())
forall a. FunPtr a
nullFunPtr) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
    IOException -> IO ()
forall e a. Exception e => e -> IO a
throwIO (IOException -> IO ()) -> IOException -> IO ()
forall a b. (a -> b) -> a -> b
$ Maybe Handle
-> IOErrorType
-> String
-> String
-> Maybe CInt
-> Maybe String
-> IOException
IOError Maybe Handle
forall a. Maybe a
Nothing IOErrorType
InvalidArgument String
"" String
"The function pointer for vkQueueEndDebugUtilsLabelEXT is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkQueueEndDebugUtilsLabelEXT' :: Ptr Queue_T -> IO ()
vkQueueEndDebugUtilsLabelEXT' = FunPtr (Ptr Queue_T -> IO ()) -> Ptr Queue_T -> IO ()
mkVkQueueEndDebugUtilsLabelEXT FunPtr (Ptr Queue_T -> IO ())
vkQueueEndDebugUtilsLabelEXTPtr
  String -> IO () -> IO ()
forall a. String -> IO a -> IO a
traceAroundEvent String
"vkQueueEndDebugUtilsLabelEXT" (Ptr Queue_T -> IO ()
vkQueueEndDebugUtilsLabelEXT' (Queue -> Ptr Queue_T
queueHandle (Queue
queue)))
  () -> IO ()
forall (f :: * -> *) a. Applicative f => a -> f a
pure (() -> IO ()) -> () -> IO ()
forall a b. (a -> b) -> a -> b
$ ()


foreign import ccall
#if !defined(SAFE_FOREIGN_CALLS)
  unsafe
#endif
  "dynamic" mkVkQueueInsertDebugUtilsLabelEXT
  :: FunPtr (Ptr Queue_T -> Ptr DebugUtilsLabelEXT -> IO ()) -> Ptr Queue_T -> Ptr DebugUtilsLabelEXT -> IO ()

-- | vkQueueInsertDebugUtilsLabelEXT - Insert a label into a queue
--
-- == Command Properties
--
-- \'
--
-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+
-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> |
-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+
-- | -                                                                                                                          | -                                                                                                                      | Any                                                                                                                   |
-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_debug_utils VK_EXT_debug_utils>,
-- 'DebugUtilsLabelEXT', 'Vulkan.Core10.Handles.Queue'
queueInsertDebugUtilsLabelEXT :: forall io
                               . (MonadIO io)
                              => -- | @queue@ is the queue into which a debug label will be inserted.
                                 --
                                 -- #VUID-vkQueueInsertDebugUtilsLabelEXT-queue-parameter# @queue@ /must/ be
                                 -- a valid 'Vulkan.Core10.Handles.Queue' handle
                                 Queue
                              -> -- | @pLabelInfo@ is a pointer to a 'DebugUtilsLabelEXT' structure specifying
                                 -- parameters of the label to insert.
                                 --
                                 -- #VUID-vkQueueInsertDebugUtilsLabelEXT-pLabelInfo-parameter# @pLabelInfo@
                                 -- /must/ be a valid pointer to a valid 'DebugUtilsLabelEXT' structure
                                 ("labelInfo" ::: DebugUtilsLabelEXT)
                              -> io ()
queueInsertDebugUtilsLabelEXT :: Queue -> ("labelInfo" ::: DebugUtilsLabelEXT) -> io ()
queueInsertDebugUtilsLabelEXT Queue
queue "labelInfo" ::: DebugUtilsLabelEXT
labelInfo = IO () -> io ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> io ())
-> (ContT () IO () -> IO ()) -> ContT () IO () -> io ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ContT () IO () -> IO ()
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT () IO () -> io ()) -> ContT () IO () -> io ()
forall a b. (a -> b) -> a -> b
$ do
  let vkQueueInsertDebugUtilsLabelEXTPtr :: FunPtr
  (Ptr Queue_T
   -> ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
   -> IO ())
vkQueueInsertDebugUtilsLabelEXTPtr = DeviceCmds
-> FunPtr
     (Ptr Queue_T
      -> ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
      -> IO ())
pVkQueueInsertDebugUtilsLabelEXT (case Queue
queue of Queue{DeviceCmds
deviceCmds :: DeviceCmds
$sel:deviceCmds:Queue :: Queue -> DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
  IO () -> ContT () IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (FunPtr
  (Ptr Queue_T
   -> ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
   -> IO ())
vkQueueInsertDebugUtilsLabelEXTPtr FunPtr
  (Ptr Queue_T
   -> ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
   -> IO ())
-> FunPtr
     (Ptr Queue_T
      -> ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
      -> IO ())
-> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr
  (Ptr Queue_T
   -> ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
   -> IO ())
forall a. FunPtr a
nullFunPtr) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
    IOException -> IO ()
forall e a. Exception e => e -> IO a
throwIO (IOException -> IO ()) -> IOException -> IO ()
forall a b. (a -> b) -> a -> b
$ Maybe Handle
-> IOErrorType
-> String
-> String
-> Maybe CInt
-> Maybe String
-> IOException
IOError Maybe Handle
forall a. Maybe a
Nothing IOErrorType
InvalidArgument String
"" String
"The function pointer for vkQueueInsertDebugUtilsLabelEXT is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkQueueInsertDebugUtilsLabelEXT' :: Ptr Queue_T
-> ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
-> IO ()
vkQueueInsertDebugUtilsLabelEXT' = FunPtr
  (Ptr Queue_T
   -> ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
   -> IO ())
-> Ptr Queue_T
-> ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
-> IO ()
mkVkQueueInsertDebugUtilsLabelEXT FunPtr
  (Ptr Queue_T
   -> ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
   -> IO ())
vkQueueInsertDebugUtilsLabelEXTPtr
  "pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT)
pLabelInfo <- ((("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
  -> IO ())
 -> IO ())
-> ContT
     () IO ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
   -> IO ())
  -> IO ())
 -> ContT
      () IO ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT)))
-> ((("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
     -> IO ())
    -> IO ())
-> ContT
     () IO ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
forall a b. (a -> b) -> a -> b
$ ("labelInfo" ::: DebugUtilsLabelEXT)
-> (("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
    -> IO ())
-> IO ()
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
withCStruct ("labelInfo" ::: DebugUtilsLabelEXT
labelInfo)
  IO () -> ContT () IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ String -> IO () -> IO ()
forall a. String -> IO a -> IO a
traceAroundEvent String
"vkQueueInsertDebugUtilsLabelEXT" (Ptr Queue_T
-> ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
-> IO ()
vkQueueInsertDebugUtilsLabelEXT' (Queue -> Ptr Queue_T
queueHandle (Queue
queue)) "pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT)
pLabelInfo)
  () -> ContT () IO ()
forall (f :: * -> *) a. Applicative f => a -> f a
pure (() -> ContT () IO ()) -> () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ ()


foreign import ccall
#if !defined(SAFE_FOREIGN_CALLS)
  unsafe
#endif
  "dynamic" mkVkCmdBeginDebugUtilsLabelEXT
  :: FunPtr (Ptr CommandBuffer_T -> Ptr DebugUtilsLabelEXT -> IO ()) -> Ptr CommandBuffer_T -> Ptr DebugUtilsLabelEXT -> IO ()

-- | vkCmdBeginDebugUtilsLabelEXT - Open a command buffer debug label region
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-vkCmdBeginDebugUtilsLabelEXT-commandBuffer-parameter#
--     @commandBuffer@ /must/ be a valid
--     'Vulkan.Core10.Handles.CommandBuffer' handle
--
-- -   #VUID-vkCmdBeginDebugUtilsLabelEXT-pLabelInfo-parameter#
--     @pLabelInfo@ /must/ be a valid pointer to a valid
--     'DebugUtilsLabelEXT' structure
--
-- -   #VUID-vkCmdBeginDebugUtilsLabelEXT-commandBuffer-recording#
--     @commandBuffer@ /must/ be in the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
--
-- -   #VUID-vkCmdBeginDebugUtilsLabelEXT-commandBuffer-cmdpool# The
--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
--     allocated from /must/ support graphics, or compute operations
--
-- == Host Synchronization
--
-- -   Host access to @commandBuffer@ /must/ be externally synchronized
--
-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
--     @commandBuffer@ was allocated from /must/ be externally synchronized
--
-- == Command Properties
--
-- \'
--
-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+
-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> |
-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+
-- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |
-- | Secondary                                                                                                                  |                                                                                                                        | Compute                                                                                                               |
-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_debug_utils VK_EXT_debug_utils>,
-- 'Vulkan.Core10.Handles.CommandBuffer', 'DebugUtilsLabelEXT'
cmdBeginDebugUtilsLabelEXT :: forall io
                            . (MonadIO io)
                           => -- | @commandBuffer@ is the command buffer into which the command is
                              -- recorded.
                              CommandBuffer
                           -> -- | @pLabelInfo@ is a pointer to a 'DebugUtilsLabelEXT' structure specifying
                              -- parameters of the label region to open.
                              ("labelInfo" ::: DebugUtilsLabelEXT)
                           -> io ()
cmdBeginDebugUtilsLabelEXT :: CommandBuffer -> ("labelInfo" ::: DebugUtilsLabelEXT) -> io ()
cmdBeginDebugUtilsLabelEXT CommandBuffer
commandBuffer "labelInfo" ::: DebugUtilsLabelEXT
labelInfo = IO () -> io ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> io ())
-> (ContT () IO () -> IO ()) -> ContT () IO () -> io ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ContT () IO () -> IO ()
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT () IO () -> io ()) -> ContT () IO () -> io ()
forall a b. (a -> b) -> a -> b
$ do
  let vkCmdBeginDebugUtilsLabelEXTPtr :: FunPtr
  (Ptr CommandBuffer_T
   -> ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
   -> IO ())
vkCmdBeginDebugUtilsLabelEXTPtr = DeviceCmds
-> FunPtr
     (Ptr CommandBuffer_T
      -> ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
      -> IO ())
pVkCmdBeginDebugUtilsLabelEXT (case CommandBuffer
commandBuffer of CommandBuffer{DeviceCmds
$sel:deviceCmds:CommandBuffer :: CommandBuffer -> DeviceCmds
deviceCmds :: DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
  IO () -> ContT () IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (FunPtr
  (Ptr CommandBuffer_T
   -> ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
   -> IO ())
vkCmdBeginDebugUtilsLabelEXTPtr FunPtr
  (Ptr CommandBuffer_T
   -> ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
   -> IO ())
-> FunPtr
     (Ptr CommandBuffer_T
      -> ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
      -> IO ())
-> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr
  (Ptr CommandBuffer_T
   -> ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
   -> IO ())
forall a. FunPtr a
nullFunPtr) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
    IOException -> IO ()
forall e a. Exception e => e -> IO a
throwIO (IOException -> IO ()) -> IOException -> IO ()
forall a b. (a -> b) -> a -> b
$ Maybe Handle
-> IOErrorType
-> String
-> String
-> Maybe CInt
-> Maybe String
-> IOException
IOError Maybe Handle
forall a. Maybe a
Nothing IOErrorType
InvalidArgument String
"" String
"The function pointer for vkCmdBeginDebugUtilsLabelEXT is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkCmdBeginDebugUtilsLabelEXT' :: Ptr CommandBuffer_T
-> ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
-> IO ()
vkCmdBeginDebugUtilsLabelEXT' = FunPtr
  (Ptr CommandBuffer_T
   -> ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
   -> IO ())
-> Ptr CommandBuffer_T
-> ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
-> IO ()
mkVkCmdBeginDebugUtilsLabelEXT FunPtr
  (Ptr CommandBuffer_T
   -> ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
   -> IO ())
vkCmdBeginDebugUtilsLabelEXTPtr
  "pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT)
pLabelInfo <- ((("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
  -> IO ())
 -> IO ())
-> ContT
     () IO ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
   -> IO ())
  -> IO ())
 -> ContT
      () IO ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT)))
-> ((("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
     -> IO ())
    -> IO ())
-> ContT
     () IO ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
forall a b. (a -> b) -> a -> b
$ ("labelInfo" ::: DebugUtilsLabelEXT)
-> (("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
    -> IO ())
-> IO ()
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
withCStruct ("labelInfo" ::: DebugUtilsLabelEXT
labelInfo)
  IO () -> ContT () IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ String -> IO () -> IO ()
forall a. String -> IO a -> IO a
traceAroundEvent String
"vkCmdBeginDebugUtilsLabelEXT" (Ptr CommandBuffer_T
-> ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
-> IO ()
vkCmdBeginDebugUtilsLabelEXT' (CommandBuffer -> Ptr CommandBuffer_T
commandBufferHandle (CommandBuffer
commandBuffer)) "pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT)
pLabelInfo)
  () -> ContT () IO ()
forall (f :: * -> *) a. Applicative f => a -> f a
pure (() -> ContT () IO ()) -> () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ ()

-- | 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.
cmdUseDebugUtilsLabelEXT :: forall io r . MonadIO io => CommandBuffer -> DebugUtilsLabelEXT -> io r -> io r
cmdUseDebugUtilsLabelEXT :: CommandBuffer
-> ("labelInfo" ::: DebugUtilsLabelEXT) -> io r -> io r
cmdUseDebugUtilsLabelEXT CommandBuffer
commandBuffer "labelInfo" ::: DebugUtilsLabelEXT
pLabelInfo io r
a =
  (CommandBuffer -> ("labelInfo" ::: DebugUtilsLabelEXT) -> io ()
forall (io :: * -> *).
MonadIO io =>
CommandBuffer -> ("labelInfo" ::: DebugUtilsLabelEXT) -> io ()
cmdBeginDebugUtilsLabelEXT CommandBuffer
commandBuffer "labelInfo" ::: DebugUtilsLabelEXT
pLabelInfo) io () -> io r -> io r
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> io r
a io r -> io () -> io r
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* (CommandBuffer -> io ()
forall (io :: * -> *). MonadIO io => CommandBuffer -> io ()
cmdEndDebugUtilsLabelEXT CommandBuffer
commandBuffer)


foreign import ccall
#if !defined(SAFE_FOREIGN_CALLS)
  unsafe
#endif
  "dynamic" mkVkCmdEndDebugUtilsLabelEXT
  :: FunPtr (Ptr CommandBuffer_T -> IO ()) -> Ptr CommandBuffer_T -> 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
--
-- -   #VUID-vkCmdEndDebugUtilsLabelEXT-commandBuffer-01912# There /must/
--     be an outstanding 'cmdBeginDebugUtilsLabelEXT' command prior to the
--     'cmdEndDebugUtilsLabelEXT' on the queue that @commandBuffer@ is
--     submitted to
--
-- -   #VUID-vkCmdEndDebugUtilsLabelEXT-commandBuffer-01913# If
--     @commandBuffer@ is a secondary command buffer, there /must/ be an
--     outstanding 'cmdBeginDebugUtilsLabelEXT' command recorded to
--     @commandBuffer@ that has not previously been ended by a call to
--     'cmdEndDebugUtilsLabelEXT'
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-vkCmdEndDebugUtilsLabelEXT-commandBuffer-parameter#
--     @commandBuffer@ /must/ be a valid
--     'Vulkan.Core10.Handles.CommandBuffer' handle
--
-- -   #VUID-vkCmdEndDebugUtilsLabelEXT-commandBuffer-recording#
--     @commandBuffer@ /must/ be in the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
--
-- -   #VUID-vkCmdEndDebugUtilsLabelEXT-commandBuffer-cmdpool# The
--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
--     allocated from /must/ support graphics, or compute operations
--
-- == Host Synchronization
--
-- -   Host access to @commandBuffer@ /must/ be externally synchronized
--
-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
--     @commandBuffer@ was allocated from /must/ be externally synchronized
--
-- == Command Properties
--
-- \'
--
-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+
-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> |
-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+
-- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |
-- | Secondary                                                                                                                  |                                                                                                                        | Compute                                                                                                               |
-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_debug_utils VK_EXT_debug_utils>,
-- 'Vulkan.Core10.Handles.CommandBuffer'
cmdEndDebugUtilsLabelEXT :: forall io
                          . (MonadIO io)
                         => -- | @commandBuffer@ is the command buffer into which the command is
                            -- recorded.
                            CommandBuffer
                         -> io ()
cmdEndDebugUtilsLabelEXT :: CommandBuffer -> io ()
cmdEndDebugUtilsLabelEXT CommandBuffer
commandBuffer = IO () -> io ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> io ()) -> IO () -> io ()
forall a b. (a -> b) -> a -> b
$ do
  let vkCmdEndDebugUtilsLabelEXTPtr :: FunPtr (Ptr CommandBuffer_T -> IO ())
vkCmdEndDebugUtilsLabelEXTPtr = DeviceCmds -> FunPtr (Ptr CommandBuffer_T -> IO ())
pVkCmdEndDebugUtilsLabelEXT (case CommandBuffer
commandBuffer of CommandBuffer{DeviceCmds
deviceCmds :: DeviceCmds
$sel:deviceCmds:CommandBuffer :: CommandBuffer -> DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
  Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (FunPtr (Ptr CommandBuffer_T -> IO ())
vkCmdEndDebugUtilsLabelEXTPtr FunPtr (Ptr CommandBuffer_T -> IO ())
-> FunPtr (Ptr CommandBuffer_T -> IO ()) -> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr (Ptr CommandBuffer_T -> IO ())
forall a. FunPtr a
nullFunPtr) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
    IOException -> IO ()
forall e a. Exception e => e -> IO a
throwIO (IOException -> IO ()) -> IOException -> IO ()
forall a b. (a -> b) -> a -> b
$ Maybe Handle
-> IOErrorType
-> String
-> String
-> Maybe CInt
-> Maybe String
-> IOException
IOError Maybe Handle
forall a. Maybe a
Nothing IOErrorType
InvalidArgument String
"" String
"The function pointer for vkCmdEndDebugUtilsLabelEXT is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkCmdEndDebugUtilsLabelEXT' :: Ptr CommandBuffer_T -> IO ()
vkCmdEndDebugUtilsLabelEXT' = FunPtr (Ptr CommandBuffer_T -> IO ())
-> Ptr CommandBuffer_T -> IO ()
mkVkCmdEndDebugUtilsLabelEXT FunPtr (Ptr CommandBuffer_T -> IO ())
vkCmdEndDebugUtilsLabelEXTPtr
  String -> IO () -> IO ()
forall a. String -> IO a -> IO a
traceAroundEvent String
"vkCmdEndDebugUtilsLabelEXT" (Ptr CommandBuffer_T -> IO ()
vkCmdEndDebugUtilsLabelEXT' (CommandBuffer -> Ptr CommandBuffer_T
commandBufferHandle (CommandBuffer
commandBuffer)))
  () -> IO ()
forall (f :: * -> *) a. Applicative f => a -> f a
pure (() -> IO ()) -> () -> IO ()
forall a b. (a -> b) -> a -> b
$ ()


foreign import ccall
#if !defined(SAFE_FOREIGN_CALLS)
  unsafe
#endif
  "dynamic" mkVkCmdInsertDebugUtilsLabelEXT
  :: FunPtr (Ptr CommandBuffer_T -> Ptr DebugUtilsLabelEXT -> IO ()) -> Ptr CommandBuffer_T -> Ptr DebugUtilsLabelEXT -> IO ()

-- | vkCmdInsertDebugUtilsLabelEXT - Insert a label into a command buffer
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-vkCmdInsertDebugUtilsLabelEXT-commandBuffer-parameter#
--     @commandBuffer@ /must/ be a valid
--     'Vulkan.Core10.Handles.CommandBuffer' handle
--
-- -   #VUID-vkCmdInsertDebugUtilsLabelEXT-pLabelInfo-parameter#
--     @pLabelInfo@ /must/ be a valid pointer to a valid
--     'DebugUtilsLabelEXT' structure
--
-- -   #VUID-vkCmdInsertDebugUtilsLabelEXT-commandBuffer-recording#
--     @commandBuffer@ /must/ be in the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
--
-- -   #VUID-vkCmdInsertDebugUtilsLabelEXT-commandBuffer-cmdpool# The
--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
--     allocated from /must/ support graphics, or compute operations
--
-- == Host Synchronization
--
-- -   Host access to @commandBuffer@ /must/ be externally synchronized
--
-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
--     @commandBuffer@ was allocated from /must/ be externally synchronized
--
-- == Command Properties
--
-- \'
--
-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+
-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> |
-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+
-- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |
-- | Secondary                                                                                                                  |                                                                                                                        | Compute                                                                                                               |
-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_debug_utils VK_EXT_debug_utils>,
-- 'Vulkan.Core10.Handles.CommandBuffer', 'DebugUtilsLabelEXT'
cmdInsertDebugUtilsLabelEXT :: forall io
                             . (MonadIO io)
                            => -- | @commandBuffer@ is the command buffer into which the command is
                               -- recorded.
                               CommandBuffer
                            -> -- No documentation found for Nested "vkCmdInsertDebugUtilsLabelEXT" "pLabelInfo"
                               ("labelInfo" ::: DebugUtilsLabelEXT)
                            -> io ()
cmdInsertDebugUtilsLabelEXT :: CommandBuffer -> ("labelInfo" ::: DebugUtilsLabelEXT) -> io ()
cmdInsertDebugUtilsLabelEXT CommandBuffer
commandBuffer "labelInfo" ::: DebugUtilsLabelEXT
labelInfo = IO () -> io ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> io ())
-> (ContT () IO () -> IO ()) -> ContT () IO () -> io ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ContT () IO () -> IO ()
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT () IO () -> io ()) -> ContT () IO () -> io ()
forall a b. (a -> b) -> a -> b
$ do
  let vkCmdInsertDebugUtilsLabelEXTPtr :: FunPtr
  (Ptr CommandBuffer_T
   -> ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
   -> IO ())
vkCmdInsertDebugUtilsLabelEXTPtr = DeviceCmds
-> FunPtr
     (Ptr CommandBuffer_T
      -> ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
      -> IO ())
pVkCmdInsertDebugUtilsLabelEXT (case CommandBuffer
commandBuffer of CommandBuffer{DeviceCmds
deviceCmds :: DeviceCmds
$sel:deviceCmds:CommandBuffer :: CommandBuffer -> DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
  IO () -> ContT () IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (FunPtr
  (Ptr CommandBuffer_T
   -> ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
   -> IO ())
vkCmdInsertDebugUtilsLabelEXTPtr FunPtr
  (Ptr CommandBuffer_T
   -> ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
   -> IO ())
-> FunPtr
     (Ptr CommandBuffer_T
      -> ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
      -> IO ())
-> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr
  (Ptr CommandBuffer_T
   -> ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
   -> IO ())
forall a. FunPtr a
nullFunPtr) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
    IOException -> IO ()
forall e a. Exception e => e -> IO a
throwIO (IOException -> IO ()) -> IOException -> IO ()
forall a b. (a -> b) -> a -> b
$ Maybe Handle
-> IOErrorType
-> String
-> String
-> Maybe CInt
-> Maybe String
-> IOException
IOError Maybe Handle
forall a. Maybe a
Nothing IOErrorType
InvalidArgument String
"" String
"The function pointer for vkCmdInsertDebugUtilsLabelEXT is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkCmdInsertDebugUtilsLabelEXT' :: Ptr CommandBuffer_T
-> ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
-> IO ()
vkCmdInsertDebugUtilsLabelEXT' = FunPtr
  (Ptr CommandBuffer_T
   -> ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
   -> IO ())
-> Ptr CommandBuffer_T
-> ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
-> IO ()
mkVkCmdInsertDebugUtilsLabelEXT FunPtr
  (Ptr CommandBuffer_T
   -> ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
   -> IO ())
vkCmdInsertDebugUtilsLabelEXTPtr
  "pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT)
pLabelInfo <- ((("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
  -> IO ())
 -> IO ())
-> ContT
     () IO ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
   -> IO ())
  -> IO ())
 -> ContT
      () IO ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT)))
-> ((("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
     -> IO ())
    -> IO ())
-> ContT
     () IO ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
forall a b. (a -> b) -> a -> b
$ ("labelInfo" ::: DebugUtilsLabelEXT)
-> (("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
    -> IO ())
-> IO ()
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
withCStruct ("labelInfo" ::: DebugUtilsLabelEXT
labelInfo)
  IO () -> ContT () IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ String -> IO () -> IO ()
forall a. String -> IO a -> IO a
traceAroundEvent String
"vkCmdInsertDebugUtilsLabelEXT" (Ptr CommandBuffer_T
-> ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
-> IO ()
vkCmdInsertDebugUtilsLabelEXT' (CommandBuffer -> Ptr CommandBuffer_T
commandBufferHandle (CommandBuffer
commandBuffer)) "pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT)
pLabelInfo)
  () -> ContT () IO ()
forall (f :: * -> *) a. Applicative f => a -> f a
pure (() -> ContT () IO ()) -> () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ ()


foreign import ccall
#if !defined(SAFE_FOREIGN_CALLS)
  unsafe
#endif
  "dynamic" mkVkCreateDebugUtilsMessengerEXT
  :: FunPtr (Ptr Instance_T -> Ptr DebugUtilsMessengerCreateInfoEXT -> Ptr AllocationCallbacks -> Ptr DebugUtilsMessengerEXT -> IO Result) -> Ptr Instance_T -> Ptr DebugUtilsMessengerCreateInfoEXT -> Ptr AllocationCallbacks -> Ptr DebugUtilsMessengerEXT -> IO Result

-- | vkCreateDebugUtilsMessengerEXT - Create a debug messenger object
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-vkCreateDebugUtilsMessengerEXT-instance-parameter# @instance@
--     /must/ be a valid 'Vulkan.Core10.Handles.Instance' handle
--
-- -   #VUID-vkCreateDebugUtilsMessengerEXT-pCreateInfo-parameter#
--     @pCreateInfo@ /must/ be a valid pointer to a valid
--     'DebugUtilsMessengerCreateInfoEXT' structure
--
-- -   #VUID-vkCreateDebugUtilsMessengerEXT-pAllocator-parameter# If
--     @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid pointer
--     to a valid 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
--     structure
--
-- -   #VUID-vkCreateDebugUtilsMessengerEXT-pMessenger-parameter#
--     @pMessenger@ /must/ be a valid pointer to a
--     'Vulkan.Extensions.Handles.DebugUtilsMessengerEXT' handle
--
-- == Return Codes
--
-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
--
--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
--
-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
--
--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
--
-- 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
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_debug_utils VK_EXT_debug_utils>,
-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
-- 'DebugUtilsMessengerCreateInfoEXT',
-- 'Vulkan.Extensions.Handles.DebugUtilsMessengerEXT',
-- 'Vulkan.Core10.Handles.Instance'
createDebugUtilsMessengerEXT :: forall io
                              . (MonadIO io)
                             => -- | @instance@ is the instance the messenger will be used with.
                                Instance
                             -> -- | @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.
                                DebugUtilsMessengerCreateInfoEXT
                             -> -- | @pAllocator@ controls host memory allocation as described in the
                                -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
                                -- chapter.
                                ("allocator" ::: Maybe AllocationCallbacks)
                             -> io (DebugUtilsMessengerEXT)
createDebugUtilsMessengerEXT :: Instance
-> DebugUtilsMessengerCreateInfoEXT
-> ("allocator" ::: Maybe AllocationCallbacks)
-> io DebugUtilsMessengerEXT
createDebugUtilsMessengerEXT Instance
instance' DebugUtilsMessengerCreateInfoEXT
createInfo "allocator" ::: Maybe AllocationCallbacks
allocator = IO DebugUtilsMessengerEXT -> io DebugUtilsMessengerEXT
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO DebugUtilsMessengerEXT -> io DebugUtilsMessengerEXT)
-> (ContT DebugUtilsMessengerEXT IO DebugUtilsMessengerEXT
    -> IO DebugUtilsMessengerEXT)
-> ContT DebugUtilsMessengerEXT IO DebugUtilsMessengerEXT
-> io DebugUtilsMessengerEXT
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ContT DebugUtilsMessengerEXT IO DebugUtilsMessengerEXT
-> IO DebugUtilsMessengerEXT
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT DebugUtilsMessengerEXT IO DebugUtilsMessengerEXT
 -> io DebugUtilsMessengerEXT)
-> ContT DebugUtilsMessengerEXT IO DebugUtilsMessengerEXT
-> io DebugUtilsMessengerEXT
forall a b. (a -> b) -> a -> b
$ do
  let vkCreateDebugUtilsMessengerEXTPtr :: FunPtr
  (Ptr Instance_T
   -> ("pCreateInfo" ::: Ptr DebugUtilsMessengerCreateInfoEXT)
   -> ("pAllocator" ::: Ptr AllocationCallbacks)
   -> ("pMessenger" ::: Ptr DebugUtilsMessengerEXT)
   -> IO Result)
vkCreateDebugUtilsMessengerEXTPtr = InstanceCmds
-> FunPtr
     (Ptr Instance_T
      -> ("pCreateInfo" ::: Ptr DebugUtilsMessengerCreateInfoEXT)
      -> ("pAllocator" ::: Ptr AllocationCallbacks)
      -> ("pMessenger" ::: Ptr DebugUtilsMessengerEXT)
      -> IO Result)
pVkCreateDebugUtilsMessengerEXT (case Instance
instance' of Instance{InstanceCmds
$sel:instanceCmds:Instance :: Instance -> InstanceCmds
instanceCmds :: InstanceCmds
instanceCmds} -> InstanceCmds
instanceCmds)
  IO () -> ContT DebugUtilsMessengerEXT IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT DebugUtilsMessengerEXT IO ())
-> IO () -> ContT DebugUtilsMessengerEXT IO ()
forall a b. (a -> b) -> a -> b
$ Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (FunPtr
  (Ptr Instance_T
   -> ("pCreateInfo" ::: Ptr DebugUtilsMessengerCreateInfoEXT)
   -> ("pAllocator" ::: Ptr AllocationCallbacks)
   -> ("pMessenger" ::: Ptr DebugUtilsMessengerEXT)
   -> IO Result)
vkCreateDebugUtilsMessengerEXTPtr FunPtr
  (Ptr Instance_T
   -> ("pCreateInfo" ::: Ptr DebugUtilsMessengerCreateInfoEXT)
   -> ("pAllocator" ::: Ptr AllocationCallbacks)
   -> ("pMessenger" ::: Ptr DebugUtilsMessengerEXT)
   -> IO Result)
-> FunPtr
     (Ptr Instance_T
      -> ("pCreateInfo" ::: Ptr DebugUtilsMessengerCreateInfoEXT)
      -> ("pAllocator" ::: Ptr AllocationCallbacks)
      -> ("pMessenger" ::: Ptr DebugUtilsMessengerEXT)
      -> IO Result)
-> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr
  (Ptr Instance_T
   -> ("pCreateInfo" ::: Ptr DebugUtilsMessengerCreateInfoEXT)
   -> ("pAllocator" ::: Ptr AllocationCallbacks)
   -> ("pMessenger" ::: Ptr DebugUtilsMessengerEXT)
   -> IO Result)
forall a. FunPtr a
nullFunPtr) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
    IOException -> IO ()
forall e a. Exception e => e -> IO a
throwIO (IOException -> IO ()) -> IOException -> IO ()
forall a b. (a -> b) -> a -> b
$ Maybe Handle
-> IOErrorType
-> String
-> String
-> Maybe CInt
-> Maybe String
-> IOException
IOError Maybe Handle
forall a. Maybe a
Nothing IOErrorType
InvalidArgument String
"" String
"The function pointer for vkCreateDebugUtilsMessengerEXT is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkCreateDebugUtilsMessengerEXT' :: Ptr Instance_T
-> ("pCreateInfo" ::: Ptr DebugUtilsMessengerCreateInfoEXT)
-> ("pAllocator" ::: Ptr AllocationCallbacks)
-> ("pMessenger" ::: Ptr DebugUtilsMessengerEXT)
-> IO Result
vkCreateDebugUtilsMessengerEXT' = FunPtr
  (Ptr Instance_T
   -> ("pCreateInfo" ::: Ptr DebugUtilsMessengerCreateInfoEXT)
   -> ("pAllocator" ::: Ptr AllocationCallbacks)
   -> ("pMessenger" ::: Ptr DebugUtilsMessengerEXT)
   -> IO Result)
-> Ptr Instance_T
-> ("pCreateInfo" ::: Ptr DebugUtilsMessengerCreateInfoEXT)
-> ("pAllocator" ::: Ptr AllocationCallbacks)
-> ("pMessenger" ::: Ptr DebugUtilsMessengerEXT)
-> IO Result
mkVkCreateDebugUtilsMessengerEXT FunPtr
  (Ptr Instance_T
   -> ("pCreateInfo" ::: Ptr DebugUtilsMessengerCreateInfoEXT)
   -> ("pAllocator" ::: Ptr AllocationCallbacks)
   -> ("pMessenger" ::: Ptr DebugUtilsMessengerEXT)
   -> IO Result)
vkCreateDebugUtilsMessengerEXTPtr
  "pCreateInfo" ::: Ptr DebugUtilsMessengerCreateInfoEXT
pCreateInfo <- ((("pCreateInfo" ::: Ptr DebugUtilsMessengerCreateInfoEXT)
  -> IO DebugUtilsMessengerEXT)
 -> IO DebugUtilsMessengerEXT)
-> ContT
     DebugUtilsMessengerEXT
     IO
     ("pCreateInfo" ::: Ptr DebugUtilsMessengerCreateInfoEXT)
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((("pCreateInfo" ::: Ptr DebugUtilsMessengerCreateInfoEXT)
   -> IO DebugUtilsMessengerEXT)
  -> IO DebugUtilsMessengerEXT)
 -> ContT
      DebugUtilsMessengerEXT
      IO
      ("pCreateInfo" ::: Ptr DebugUtilsMessengerCreateInfoEXT))
-> ((("pCreateInfo" ::: Ptr DebugUtilsMessengerCreateInfoEXT)
     -> IO DebugUtilsMessengerEXT)
    -> IO DebugUtilsMessengerEXT)
-> ContT
     DebugUtilsMessengerEXT
     IO
     ("pCreateInfo" ::: Ptr DebugUtilsMessengerCreateInfoEXT)
forall a b. (a -> b) -> a -> b
$ DebugUtilsMessengerCreateInfoEXT
-> (("pCreateInfo" ::: Ptr DebugUtilsMessengerCreateInfoEXT)
    -> IO DebugUtilsMessengerEXT)
-> IO DebugUtilsMessengerEXT
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
withCStruct (DebugUtilsMessengerCreateInfoEXT
createInfo)
  "pAllocator" ::: Ptr AllocationCallbacks
pAllocator <- case ("allocator" ::: Maybe AllocationCallbacks
allocator) of
    "allocator" ::: Maybe AllocationCallbacks
Nothing -> ("pAllocator" ::: Ptr AllocationCallbacks)
-> ContT
     DebugUtilsMessengerEXT
     IO
     ("pAllocator" ::: Ptr AllocationCallbacks)
forall (f :: * -> *) a. Applicative f => a -> f a
pure "pAllocator" ::: Ptr AllocationCallbacks
forall a. Ptr a
nullPtr
    Just AllocationCallbacks
j -> ((("pAllocator" ::: Ptr AllocationCallbacks)
  -> IO DebugUtilsMessengerEXT)
 -> IO DebugUtilsMessengerEXT)
-> ContT
     DebugUtilsMessengerEXT
     IO
     ("pAllocator" ::: Ptr AllocationCallbacks)
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((("pAllocator" ::: Ptr AllocationCallbacks)
   -> IO DebugUtilsMessengerEXT)
  -> IO DebugUtilsMessengerEXT)
 -> ContT
      DebugUtilsMessengerEXT
      IO
      ("pAllocator" ::: Ptr AllocationCallbacks))
-> ((("pAllocator" ::: Ptr AllocationCallbacks)
     -> IO DebugUtilsMessengerEXT)
    -> IO DebugUtilsMessengerEXT)
-> ContT
     DebugUtilsMessengerEXT
     IO
     ("pAllocator" ::: Ptr AllocationCallbacks)
forall a b. (a -> b) -> a -> b
$ AllocationCallbacks
-> (("pAllocator" ::: Ptr AllocationCallbacks)
    -> IO DebugUtilsMessengerEXT)
-> IO DebugUtilsMessengerEXT
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
withCStruct (AllocationCallbacks
j)
  "pMessenger" ::: Ptr DebugUtilsMessengerEXT
pPMessenger <- ((("pMessenger" ::: Ptr DebugUtilsMessengerEXT)
  -> IO DebugUtilsMessengerEXT)
 -> IO DebugUtilsMessengerEXT)
-> ContT
     DebugUtilsMessengerEXT
     IO
     ("pMessenger" ::: Ptr DebugUtilsMessengerEXT)
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((("pMessenger" ::: Ptr DebugUtilsMessengerEXT)
   -> IO DebugUtilsMessengerEXT)
  -> IO DebugUtilsMessengerEXT)
 -> ContT
      DebugUtilsMessengerEXT
      IO
      ("pMessenger" ::: Ptr DebugUtilsMessengerEXT))
-> ((("pMessenger" ::: Ptr DebugUtilsMessengerEXT)
     -> IO DebugUtilsMessengerEXT)
    -> IO DebugUtilsMessengerEXT)
-> ContT
     DebugUtilsMessengerEXT
     IO
     ("pMessenger" ::: Ptr DebugUtilsMessengerEXT)
forall a b. (a -> b) -> a -> b
$ IO ("pMessenger" ::: Ptr DebugUtilsMessengerEXT)
-> (("pMessenger" ::: Ptr DebugUtilsMessengerEXT) -> IO ())
-> (("pMessenger" ::: Ptr DebugUtilsMessengerEXT)
    -> IO DebugUtilsMessengerEXT)
-> IO DebugUtilsMessengerEXT
forall a b c. IO a -> (a -> IO b) -> (a -> IO c) -> IO c
bracket (Int -> IO ("pMessenger" ::: Ptr DebugUtilsMessengerEXT)
forall a. Int -> IO (Ptr a)
callocBytes @DebugUtilsMessengerEXT Int
8) ("pMessenger" ::: Ptr DebugUtilsMessengerEXT) -> IO ()
forall a. Ptr a -> IO ()
free
  Result
r <- IO Result -> ContT DebugUtilsMessengerEXT IO Result
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO Result -> ContT DebugUtilsMessengerEXT IO Result)
-> IO Result -> ContT DebugUtilsMessengerEXT IO Result
forall a b. (a -> b) -> a -> b
$ String -> IO Result -> IO Result
forall a. String -> IO a -> IO a
traceAroundEvent String
"vkCreateDebugUtilsMessengerEXT" (Ptr Instance_T
-> ("pCreateInfo" ::: Ptr DebugUtilsMessengerCreateInfoEXT)
-> ("pAllocator" ::: Ptr AllocationCallbacks)
-> ("pMessenger" ::: Ptr DebugUtilsMessengerEXT)
-> IO Result
vkCreateDebugUtilsMessengerEXT' (Instance -> Ptr Instance_T
instanceHandle (Instance
instance')) "pCreateInfo" ::: Ptr DebugUtilsMessengerCreateInfoEXT
pCreateInfo "pAllocator" ::: Ptr AllocationCallbacks
pAllocator ("pMessenger" ::: Ptr DebugUtilsMessengerEXT
pPMessenger))
  IO () -> ContT DebugUtilsMessengerEXT IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT DebugUtilsMessengerEXT IO ())
-> IO () -> ContT DebugUtilsMessengerEXT IO ()
forall a b. (a -> b) -> a -> b
$ Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
when (Result
r Result -> Result -> Bool
forall a. Ord a => a -> a -> Bool
< Result
SUCCESS) (VulkanException -> IO ()
forall e a. Exception e => e -> IO a
throwIO (Result -> VulkanException
VulkanException Result
r))
  DebugUtilsMessengerEXT
pMessenger <- IO DebugUtilsMessengerEXT
-> ContT DebugUtilsMessengerEXT IO DebugUtilsMessengerEXT
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO DebugUtilsMessengerEXT
 -> ContT DebugUtilsMessengerEXT IO DebugUtilsMessengerEXT)
-> IO DebugUtilsMessengerEXT
-> ContT DebugUtilsMessengerEXT IO DebugUtilsMessengerEXT
forall a b. (a -> b) -> a -> b
$ ("pMessenger" ::: Ptr DebugUtilsMessengerEXT)
-> IO DebugUtilsMessengerEXT
forall a. Storable a => Ptr a -> IO a
peek @DebugUtilsMessengerEXT "pMessenger" ::: Ptr DebugUtilsMessengerEXT
pPMessenger
  DebugUtilsMessengerEXT
-> ContT DebugUtilsMessengerEXT IO DebugUtilsMessengerEXT
forall (f :: * -> *) a. Applicative f => a -> f a
pure (DebugUtilsMessengerEXT
 -> ContT DebugUtilsMessengerEXT IO DebugUtilsMessengerEXT)
-> DebugUtilsMessengerEXT
-> ContT DebugUtilsMessengerEXT IO DebugUtilsMessengerEXT
forall a b. (a -> b) -> a -> b
$ (DebugUtilsMessengerEXT
pMessenger)

-- | A convenience wrapper to make a compatible pair of calls to
-- 'createDebugUtilsMessengerEXT' and 'destroyDebugUtilsMessengerEXT'
--
-- To ensure that 'destroyDebugUtilsMessengerEXT' is always called: pass
-- 'Control.Exception.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.
--
withDebugUtilsMessengerEXT :: forall io r . MonadIO io => Instance -> DebugUtilsMessengerCreateInfoEXT -> Maybe AllocationCallbacks -> (io DebugUtilsMessengerEXT -> (DebugUtilsMessengerEXT -> io ()) -> r) -> r
withDebugUtilsMessengerEXT :: Instance
-> DebugUtilsMessengerCreateInfoEXT
-> ("allocator" ::: Maybe AllocationCallbacks)
-> (io DebugUtilsMessengerEXT
    -> (DebugUtilsMessengerEXT -> io ()) -> r)
-> r
withDebugUtilsMessengerEXT Instance
instance' DebugUtilsMessengerCreateInfoEXT
pCreateInfo "allocator" ::: Maybe AllocationCallbacks
pAllocator io DebugUtilsMessengerEXT -> (DebugUtilsMessengerEXT -> io ()) -> r
b =
  io DebugUtilsMessengerEXT -> (DebugUtilsMessengerEXT -> io ()) -> r
b (Instance
-> DebugUtilsMessengerCreateInfoEXT
-> ("allocator" ::: Maybe AllocationCallbacks)
-> io DebugUtilsMessengerEXT
forall (io :: * -> *).
MonadIO io =>
Instance
-> DebugUtilsMessengerCreateInfoEXT
-> ("allocator" ::: Maybe AllocationCallbacks)
-> io DebugUtilsMessengerEXT
createDebugUtilsMessengerEXT Instance
instance' DebugUtilsMessengerCreateInfoEXT
pCreateInfo "allocator" ::: Maybe AllocationCallbacks
pAllocator)
    (\(DebugUtilsMessengerEXT
o0) -> Instance
-> DebugUtilsMessengerEXT
-> ("allocator" ::: Maybe AllocationCallbacks)
-> io ()
forall (io :: * -> *).
MonadIO io =>
Instance
-> DebugUtilsMessengerEXT
-> ("allocator" ::: Maybe AllocationCallbacks)
-> io ()
destroyDebugUtilsMessengerEXT Instance
instance' DebugUtilsMessengerEXT
o0 "allocator" ::: Maybe AllocationCallbacks
pAllocator)


foreign import ccall
#if !defined(SAFE_FOREIGN_CALLS)
  unsafe
#endif
  "dynamic" mkVkDestroyDebugUtilsMessengerEXT
  :: FunPtr (Ptr Instance_T -> DebugUtilsMessengerEXT -> Ptr AllocationCallbacks -> IO ()) -> Ptr Instance_T -> DebugUtilsMessengerEXT -> Ptr AllocationCallbacks -> IO ()

-- | vkDestroyDebugUtilsMessengerEXT - Destroy a debug messenger object
--
-- == Valid Usage
--
-- -   #VUID-vkDestroyDebugUtilsMessengerEXT-messenger-01915# If
--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were
--     provided when @messenger@ was created, a compatible set of callbacks
--     /must/ be provided here
--
-- -   #VUID-vkDestroyDebugUtilsMessengerEXT-messenger-01916# If no
--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were
--     provided when @messenger@ was created, @pAllocator@ /must/ be @NULL@
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-vkDestroyDebugUtilsMessengerEXT-instance-parameter# @instance@
--     /must/ be a valid 'Vulkan.Core10.Handles.Instance' handle
--
-- -   #VUID-vkDestroyDebugUtilsMessengerEXT-messenger-parameter# If
--     @messenger@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',
--     @messenger@ /must/ be a valid
--     'Vulkan.Extensions.Handles.DebugUtilsMessengerEXT' handle
--
-- -   #VUID-vkDestroyDebugUtilsMessengerEXT-pAllocator-parameter# If
--     @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid pointer
--     to a valid 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
--     structure
--
-- -   #VUID-vkDestroyDebugUtilsMessengerEXT-messenger-parent# 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
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_debug_utils VK_EXT_debug_utils>,
-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
-- 'Vulkan.Extensions.Handles.DebugUtilsMessengerEXT',
-- 'Vulkan.Core10.Handles.Instance'
destroyDebugUtilsMessengerEXT :: forall io
                               . (MonadIO io)
                              => -- | @instance@ is the instance where the callback was created.
                                 Instance
                              -> -- | @messenger@ is the 'Vulkan.Extensions.Handles.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.
                                 DebugUtilsMessengerEXT
                              -> -- | @pAllocator@ controls host memory allocation as described in the
                                 -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
                                 -- chapter.
                                 ("allocator" ::: Maybe AllocationCallbacks)
                              -> io ()
destroyDebugUtilsMessengerEXT :: Instance
-> DebugUtilsMessengerEXT
-> ("allocator" ::: Maybe AllocationCallbacks)
-> io ()
destroyDebugUtilsMessengerEXT Instance
instance' DebugUtilsMessengerEXT
messenger "allocator" ::: Maybe AllocationCallbacks
allocator = IO () -> io ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> io ())
-> (ContT () IO () -> IO ()) -> ContT () IO () -> io ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ContT () IO () -> IO ()
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT () IO () -> io ()) -> ContT () IO () -> io ()
forall a b. (a -> b) -> a -> b
$ do
  let vkDestroyDebugUtilsMessengerEXTPtr :: FunPtr
  (Ptr Instance_T
   -> DebugUtilsMessengerEXT
   -> ("pAllocator" ::: Ptr AllocationCallbacks)
   -> IO ())
vkDestroyDebugUtilsMessengerEXTPtr = InstanceCmds
-> FunPtr
     (Ptr Instance_T
      -> DebugUtilsMessengerEXT
      -> ("pAllocator" ::: Ptr AllocationCallbacks)
      -> IO ())
pVkDestroyDebugUtilsMessengerEXT (case Instance
instance' of Instance{InstanceCmds
instanceCmds :: InstanceCmds
$sel:instanceCmds:Instance :: Instance -> InstanceCmds
instanceCmds} -> InstanceCmds
instanceCmds)
  IO () -> ContT () IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (FunPtr
  (Ptr Instance_T
   -> DebugUtilsMessengerEXT
   -> ("pAllocator" ::: Ptr AllocationCallbacks)
   -> IO ())
vkDestroyDebugUtilsMessengerEXTPtr FunPtr
  (Ptr Instance_T
   -> DebugUtilsMessengerEXT
   -> ("pAllocator" ::: Ptr AllocationCallbacks)
   -> IO ())
-> FunPtr
     (Ptr Instance_T
      -> DebugUtilsMessengerEXT
      -> ("pAllocator" ::: Ptr AllocationCallbacks)
      -> IO ())
-> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr
  (Ptr Instance_T
   -> DebugUtilsMessengerEXT
   -> ("pAllocator" ::: Ptr AllocationCallbacks)
   -> IO ())
forall a. FunPtr a
nullFunPtr) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
    IOException -> IO ()
forall e a. Exception e => e -> IO a
throwIO (IOException -> IO ()) -> IOException -> IO ()
forall a b. (a -> b) -> a -> b
$ Maybe Handle
-> IOErrorType
-> String
-> String
-> Maybe CInt
-> Maybe String
-> IOException
IOError Maybe Handle
forall a. Maybe a
Nothing IOErrorType
InvalidArgument String
"" String
"The function pointer for vkDestroyDebugUtilsMessengerEXT is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkDestroyDebugUtilsMessengerEXT' :: Ptr Instance_T
-> DebugUtilsMessengerEXT
-> ("pAllocator" ::: Ptr AllocationCallbacks)
-> IO ()
vkDestroyDebugUtilsMessengerEXT' = FunPtr
  (Ptr Instance_T
   -> DebugUtilsMessengerEXT
   -> ("pAllocator" ::: Ptr AllocationCallbacks)
   -> IO ())
-> Ptr Instance_T
-> DebugUtilsMessengerEXT
-> ("pAllocator" ::: Ptr AllocationCallbacks)
-> IO ()
mkVkDestroyDebugUtilsMessengerEXT FunPtr
  (Ptr Instance_T
   -> DebugUtilsMessengerEXT
   -> ("pAllocator" ::: Ptr AllocationCallbacks)
   -> IO ())
vkDestroyDebugUtilsMessengerEXTPtr
  "pAllocator" ::: Ptr AllocationCallbacks
pAllocator <- case ("allocator" ::: Maybe AllocationCallbacks
allocator) of
    "allocator" ::: Maybe AllocationCallbacks
Nothing -> ("pAllocator" ::: Ptr AllocationCallbacks)
-> ContT () IO ("pAllocator" ::: Ptr AllocationCallbacks)
forall (f :: * -> *) a. Applicative f => a -> f a
pure "pAllocator" ::: Ptr AllocationCallbacks
forall a. Ptr a
nullPtr
    Just AllocationCallbacks
j -> ((("pAllocator" ::: Ptr AllocationCallbacks) -> IO ()) -> IO ())
-> ContT () IO ("pAllocator" ::: Ptr AllocationCallbacks)
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((("pAllocator" ::: Ptr AllocationCallbacks) -> IO ()) -> IO ())
 -> ContT () IO ("pAllocator" ::: Ptr AllocationCallbacks))
-> ((("pAllocator" ::: Ptr AllocationCallbacks) -> IO ()) -> IO ())
-> ContT () IO ("pAllocator" ::: Ptr AllocationCallbacks)
forall a b. (a -> b) -> a -> b
$ AllocationCallbacks
-> (("pAllocator" ::: Ptr AllocationCallbacks) -> IO ()) -> IO ()
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
withCStruct (AllocationCallbacks
j)
  IO () -> ContT () IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ String -> IO () -> IO ()
forall a. String -> IO a -> IO a
traceAroundEvent String
"vkDestroyDebugUtilsMessengerEXT" (Ptr Instance_T
-> DebugUtilsMessengerEXT
-> ("pAllocator" ::: Ptr AllocationCallbacks)
-> IO ()
vkDestroyDebugUtilsMessengerEXT' (Instance -> Ptr Instance_T
instanceHandle (Instance
instance')) (DebugUtilsMessengerEXT
messenger) "pAllocator" ::: Ptr AllocationCallbacks
pAllocator)
  () -> ContT () IO ()
forall (f :: * -> *) a. Applicative f => a -> f a
pure (() -> ContT () IO ()) -> () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ ()


foreign import ccall
#if !defined(SAFE_FOREIGN_CALLS)
  unsafe
#endif
  "dynamic" mkVkSubmitDebugUtilsMessageEXT
  :: FunPtr (Ptr Instance_T -> DebugUtilsMessageSeverityFlagBitsEXT -> DebugUtilsMessageTypeFlagsEXT -> Ptr DebugUtilsMessengerCallbackDataEXT -> IO ()) -> Ptr Instance_T -> DebugUtilsMessageSeverityFlagBitsEXT -> DebugUtilsMessageTypeFlagsEXT -> Ptr DebugUtilsMessengerCallbackDataEXT -> 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
--
-- -   #VUID-vkSubmitDebugUtilsMessageEXT-objectType-02591# The
--     @objectType@ member of each element of @pCallbackData->pObjects@
--     /must/ not be 'Vulkan.Core10.Enums.ObjectType.OBJECT_TYPE_UNKNOWN'
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-vkSubmitDebugUtilsMessageEXT-instance-parameter# @instance@
--     /must/ be a valid 'Vulkan.Core10.Handles.Instance' handle
--
-- -   #VUID-vkSubmitDebugUtilsMessageEXT-messageSeverity-parameter#
--     @messageSeverity@ /must/ be a valid
--     'DebugUtilsMessageSeverityFlagBitsEXT' value
--
-- -   #VUID-vkSubmitDebugUtilsMessageEXT-messageTypes-parameter#
--     @messageTypes@ /must/ be a valid combination of
--     'DebugUtilsMessageTypeFlagBitsEXT' values
--
-- -   #VUID-vkSubmitDebugUtilsMessageEXT-messageTypes-requiredbitmask#
--     @messageTypes@ /must/ not be @0@
--
-- -   #VUID-vkSubmitDebugUtilsMessageEXT-pCallbackData-parameter#
--     @pCallbackData@ /must/ be a valid pointer to a valid
--     'DebugUtilsMessengerCallbackDataEXT' structure
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_debug_utils VK_EXT_debug_utils>,
-- 'DebugUtilsMessageSeverityFlagBitsEXT', 'DebugUtilsMessageTypeFlagsEXT',
-- 'DebugUtilsMessengerCallbackDataEXT', 'Vulkan.Core10.Handles.Instance'
submitDebugUtilsMessageEXT :: forall io
                            . (MonadIO io)
                           => -- | @instance@ is the debug stream’s 'Vulkan.Core10.Handles.Instance'.
                              Instance
                           -> -- | @messageSeverity@ is a 'DebugUtilsMessageSeverityFlagBitsEXT' value
                              -- specifying the severity of this event\/message.
                              DebugUtilsMessageSeverityFlagBitsEXT
                           -> -- | @messageTypes@ is a bitmask of 'DebugUtilsMessageTypeFlagBitsEXT'
                              -- specifying which type of event(s) to identify with this message.
                              ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
                           -> -- | @pCallbackData@ contains all the callback related data in the
                              -- 'DebugUtilsMessengerCallbackDataEXT' structure.
                              DebugUtilsMessengerCallbackDataEXT
                           -> io ()
submitDebugUtilsMessageEXT :: Instance
-> DebugUtilsMessageSeverityFlagBitsEXT
-> ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> DebugUtilsMessengerCallbackDataEXT
-> io ()
submitDebugUtilsMessageEXT Instance
instance' DebugUtilsMessageSeverityFlagBitsEXT
messageSeverity "messageTypes" ::: DebugUtilsMessageTypeFlagsEXT
messageTypes DebugUtilsMessengerCallbackDataEXT
callbackData = IO () -> io ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> io ())
-> (ContT () IO () -> IO ()) -> ContT () IO () -> io ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ContT () IO () -> IO ()
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT () IO () -> io ()) -> ContT () IO () -> io ()
forall a b. (a -> b) -> a -> b
$ do
  let vkSubmitDebugUtilsMessageEXTPtr :: FunPtr
  (Ptr Instance_T
   -> DebugUtilsMessageSeverityFlagBitsEXT
   -> ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
   -> ("pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT)
   -> IO ())
vkSubmitDebugUtilsMessageEXTPtr = InstanceCmds
-> FunPtr
     (Ptr Instance_T
      -> DebugUtilsMessageSeverityFlagBitsEXT
      -> ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
      -> ("pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT)
      -> IO ())
pVkSubmitDebugUtilsMessageEXT (case Instance
instance' of Instance{InstanceCmds
instanceCmds :: InstanceCmds
$sel:instanceCmds:Instance :: Instance -> InstanceCmds
instanceCmds} -> InstanceCmds
instanceCmds)
  IO () -> ContT () IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (FunPtr
  (Ptr Instance_T
   -> DebugUtilsMessageSeverityFlagBitsEXT
   -> ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
   -> ("pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT)
   -> IO ())
vkSubmitDebugUtilsMessageEXTPtr FunPtr
  (Ptr Instance_T
   -> DebugUtilsMessageSeverityFlagBitsEXT
   -> ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
   -> ("pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT)
   -> IO ())
-> FunPtr
     (Ptr Instance_T
      -> DebugUtilsMessageSeverityFlagBitsEXT
      -> ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
      -> ("pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT)
      -> IO ())
-> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr
  (Ptr Instance_T
   -> DebugUtilsMessageSeverityFlagBitsEXT
   -> ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
   -> ("pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT)
   -> IO ())
forall a. FunPtr a
nullFunPtr) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
    IOException -> IO ()
forall e a. Exception e => e -> IO a
throwIO (IOException -> IO ()) -> IOException -> IO ()
forall a b. (a -> b) -> a -> b
$ Maybe Handle
-> IOErrorType
-> String
-> String
-> Maybe CInt
-> Maybe String
-> IOException
IOError Maybe Handle
forall a. Maybe a
Nothing IOErrorType
InvalidArgument String
"" String
"The function pointer for vkSubmitDebugUtilsMessageEXT is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkSubmitDebugUtilsMessageEXT' :: Ptr Instance_T
-> DebugUtilsMessageSeverityFlagBitsEXT
-> ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> ("pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT)
-> IO ()
vkSubmitDebugUtilsMessageEXT' = FunPtr
  (Ptr Instance_T
   -> DebugUtilsMessageSeverityFlagBitsEXT
   -> ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
   -> ("pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT)
   -> IO ())
-> Ptr Instance_T
-> DebugUtilsMessageSeverityFlagBitsEXT
-> ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> ("pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT)
-> IO ()
mkVkSubmitDebugUtilsMessageEXT FunPtr
  (Ptr Instance_T
   -> DebugUtilsMessageSeverityFlagBitsEXT
   -> ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
   -> ("pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT)
   -> IO ())
vkSubmitDebugUtilsMessageEXTPtr
  "pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT
pCallbackData <- ((("pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT)
  -> IO ())
 -> IO ())
-> ContT
     () IO ("pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT)
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((("pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT)
   -> IO ())
  -> IO ())
 -> ContT
      () IO ("pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT))
-> ((("pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT)
     -> IO ())
    -> IO ())
-> ContT
     () IO ("pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT)
forall a b. (a -> b) -> a -> b
$ DebugUtilsMessengerCallbackDataEXT
-> (("pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT)
    -> IO ())
-> IO ()
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
withCStruct (DebugUtilsMessengerCallbackDataEXT
callbackData)
  IO () -> ContT () IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ String -> IO () -> IO ()
forall a. String -> IO a -> IO a
traceAroundEvent String
"vkSubmitDebugUtilsMessageEXT" (Ptr Instance_T
-> DebugUtilsMessageSeverityFlagBitsEXT
-> ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> ("pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT)
-> IO ()
vkSubmitDebugUtilsMessageEXT' (Instance -> Ptr Instance_T
instanceHandle (Instance
instance')) (DebugUtilsMessageSeverityFlagBitsEXT
messageSeverity) ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT
messageTypes) "pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT
pCallbackData)
  () -> ContT () IO ()
forall (f :: * -> *) a. Applicative f => a -> f a
pure (() -> ContT () IO ()) -> () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ ()


-- | 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.
--
-- == Valid Usage
--
-- -   #VUID-VkDebugUtilsObjectNameInfoEXT-objectType-02589# If
--     @objectType@ is
--     'Vulkan.Core10.Enums.ObjectType.OBJECT_TYPE_UNKNOWN', @objectHandle@
--     /must/ not be 'Vulkan.Core10.APIConstants.NULL_HANDLE'
--
-- -   #VUID-VkDebugUtilsObjectNameInfoEXT-objectType-02590# If
--     @objectType@ is not
--     'Vulkan.Core10.Enums.ObjectType.OBJECT_TYPE_UNKNOWN', @objectHandle@
--     /must/ be 'Vulkan.Core10.APIConstants.NULL_HANDLE' or a valid Vulkan
--     handle of the type associated with @objectType@ as defined in the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#debugging-object-types  and Vulkan Handle Relationship>
--     table
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-VkDebugUtilsObjectNameInfoEXT-sType-sType# @sType@ /must/ be
--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT'
--
-- -   #VUID-VkDebugUtilsObjectNameInfoEXT-pNext-pNext# @pNext@ /must/ be
--     @NULL@
--
-- -   #VUID-VkDebugUtilsObjectNameInfoEXT-objectType-parameter#
--     @objectType@ /must/ be a valid
--     'Vulkan.Core10.Enums.ObjectType.ObjectType' value
--
-- -   #VUID-VkDebugUtilsObjectNameInfoEXT-pObjectName-parameter# If
--     @pObjectName@ is not @NULL@, @pObjectName@ /must/ be a
--     null-terminated UTF-8 string
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_debug_utils VK_EXT_debug_utils>,
-- 'DebugUtilsMessengerCallbackDataEXT',
-- 'Vulkan.Core10.Enums.ObjectType.ObjectType',
-- 'Vulkan.Core10.Enums.StructureType.StructureType',
-- 'setDebugUtilsObjectNameEXT'
data DebugUtilsObjectNameInfoEXT = DebugUtilsObjectNameInfoEXT
  { -- | @objectType@ is a 'Vulkan.Core10.Enums.ObjectType.ObjectType' specifying
    -- the type of the object to be named.
    DebugUtilsObjectNameInfoEXT -> ObjectType
objectType :: ObjectType
  , -- | @objectHandle@ is the object to be named.
    DebugUtilsObjectNameInfoEXT -> Word64
objectHandle :: Word64
  , -- | @pObjectName@ is either @NULL@ or a null-terminated UTF-8 string
    -- specifying the name to apply to @objectHandle@.
    DebugUtilsObjectNameInfoEXT -> Maybe ByteString
objectName :: Maybe ByteString
  }
  deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (DebugUtilsObjectNameInfoEXT)
#endif
deriving instance Show DebugUtilsObjectNameInfoEXT

instance ToCStruct DebugUtilsObjectNameInfoEXT where
  withCStruct :: DebugUtilsObjectNameInfoEXT
-> (("pNameInfo" ::: Ptr DebugUtilsObjectNameInfoEXT) -> IO b)
-> IO b
withCStruct DebugUtilsObjectNameInfoEXT
x ("pNameInfo" ::: Ptr DebugUtilsObjectNameInfoEXT) -> IO b
f = Int
-> (("pNameInfo" ::: Ptr DebugUtilsObjectNameInfoEXT) -> IO b)
-> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
40 ((("pNameInfo" ::: Ptr DebugUtilsObjectNameInfoEXT) -> IO b)
 -> IO b)
-> (("pNameInfo" ::: Ptr DebugUtilsObjectNameInfoEXT) -> IO b)
-> IO b
forall a b. (a -> b) -> a -> b
$ \"pNameInfo" ::: Ptr DebugUtilsObjectNameInfoEXT
p -> ("pNameInfo" ::: Ptr DebugUtilsObjectNameInfoEXT)
-> DebugUtilsObjectNameInfoEXT -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct "pNameInfo" ::: Ptr DebugUtilsObjectNameInfoEXT
p DebugUtilsObjectNameInfoEXT
x (("pNameInfo" ::: Ptr DebugUtilsObjectNameInfoEXT) -> IO b
f "pNameInfo" ::: Ptr DebugUtilsObjectNameInfoEXT
p)
  pokeCStruct :: ("pNameInfo" ::: Ptr DebugUtilsObjectNameInfoEXT)
-> DebugUtilsObjectNameInfoEXT -> IO b -> IO b
pokeCStruct "pNameInfo" ::: Ptr DebugUtilsObjectNameInfoEXT
p DebugUtilsObjectNameInfoEXT{Maybe ByteString
Word64
ObjectType
objectName :: Maybe ByteString
objectHandle :: Word64
objectType :: ObjectType
$sel:objectName:DebugUtilsObjectNameInfoEXT :: DebugUtilsObjectNameInfoEXT -> Maybe ByteString
$sel:objectHandle:DebugUtilsObjectNameInfoEXT :: DebugUtilsObjectNameInfoEXT -> Word64
$sel:objectType:DebugUtilsObjectNameInfoEXT :: DebugUtilsObjectNameInfoEXT -> ObjectType
..} IO b
f = ContT b IO b -> IO b
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT b IO b -> IO b) -> ContT b IO b -> IO b
forall a b. (a -> b) -> a -> b
$ do
    IO () -> ContT b IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pNameInfo" ::: Ptr DebugUtilsObjectNameInfoEXT
p ("pNameInfo" ::: Ptr DebugUtilsObjectNameInfoEXT)
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT)
    IO () -> ContT b IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pNameInfo" ::: Ptr DebugUtilsObjectNameInfoEXT
p ("pNameInfo" ::: Ptr DebugUtilsObjectNameInfoEXT)
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    IO () -> ContT b IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr ObjectType -> ObjectType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pNameInfo" ::: Ptr DebugUtilsObjectNameInfoEXT
p ("pNameInfo" ::: Ptr DebugUtilsObjectNameInfoEXT)
-> Int -> Ptr ObjectType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr ObjectType)) (ObjectType
objectType)
    IO () -> ContT b IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Word64 -> Word64 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pNameInfo" ::: Ptr DebugUtilsObjectNameInfoEXT
p ("pNameInfo" ::: Ptr DebugUtilsObjectNameInfoEXT)
-> Int -> Ptr Word64
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr Word64)) (Word64
objectHandle)
    Ptr CChar
pObjectName'' <- case (Maybe ByteString
objectName) of
      Maybe ByteString
Nothing -> Ptr CChar -> ContT b IO (Ptr CChar)
forall (f :: * -> *) a. Applicative f => a -> f a
pure Ptr CChar
forall a. Ptr a
nullPtr
      Just ByteString
j -> ((Ptr CChar -> IO b) -> IO b) -> ContT b IO (Ptr CChar)
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr CChar -> IO b) -> IO b) -> ContT b IO (Ptr CChar))
-> ((Ptr CChar -> IO b) -> IO b) -> ContT b IO (Ptr CChar)
forall a b. (a -> b) -> a -> b
$ ByteString -> (Ptr CChar -> IO b) -> IO b
forall a. ByteString -> (Ptr CChar -> IO a) -> IO a
useAsCString (ByteString
j)
    IO () -> ContT b IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr (Ptr CChar) -> Ptr CChar -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pNameInfo" ::: Ptr DebugUtilsObjectNameInfoEXT
p ("pNameInfo" ::: Ptr DebugUtilsObjectNameInfoEXT)
-> Int -> Ptr (Ptr CChar)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr (Ptr CChar))) Ptr CChar
pObjectName''
    IO b -> ContT b IO b
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO b -> ContT b IO b) -> IO b -> ContT b IO b
forall a b. (a -> b) -> a -> b
$ IO b
f
  cStructSize :: Int
cStructSize = Int
40
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: ("pNameInfo" ::: Ptr DebugUtilsObjectNameInfoEXT) -> IO b -> IO b
pokeZeroCStruct "pNameInfo" ::: Ptr DebugUtilsObjectNameInfoEXT
p IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pNameInfo" ::: Ptr DebugUtilsObjectNameInfoEXT
p ("pNameInfo" ::: Ptr DebugUtilsObjectNameInfoEXT)
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pNameInfo" ::: Ptr DebugUtilsObjectNameInfoEXT
p ("pNameInfo" ::: Ptr DebugUtilsObjectNameInfoEXT)
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr ObjectType -> ObjectType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pNameInfo" ::: Ptr DebugUtilsObjectNameInfoEXT
p ("pNameInfo" ::: Ptr DebugUtilsObjectNameInfoEXT)
-> Int -> Ptr ObjectType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr ObjectType)) (ObjectType
forall a. Zero a => a
zero)
    Ptr Word64 -> Word64 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pNameInfo" ::: Ptr DebugUtilsObjectNameInfoEXT
p ("pNameInfo" ::: Ptr DebugUtilsObjectNameInfoEXT)
-> Int -> Ptr Word64
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr Word64)) (Word64
forall a. Zero a => a
zero)
    IO b
f

instance FromCStruct DebugUtilsObjectNameInfoEXT where
  peekCStruct :: ("pNameInfo" ::: Ptr DebugUtilsObjectNameInfoEXT)
-> IO DebugUtilsObjectNameInfoEXT
peekCStruct "pNameInfo" ::: Ptr DebugUtilsObjectNameInfoEXT
p = do
    ObjectType
objectType <- Ptr ObjectType -> IO ObjectType
forall a. Storable a => Ptr a -> IO a
peek @ObjectType (("pNameInfo" ::: Ptr DebugUtilsObjectNameInfoEXT
p ("pNameInfo" ::: Ptr DebugUtilsObjectNameInfoEXT)
-> Int -> Ptr ObjectType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr ObjectType))
    Word64
objectHandle <- Ptr Word64 -> IO Word64
forall a. Storable a => Ptr a -> IO a
peek @Word64 (("pNameInfo" ::: Ptr DebugUtilsObjectNameInfoEXT
p ("pNameInfo" ::: Ptr DebugUtilsObjectNameInfoEXT)
-> Int -> Ptr Word64
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr Word64))
    Ptr CChar
pObjectName <- Ptr (Ptr CChar) -> IO (Ptr CChar)
forall a. Storable a => Ptr a -> IO a
peek @(Ptr CChar) (("pNameInfo" ::: Ptr DebugUtilsObjectNameInfoEXT
p ("pNameInfo" ::: Ptr DebugUtilsObjectNameInfoEXT)
-> Int -> Ptr (Ptr CChar)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr (Ptr CChar)))
    Maybe ByteString
pObjectName' <- (Ptr CChar -> IO ByteString) -> Ptr CChar -> IO (Maybe ByteString)
forall a b. (Ptr a -> IO b) -> Ptr a -> IO (Maybe b)
maybePeek (\Ptr CChar
j -> Ptr CChar -> IO ByteString
packCString (Ptr CChar
j)) Ptr CChar
pObjectName
    DebugUtilsObjectNameInfoEXT -> IO DebugUtilsObjectNameInfoEXT
forall (f :: * -> *) a. Applicative f => a -> f a
pure (DebugUtilsObjectNameInfoEXT -> IO DebugUtilsObjectNameInfoEXT)
-> DebugUtilsObjectNameInfoEXT -> IO DebugUtilsObjectNameInfoEXT
forall a b. (a -> b) -> a -> b
$ ObjectType
-> Word64 -> Maybe ByteString -> DebugUtilsObjectNameInfoEXT
DebugUtilsObjectNameInfoEXT
             ObjectType
objectType Word64
objectHandle Maybe ByteString
pObjectName'

instance Zero DebugUtilsObjectNameInfoEXT where
  zero :: DebugUtilsObjectNameInfoEXT
zero = ObjectType
-> Word64 -> Maybe ByteString -> DebugUtilsObjectNameInfoEXT
DebugUtilsObjectNameInfoEXT
           ObjectType
forall a. Zero a => a
zero
           Word64
forall a. Zero a => a
zero
           Maybe ByteString
forall a. Maybe a
Nothing


-- | 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
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_debug_utils VK_EXT_debug_utils>,
-- 'Vulkan.Core10.Enums.ObjectType.ObjectType',
-- 'Vulkan.Core10.Enums.StructureType.StructureType',
-- 'setDebugUtilsObjectTagEXT'
data DebugUtilsObjectTagInfoEXT = DebugUtilsObjectTagInfoEXT
  { -- | @objectType@ is a 'Vulkan.Core10.Enums.ObjectType.ObjectType' specifying
    -- the type of the object to be named.
    --
    -- #VUID-VkDebugUtilsObjectTagInfoEXT-objectType-01908# @objectType@ /must/
    -- not be 'Vulkan.Core10.Enums.ObjectType.OBJECT_TYPE_UNKNOWN'
    --
    -- #VUID-VkDebugUtilsObjectTagInfoEXT-objectType-parameter# @objectType@
    -- /must/ be a valid 'Vulkan.Core10.Enums.ObjectType.ObjectType' value
    DebugUtilsObjectTagInfoEXT -> ObjectType
objectType :: ObjectType
  , -- | @objectHandle@ is the object to be tagged.
    --
    -- #VUID-VkDebugUtilsObjectTagInfoEXT-objectHandle-01910# @objectHandle@
    -- /must/ be a valid Vulkan handle of the type associated with @objectType@
    -- as defined in the
    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#debugging-object-types  and Vulkan Handle Relationship>
    -- table
    DebugUtilsObjectTagInfoEXT -> Word64
objectHandle :: Word64
  , -- | @tagName@ is a numerical identifier of the tag.
    DebugUtilsObjectTagInfoEXT -> Word64
tagName :: Word64
  , -- | @tagSize@ is the number of bytes of data to attach to the object.
    --
    -- #VUID-VkDebugUtilsObjectTagInfoEXT-tagSize-arraylength# @tagSize@ /must/
    -- be greater than @0@
    DebugUtilsObjectTagInfoEXT -> Word64
tagSize :: Word64
  , -- | @pTag@ is a pointer to an array of @tagSize@ bytes containing the data
    -- to be associated with the object.
    --
    -- #VUID-VkDebugUtilsObjectTagInfoEXT-pTag-parameter# @pTag@ /must/ be a
    -- valid pointer to an array of @tagSize@ bytes
    DebugUtilsObjectTagInfoEXT -> Ptr ()
tag :: Ptr ()
  }
  deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (DebugUtilsObjectTagInfoEXT)
#endif
deriving instance Show DebugUtilsObjectTagInfoEXT

instance ToCStruct DebugUtilsObjectTagInfoEXT where
  withCStruct :: DebugUtilsObjectTagInfoEXT
-> (("pTagInfo" ::: Ptr DebugUtilsObjectTagInfoEXT) -> IO b)
-> IO b
withCStruct DebugUtilsObjectTagInfoEXT
x ("pTagInfo" ::: Ptr DebugUtilsObjectTagInfoEXT) -> IO b
f = Int
-> (("pTagInfo" ::: Ptr DebugUtilsObjectTagInfoEXT) -> IO b)
-> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
56 ((("pTagInfo" ::: Ptr DebugUtilsObjectTagInfoEXT) -> IO b) -> IO b)
-> (("pTagInfo" ::: Ptr DebugUtilsObjectTagInfoEXT) -> IO b)
-> IO b
forall a b. (a -> b) -> a -> b
$ \"pTagInfo" ::: Ptr DebugUtilsObjectTagInfoEXT
p -> ("pTagInfo" ::: Ptr DebugUtilsObjectTagInfoEXT)
-> DebugUtilsObjectTagInfoEXT -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct "pTagInfo" ::: Ptr DebugUtilsObjectTagInfoEXT
p DebugUtilsObjectTagInfoEXT
x (("pTagInfo" ::: Ptr DebugUtilsObjectTagInfoEXT) -> IO b
f "pTagInfo" ::: Ptr DebugUtilsObjectTagInfoEXT
p)
  pokeCStruct :: ("pTagInfo" ::: Ptr DebugUtilsObjectTagInfoEXT)
-> DebugUtilsObjectTagInfoEXT -> IO b -> IO b
pokeCStruct "pTagInfo" ::: Ptr DebugUtilsObjectTagInfoEXT
p DebugUtilsObjectTagInfoEXT{Word64
Ptr ()
ObjectType
tag :: Ptr ()
tagSize :: Word64
tagName :: Word64
objectHandle :: Word64
objectType :: ObjectType
$sel:tag:DebugUtilsObjectTagInfoEXT :: DebugUtilsObjectTagInfoEXT -> Ptr ()
$sel:tagSize:DebugUtilsObjectTagInfoEXT :: DebugUtilsObjectTagInfoEXT -> Word64
$sel:tagName:DebugUtilsObjectTagInfoEXT :: DebugUtilsObjectTagInfoEXT -> Word64
$sel:objectHandle:DebugUtilsObjectTagInfoEXT :: DebugUtilsObjectTagInfoEXT -> Word64
$sel:objectType:DebugUtilsObjectTagInfoEXT :: DebugUtilsObjectTagInfoEXT -> ObjectType
..} IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pTagInfo" ::: Ptr DebugUtilsObjectTagInfoEXT
p ("pTagInfo" ::: Ptr DebugUtilsObjectTagInfoEXT)
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_TAG_INFO_EXT)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pTagInfo" ::: Ptr DebugUtilsObjectTagInfoEXT
p ("pTagInfo" ::: Ptr DebugUtilsObjectTagInfoEXT)
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr ObjectType -> ObjectType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pTagInfo" ::: Ptr DebugUtilsObjectTagInfoEXT
p ("pTagInfo" ::: Ptr DebugUtilsObjectTagInfoEXT)
-> Int -> Ptr ObjectType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr ObjectType)) (ObjectType
objectType)
    Ptr Word64 -> Word64 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pTagInfo" ::: Ptr DebugUtilsObjectTagInfoEXT
p ("pTagInfo" ::: Ptr DebugUtilsObjectTagInfoEXT)
-> Int -> Ptr Word64
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr Word64)) (Word64
objectHandle)
    Ptr Word64 -> Word64 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pTagInfo" ::: Ptr DebugUtilsObjectTagInfoEXT
p ("pTagInfo" ::: Ptr DebugUtilsObjectTagInfoEXT)
-> Int -> Ptr Word64
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr Word64)) (Word64
tagName)
    Ptr CSize -> CSize -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pTagInfo" ::: Ptr DebugUtilsObjectTagInfoEXT
p ("pTagInfo" ::: Ptr DebugUtilsObjectTagInfoEXT) -> Int -> Ptr CSize
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
40 :: Ptr CSize)) (Word64 -> CSize
CSize (Word64
tagSize))
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pTagInfo" ::: Ptr DebugUtilsObjectTagInfoEXT
p ("pTagInfo" ::: Ptr DebugUtilsObjectTagInfoEXT)
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
48 :: Ptr (Ptr ()))) (Ptr ()
tag)
    IO b
f
  cStructSize :: Int
cStructSize = Int
56
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: ("pTagInfo" ::: Ptr DebugUtilsObjectTagInfoEXT) -> IO b -> IO b
pokeZeroCStruct "pTagInfo" ::: Ptr DebugUtilsObjectTagInfoEXT
p IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pTagInfo" ::: Ptr DebugUtilsObjectTagInfoEXT
p ("pTagInfo" ::: Ptr DebugUtilsObjectTagInfoEXT)
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_TAG_INFO_EXT)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pTagInfo" ::: Ptr DebugUtilsObjectTagInfoEXT
p ("pTagInfo" ::: Ptr DebugUtilsObjectTagInfoEXT)
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr ObjectType -> ObjectType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pTagInfo" ::: Ptr DebugUtilsObjectTagInfoEXT
p ("pTagInfo" ::: Ptr DebugUtilsObjectTagInfoEXT)
-> Int -> Ptr ObjectType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr ObjectType)) (ObjectType
forall a. Zero a => a
zero)
    Ptr Word64 -> Word64 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pTagInfo" ::: Ptr DebugUtilsObjectTagInfoEXT
p ("pTagInfo" ::: Ptr DebugUtilsObjectTagInfoEXT)
-> Int -> Ptr Word64
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr Word64)) (Word64
forall a. Zero a => a
zero)
    Ptr Word64 -> Word64 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pTagInfo" ::: Ptr DebugUtilsObjectTagInfoEXT
p ("pTagInfo" ::: Ptr DebugUtilsObjectTagInfoEXT)
-> Int -> Ptr Word64
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr Word64)) (Word64
forall a. Zero a => a
zero)
    Ptr CSize -> CSize -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pTagInfo" ::: Ptr DebugUtilsObjectTagInfoEXT
p ("pTagInfo" ::: Ptr DebugUtilsObjectTagInfoEXT) -> Int -> Ptr CSize
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
40 :: Ptr CSize)) (Word64 -> CSize
CSize (Word64
forall a. Zero a => a
zero))
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pTagInfo" ::: Ptr DebugUtilsObjectTagInfoEXT
p ("pTagInfo" ::: Ptr DebugUtilsObjectTagInfoEXT)
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
48 :: Ptr (Ptr ()))) (Ptr ()
forall a. Zero a => a
zero)
    IO b
f

instance FromCStruct DebugUtilsObjectTagInfoEXT where
  peekCStruct :: ("pTagInfo" ::: Ptr DebugUtilsObjectTagInfoEXT)
-> IO DebugUtilsObjectTagInfoEXT
peekCStruct "pTagInfo" ::: Ptr DebugUtilsObjectTagInfoEXT
p = do
    ObjectType
objectType <- Ptr ObjectType -> IO ObjectType
forall a. Storable a => Ptr a -> IO a
peek @ObjectType (("pTagInfo" ::: Ptr DebugUtilsObjectTagInfoEXT
p ("pTagInfo" ::: Ptr DebugUtilsObjectTagInfoEXT)
-> Int -> Ptr ObjectType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr ObjectType))
    Word64
objectHandle <- Ptr Word64 -> IO Word64
forall a. Storable a => Ptr a -> IO a
peek @Word64 (("pTagInfo" ::: Ptr DebugUtilsObjectTagInfoEXT
p ("pTagInfo" ::: Ptr DebugUtilsObjectTagInfoEXT)
-> Int -> Ptr Word64
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr Word64))
    Word64
tagName <- Ptr Word64 -> IO Word64
forall a. Storable a => Ptr a -> IO a
peek @Word64 (("pTagInfo" ::: Ptr DebugUtilsObjectTagInfoEXT
p ("pTagInfo" ::: Ptr DebugUtilsObjectTagInfoEXT)
-> Int -> Ptr Word64
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr Word64))
    CSize
tagSize <- Ptr CSize -> IO CSize
forall a. Storable a => Ptr a -> IO a
peek @CSize (("pTagInfo" ::: Ptr DebugUtilsObjectTagInfoEXT
p ("pTagInfo" ::: Ptr DebugUtilsObjectTagInfoEXT) -> Int -> Ptr CSize
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
40 :: Ptr CSize))
    Ptr ()
pTag <- Ptr (Ptr ()) -> IO (Ptr ())
forall a. Storable a => Ptr a -> IO a
peek @(Ptr ()) (("pTagInfo" ::: Ptr DebugUtilsObjectTagInfoEXT
p ("pTagInfo" ::: Ptr DebugUtilsObjectTagInfoEXT)
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
48 :: Ptr (Ptr ())))
    DebugUtilsObjectTagInfoEXT -> IO DebugUtilsObjectTagInfoEXT
forall (f :: * -> *) a. Applicative f => a -> f a
pure (DebugUtilsObjectTagInfoEXT -> IO DebugUtilsObjectTagInfoEXT)
-> DebugUtilsObjectTagInfoEXT -> IO DebugUtilsObjectTagInfoEXT
forall a b. (a -> b) -> a -> b
$ ObjectType
-> Word64
-> Word64
-> Word64
-> Ptr ()
-> DebugUtilsObjectTagInfoEXT
DebugUtilsObjectTagInfoEXT
             ObjectType
objectType Word64
objectHandle Word64
tagName (CSize -> Word64
coerce @CSize @Word64 CSize
tagSize) Ptr ()
pTag

instance Storable DebugUtilsObjectTagInfoEXT where
  sizeOf :: DebugUtilsObjectTagInfoEXT -> Int
sizeOf ~DebugUtilsObjectTagInfoEXT
_ = Int
56
  alignment :: DebugUtilsObjectTagInfoEXT -> Int
alignment ~DebugUtilsObjectTagInfoEXT
_ = Int
8
  peek :: ("pTagInfo" ::: Ptr DebugUtilsObjectTagInfoEXT)
-> IO DebugUtilsObjectTagInfoEXT
peek = ("pTagInfo" ::: Ptr DebugUtilsObjectTagInfoEXT)
-> IO DebugUtilsObjectTagInfoEXT
forall a. FromCStruct a => Ptr a -> IO a
peekCStruct
  poke :: ("pTagInfo" ::: Ptr DebugUtilsObjectTagInfoEXT)
-> DebugUtilsObjectTagInfoEXT -> IO ()
poke "pTagInfo" ::: Ptr DebugUtilsObjectTagInfoEXT
ptr DebugUtilsObjectTagInfoEXT
poked = ("pTagInfo" ::: Ptr DebugUtilsObjectTagInfoEXT)
-> DebugUtilsObjectTagInfoEXT -> IO () -> IO ()
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct "pTagInfo" ::: Ptr DebugUtilsObjectTagInfoEXT
ptr DebugUtilsObjectTagInfoEXT
poked (() -> IO ()
forall (f :: * -> *) a. Applicative f => a -> f a
pure ())

instance Zero DebugUtilsObjectTagInfoEXT where
  zero :: DebugUtilsObjectTagInfoEXT
zero = ObjectType
-> Word64
-> Word64
-> Word64
-> Ptr ()
-> DebugUtilsObjectTagInfoEXT
DebugUtilsObjectTagInfoEXT
           ObjectType
forall a. Zero a => a
zero
           Word64
forall a. Zero a => a
zero
           Word64
forall a. Zero a => a
zero
           Word64
forall a. Zero a => a
zero
           Ptr ()
forall a. Zero a => a
zero


-- | VkDebugUtilsLabelEXT - Specify parameters of a label region
--
-- == Valid Usage (Implicit)
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_debug_utils VK_EXT_debug_utils>,
-- 'DebugUtilsMessengerCallbackDataEXT',
-- 'Vulkan.Core10.Enums.StructureType.StructureType',
-- 'cmdBeginDebugUtilsLabelEXT', 'cmdInsertDebugUtilsLabelEXT',
-- 'queueBeginDebugUtilsLabelEXT', 'queueInsertDebugUtilsLabelEXT'
data DebugUtilsLabelEXT = DebugUtilsLabelEXT
  { -- | @pLabelName@ is a pointer to a null-terminated UTF-8 string containing
    -- the name of the label.
    --
    -- #VUID-VkDebugUtilsLabelEXT-pLabelName-parameter# @pLabelName@ /must/ be
    -- a null-terminated UTF-8 string
    ("labelInfo" ::: DebugUtilsLabelEXT) -> ByteString
labelName :: ByteString
  , -- | @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.
    ("labelInfo" ::: DebugUtilsLabelEXT)
-> (Float, Float, Float, Float)
color :: (Float, Float, Float, Float)
  }
  deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (DebugUtilsLabelEXT)
#endif
deriving instance Show DebugUtilsLabelEXT

instance ToCStruct DebugUtilsLabelEXT where
  withCStruct :: ("labelInfo" ::: DebugUtilsLabelEXT)
-> (("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
    -> IO b)
-> IO b
withCStruct "labelInfo" ::: DebugUtilsLabelEXT
x ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT)) -> IO b
f = Int
-> (("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
    -> IO b)
-> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
40 ((("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
  -> IO b)
 -> IO b)
-> (("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
    -> IO b)
-> IO b
forall a b. (a -> b) -> a -> b
$ \"pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT)
p -> ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
-> ("labelInfo" ::: DebugUtilsLabelEXT) -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct "pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT)
p "labelInfo" ::: DebugUtilsLabelEXT
x (("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT)) -> IO b
f "pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT)
p)
  pokeCStruct :: ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
-> ("labelInfo" ::: DebugUtilsLabelEXT) -> IO b -> IO b
pokeCStruct "pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT)
p DebugUtilsLabelEXT{(Float, Float, Float, Float)
ByteString
color :: (Float, Float, Float, Float)
labelName :: ByteString
$sel:color:DebugUtilsLabelEXT :: ("labelInfo" ::: DebugUtilsLabelEXT)
-> (Float, Float, Float, Float)
$sel:labelName:DebugUtilsLabelEXT :: ("labelInfo" ::: DebugUtilsLabelEXT) -> ByteString
..} IO b
f = ContT b IO b -> IO b
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT b IO b -> IO b) -> ContT b IO b -> IO b
forall a b. (a -> b) -> a -> b
$ do
    IO () -> ContT b IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT)
p ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT)
    IO () -> ContT b IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT)
p ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr CChar
pLabelName'' <- ((Ptr CChar -> IO b) -> IO b) -> ContT b IO (Ptr CChar)
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr CChar -> IO b) -> IO b) -> ContT b IO (Ptr CChar))
-> ((Ptr CChar -> IO b) -> IO b) -> ContT b IO (Ptr CChar)
forall a b. (a -> b) -> a -> b
$ ByteString -> (Ptr CChar -> IO b) -> IO b
forall a. ByteString -> (Ptr CChar -> IO a) -> IO a
useAsCString (ByteString
labelName)
    IO () -> ContT b IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr (Ptr CChar) -> Ptr CChar -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT)
p ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
-> Int -> Ptr (Ptr CChar)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr (Ptr CChar))) Ptr CChar
pLabelName''
    let pColor' :: Ptr CFloat
pColor' = Ptr (FixedArray 4 CFloat) -> Ptr CFloat
forall a (n :: Nat). Ptr (FixedArray n a) -> Ptr a
lowerArrayPtr (("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT)
p ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
-> Int -> Ptr (FixedArray 4 CFloat)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr (FixedArray 4 CFloat)))
    IO () -> ContT b IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ case ((Float, Float, Float, Float)
color) of
      (Float
e0, Float
e1, Float
e2, Float
e3) -> do
        Ptr CFloat -> CFloat -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr CFloat
pColor' :: Ptr CFloat) (Float -> CFloat
CFloat (Float
e0))
        Ptr CFloat -> CFloat -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr CFloat
pColor' Ptr CFloat -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
4 :: Ptr CFloat) (Float -> CFloat
CFloat (Float
e1))
        Ptr CFloat -> CFloat -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr CFloat
pColor' Ptr CFloat -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr CFloat) (Float -> CFloat
CFloat (Float
e2))
        Ptr CFloat -> CFloat -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr CFloat
pColor' Ptr CFloat -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
12 :: Ptr CFloat) (Float -> CFloat
CFloat (Float
e3))
    IO b -> ContT b IO b
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO b -> ContT b IO b) -> IO b -> ContT b IO b
forall a b. (a -> b) -> a -> b
$ IO b
f
  cStructSize :: Int
cStructSize = Int
40
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
-> IO b -> IO b
pokeZeroCStruct "pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT)
p IO b
f = ContT b IO b -> IO b
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT b IO b -> IO b) -> ContT b IO b -> IO b
forall a b. (a -> b) -> a -> b
$ do
    IO () -> ContT b IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT)
p ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT)
    IO () -> ContT b IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT)
p ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr CChar
pLabelName'' <- ((Ptr CChar -> IO b) -> IO b) -> ContT b IO (Ptr CChar)
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr CChar -> IO b) -> IO b) -> ContT b IO (Ptr CChar))
-> ((Ptr CChar -> IO b) -> IO b) -> ContT b IO (Ptr CChar)
forall a b. (a -> b) -> a -> b
$ ByteString -> (Ptr CChar -> IO b) -> IO b
forall a. ByteString -> (Ptr CChar -> IO a) -> IO a
useAsCString (ByteString
forall a. Monoid a => a
mempty)
    IO () -> ContT b IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr (Ptr CChar) -> Ptr CChar -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT)
p ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
-> Int -> Ptr (Ptr CChar)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr (Ptr CChar))) Ptr CChar
pLabelName''
    let pColor' :: Ptr CFloat
pColor' = Ptr (FixedArray 4 CFloat) -> Ptr CFloat
forall a (n :: Nat). Ptr (FixedArray n a) -> Ptr a
lowerArrayPtr (("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT)
p ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
-> Int -> Ptr (FixedArray 4 CFloat)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr (FixedArray 4 CFloat)))
    IO () -> ContT b IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ case ((Float
forall a. Zero a => a
zero, Float
forall a. Zero a => a
zero, Float
forall a. Zero a => a
zero, Float
forall a. Zero a => a
zero)) of
      (Float
e0, Float
e1, Float
e2, Float
e3) -> do
        Ptr CFloat -> CFloat -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr CFloat
pColor' :: Ptr CFloat) (Float -> CFloat
CFloat (Float
e0))
        Ptr CFloat -> CFloat -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr CFloat
pColor' Ptr CFloat -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
4 :: Ptr CFloat) (Float -> CFloat
CFloat (Float
e1))
        Ptr CFloat -> CFloat -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr CFloat
pColor' Ptr CFloat -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr CFloat) (Float -> CFloat
CFloat (Float
e2))
        Ptr CFloat -> CFloat -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr CFloat
pColor' Ptr CFloat -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
12 :: Ptr CFloat) (Float -> CFloat
CFloat (Float
e3))
    IO b -> ContT b IO b
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO b -> ContT b IO b) -> IO b -> ContT b IO b
forall a b. (a -> b) -> a -> b
$ IO b
f

instance FromCStruct DebugUtilsLabelEXT where
  peekCStruct :: ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
-> IO ("labelInfo" ::: DebugUtilsLabelEXT)
peekCStruct "pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT)
p = do
    ByteString
pLabelName <- Ptr CChar -> IO ByteString
packCString (Ptr CChar -> IO ByteString) -> IO (Ptr CChar) -> IO ByteString
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Ptr (Ptr CChar) -> IO (Ptr CChar)
forall a. Storable a => Ptr a -> IO a
peek (("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT)
p ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
-> Int -> Ptr (Ptr CChar)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr (Ptr CChar)))
    let pcolor :: Ptr CFloat
pcolor = Ptr (FixedArray 4 CFloat) -> Ptr CFloat
forall a (n :: Nat). Ptr (FixedArray n a) -> Ptr a
lowerArrayPtr @CFloat (("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT)
p ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
-> Int -> Ptr (FixedArray 4 CFloat)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr (FixedArray 4 CFloat)))
    CFloat
color0 <- Ptr CFloat -> IO CFloat
forall a. Storable a => Ptr a -> IO a
peek @CFloat ((Ptr CFloat
pcolor Ptr CFloat -> Int -> Ptr CFloat
forall a. Ptr a -> Int -> Ptr a
`advancePtrBytes` Int
0 :: Ptr CFloat))
    CFloat
color1 <- Ptr CFloat -> IO CFloat
forall a. Storable a => Ptr a -> IO a
peek @CFloat ((Ptr CFloat
pcolor Ptr CFloat -> Int -> Ptr CFloat
forall a. Ptr a -> Int -> Ptr a
`advancePtrBytes` Int
4 :: Ptr CFloat))
    CFloat
color2 <- Ptr CFloat -> IO CFloat
forall a. Storable a => Ptr a -> IO a
peek @CFloat ((Ptr CFloat
pcolor Ptr CFloat -> Int -> Ptr CFloat
forall a. Ptr a -> Int -> Ptr a
`advancePtrBytes` Int
8 :: Ptr CFloat))
    CFloat
color3 <- Ptr CFloat -> IO CFloat
forall a. Storable a => Ptr a -> IO a
peek @CFloat ((Ptr CFloat
pcolor Ptr CFloat -> Int -> Ptr CFloat
forall a. Ptr a -> Int -> Ptr a
`advancePtrBytes` Int
12 :: Ptr CFloat))
    ("labelInfo" ::: DebugUtilsLabelEXT)
-> IO ("labelInfo" ::: DebugUtilsLabelEXT)
forall (f :: * -> *) a. Applicative f => a -> f a
pure (("labelInfo" ::: DebugUtilsLabelEXT)
 -> IO ("labelInfo" ::: DebugUtilsLabelEXT))
-> ("labelInfo" ::: DebugUtilsLabelEXT)
-> IO ("labelInfo" ::: DebugUtilsLabelEXT)
forall a b. (a -> b) -> a -> b
$ ByteString
-> (Float, Float, Float, Float)
-> "labelInfo" ::: DebugUtilsLabelEXT
DebugUtilsLabelEXT
             ByteString
pLabelName (((CFloat -> Float
coerce @CFloat @Float CFloat
color0), (CFloat -> Float
coerce @CFloat @Float CFloat
color1), (CFloat -> Float
coerce @CFloat @Float CFloat
color2), (CFloat -> Float
coerce @CFloat @Float CFloat
color3)))

instance Zero DebugUtilsLabelEXT where
  zero :: "labelInfo" ::: DebugUtilsLabelEXT
zero = ByteString
-> (Float, Float, Float, Float)
-> "labelInfo" ::: DebugUtilsLabelEXT
DebugUtilsLabelEXT
           ByteString
forall a. Monoid a => a
mempty
           (Float
forall a. Zero a => a
zero, Float
forall a. Zero a => a
zero, Float
forall a. Zero a => a
zero, Float
forall a. Zero a => a
zero)


-- | VkDebugUtilsMessengerCreateInfoEXT - Structure specifying parameters of
-- a newly created debug messenger
--
-- = Description
--
-- For each 'Vulkan.Extensions.Handles.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
--     'Vulkan.Extensions.Handles.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
--     'Vulkan.Extensions.Handles.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
-- 'Vulkan.Extensions.Handles.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',
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_debug_utils VK_EXT_debug_utils>,
-- 'DebugUtilsMessageSeverityFlagsEXT', 'DebugUtilsMessageTypeFlagsEXT',
-- 'DebugUtilsMessengerCreateFlagsEXT',
-- 'Vulkan.Core10.Enums.StructureType.StructureType',
-- 'createDebugUtilsMessengerEXT'
data DebugUtilsMessengerCreateInfoEXT = DebugUtilsMessengerCreateInfoEXT
  { -- | @flags@ is @0@ and is reserved for future use.
    --
    -- #VUID-VkDebugUtilsMessengerCreateInfoEXT-flags-zerobitmask# @flags@
    -- /must/ be @0@
    DebugUtilsMessengerCreateInfoEXT
-> DebugUtilsMessengerCreateFlagsEXT
flags :: DebugUtilsMessengerCreateFlagsEXT
  , -- | @messageSeverity@ is a bitmask of 'DebugUtilsMessageSeverityFlagBitsEXT'
    -- specifying which severity of event(s) will cause this callback to be
    -- called.
    --
    -- #VUID-VkDebugUtilsMessengerCreateInfoEXT-messageSeverity-parameter#
    -- @messageSeverity@ /must/ be a valid combination of
    -- 'DebugUtilsMessageSeverityFlagBitsEXT' values
    --
    -- #VUID-VkDebugUtilsMessengerCreateInfoEXT-messageSeverity-requiredbitmask#
    -- @messageSeverity@ /must/ not be @0@
    DebugUtilsMessengerCreateInfoEXT
-> DebugUtilsMessageSeverityFlagBitsEXT
messageSeverity :: DebugUtilsMessageSeverityFlagsEXT
  , -- | @messageType@ is a bitmask of 'DebugUtilsMessageTypeFlagBitsEXT'
    -- specifying which type of event(s) will cause this callback to be called.
    --
    -- #VUID-VkDebugUtilsMessengerCreateInfoEXT-messageType-parameter#
    -- @messageType@ /must/ be a valid combination of
    -- 'DebugUtilsMessageTypeFlagBitsEXT' values
    --
    -- #VUID-VkDebugUtilsMessengerCreateInfoEXT-messageType-requiredbitmask#
    -- @messageType@ /must/ not be @0@
    DebugUtilsMessengerCreateInfoEXT
-> "messageTypes" ::: DebugUtilsMessageTypeFlagsEXT
messageType :: DebugUtilsMessageTypeFlagsEXT
  , -- | @pfnUserCallback@ is the application callback function to call.
    --
    -- #VUID-VkDebugUtilsMessengerCreateInfoEXT-pfnUserCallback-01914#
    -- @pfnUserCallback@ /must/ be a valid
    -- 'PFN_vkDebugUtilsMessengerCallbackEXT'
    --
    -- #VUID-VkDebugUtilsMessengerCreateInfoEXT-pfnUserCallback-parameter#
    -- @pfnUserCallback@ /must/ be a valid
    -- 'PFN_vkDebugUtilsMessengerCallbackEXT' value
    DebugUtilsMessengerCreateInfoEXT
-> PFN_vkDebugUtilsMessengerCallbackEXT
pfnUserCallback :: PFN_vkDebugUtilsMessengerCallbackEXT
  , -- | @pUserData@ is user data to be passed to the callback.
    DebugUtilsMessengerCreateInfoEXT -> Ptr ()
userData :: Ptr ()
  }
  deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (DebugUtilsMessengerCreateInfoEXT)
#endif
deriving instance Show DebugUtilsMessengerCreateInfoEXT

instance ToCStruct DebugUtilsMessengerCreateInfoEXT where
  withCStruct :: DebugUtilsMessengerCreateInfoEXT
-> (("pCreateInfo" ::: Ptr DebugUtilsMessengerCreateInfoEXT)
    -> IO b)
-> IO b
withCStruct DebugUtilsMessengerCreateInfoEXT
x ("pCreateInfo" ::: Ptr DebugUtilsMessengerCreateInfoEXT) -> IO b
f = Int
-> (("pCreateInfo" ::: Ptr DebugUtilsMessengerCreateInfoEXT)
    -> IO b)
-> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
48 ((("pCreateInfo" ::: Ptr DebugUtilsMessengerCreateInfoEXT) -> IO b)
 -> IO b)
-> (("pCreateInfo" ::: Ptr DebugUtilsMessengerCreateInfoEXT)
    -> IO b)
-> IO b
forall a b. (a -> b) -> a -> b
$ \"pCreateInfo" ::: Ptr DebugUtilsMessengerCreateInfoEXT
p -> ("pCreateInfo" ::: Ptr DebugUtilsMessengerCreateInfoEXT)
-> DebugUtilsMessengerCreateInfoEXT -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct "pCreateInfo" ::: Ptr DebugUtilsMessengerCreateInfoEXT
p DebugUtilsMessengerCreateInfoEXT
x (("pCreateInfo" ::: Ptr DebugUtilsMessengerCreateInfoEXT) -> IO b
f "pCreateInfo" ::: Ptr DebugUtilsMessengerCreateInfoEXT
p)
  pokeCStruct :: ("pCreateInfo" ::: Ptr DebugUtilsMessengerCreateInfoEXT)
-> DebugUtilsMessengerCreateInfoEXT -> IO b -> IO b
pokeCStruct "pCreateInfo" ::: Ptr DebugUtilsMessengerCreateInfoEXT
p DebugUtilsMessengerCreateInfoEXT{Ptr ()
PFN_vkDebugUtilsMessengerCallbackEXT
"messageTypes" ::: DebugUtilsMessageTypeFlagsEXT
DebugUtilsMessageSeverityFlagBitsEXT
DebugUtilsMessengerCreateFlagsEXT
userData :: Ptr ()
pfnUserCallback :: PFN_vkDebugUtilsMessengerCallbackEXT
messageType :: "messageTypes" ::: DebugUtilsMessageTypeFlagsEXT
messageSeverity :: DebugUtilsMessageSeverityFlagBitsEXT
flags :: DebugUtilsMessengerCreateFlagsEXT
$sel:userData:DebugUtilsMessengerCreateInfoEXT :: DebugUtilsMessengerCreateInfoEXT -> Ptr ()
$sel:pfnUserCallback:DebugUtilsMessengerCreateInfoEXT :: DebugUtilsMessengerCreateInfoEXT
-> PFN_vkDebugUtilsMessengerCallbackEXT
$sel:messageType:DebugUtilsMessengerCreateInfoEXT :: DebugUtilsMessengerCreateInfoEXT
-> "messageTypes" ::: DebugUtilsMessageTypeFlagsEXT
$sel:messageSeverity:DebugUtilsMessengerCreateInfoEXT :: DebugUtilsMessengerCreateInfoEXT
-> DebugUtilsMessageSeverityFlagBitsEXT
$sel:flags:DebugUtilsMessengerCreateInfoEXT :: DebugUtilsMessengerCreateInfoEXT
-> DebugUtilsMessengerCreateFlagsEXT
..} IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pCreateInfo" ::: Ptr DebugUtilsMessengerCreateInfoEXT
p ("pCreateInfo" ::: Ptr DebugUtilsMessengerCreateInfoEXT)
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pCreateInfo" ::: Ptr DebugUtilsMessengerCreateInfoEXT
p ("pCreateInfo" ::: Ptr DebugUtilsMessengerCreateInfoEXT)
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr DebugUtilsMessengerCreateFlagsEXT
-> DebugUtilsMessengerCreateFlagsEXT -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pCreateInfo" ::: Ptr DebugUtilsMessengerCreateInfoEXT
p ("pCreateInfo" ::: Ptr DebugUtilsMessengerCreateInfoEXT)
-> Int -> Ptr DebugUtilsMessengerCreateFlagsEXT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr DebugUtilsMessengerCreateFlagsEXT)) (DebugUtilsMessengerCreateFlagsEXT
flags)
    Ptr DebugUtilsMessageSeverityFlagBitsEXT
-> DebugUtilsMessageSeverityFlagBitsEXT -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pCreateInfo" ::: Ptr DebugUtilsMessengerCreateInfoEXT
p ("pCreateInfo" ::: Ptr DebugUtilsMessengerCreateInfoEXT)
-> Int -> Ptr DebugUtilsMessageSeverityFlagBitsEXT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
20 :: Ptr DebugUtilsMessageSeverityFlagsEXT)) (DebugUtilsMessageSeverityFlagBitsEXT
messageSeverity)
    Ptr ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pCreateInfo" ::: Ptr DebugUtilsMessengerCreateInfoEXT
p ("pCreateInfo" ::: Ptr DebugUtilsMessengerCreateInfoEXT)
-> Int -> Ptr ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr DebugUtilsMessageTypeFlagsEXT)) ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT
messageType)
    Ptr PFN_vkDebugUtilsMessengerCallbackEXT
-> PFN_vkDebugUtilsMessengerCallbackEXT -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pCreateInfo" ::: Ptr DebugUtilsMessengerCreateInfoEXT
p ("pCreateInfo" ::: Ptr DebugUtilsMessengerCreateInfoEXT)
-> Int -> Ptr PFN_vkDebugUtilsMessengerCallbackEXT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr PFN_vkDebugUtilsMessengerCallbackEXT)) (PFN_vkDebugUtilsMessengerCallbackEXT
pfnUserCallback)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pCreateInfo" ::: Ptr DebugUtilsMessengerCreateInfoEXT
p ("pCreateInfo" ::: Ptr DebugUtilsMessengerCreateInfoEXT)
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
40 :: Ptr (Ptr ()))) (Ptr ()
userData)
    IO b
f
  cStructSize :: Int
cStructSize = Int
48
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: ("pCreateInfo" ::: Ptr DebugUtilsMessengerCreateInfoEXT)
-> IO b -> IO b
pokeZeroCStruct "pCreateInfo" ::: Ptr DebugUtilsMessengerCreateInfoEXT
p IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pCreateInfo" ::: Ptr DebugUtilsMessengerCreateInfoEXT
p ("pCreateInfo" ::: Ptr DebugUtilsMessengerCreateInfoEXT)
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pCreateInfo" ::: Ptr DebugUtilsMessengerCreateInfoEXT
p ("pCreateInfo" ::: Ptr DebugUtilsMessengerCreateInfoEXT)
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr DebugUtilsMessageSeverityFlagBitsEXT
-> DebugUtilsMessageSeverityFlagBitsEXT -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pCreateInfo" ::: Ptr DebugUtilsMessengerCreateInfoEXT
p ("pCreateInfo" ::: Ptr DebugUtilsMessengerCreateInfoEXT)
-> Int -> Ptr DebugUtilsMessageSeverityFlagBitsEXT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
20 :: Ptr DebugUtilsMessageSeverityFlagsEXT)) (DebugUtilsMessageSeverityFlagBitsEXT
forall a. Zero a => a
zero)
    Ptr ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pCreateInfo" ::: Ptr DebugUtilsMessengerCreateInfoEXT
p ("pCreateInfo" ::: Ptr DebugUtilsMessengerCreateInfoEXT)
-> Int -> Ptr ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr DebugUtilsMessageTypeFlagsEXT)) ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT
forall a. Zero a => a
zero)
    Ptr PFN_vkDebugUtilsMessengerCallbackEXT
-> PFN_vkDebugUtilsMessengerCallbackEXT -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pCreateInfo" ::: Ptr DebugUtilsMessengerCreateInfoEXT
p ("pCreateInfo" ::: Ptr DebugUtilsMessengerCreateInfoEXT)
-> Int -> Ptr PFN_vkDebugUtilsMessengerCallbackEXT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr PFN_vkDebugUtilsMessengerCallbackEXT)) (PFN_vkDebugUtilsMessengerCallbackEXT
forall a. Zero a => a
zero)
    IO b
f

instance FromCStruct DebugUtilsMessengerCreateInfoEXT where
  peekCStruct :: ("pCreateInfo" ::: Ptr DebugUtilsMessengerCreateInfoEXT)
-> IO DebugUtilsMessengerCreateInfoEXT
peekCStruct "pCreateInfo" ::: Ptr DebugUtilsMessengerCreateInfoEXT
p = do
    DebugUtilsMessengerCreateFlagsEXT
flags <- Ptr DebugUtilsMessengerCreateFlagsEXT
-> IO DebugUtilsMessengerCreateFlagsEXT
forall a. Storable a => Ptr a -> IO a
peek @DebugUtilsMessengerCreateFlagsEXT (("pCreateInfo" ::: Ptr DebugUtilsMessengerCreateInfoEXT
p ("pCreateInfo" ::: Ptr DebugUtilsMessengerCreateInfoEXT)
-> Int -> Ptr DebugUtilsMessengerCreateFlagsEXT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr DebugUtilsMessengerCreateFlagsEXT))
    DebugUtilsMessageSeverityFlagBitsEXT
messageSeverity <- Ptr DebugUtilsMessageSeverityFlagBitsEXT
-> IO DebugUtilsMessageSeverityFlagBitsEXT
forall a. Storable a => Ptr a -> IO a
peek @DebugUtilsMessageSeverityFlagsEXT (("pCreateInfo" ::: Ptr DebugUtilsMessengerCreateInfoEXT
p ("pCreateInfo" ::: Ptr DebugUtilsMessengerCreateInfoEXT)
-> Int -> Ptr DebugUtilsMessageSeverityFlagBitsEXT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
20 :: Ptr DebugUtilsMessageSeverityFlagsEXT))
    "messageTypes" ::: DebugUtilsMessageTypeFlagsEXT
messageType <- Ptr ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> IO ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
forall a. Storable a => Ptr a -> IO a
peek @DebugUtilsMessageTypeFlagsEXT (("pCreateInfo" ::: Ptr DebugUtilsMessengerCreateInfoEXT
p ("pCreateInfo" ::: Ptr DebugUtilsMessengerCreateInfoEXT)
-> Int -> Ptr ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr DebugUtilsMessageTypeFlagsEXT))
    PFN_vkDebugUtilsMessengerCallbackEXT
pfnUserCallback <- Ptr PFN_vkDebugUtilsMessengerCallbackEXT
-> IO PFN_vkDebugUtilsMessengerCallbackEXT
forall a. Storable a => Ptr a -> IO a
peek @PFN_vkDebugUtilsMessengerCallbackEXT (("pCreateInfo" ::: Ptr DebugUtilsMessengerCreateInfoEXT
p ("pCreateInfo" ::: Ptr DebugUtilsMessengerCreateInfoEXT)
-> Int -> Ptr PFN_vkDebugUtilsMessengerCallbackEXT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr PFN_vkDebugUtilsMessengerCallbackEXT))
    Ptr ()
pUserData <- Ptr (Ptr ()) -> IO (Ptr ())
forall a. Storable a => Ptr a -> IO a
peek @(Ptr ()) (("pCreateInfo" ::: Ptr DebugUtilsMessengerCreateInfoEXT
p ("pCreateInfo" ::: Ptr DebugUtilsMessengerCreateInfoEXT)
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
40 :: Ptr (Ptr ())))
    DebugUtilsMessengerCreateInfoEXT
-> IO DebugUtilsMessengerCreateInfoEXT
forall (f :: * -> *) a. Applicative f => a -> f a
pure (DebugUtilsMessengerCreateInfoEXT
 -> IO DebugUtilsMessengerCreateInfoEXT)
-> DebugUtilsMessengerCreateInfoEXT
-> IO DebugUtilsMessengerCreateInfoEXT
forall a b. (a -> b) -> a -> b
$ DebugUtilsMessengerCreateFlagsEXT
-> DebugUtilsMessageSeverityFlagBitsEXT
-> ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> PFN_vkDebugUtilsMessengerCallbackEXT
-> Ptr ()
-> DebugUtilsMessengerCreateInfoEXT
DebugUtilsMessengerCreateInfoEXT
             DebugUtilsMessengerCreateFlagsEXT
flags DebugUtilsMessageSeverityFlagBitsEXT
messageSeverity "messageTypes" ::: DebugUtilsMessageTypeFlagsEXT
messageType PFN_vkDebugUtilsMessengerCallbackEXT
pfnUserCallback Ptr ()
pUserData

instance Storable DebugUtilsMessengerCreateInfoEXT where
  sizeOf :: DebugUtilsMessengerCreateInfoEXT -> Int
sizeOf ~DebugUtilsMessengerCreateInfoEXT
_ = Int
48
  alignment :: DebugUtilsMessengerCreateInfoEXT -> Int
alignment ~DebugUtilsMessengerCreateInfoEXT
_ = Int
8
  peek :: ("pCreateInfo" ::: Ptr DebugUtilsMessengerCreateInfoEXT)
-> IO DebugUtilsMessengerCreateInfoEXT
peek = ("pCreateInfo" ::: Ptr DebugUtilsMessengerCreateInfoEXT)
-> IO DebugUtilsMessengerCreateInfoEXT
forall a. FromCStruct a => Ptr a -> IO a
peekCStruct
  poke :: ("pCreateInfo" ::: Ptr DebugUtilsMessengerCreateInfoEXT)
-> DebugUtilsMessengerCreateInfoEXT -> IO ()
poke "pCreateInfo" ::: Ptr DebugUtilsMessengerCreateInfoEXT
ptr DebugUtilsMessengerCreateInfoEXT
poked = ("pCreateInfo" ::: Ptr DebugUtilsMessengerCreateInfoEXT)
-> DebugUtilsMessengerCreateInfoEXT -> IO () -> IO ()
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct "pCreateInfo" ::: Ptr DebugUtilsMessengerCreateInfoEXT
ptr DebugUtilsMessengerCreateInfoEXT
poked (() -> IO ()
forall (f :: * -> *) a. Applicative f => a -> f a
pure ())

instance Zero DebugUtilsMessengerCreateInfoEXT where
  zero :: DebugUtilsMessengerCreateInfoEXT
zero = DebugUtilsMessengerCreateFlagsEXT
-> DebugUtilsMessageSeverityFlagBitsEXT
-> ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> PFN_vkDebugUtilsMessengerCallbackEXT
-> Ptr ()
-> DebugUtilsMessengerCreateInfoEXT
DebugUtilsMessengerCreateInfoEXT
           DebugUtilsMessengerCreateFlagsEXT
forall a. Zero a => a
zero
           DebugUtilsMessageSeverityFlagBitsEXT
forall a. Zero a => a
zero
           "messageTypes" ::: DebugUtilsMessageTypeFlagsEXT
forall a. Zero a => a
zero
           PFN_vkDebugUtilsMessengerCallbackEXT
forall a. Zero a => a
zero
           Ptr ()
forall a. Zero a => a
zero


-- | 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
-- 'Vulkan.Core10.Handles.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
-- 'Vulkan.Core10.Handles.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)
--
-- -   #VUID-VkDebugUtilsMessengerCallbackDataEXT-sType-sType# @sType@
--     /must/ be
--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT'
--
-- -   #VUID-VkDebugUtilsMessengerCallbackDataEXT-pNext-pNext# @pNext@
--     /must/ be @NULL@
--
-- -   #VUID-VkDebugUtilsMessengerCallbackDataEXT-flags-zerobitmask#
--     @flags@ /must/ be @0@
--
-- -   #VUID-VkDebugUtilsMessengerCallbackDataEXT-pMessageIdName-parameter#
--     If @pMessageIdName@ is not @NULL@, @pMessageIdName@ /must/ be a
--     null-terminated UTF-8 string
--
-- -   #VUID-VkDebugUtilsMessengerCallbackDataEXT-pMessage-parameter#
--     @pMessage@ /must/ be a null-terminated UTF-8 string
--
-- -   #VUID-VkDebugUtilsMessengerCallbackDataEXT-pQueueLabels-parameter#
--     If @queueLabelCount@ is not @0@, @pQueueLabels@ /must/ be a valid
--     pointer to an array of @queueLabelCount@ valid 'DebugUtilsLabelEXT'
--     structures
--
-- -   #VUID-VkDebugUtilsMessengerCallbackDataEXT-pCmdBufLabels-parameter#
--     If @cmdBufLabelCount@ is not @0@, @pCmdBufLabels@ /must/ be a valid
--     pointer to an array of @cmdBufLabelCount@ valid 'DebugUtilsLabelEXT'
--     structures
--
-- -   #VUID-VkDebugUtilsMessengerCallbackDataEXT-pObjects-parameter# If
--     @objectCount@ is not @0@, @pObjects@ /must/ be a valid pointer to an
--     array of @objectCount@ valid 'DebugUtilsObjectNameInfoEXT'
--     structures
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_debug_utils VK_EXT_debug_utils>,
-- 'DebugUtilsLabelEXT', 'DebugUtilsMessengerCallbackDataFlagsEXT',
-- 'DebugUtilsObjectNameInfoEXT',
-- 'Vulkan.Core10.Enums.StructureType.StructureType',
-- 'submitDebugUtilsMessageEXT'
data DebugUtilsMessengerCallbackDataEXT = DebugUtilsMessengerCallbackDataEXT
  { -- | @flags@ is @0@ and is reserved for future use.
    DebugUtilsMessengerCallbackDataEXT
-> DebugUtilsMessengerCallbackDataFlagsEXT
flags :: DebugUtilsMessengerCallbackDataFlagsEXT
  , -- | @pMessageIdName@ is a null-terminated string that identifies the
    -- particular message ID that is associated with the provided message. If
    -- the message corresponds to a validation layer message, then this string
    -- may contain the portion of the Vulkan specification that is believed to
    -- have been violated.
    DebugUtilsMessengerCallbackDataEXT -> Maybe ByteString
messageIdName :: Maybe ByteString
  , -- | @messageIdNumber@ is the ID number of the triggering message. If the
    -- message corresponds to a validation layer message, then this number is
    -- related to the internal number associated with the message being
    -- triggered.
    DebugUtilsMessengerCallbackDataEXT -> Int32
messageIdNumber :: Int32
  , -- | @pMessage@ is a null-terminated string detailing the trigger conditions.
    DebugUtilsMessengerCallbackDataEXT -> ByteString
message :: ByteString
  , -- | @pQueueLabels@ is @NULL@ or a pointer to an array of
    -- 'DebugUtilsLabelEXT' active in the current 'Vulkan.Core10.Handles.Queue'
    -- at the time the callback was triggered. Refer to
    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#debugging-queue-labels Queue Labels>
    -- for more information.
    DebugUtilsMessengerCallbackDataEXT
-> Vector ("labelInfo" ::: DebugUtilsLabelEXT)
queueLabels :: Vector DebugUtilsLabelEXT
  , -- | @pCmdBufLabels@ is @NULL@ or a pointer to an array of
    -- 'DebugUtilsLabelEXT' active in the current
    -- 'Vulkan.Core10.Handles.CommandBuffer' at the time the callback was
    -- triggered. Refer to
    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#debugging-command-buffer-labels Command Buffer Labels>
    -- for more information.
    DebugUtilsMessengerCallbackDataEXT
-> Vector ("labelInfo" ::: DebugUtilsLabelEXT)
cmdBufLabels :: Vector DebugUtilsLabelEXT
  , -- | @pObjects@ is a pointer to an array of 'DebugUtilsObjectNameInfoEXT'
    -- objects related to the detected issue. The array is roughly in order or
    -- importance, but the 0th element is always guaranteed to be the most
    -- important object for this message.
    DebugUtilsMessengerCallbackDataEXT
-> Vector DebugUtilsObjectNameInfoEXT
objects :: Vector DebugUtilsObjectNameInfoEXT
  }
  deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (DebugUtilsMessengerCallbackDataEXT)
#endif
deriving instance Show DebugUtilsMessengerCallbackDataEXT

instance ToCStruct DebugUtilsMessengerCallbackDataEXT where
  withCStruct :: DebugUtilsMessengerCallbackDataEXT
-> (("pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT)
    -> IO b)
-> IO b
withCStruct DebugUtilsMessengerCallbackDataEXT
x ("pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT)
-> IO b
f = Int
-> (("pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT)
    -> IO b)
-> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
96 ((("pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT)
  -> IO b)
 -> IO b)
-> (("pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT)
    -> IO b)
-> IO b
forall a b. (a -> b) -> a -> b
$ \"pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT
p -> ("pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT)
-> DebugUtilsMessengerCallbackDataEXT -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct "pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT
p DebugUtilsMessengerCallbackDataEXT
x (("pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT)
-> IO b
f "pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT
p)
  pokeCStruct :: ("pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT)
-> DebugUtilsMessengerCallbackDataEXT -> IO b -> IO b
pokeCStruct "pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT
p DebugUtilsMessengerCallbackDataEXT{Int32
Maybe ByteString
ByteString
Vector DebugUtilsObjectNameInfoEXT
Vector ("labelInfo" ::: DebugUtilsLabelEXT)
DebugUtilsMessengerCallbackDataFlagsEXT
objects :: Vector DebugUtilsObjectNameInfoEXT
cmdBufLabels :: Vector ("labelInfo" ::: DebugUtilsLabelEXT)
queueLabels :: Vector ("labelInfo" ::: DebugUtilsLabelEXT)
message :: ByteString
messageIdNumber :: Int32
messageIdName :: Maybe ByteString
flags :: DebugUtilsMessengerCallbackDataFlagsEXT
$sel:objects:DebugUtilsMessengerCallbackDataEXT :: DebugUtilsMessengerCallbackDataEXT
-> Vector DebugUtilsObjectNameInfoEXT
$sel:cmdBufLabels:DebugUtilsMessengerCallbackDataEXT :: DebugUtilsMessengerCallbackDataEXT
-> Vector ("labelInfo" ::: DebugUtilsLabelEXT)
$sel:queueLabels:DebugUtilsMessengerCallbackDataEXT :: DebugUtilsMessengerCallbackDataEXT
-> Vector ("labelInfo" ::: DebugUtilsLabelEXT)
$sel:message:DebugUtilsMessengerCallbackDataEXT :: DebugUtilsMessengerCallbackDataEXT -> ByteString
$sel:messageIdNumber:DebugUtilsMessengerCallbackDataEXT :: DebugUtilsMessengerCallbackDataEXT -> Int32
$sel:messageIdName:DebugUtilsMessengerCallbackDataEXT :: DebugUtilsMessengerCallbackDataEXT -> Maybe ByteString
$sel:flags:DebugUtilsMessengerCallbackDataEXT :: DebugUtilsMessengerCallbackDataEXT
-> DebugUtilsMessengerCallbackDataFlagsEXT
..} IO b
f = ContT b IO b -> IO b
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT b IO b -> IO b) -> ContT b IO b -> IO b
forall a b. (a -> b) -> a -> b
$ do
    IO () -> ContT b IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT
p ("pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT)
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT)
    IO () -> ContT b IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT
p ("pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT)
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    IO () -> ContT b IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr DebugUtilsMessengerCallbackDataFlagsEXT
-> DebugUtilsMessengerCallbackDataFlagsEXT -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT
p ("pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT)
-> Int -> Ptr DebugUtilsMessengerCallbackDataFlagsEXT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr DebugUtilsMessengerCallbackDataFlagsEXT)) (DebugUtilsMessengerCallbackDataFlagsEXT
flags)
    Ptr CChar
pMessageIdName'' <- case (Maybe ByteString
messageIdName) of
      Maybe ByteString
Nothing -> Ptr CChar -> ContT b IO (Ptr CChar)
forall (f :: * -> *) a. Applicative f => a -> f a
pure Ptr CChar
forall a. Ptr a
nullPtr
      Just ByteString
j -> ((Ptr CChar -> IO b) -> IO b) -> ContT b IO (Ptr CChar)
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr CChar -> IO b) -> IO b) -> ContT b IO (Ptr CChar))
-> ((Ptr CChar -> IO b) -> IO b) -> ContT b IO (Ptr CChar)
forall a b. (a -> b) -> a -> b
$ ByteString -> (Ptr CChar -> IO b) -> IO b
forall a. ByteString -> (Ptr CChar -> IO a) -> IO a
useAsCString (ByteString
j)
    IO () -> ContT b IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr (Ptr CChar) -> Ptr CChar -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT
p ("pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT)
-> Int -> Ptr (Ptr CChar)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr (Ptr CChar))) Ptr CChar
pMessageIdName''
    IO () -> ContT b IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Int32 -> Int32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT
p ("pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT)
-> Int -> Ptr Int32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr Int32)) (Int32
messageIdNumber)
    Ptr CChar
pMessage'' <- ((Ptr CChar -> IO b) -> IO b) -> ContT b IO (Ptr CChar)
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr CChar -> IO b) -> IO b) -> ContT b IO (Ptr CChar))
-> ((Ptr CChar -> IO b) -> IO b) -> ContT b IO (Ptr CChar)
forall a b. (a -> b) -> a -> b
$ ByteString -> (Ptr CChar -> IO b) -> IO b
forall a. ByteString -> (Ptr CChar -> IO a) -> IO a
useAsCString (ByteString
message)
    IO () -> ContT b IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr (Ptr CChar) -> Ptr CChar -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT
p ("pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT)
-> Int -> Ptr (Ptr CChar)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
40 :: Ptr (Ptr CChar))) Ptr CChar
pMessage''
    IO () -> ContT b IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT
p ("pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT)
-> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
48 :: Ptr Word32)) ((Int -> Word32
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Vector ("labelInfo" ::: DebugUtilsLabelEXT) -> Int
forall a. Vector a -> Int
Data.Vector.length (Vector ("labelInfo" ::: DebugUtilsLabelEXT) -> Int)
-> Vector ("labelInfo" ::: DebugUtilsLabelEXT) -> Int
forall a b. (a -> b) -> a -> b
$ (Vector ("labelInfo" ::: DebugUtilsLabelEXT)
queueLabels)) :: Word32))
    "pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT)
pPQueueLabels' <- ((("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
  -> IO b)
 -> IO b)
-> ContT
     b IO ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
   -> IO b)
  -> IO b)
 -> ContT
      b IO ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT)))
-> ((("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
     -> IO b)
    -> IO b)
-> ContT
     b IO ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
forall a b. (a -> b) -> a -> b
$ Int
-> (("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
    -> IO b)
-> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes @DebugUtilsLabelEXT ((Vector ("labelInfo" ::: DebugUtilsLabelEXT) -> Int
forall a. Vector a -> Int
Data.Vector.length (Vector ("labelInfo" ::: DebugUtilsLabelEXT)
queueLabels)) Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
40)
    (Int -> ("labelInfo" ::: DebugUtilsLabelEXT) -> ContT b IO ())
-> Vector ("labelInfo" ::: DebugUtilsLabelEXT) -> ContT b IO ()
forall (m :: * -> *) a b.
Monad m =>
(Int -> a -> m b) -> Vector a -> m ()
Data.Vector.imapM_ (\Int
i "labelInfo" ::: DebugUtilsLabelEXT
e -> ((() -> IO b) -> IO b) -> ContT b IO ()
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((() -> IO b) -> IO b) -> ContT b IO ())
-> ((() -> IO b) -> IO b) -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
-> ("labelInfo" ::: DebugUtilsLabelEXT) -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT)
pPQueueLabels' ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
-> Int -> "pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
40 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr DebugUtilsLabelEXT) ("labelInfo" ::: DebugUtilsLabelEXT
e) (IO b -> IO b) -> ((() -> IO b) -> IO b) -> (() -> IO b) -> IO b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((() -> IO b) -> () -> IO b
forall a b. (a -> b) -> a -> b
$ ())) (Vector ("labelInfo" ::: DebugUtilsLabelEXT)
queueLabels)
    IO () -> ContT b IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
-> ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
-> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT
p ("pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT)
-> Int
-> Ptr ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
56 :: Ptr (Ptr DebugUtilsLabelEXT))) ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT)
pPQueueLabels')
    IO () -> ContT b IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT
p ("pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT)
-> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
64 :: Ptr Word32)) ((Int -> Word32
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Vector ("labelInfo" ::: DebugUtilsLabelEXT) -> Int
forall a. Vector a -> Int
Data.Vector.length (Vector ("labelInfo" ::: DebugUtilsLabelEXT) -> Int)
-> Vector ("labelInfo" ::: DebugUtilsLabelEXT) -> Int
forall a b. (a -> b) -> a -> b
$ (Vector ("labelInfo" ::: DebugUtilsLabelEXT)
cmdBufLabels)) :: Word32))
    "pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT)
pPCmdBufLabels' <- ((("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
  -> IO b)
 -> IO b)
-> ContT
     b IO ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
   -> IO b)
  -> IO b)
 -> ContT
      b IO ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT)))
-> ((("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
     -> IO b)
    -> IO b)
-> ContT
     b IO ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
forall a b. (a -> b) -> a -> b
$ Int
-> (("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
    -> IO b)
-> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes @DebugUtilsLabelEXT ((Vector ("labelInfo" ::: DebugUtilsLabelEXT) -> Int
forall a. Vector a -> Int
Data.Vector.length (Vector ("labelInfo" ::: DebugUtilsLabelEXT)
cmdBufLabels)) Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
40)
    (Int -> ("labelInfo" ::: DebugUtilsLabelEXT) -> ContT b IO ())
-> Vector ("labelInfo" ::: DebugUtilsLabelEXT) -> ContT b IO ()
forall (m :: * -> *) a b.
Monad m =>
(Int -> a -> m b) -> Vector a -> m ()
Data.Vector.imapM_ (\Int
i "labelInfo" ::: DebugUtilsLabelEXT
e -> ((() -> IO b) -> IO b) -> ContT b IO ()
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((() -> IO b) -> IO b) -> ContT b IO ())
-> ((() -> IO b) -> IO b) -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
-> ("labelInfo" ::: DebugUtilsLabelEXT) -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT)
pPCmdBufLabels' ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
-> Int -> "pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
40 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr DebugUtilsLabelEXT) ("labelInfo" ::: DebugUtilsLabelEXT
e) (IO b -> IO b) -> ((() -> IO b) -> IO b) -> (() -> IO b) -> IO b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((() -> IO b) -> () -> IO b
forall a b. (a -> b) -> a -> b
$ ())) (Vector ("labelInfo" ::: DebugUtilsLabelEXT)
cmdBufLabels)
    IO () -> ContT b IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
-> ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
-> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT
p ("pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT)
-> Int
-> Ptr ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
72 :: Ptr (Ptr DebugUtilsLabelEXT))) ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT)
pPCmdBufLabels')
    IO () -> ContT b IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT
p ("pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT)
-> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
80 :: Ptr Word32)) ((Int -> Word32
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Vector DebugUtilsObjectNameInfoEXT -> Int
forall a. Vector a -> Int
Data.Vector.length (Vector DebugUtilsObjectNameInfoEXT -> Int)
-> Vector DebugUtilsObjectNameInfoEXT -> Int
forall a b. (a -> b) -> a -> b
$ (Vector DebugUtilsObjectNameInfoEXT
objects)) :: Word32))
    "pNameInfo" ::: Ptr DebugUtilsObjectNameInfoEXT
pPObjects' <- ((("pNameInfo" ::: Ptr DebugUtilsObjectNameInfoEXT) -> IO b)
 -> IO b)
-> ContT b IO ("pNameInfo" ::: Ptr DebugUtilsObjectNameInfoEXT)
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((("pNameInfo" ::: Ptr DebugUtilsObjectNameInfoEXT) -> IO b)
  -> IO b)
 -> ContT b IO ("pNameInfo" ::: Ptr DebugUtilsObjectNameInfoEXT))
-> ((("pNameInfo" ::: Ptr DebugUtilsObjectNameInfoEXT) -> IO b)
    -> IO b)
-> ContT b IO ("pNameInfo" ::: Ptr DebugUtilsObjectNameInfoEXT)
forall a b. (a -> b) -> a -> b
$ Int
-> (("pNameInfo" ::: Ptr DebugUtilsObjectNameInfoEXT) -> IO b)
-> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes @DebugUtilsObjectNameInfoEXT ((Vector DebugUtilsObjectNameInfoEXT -> Int
forall a. Vector a -> Int
Data.Vector.length (Vector DebugUtilsObjectNameInfoEXT
objects)) Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
40)
    (Int -> DebugUtilsObjectNameInfoEXT -> ContT b IO ())
-> Vector DebugUtilsObjectNameInfoEXT -> ContT b IO ()
forall (m :: * -> *) a b.
Monad m =>
(Int -> a -> m b) -> Vector a -> m ()
Data.Vector.imapM_ (\Int
i DebugUtilsObjectNameInfoEXT
e -> ((() -> IO b) -> IO b) -> ContT b IO ()
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((() -> IO b) -> IO b) -> ContT b IO ())
-> ((() -> IO b) -> IO b) -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ ("pNameInfo" ::: Ptr DebugUtilsObjectNameInfoEXT)
-> DebugUtilsObjectNameInfoEXT -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct ("pNameInfo" ::: Ptr DebugUtilsObjectNameInfoEXT
pPObjects' ("pNameInfo" ::: Ptr DebugUtilsObjectNameInfoEXT)
-> Int -> "pNameInfo" ::: Ptr DebugUtilsObjectNameInfoEXT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
40 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr DebugUtilsObjectNameInfoEXT) (DebugUtilsObjectNameInfoEXT
e) (IO b -> IO b) -> ((() -> IO b) -> IO b) -> (() -> IO b) -> IO b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((() -> IO b) -> () -> IO b
forall a b. (a -> b) -> a -> b
$ ())) (Vector DebugUtilsObjectNameInfoEXT
objects)
    IO () -> ContT b IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr ("pNameInfo" ::: Ptr DebugUtilsObjectNameInfoEXT)
-> ("pNameInfo" ::: Ptr DebugUtilsObjectNameInfoEXT) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT
p ("pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT)
-> Int -> Ptr ("pNameInfo" ::: Ptr DebugUtilsObjectNameInfoEXT)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
88 :: Ptr (Ptr DebugUtilsObjectNameInfoEXT))) ("pNameInfo" ::: Ptr DebugUtilsObjectNameInfoEXT
pPObjects')
    IO b -> ContT b IO b
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO b -> ContT b IO b) -> IO b -> ContT b IO b
forall a b. (a -> b) -> a -> b
$ IO b
f
  cStructSize :: Int
cStructSize = Int
96
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: ("pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT)
-> IO b -> IO b
pokeZeroCStruct "pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT
p IO b
f = ContT b IO b -> IO b
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT b IO b -> IO b) -> ContT b IO b -> IO b
forall a b. (a -> b) -> a -> b
$ do
    IO () -> ContT b IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT
p ("pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT)
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT)
    IO () -> ContT b IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT
p ("pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT)
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    IO () -> ContT b IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Int32 -> Int32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT
p ("pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT)
-> Int -> Ptr Int32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr Int32)) (Int32
forall a. Zero a => a
zero)
    Ptr CChar
pMessage'' <- ((Ptr CChar -> IO b) -> IO b) -> ContT b IO (Ptr CChar)
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr CChar -> IO b) -> IO b) -> ContT b IO (Ptr CChar))
-> ((Ptr CChar -> IO b) -> IO b) -> ContT b IO (Ptr CChar)
forall a b. (a -> b) -> a -> b
$ ByteString -> (Ptr CChar -> IO b) -> IO b
forall a. ByteString -> (Ptr CChar -> IO a) -> IO a
useAsCString (ByteString
forall a. Monoid a => a
mempty)
    IO () -> ContT b IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr (Ptr CChar) -> Ptr CChar -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT
p ("pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT)
-> Int -> Ptr (Ptr CChar)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
40 :: Ptr (Ptr CChar))) Ptr CChar
pMessage''
    IO b -> ContT b IO b
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO b -> ContT b IO b) -> IO b -> ContT b IO b
forall a b. (a -> b) -> a -> b
$ IO b
f

instance FromCStruct DebugUtilsMessengerCallbackDataEXT where
  peekCStruct :: ("pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT)
-> IO DebugUtilsMessengerCallbackDataEXT
peekCStruct "pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT
p = do
    DebugUtilsMessengerCallbackDataFlagsEXT
flags <- Ptr DebugUtilsMessengerCallbackDataFlagsEXT
-> IO DebugUtilsMessengerCallbackDataFlagsEXT
forall a. Storable a => Ptr a -> IO a
peek @DebugUtilsMessengerCallbackDataFlagsEXT (("pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT
p ("pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT)
-> Int -> Ptr DebugUtilsMessengerCallbackDataFlagsEXT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr DebugUtilsMessengerCallbackDataFlagsEXT))
    Ptr CChar
pMessageIdName <- Ptr (Ptr CChar) -> IO (Ptr CChar)
forall a. Storable a => Ptr a -> IO a
peek @(Ptr CChar) (("pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT
p ("pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT)
-> Int -> Ptr (Ptr CChar)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr (Ptr CChar)))
    Maybe ByteString
pMessageIdName' <- (Ptr CChar -> IO ByteString) -> Ptr CChar -> IO (Maybe ByteString)
forall a b. (Ptr a -> IO b) -> Ptr a -> IO (Maybe b)
maybePeek (\Ptr CChar
j -> Ptr CChar -> IO ByteString
packCString (Ptr CChar
j)) Ptr CChar
pMessageIdName
    Int32
messageIdNumber <- Ptr Int32 -> IO Int32
forall a. Storable a => Ptr a -> IO a
peek @Int32 (("pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT
p ("pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT)
-> Int -> Ptr Int32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr Int32))
    ByteString
pMessage <- Ptr CChar -> IO ByteString
packCString (Ptr CChar -> IO ByteString) -> IO (Ptr CChar) -> IO ByteString
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Ptr (Ptr CChar) -> IO (Ptr CChar)
forall a. Storable a => Ptr a -> IO a
peek (("pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT
p ("pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT)
-> Int -> Ptr (Ptr CChar)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
40 :: Ptr (Ptr CChar)))
    Word32
queueLabelCount <- Ptr Word32 -> IO Word32
forall a. Storable a => Ptr a -> IO a
peek @Word32 (("pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT
p ("pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT)
-> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
48 :: Ptr Word32))
    "pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT)
pQueueLabels <- Ptr ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
-> IO ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
forall a. Storable a => Ptr a -> IO a
peek @(Ptr DebugUtilsLabelEXT) (("pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT
p ("pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT)
-> Int
-> Ptr ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
56 :: Ptr (Ptr DebugUtilsLabelEXT)))
    Vector ("labelInfo" ::: DebugUtilsLabelEXT)
pQueueLabels' <- Int
-> (Int -> IO ("labelInfo" ::: DebugUtilsLabelEXT))
-> IO (Vector ("labelInfo" ::: DebugUtilsLabelEXT))
forall (m :: * -> *) a.
Monad m =>
Int -> (Int -> m a) -> m (Vector a)
generateM (Word32 -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral Word32
queueLabelCount) (\Int
i -> ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
-> IO ("labelInfo" ::: DebugUtilsLabelEXT)
forall a. FromCStruct a => Ptr a -> IO a
peekCStruct @DebugUtilsLabelEXT (("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT)
pQueueLabels ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
-> Int -> "pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT)
forall a. Ptr a -> Int -> Ptr a
`advancePtrBytes` (Int
40 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr DebugUtilsLabelEXT)))
    Word32
cmdBufLabelCount <- Ptr Word32 -> IO Word32
forall a. Storable a => Ptr a -> IO a
peek @Word32 (("pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT
p ("pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT)
-> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
64 :: Ptr Word32))
    "pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT)
pCmdBufLabels <- Ptr ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
-> IO ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
forall a. Storable a => Ptr a -> IO a
peek @(Ptr DebugUtilsLabelEXT) (("pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT
p ("pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT)
-> Int
-> Ptr ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
72 :: Ptr (Ptr DebugUtilsLabelEXT)))
    Vector ("labelInfo" ::: DebugUtilsLabelEXT)
pCmdBufLabels' <- Int
-> (Int -> IO ("labelInfo" ::: DebugUtilsLabelEXT))
-> IO (Vector ("labelInfo" ::: DebugUtilsLabelEXT))
forall (m :: * -> *) a.
Monad m =>
Int -> (Int -> m a) -> m (Vector a)
generateM (Word32 -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral Word32
cmdBufLabelCount) (\Int
i -> ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
-> IO ("labelInfo" ::: DebugUtilsLabelEXT)
forall a. FromCStruct a => Ptr a -> IO a
peekCStruct @DebugUtilsLabelEXT (("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT)
pCmdBufLabels ("pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT))
-> Int -> "pLabelInfo" ::: Ptr ("labelInfo" ::: DebugUtilsLabelEXT)
forall a. Ptr a -> Int -> Ptr a
`advancePtrBytes` (Int
40 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr DebugUtilsLabelEXT)))
    Word32
objectCount <- Ptr Word32 -> IO Word32
forall a. Storable a => Ptr a -> IO a
peek @Word32 (("pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT
p ("pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT)
-> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
80 :: Ptr Word32))
    "pNameInfo" ::: Ptr DebugUtilsObjectNameInfoEXT
pObjects <- Ptr ("pNameInfo" ::: Ptr DebugUtilsObjectNameInfoEXT)
-> IO ("pNameInfo" ::: Ptr DebugUtilsObjectNameInfoEXT)
forall a. Storable a => Ptr a -> IO a
peek @(Ptr DebugUtilsObjectNameInfoEXT) (("pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT
p ("pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT)
-> Int -> Ptr ("pNameInfo" ::: Ptr DebugUtilsObjectNameInfoEXT)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
88 :: Ptr (Ptr DebugUtilsObjectNameInfoEXT)))
    Vector DebugUtilsObjectNameInfoEXT
pObjects' <- Int
-> (Int -> IO DebugUtilsObjectNameInfoEXT)
-> IO (Vector DebugUtilsObjectNameInfoEXT)
forall (m :: * -> *) a.
Monad m =>
Int -> (Int -> m a) -> m (Vector a)
generateM (Word32 -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral Word32
objectCount) (\Int
i -> ("pNameInfo" ::: Ptr DebugUtilsObjectNameInfoEXT)
-> IO DebugUtilsObjectNameInfoEXT
forall a. FromCStruct a => Ptr a -> IO a
peekCStruct @DebugUtilsObjectNameInfoEXT (("pNameInfo" ::: Ptr DebugUtilsObjectNameInfoEXT
pObjects ("pNameInfo" ::: Ptr DebugUtilsObjectNameInfoEXT)
-> Int -> "pNameInfo" ::: Ptr DebugUtilsObjectNameInfoEXT
forall a. Ptr a -> Int -> Ptr a
`advancePtrBytes` (Int
40 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr DebugUtilsObjectNameInfoEXT)))
    DebugUtilsMessengerCallbackDataEXT
-> IO DebugUtilsMessengerCallbackDataEXT
forall (f :: * -> *) a. Applicative f => a -> f a
pure (DebugUtilsMessengerCallbackDataEXT
 -> IO DebugUtilsMessengerCallbackDataEXT)
-> DebugUtilsMessengerCallbackDataEXT
-> IO DebugUtilsMessengerCallbackDataEXT
forall a b. (a -> b) -> a -> b
$ DebugUtilsMessengerCallbackDataFlagsEXT
-> Maybe ByteString
-> Int32
-> ByteString
-> Vector ("labelInfo" ::: DebugUtilsLabelEXT)
-> Vector ("labelInfo" ::: DebugUtilsLabelEXT)
-> Vector DebugUtilsObjectNameInfoEXT
-> DebugUtilsMessengerCallbackDataEXT
DebugUtilsMessengerCallbackDataEXT
             DebugUtilsMessengerCallbackDataFlagsEXT
flags Maybe ByteString
pMessageIdName' Int32
messageIdNumber ByteString
pMessage Vector ("labelInfo" ::: DebugUtilsLabelEXT)
pQueueLabels' Vector ("labelInfo" ::: DebugUtilsLabelEXT)
pCmdBufLabels' Vector DebugUtilsObjectNameInfoEXT
pObjects'

instance Zero DebugUtilsMessengerCallbackDataEXT where
  zero :: DebugUtilsMessengerCallbackDataEXT
zero = DebugUtilsMessengerCallbackDataFlagsEXT
-> Maybe ByteString
-> Int32
-> ByteString
-> Vector ("labelInfo" ::: DebugUtilsLabelEXT)
-> Vector ("labelInfo" ::: DebugUtilsLabelEXT)
-> Vector DebugUtilsObjectNameInfoEXT
-> DebugUtilsMessengerCallbackDataEXT
DebugUtilsMessengerCallbackDataEXT
           DebugUtilsMessengerCallbackDataFlagsEXT
forall a. Zero a => a
zero
           Maybe ByteString
forall a. Maybe a
Nothing
           Int32
forall a. Zero a => a
zero
           ByteString
forall a. Monoid a => a
mempty
           Vector ("labelInfo" ::: DebugUtilsLabelEXT)
forall a. Monoid a => a
mempty
           Vector ("labelInfo" ::: DebugUtilsLabelEXT)
forall a. Monoid a => a
mempty
           Vector DebugUtilsObjectNameInfoEXT
forall a. Monoid a => a
mempty


-- | VkDebugUtilsMessengerCreateFlagsEXT - Reserved for future use
--
-- = Description
--
-- 'DebugUtilsMessengerCreateFlagsEXT' is a bitmask type for setting a
-- mask, but is currently reserved for future use.
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_debug_utils VK_EXT_debug_utils>,
-- 'DebugUtilsMessengerCreateInfoEXT'
newtype DebugUtilsMessengerCreateFlagsEXT = DebugUtilsMessengerCreateFlagsEXT Flags
  deriving newtype (DebugUtilsMessengerCreateFlagsEXT
-> DebugUtilsMessengerCreateFlagsEXT -> Bool
(DebugUtilsMessengerCreateFlagsEXT
 -> DebugUtilsMessengerCreateFlagsEXT -> Bool)
-> (DebugUtilsMessengerCreateFlagsEXT
    -> DebugUtilsMessengerCreateFlagsEXT -> Bool)
-> Eq DebugUtilsMessengerCreateFlagsEXT
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DebugUtilsMessengerCreateFlagsEXT
-> DebugUtilsMessengerCreateFlagsEXT -> Bool
$c/= :: DebugUtilsMessengerCreateFlagsEXT
-> DebugUtilsMessengerCreateFlagsEXT -> Bool
== :: DebugUtilsMessengerCreateFlagsEXT
-> DebugUtilsMessengerCreateFlagsEXT -> Bool
$c== :: DebugUtilsMessengerCreateFlagsEXT
-> DebugUtilsMessengerCreateFlagsEXT -> Bool
Eq, Eq DebugUtilsMessengerCreateFlagsEXT
Eq DebugUtilsMessengerCreateFlagsEXT
-> (DebugUtilsMessengerCreateFlagsEXT
    -> DebugUtilsMessengerCreateFlagsEXT -> Ordering)
-> (DebugUtilsMessengerCreateFlagsEXT
    -> DebugUtilsMessengerCreateFlagsEXT -> Bool)
-> (DebugUtilsMessengerCreateFlagsEXT
    -> DebugUtilsMessengerCreateFlagsEXT -> Bool)
-> (DebugUtilsMessengerCreateFlagsEXT
    -> DebugUtilsMessengerCreateFlagsEXT -> Bool)
-> (DebugUtilsMessengerCreateFlagsEXT
    -> DebugUtilsMessengerCreateFlagsEXT -> Bool)
-> (DebugUtilsMessengerCreateFlagsEXT
    -> DebugUtilsMessengerCreateFlagsEXT
    -> DebugUtilsMessengerCreateFlagsEXT)
-> (DebugUtilsMessengerCreateFlagsEXT
    -> DebugUtilsMessengerCreateFlagsEXT
    -> DebugUtilsMessengerCreateFlagsEXT)
-> Ord DebugUtilsMessengerCreateFlagsEXT
DebugUtilsMessengerCreateFlagsEXT
-> DebugUtilsMessengerCreateFlagsEXT -> Bool
DebugUtilsMessengerCreateFlagsEXT
-> DebugUtilsMessengerCreateFlagsEXT -> Ordering
DebugUtilsMessengerCreateFlagsEXT
-> DebugUtilsMessengerCreateFlagsEXT
-> DebugUtilsMessengerCreateFlagsEXT
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: DebugUtilsMessengerCreateFlagsEXT
-> DebugUtilsMessengerCreateFlagsEXT
-> DebugUtilsMessengerCreateFlagsEXT
$cmin :: DebugUtilsMessengerCreateFlagsEXT
-> DebugUtilsMessengerCreateFlagsEXT
-> DebugUtilsMessengerCreateFlagsEXT
max :: DebugUtilsMessengerCreateFlagsEXT
-> DebugUtilsMessengerCreateFlagsEXT
-> DebugUtilsMessengerCreateFlagsEXT
$cmax :: DebugUtilsMessengerCreateFlagsEXT
-> DebugUtilsMessengerCreateFlagsEXT
-> DebugUtilsMessengerCreateFlagsEXT
>= :: DebugUtilsMessengerCreateFlagsEXT
-> DebugUtilsMessengerCreateFlagsEXT -> Bool
$c>= :: DebugUtilsMessengerCreateFlagsEXT
-> DebugUtilsMessengerCreateFlagsEXT -> Bool
> :: DebugUtilsMessengerCreateFlagsEXT
-> DebugUtilsMessengerCreateFlagsEXT -> Bool
$c> :: DebugUtilsMessengerCreateFlagsEXT
-> DebugUtilsMessengerCreateFlagsEXT -> Bool
<= :: DebugUtilsMessengerCreateFlagsEXT
-> DebugUtilsMessengerCreateFlagsEXT -> Bool
$c<= :: DebugUtilsMessengerCreateFlagsEXT
-> DebugUtilsMessengerCreateFlagsEXT -> Bool
< :: DebugUtilsMessengerCreateFlagsEXT
-> DebugUtilsMessengerCreateFlagsEXT -> Bool
$c< :: DebugUtilsMessengerCreateFlagsEXT
-> DebugUtilsMessengerCreateFlagsEXT -> Bool
compare :: DebugUtilsMessengerCreateFlagsEXT
-> DebugUtilsMessengerCreateFlagsEXT -> Ordering
$ccompare :: DebugUtilsMessengerCreateFlagsEXT
-> DebugUtilsMessengerCreateFlagsEXT -> Ordering
$cp1Ord :: Eq DebugUtilsMessengerCreateFlagsEXT
Ord, Ptr b -> Int -> IO DebugUtilsMessengerCreateFlagsEXT
Ptr b -> Int -> DebugUtilsMessengerCreateFlagsEXT -> IO ()
Ptr DebugUtilsMessengerCreateFlagsEXT
-> IO DebugUtilsMessengerCreateFlagsEXT
Ptr DebugUtilsMessengerCreateFlagsEXT
-> Int -> IO DebugUtilsMessengerCreateFlagsEXT
Ptr DebugUtilsMessengerCreateFlagsEXT
-> Int -> DebugUtilsMessengerCreateFlagsEXT -> IO ()
Ptr DebugUtilsMessengerCreateFlagsEXT
-> DebugUtilsMessengerCreateFlagsEXT -> IO ()
DebugUtilsMessengerCreateFlagsEXT -> Int
(DebugUtilsMessengerCreateFlagsEXT -> Int)
-> (DebugUtilsMessengerCreateFlagsEXT -> Int)
-> (Ptr DebugUtilsMessengerCreateFlagsEXT
    -> Int -> IO DebugUtilsMessengerCreateFlagsEXT)
-> (Ptr DebugUtilsMessengerCreateFlagsEXT
    -> Int -> DebugUtilsMessengerCreateFlagsEXT -> IO ())
-> (forall b. Ptr b -> Int -> IO DebugUtilsMessengerCreateFlagsEXT)
-> (forall b.
    Ptr b -> Int -> DebugUtilsMessengerCreateFlagsEXT -> IO ())
-> (Ptr DebugUtilsMessengerCreateFlagsEXT
    -> IO DebugUtilsMessengerCreateFlagsEXT)
-> (Ptr DebugUtilsMessengerCreateFlagsEXT
    -> DebugUtilsMessengerCreateFlagsEXT -> IO ())
-> Storable DebugUtilsMessengerCreateFlagsEXT
forall b. Ptr b -> Int -> IO DebugUtilsMessengerCreateFlagsEXT
forall b.
Ptr b -> Int -> DebugUtilsMessengerCreateFlagsEXT -> IO ()
forall a.
(a -> Int)
-> (a -> Int)
-> (Ptr a -> Int -> IO a)
-> (Ptr a -> Int -> a -> IO ())
-> (forall b. Ptr b -> Int -> IO a)
-> (forall b. Ptr b -> Int -> a -> IO ())
-> (Ptr a -> IO a)
-> (Ptr a -> a -> IO ())
-> Storable a
poke :: Ptr DebugUtilsMessengerCreateFlagsEXT
-> DebugUtilsMessengerCreateFlagsEXT -> IO ()
$cpoke :: Ptr DebugUtilsMessengerCreateFlagsEXT
-> DebugUtilsMessengerCreateFlagsEXT -> IO ()
peek :: Ptr DebugUtilsMessengerCreateFlagsEXT
-> IO DebugUtilsMessengerCreateFlagsEXT
$cpeek :: Ptr DebugUtilsMessengerCreateFlagsEXT
-> IO DebugUtilsMessengerCreateFlagsEXT
pokeByteOff :: Ptr b -> Int -> DebugUtilsMessengerCreateFlagsEXT -> IO ()
$cpokeByteOff :: forall b.
Ptr b -> Int -> DebugUtilsMessengerCreateFlagsEXT -> IO ()
peekByteOff :: Ptr b -> Int -> IO DebugUtilsMessengerCreateFlagsEXT
$cpeekByteOff :: forall b. Ptr b -> Int -> IO DebugUtilsMessengerCreateFlagsEXT
pokeElemOff :: Ptr DebugUtilsMessengerCreateFlagsEXT
-> Int -> DebugUtilsMessengerCreateFlagsEXT -> IO ()
$cpokeElemOff :: Ptr DebugUtilsMessengerCreateFlagsEXT
-> Int -> DebugUtilsMessengerCreateFlagsEXT -> IO ()
peekElemOff :: Ptr DebugUtilsMessengerCreateFlagsEXT
-> Int -> IO DebugUtilsMessengerCreateFlagsEXT
$cpeekElemOff :: Ptr DebugUtilsMessengerCreateFlagsEXT
-> Int -> IO DebugUtilsMessengerCreateFlagsEXT
alignment :: DebugUtilsMessengerCreateFlagsEXT -> Int
$calignment :: DebugUtilsMessengerCreateFlagsEXT -> Int
sizeOf :: DebugUtilsMessengerCreateFlagsEXT -> Int
$csizeOf :: DebugUtilsMessengerCreateFlagsEXT -> Int
Storable, DebugUtilsMessengerCreateFlagsEXT
DebugUtilsMessengerCreateFlagsEXT
-> Zero DebugUtilsMessengerCreateFlagsEXT
forall a. a -> Zero a
zero :: DebugUtilsMessengerCreateFlagsEXT
$czero :: DebugUtilsMessengerCreateFlagsEXT
Zero, Eq DebugUtilsMessengerCreateFlagsEXT
DebugUtilsMessengerCreateFlagsEXT
Eq DebugUtilsMessengerCreateFlagsEXT
-> (DebugUtilsMessengerCreateFlagsEXT
    -> DebugUtilsMessengerCreateFlagsEXT
    -> DebugUtilsMessengerCreateFlagsEXT)
-> (DebugUtilsMessengerCreateFlagsEXT
    -> DebugUtilsMessengerCreateFlagsEXT
    -> DebugUtilsMessengerCreateFlagsEXT)
-> (DebugUtilsMessengerCreateFlagsEXT
    -> DebugUtilsMessengerCreateFlagsEXT
    -> DebugUtilsMessengerCreateFlagsEXT)
-> (DebugUtilsMessengerCreateFlagsEXT
    -> DebugUtilsMessengerCreateFlagsEXT)
-> (DebugUtilsMessengerCreateFlagsEXT
    -> Int -> DebugUtilsMessengerCreateFlagsEXT)
-> (DebugUtilsMessengerCreateFlagsEXT
    -> Int -> DebugUtilsMessengerCreateFlagsEXT)
-> DebugUtilsMessengerCreateFlagsEXT
-> (Int -> DebugUtilsMessengerCreateFlagsEXT)
-> (DebugUtilsMessengerCreateFlagsEXT
    -> Int -> DebugUtilsMessengerCreateFlagsEXT)
-> (DebugUtilsMessengerCreateFlagsEXT
    -> Int -> DebugUtilsMessengerCreateFlagsEXT)
-> (DebugUtilsMessengerCreateFlagsEXT
    -> Int -> DebugUtilsMessengerCreateFlagsEXT)
-> (DebugUtilsMessengerCreateFlagsEXT -> Int -> Bool)
-> (DebugUtilsMessengerCreateFlagsEXT -> Maybe Int)
-> (DebugUtilsMessengerCreateFlagsEXT -> Int)
-> (DebugUtilsMessengerCreateFlagsEXT -> Bool)
-> (DebugUtilsMessengerCreateFlagsEXT
    -> Int -> DebugUtilsMessengerCreateFlagsEXT)
-> (DebugUtilsMessengerCreateFlagsEXT
    -> Int -> DebugUtilsMessengerCreateFlagsEXT)
-> (DebugUtilsMessengerCreateFlagsEXT
    -> Int -> DebugUtilsMessengerCreateFlagsEXT)
-> (DebugUtilsMessengerCreateFlagsEXT
    -> Int -> DebugUtilsMessengerCreateFlagsEXT)
-> (DebugUtilsMessengerCreateFlagsEXT
    -> Int -> DebugUtilsMessengerCreateFlagsEXT)
-> (DebugUtilsMessengerCreateFlagsEXT
    -> Int -> DebugUtilsMessengerCreateFlagsEXT)
-> (DebugUtilsMessengerCreateFlagsEXT -> Int)
-> Bits DebugUtilsMessengerCreateFlagsEXT
Int -> DebugUtilsMessengerCreateFlagsEXT
DebugUtilsMessengerCreateFlagsEXT -> Bool
DebugUtilsMessengerCreateFlagsEXT -> Int
DebugUtilsMessengerCreateFlagsEXT -> Maybe Int
DebugUtilsMessengerCreateFlagsEXT
-> DebugUtilsMessengerCreateFlagsEXT
DebugUtilsMessengerCreateFlagsEXT -> Int -> Bool
DebugUtilsMessengerCreateFlagsEXT
-> Int -> DebugUtilsMessengerCreateFlagsEXT
DebugUtilsMessengerCreateFlagsEXT
-> DebugUtilsMessengerCreateFlagsEXT
-> DebugUtilsMessengerCreateFlagsEXT
forall a.
Eq a
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> a
-> (Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> Bool)
-> (a -> Maybe Int)
-> (a -> Int)
-> (a -> Bool)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int)
-> Bits a
popCount :: DebugUtilsMessengerCreateFlagsEXT -> Int
$cpopCount :: DebugUtilsMessengerCreateFlagsEXT -> Int
rotateR :: DebugUtilsMessengerCreateFlagsEXT
-> Int -> DebugUtilsMessengerCreateFlagsEXT
$crotateR :: DebugUtilsMessengerCreateFlagsEXT
-> Int -> DebugUtilsMessengerCreateFlagsEXT
rotateL :: DebugUtilsMessengerCreateFlagsEXT
-> Int -> DebugUtilsMessengerCreateFlagsEXT
$crotateL :: DebugUtilsMessengerCreateFlagsEXT
-> Int -> DebugUtilsMessengerCreateFlagsEXT
unsafeShiftR :: DebugUtilsMessengerCreateFlagsEXT
-> Int -> DebugUtilsMessengerCreateFlagsEXT
$cunsafeShiftR :: DebugUtilsMessengerCreateFlagsEXT
-> Int -> DebugUtilsMessengerCreateFlagsEXT
shiftR :: DebugUtilsMessengerCreateFlagsEXT
-> Int -> DebugUtilsMessengerCreateFlagsEXT
$cshiftR :: DebugUtilsMessengerCreateFlagsEXT
-> Int -> DebugUtilsMessengerCreateFlagsEXT
unsafeShiftL :: DebugUtilsMessengerCreateFlagsEXT
-> Int -> DebugUtilsMessengerCreateFlagsEXT
$cunsafeShiftL :: DebugUtilsMessengerCreateFlagsEXT
-> Int -> DebugUtilsMessengerCreateFlagsEXT
shiftL :: DebugUtilsMessengerCreateFlagsEXT
-> Int -> DebugUtilsMessengerCreateFlagsEXT
$cshiftL :: DebugUtilsMessengerCreateFlagsEXT
-> Int -> DebugUtilsMessengerCreateFlagsEXT
isSigned :: DebugUtilsMessengerCreateFlagsEXT -> Bool
$cisSigned :: DebugUtilsMessengerCreateFlagsEXT -> Bool
bitSize :: DebugUtilsMessengerCreateFlagsEXT -> Int
$cbitSize :: DebugUtilsMessengerCreateFlagsEXT -> Int
bitSizeMaybe :: DebugUtilsMessengerCreateFlagsEXT -> Maybe Int
$cbitSizeMaybe :: DebugUtilsMessengerCreateFlagsEXT -> Maybe Int
testBit :: DebugUtilsMessengerCreateFlagsEXT -> Int -> Bool
$ctestBit :: DebugUtilsMessengerCreateFlagsEXT -> Int -> Bool
complementBit :: DebugUtilsMessengerCreateFlagsEXT
-> Int -> DebugUtilsMessengerCreateFlagsEXT
$ccomplementBit :: DebugUtilsMessengerCreateFlagsEXT
-> Int -> DebugUtilsMessengerCreateFlagsEXT
clearBit :: DebugUtilsMessengerCreateFlagsEXT
-> Int -> DebugUtilsMessengerCreateFlagsEXT
$cclearBit :: DebugUtilsMessengerCreateFlagsEXT
-> Int -> DebugUtilsMessengerCreateFlagsEXT
setBit :: DebugUtilsMessengerCreateFlagsEXT
-> Int -> DebugUtilsMessengerCreateFlagsEXT
$csetBit :: DebugUtilsMessengerCreateFlagsEXT
-> Int -> DebugUtilsMessengerCreateFlagsEXT
bit :: Int -> DebugUtilsMessengerCreateFlagsEXT
$cbit :: Int -> DebugUtilsMessengerCreateFlagsEXT
zeroBits :: DebugUtilsMessengerCreateFlagsEXT
$czeroBits :: DebugUtilsMessengerCreateFlagsEXT
rotate :: DebugUtilsMessengerCreateFlagsEXT
-> Int -> DebugUtilsMessengerCreateFlagsEXT
$crotate :: DebugUtilsMessengerCreateFlagsEXT
-> Int -> DebugUtilsMessengerCreateFlagsEXT
shift :: DebugUtilsMessengerCreateFlagsEXT
-> Int -> DebugUtilsMessengerCreateFlagsEXT
$cshift :: DebugUtilsMessengerCreateFlagsEXT
-> Int -> DebugUtilsMessengerCreateFlagsEXT
complement :: DebugUtilsMessengerCreateFlagsEXT
-> DebugUtilsMessengerCreateFlagsEXT
$ccomplement :: DebugUtilsMessengerCreateFlagsEXT
-> DebugUtilsMessengerCreateFlagsEXT
xor :: DebugUtilsMessengerCreateFlagsEXT
-> DebugUtilsMessengerCreateFlagsEXT
-> DebugUtilsMessengerCreateFlagsEXT
$cxor :: DebugUtilsMessengerCreateFlagsEXT
-> DebugUtilsMessengerCreateFlagsEXT
-> DebugUtilsMessengerCreateFlagsEXT
.|. :: DebugUtilsMessengerCreateFlagsEXT
-> DebugUtilsMessengerCreateFlagsEXT
-> DebugUtilsMessengerCreateFlagsEXT
$c.|. :: DebugUtilsMessengerCreateFlagsEXT
-> DebugUtilsMessengerCreateFlagsEXT
-> DebugUtilsMessengerCreateFlagsEXT
.&. :: DebugUtilsMessengerCreateFlagsEXT
-> DebugUtilsMessengerCreateFlagsEXT
-> DebugUtilsMessengerCreateFlagsEXT
$c.&. :: DebugUtilsMessengerCreateFlagsEXT
-> DebugUtilsMessengerCreateFlagsEXT
-> DebugUtilsMessengerCreateFlagsEXT
$cp1Bits :: Eq DebugUtilsMessengerCreateFlagsEXT
Bits, Bits DebugUtilsMessengerCreateFlagsEXT
Bits DebugUtilsMessengerCreateFlagsEXT
-> (DebugUtilsMessengerCreateFlagsEXT -> Int)
-> (DebugUtilsMessengerCreateFlagsEXT -> Int)
-> (DebugUtilsMessengerCreateFlagsEXT -> Int)
-> FiniteBits DebugUtilsMessengerCreateFlagsEXT
DebugUtilsMessengerCreateFlagsEXT -> Int
forall b.
Bits b -> (b -> Int) -> (b -> Int) -> (b -> Int) -> FiniteBits b
countTrailingZeros :: DebugUtilsMessengerCreateFlagsEXT -> Int
$ccountTrailingZeros :: DebugUtilsMessengerCreateFlagsEXT -> Int
countLeadingZeros :: DebugUtilsMessengerCreateFlagsEXT -> Int
$ccountLeadingZeros :: DebugUtilsMessengerCreateFlagsEXT -> Int
finiteBitSize :: DebugUtilsMessengerCreateFlagsEXT -> Int
$cfiniteBitSize :: DebugUtilsMessengerCreateFlagsEXT -> Int
$cp1FiniteBits :: Bits DebugUtilsMessengerCreateFlagsEXT
FiniteBits)



conNameDebugUtilsMessengerCreateFlagsEXT :: String
conNameDebugUtilsMessengerCreateFlagsEXT :: String
conNameDebugUtilsMessengerCreateFlagsEXT = String
"DebugUtilsMessengerCreateFlagsEXT"

enumPrefixDebugUtilsMessengerCreateFlagsEXT :: String
enumPrefixDebugUtilsMessengerCreateFlagsEXT :: String
enumPrefixDebugUtilsMessengerCreateFlagsEXT = String
""

showTableDebugUtilsMessengerCreateFlagsEXT :: [(DebugUtilsMessengerCreateFlagsEXT, String)]
showTableDebugUtilsMessengerCreateFlagsEXT :: [(DebugUtilsMessengerCreateFlagsEXT, String)]
showTableDebugUtilsMessengerCreateFlagsEXT = []

instance Show DebugUtilsMessengerCreateFlagsEXT where
  showsPrec :: Int -> DebugUtilsMessengerCreateFlagsEXT -> ShowS
showsPrec = String
-> [(DebugUtilsMessengerCreateFlagsEXT, String)]
-> String
-> (DebugUtilsMessengerCreateFlagsEXT -> Word32)
-> (Word32 -> ShowS)
-> Int
-> DebugUtilsMessengerCreateFlagsEXT
-> ShowS
forall a i.
Eq a =>
String
-> [(a, String)]
-> String
-> (a -> i)
-> (i -> ShowS)
-> Int
-> a
-> ShowS
enumShowsPrec String
enumPrefixDebugUtilsMessengerCreateFlagsEXT
                            [(DebugUtilsMessengerCreateFlagsEXT, String)]
showTableDebugUtilsMessengerCreateFlagsEXT
                            String
conNameDebugUtilsMessengerCreateFlagsEXT
                            (\(DebugUtilsMessengerCreateFlagsEXT Word32
x) -> Word32
x)
                            (\Word32
x -> String -> ShowS
showString String
"0x" ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Word32 -> ShowS
forall a. (Integral a, Show a) => a -> ShowS
showHex Word32
x)

instance Read DebugUtilsMessengerCreateFlagsEXT where
  readPrec :: ReadPrec DebugUtilsMessengerCreateFlagsEXT
readPrec = String
-> [(DebugUtilsMessengerCreateFlagsEXT, String)]
-> String
-> (Word32 -> DebugUtilsMessengerCreateFlagsEXT)
-> ReadPrec DebugUtilsMessengerCreateFlagsEXT
forall i a.
Read i =>
String -> [(a, String)] -> String -> (i -> a) -> ReadPrec a
enumReadPrec String
enumPrefixDebugUtilsMessengerCreateFlagsEXT
                          [(DebugUtilsMessengerCreateFlagsEXT, String)]
showTableDebugUtilsMessengerCreateFlagsEXT
                          String
conNameDebugUtilsMessengerCreateFlagsEXT
                          Word32 -> DebugUtilsMessengerCreateFlagsEXT
DebugUtilsMessengerCreateFlagsEXT


-- | VkDebugUtilsMessengerCallbackDataFlagsEXT - Reserved for future use
--
-- = Description
--
-- 'DebugUtilsMessengerCallbackDataFlagsEXT' is a bitmask type for setting
-- a mask, but is currently reserved for future use.
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_debug_utils VK_EXT_debug_utils>,
-- 'DebugUtilsMessengerCallbackDataEXT'
newtype DebugUtilsMessengerCallbackDataFlagsEXT = DebugUtilsMessengerCallbackDataFlagsEXT Flags
  deriving newtype (DebugUtilsMessengerCallbackDataFlagsEXT
-> DebugUtilsMessengerCallbackDataFlagsEXT -> Bool
(DebugUtilsMessengerCallbackDataFlagsEXT
 -> DebugUtilsMessengerCallbackDataFlagsEXT -> Bool)
-> (DebugUtilsMessengerCallbackDataFlagsEXT
    -> DebugUtilsMessengerCallbackDataFlagsEXT -> Bool)
-> Eq DebugUtilsMessengerCallbackDataFlagsEXT
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DebugUtilsMessengerCallbackDataFlagsEXT
-> DebugUtilsMessengerCallbackDataFlagsEXT -> Bool
$c/= :: DebugUtilsMessengerCallbackDataFlagsEXT
-> DebugUtilsMessengerCallbackDataFlagsEXT -> Bool
== :: DebugUtilsMessengerCallbackDataFlagsEXT
-> DebugUtilsMessengerCallbackDataFlagsEXT -> Bool
$c== :: DebugUtilsMessengerCallbackDataFlagsEXT
-> DebugUtilsMessengerCallbackDataFlagsEXT -> Bool
Eq, Eq DebugUtilsMessengerCallbackDataFlagsEXT
Eq DebugUtilsMessengerCallbackDataFlagsEXT
-> (DebugUtilsMessengerCallbackDataFlagsEXT
    -> DebugUtilsMessengerCallbackDataFlagsEXT -> Ordering)
-> (DebugUtilsMessengerCallbackDataFlagsEXT
    -> DebugUtilsMessengerCallbackDataFlagsEXT -> Bool)
-> (DebugUtilsMessengerCallbackDataFlagsEXT
    -> DebugUtilsMessengerCallbackDataFlagsEXT -> Bool)
-> (DebugUtilsMessengerCallbackDataFlagsEXT
    -> DebugUtilsMessengerCallbackDataFlagsEXT -> Bool)
-> (DebugUtilsMessengerCallbackDataFlagsEXT
    -> DebugUtilsMessengerCallbackDataFlagsEXT -> Bool)
-> (DebugUtilsMessengerCallbackDataFlagsEXT
    -> DebugUtilsMessengerCallbackDataFlagsEXT
    -> DebugUtilsMessengerCallbackDataFlagsEXT)
-> (DebugUtilsMessengerCallbackDataFlagsEXT
    -> DebugUtilsMessengerCallbackDataFlagsEXT
    -> DebugUtilsMessengerCallbackDataFlagsEXT)
-> Ord DebugUtilsMessengerCallbackDataFlagsEXT
DebugUtilsMessengerCallbackDataFlagsEXT
-> DebugUtilsMessengerCallbackDataFlagsEXT -> Bool
DebugUtilsMessengerCallbackDataFlagsEXT
-> DebugUtilsMessengerCallbackDataFlagsEXT -> Ordering
DebugUtilsMessengerCallbackDataFlagsEXT
-> DebugUtilsMessengerCallbackDataFlagsEXT
-> DebugUtilsMessengerCallbackDataFlagsEXT
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: DebugUtilsMessengerCallbackDataFlagsEXT
-> DebugUtilsMessengerCallbackDataFlagsEXT
-> DebugUtilsMessengerCallbackDataFlagsEXT
$cmin :: DebugUtilsMessengerCallbackDataFlagsEXT
-> DebugUtilsMessengerCallbackDataFlagsEXT
-> DebugUtilsMessengerCallbackDataFlagsEXT
max :: DebugUtilsMessengerCallbackDataFlagsEXT
-> DebugUtilsMessengerCallbackDataFlagsEXT
-> DebugUtilsMessengerCallbackDataFlagsEXT
$cmax :: DebugUtilsMessengerCallbackDataFlagsEXT
-> DebugUtilsMessengerCallbackDataFlagsEXT
-> DebugUtilsMessengerCallbackDataFlagsEXT
>= :: DebugUtilsMessengerCallbackDataFlagsEXT
-> DebugUtilsMessengerCallbackDataFlagsEXT -> Bool
$c>= :: DebugUtilsMessengerCallbackDataFlagsEXT
-> DebugUtilsMessengerCallbackDataFlagsEXT -> Bool
> :: DebugUtilsMessengerCallbackDataFlagsEXT
-> DebugUtilsMessengerCallbackDataFlagsEXT -> Bool
$c> :: DebugUtilsMessengerCallbackDataFlagsEXT
-> DebugUtilsMessengerCallbackDataFlagsEXT -> Bool
<= :: DebugUtilsMessengerCallbackDataFlagsEXT
-> DebugUtilsMessengerCallbackDataFlagsEXT -> Bool
$c<= :: DebugUtilsMessengerCallbackDataFlagsEXT
-> DebugUtilsMessengerCallbackDataFlagsEXT -> Bool
< :: DebugUtilsMessengerCallbackDataFlagsEXT
-> DebugUtilsMessengerCallbackDataFlagsEXT -> Bool
$c< :: DebugUtilsMessengerCallbackDataFlagsEXT
-> DebugUtilsMessengerCallbackDataFlagsEXT -> Bool
compare :: DebugUtilsMessengerCallbackDataFlagsEXT
-> DebugUtilsMessengerCallbackDataFlagsEXT -> Ordering
$ccompare :: DebugUtilsMessengerCallbackDataFlagsEXT
-> DebugUtilsMessengerCallbackDataFlagsEXT -> Ordering
$cp1Ord :: Eq DebugUtilsMessengerCallbackDataFlagsEXT
Ord, Ptr b -> Int -> IO DebugUtilsMessengerCallbackDataFlagsEXT
Ptr b -> Int -> DebugUtilsMessengerCallbackDataFlagsEXT -> IO ()
Ptr DebugUtilsMessengerCallbackDataFlagsEXT
-> IO DebugUtilsMessengerCallbackDataFlagsEXT
Ptr DebugUtilsMessengerCallbackDataFlagsEXT
-> Int -> IO DebugUtilsMessengerCallbackDataFlagsEXT
Ptr DebugUtilsMessengerCallbackDataFlagsEXT
-> Int -> DebugUtilsMessengerCallbackDataFlagsEXT -> IO ()
Ptr DebugUtilsMessengerCallbackDataFlagsEXT
-> DebugUtilsMessengerCallbackDataFlagsEXT -> IO ()
DebugUtilsMessengerCallbackDataFlagsEXT -> Int
(DebugUtilsMessengerCallbackDataFlagsEXT -> Int)
-> (DebugUtilsMessengerCallbackDataFlagsEXT -> Int)
-> (Ptr DebugUtilsMessengerCallbackDataFlagsEXT
    -> Int -> IO DebugUtilsMessengerCallbackDataFlagsEXT)
-> (Ptr DebugUtilsMessengerCallbackDataFlagsEXT
    -> Int -> DebugUtilsMessengerCallbackDataFlagsEXT -> IO ())
-> (forall b.
    Ptr b -> Int -> IO DebugUtilsMessengerCallbackDataFlagsEXT)
-> (forall b.
    Ptr b -> Int -> DebugUtilsMessengerCallbackDataFlagsEXT -> IO ())
-> (Ptr DebugUtilsMessengerCallbackDataFlagsEXT
    -> IO DebugUtilsMessengerCallbackDataFlagsEXT)
-> (Ptr DebugUtilsMessengerCallbackDataFlagsEXT
    -> DebugUtilsMessengerCallbackDataFlagsEXT -> IO ())
-> Storable DebugUtilsMessengerCallbackDataFlagsEXT
forall b.
Ptr b -> Int -> IO DebugUtilsMessengerCallbackDataFlagsEXT
forall b.
Ptr b -> Int -> DebugUtilsMessengerCallbackDataFlagsEXT -> IO ()
forall a.
(a -> Int)
-> (a -> Int)
-> (Ptr a -> Int -> IO a)
-> (Ptr a -> Int -> a -> IO ())
-> (forall b. Ptr b -> Int -> IO a)
-> (forall b. Ptr b -> Int -> a -> IO ())
-> (Ptr a -> IO a)
-> (Ptr a -> a -> IO ())
-> Storable a
poke :: Ptr DebugUtilsMessengerCallbackDataFlagsEXT
-> DebugUtilsMessengerCallbackDataFlagsEXT -> IO ()
$cpoke :: Ptr DebugUtilsMessengerCallbackDataFlagsEXT
-> DebugUtilsMessengerCallbackDataFlagsEXT -> IO ()
peek :: Ptr DebugUtilsMessengerCallbackDataFlagsEXT
-> IO DebugUtilsMessengerCallbackDataFlagsEXT
$cpeek :: Ptr DebugUtilsMessengerCallbackDataFlagsEXT
-> IO DebugUtilsMessengerCallbackDataFlagsEXT
pokeByteOff :: Ptr b -> Int -> DebugUtilsMessengerCallbackDataFlagsEXT -> IO ()
$cpokeByteOff :: forall b.
Ptr b -> Int -> DebugUtilsMessengerCallbackDataFlagsEXT -> IO ()
peekByteOff :: Ptr b -> Int -> IO DebugUtilsMessengerCallbackDataFlagsEXT
$cpeekByteOff :: forall b.
Ptr b -> Int -> IO DebugUtilsMessengerCallbackDataFlagsEXT
pokeElemOff :: Ptr DebugUtilsMessengerCallbackDataFlagsEXT
-> Int -> DebugUtilsMessengerCallbackDataFlagsEXT -> IO ()
$cpokeElemOff :: Ptr DebugUtilsMessengerCallbackDataFlagsEXT
-> Int -> DebugUtilsMessengerCallbackDataFlagsEXT -> IO ()
peekElemOff :: Ptr DebugUtilsMessengerCallbackDataFlagsEXT
-> Int -> IO DebugUtilsMessengerCallbackDataFlagsEXT
$cpeekElemOff :: Ptr DebugUtilsMessengerCallbackDataFlagsEXT
-> Int -> IO DebugUtilsMessengerCallbackDataFlagsEXT
alignment :: DebugUtilsMessengerCallbackDataFlagsEXT -> Int
$calignment :: DebugUtilsMessengerCallbackDataFlagsEXT -> Int
sizeOf :: DebugUtilsMessengerCallbackDataFlagsEXT -> Int
$csizeOf :: DebugUtilsMessengerCallbackDataFlagsEXT -> Int
Storable, DebugUtilsMessengerCallbackDataFlagsEXT
DebugUtilsMessengerCallbackDataFlagsEXT
-> Zero DebugUtilsMessengerCallbackDataFlagsEXT
forall a. a -> Zero a
zero :: DebugUtilsMessengerCallbackDataFlagsEXT
$czero :: DebugUtilsMessengerCallbackDataFlagsEXT
Zero, Eq DebugUtilsMessengerCallbackDataFlagsEXT
DebugUtilsMessengerCallbackDataFlagsEXT
Eq DebugUtilsMessengerCallbackDataFlagsEXT
-> (DebugUtilsMessengerCallbackDataFlagsEXT
    -> DebugUtilsMessengerCallbackDataFlagsEXT
    -> DebugUtilsMessengerCallbackDataFlagsEXT)
-> (DebugUtilsMessengerCallbackDataFlagsEXT
    -> DebugUtilsMessengerCallbackDataFlagsEXT
    -> DebugUtilsMessengerCallbackDataFlagsEXT)
-> (DebugUtilsMessengerCallbackDataFlagsEXT
    -> DebugUtilsMessengerCallbackDataFlagsEXT
    -> DebugUtilsMessengerCallbackDataFlagsEXT)
-> (DebugUtilsMessengerCallbackDataFlagsEXT
    -> DebugUtilsMessengerCallbackDataFlagsEXT)
-> (DebugUtilsMessengerCallbackDataFlagsEXT
    -> Int -> DebugUtilsMessengerCallbackDataFlagsEXT)
-> (DebugUtilsMessengerCallbackDataFlagsEXT
    -> Int -> DebugUtilsMessengerCallbackDataFlagsEXT)
-> DebugUtilsMessengerCallbackDataFlagsEXT
-> (Int -> DebugUtilsMessengerCallbackDataFlagsEXT)
-> (DebugUtilsMessengerCallbackDataFlagsEXT
    -> Int -> DebugUtilsMessengerCallbackDataFlagsEXT)
-> (DebugUtilsMessengerCallbackDataFlagsEXT
    -> Int -> DebugUtilsMessengerCallbackDataFlagsEXT)
-> (DebugUtilsMessengerCallbackDataFlagsEXT
    -> Int -> DebugUtilsMessengerCallbackDataFlagsEXT)
-> (DebugUtilsMessengerCallbackDataFlagsEXT -> Int -> Bool)
-> (DebugUtilsMessengerCallbackDataFlagsEXT -> Maybe Int)
-> (DebugUtilsMessengerCallbackDataFlagsEXT -> Int)
-> (DebugUtilsMessengerCallbackDataFlagsEXT -> Bool)
-> (DebugUtilsMessengerCallbackDataFlagsEXT
    -> Int -> DebugUtilsMessengerCallbackDataFlagsEXT)
-> (DebugUtilsMessengerCallbackDataFlagsEXT
    -> Int -> DebugUtilsMessengerCallbackDataFlagsEXT)
-> (DebugUtilsMessengerCallbackDataFlagsEXT
    -> Int -> DebugUtilsMessengerCallbackDataFlagsEXT)
-> (DebugUtilsMessengerCallbackDataFlagsEXT
    -> Int -> DebugUtilsMessengerCallbackDataFlagsEXT)
-> (DebugUtilsMessengerCallbackDataFlagsEXT
    -> Int -> DebugUtilsMessengerCallbackDataFlagsEXT)
-> (DebugUtilsMessengerCallbackDataFlagsEXT
    -> Int -> DebugUtilsMessengerCallbackDataFlagsEXT)
-> (DebugUtilsMessengerCallbackDataFlagsEXT -> Int)
-> Bits DebugUtilsMessengerCallbackDataFlagsEXT
Int -> DebugUtilsMessengerCallbackDataFlagsEXT
DebugUtilsMessengerCallbackDataFlagsEXT -> Bool
DebugUtilsMessengerCallbackDataFlagsEXT -> Int
DebugUtilsMessengerCallbackDataFlagsEXT -> Maybe Int
DebugUtilsMessengerCallbackDataFlagsEXT
-> DebugUtilsMessengerCallbackDataFlagsEXT
DebugUtilsMessengerCallbackDataFlagsEXT -> Int -> Bool
DebugUtilsMessengerCallbackDataFlagsEXT
-> Int -> DebugUtilsMessengerCallbackDataFlagsEXT
DebugUtilsMessengerCallbackDataFlagsEXT
-> DebugUtilsMessengerCallbackDataFlagsEXT
-> DebugUtilsMessengerCallbackDataFlagsEXT
forall a.
Eq a
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> a
-> (Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> Bool)
-> (a -> Maybe Int)
-> (a -> Int)
-> (a -> Bool)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int)
-> Bits a
popCount :: DebugUtilsMessengerCallbackDataFlagsEXT -> Int
$cpopCount :: DebugUtilsMessengerCallbackDataFlagsEXT -> Int
rotateR :: DebugUtilsMessengerCallbackDataFlagsEXT
-> Int -> DebugUtilsMessengerCallbackDataFlagsEXT
$crotateR :: DebugUtilsMessengerCallbackDataFlagsEXT
-> Int -> DebugUtilsMessengerCallbackDataFlagsEXT
rotateL :: DebugUtilsMessengerCallbackDataFlagsEXT
-> Int -> DebugUtilsMessengerCallbackDataFlagsEXT
$crotateL :: DebugUtilsMessengerCallbackDataFlagsEXT
-> Int -> DebugUtilsMessengerCallbackDataFlagsEXT
unsafeShiftR :: DebugUtilsMessengerCallbackDataFlagsEXT
-> Int -> DebugUtilsMessengerCallbackDataFlagsEXT
$cunsafeShiftR :: DebugUtilsMessengerCallbackDataFlagsEXT
-> Int -> DebugUtilsMessengerCallbackDataFlagsEXT
shiftR :: DebugUtilsMessengerCallbackDataFlagsEXT
-> Int -> DebugUtilsMessengerCallbackDataFlagsEXT
$cshiftR :: DebugUtilsMessengerCallbackDataFlagsEXT
-> Int -> DebugUtilsMessengerCallbackDataFlagsEXT
unsafeShiftL :: DebugUtilsMessengerCallbackDataFlagsEXT
-> Int -> DebugUtilsMessengerCallbackDataFlagsEXT
$cunsafeShiftL :: DebugUtilsMessengerCallbackDataFlagsEXT
-> Int -> DebugUtilsMessengerCallbackDataFlagsEXT
shiftL :: DebugUtilsMessengerCallbackDataFlagsEXT
-> Int -> DebugUtilsMessengerCallbackDataFlagsEXT
$cshiftL :: DebugUtilsMessengerCallbackDataFlagsEXT
-> Int -> DebugUtilsMessengerCallbackDataFlagsEXT
isSigned :: DebugUtilsMessengerCallbackDataFlagsEXT -> Bool
$cisSigned :: DebugUtilsMessengerCallbackDataFlagsEXT -> Bool
bitSize :: DebugUtilsMessengerCallbackDataFlagsEXT -> Int
$cbitSize :: DebugUtilsMessengerCallbackDataFlagsEXT -> Int
bitSizeMaybe :: DebugUtilsMessengerCallbackDataFlagsEXT -> Maybe Int
$cbitSizeMaybe :: DebugUtilsMessengerCallbackDataFlagsEXT -> Maybe Int
testBit :: DebugUtilsMessengerCallbackDataFlagsEXT -> Int -> Bool
$ctestBit :: DebugUtilsMessengerCallbackDataFlagsEXT -> Int -> Bool
complementBit :: DebugUtilsMessengerCallbackDataFlagsEXT
-> Int -> DebugUtilsMessengerCallbackDataFlagsEXT
$ccomplementBit :: DebugUtilsMessengerCallbackDataFlagsEXT
-> Int -> DebugUtilsMessengerCallbackDataFlagsEXT
clearBit :: DebugUtilsMessengerCallbackDataFlagsEXT
-> Int -> DebugUtilsMessengerCallbackDataFlagsEXT
$cclearBit :: DebugUtilsMessengerCallbackDataFlagsEXT
-> Int -> DebugUtilsMessengerCallbackDataFlagsEXT
setBit :: DebugUtilsMessengerCallbackDataFlagsEXT
-> Int -> DebugUtilsMessengerCallbackDataFlagsEXT
$csetBit :: DebugUtilsMessengerCallbackDataFlagsEXT
-> Int -> DebugUtilsMessengerCallbackDataFlagsEXT
bit :: Int -> DebugUtilsMessengerCallbackDataFlagsEXT
$cbit :: Int -> DebugUtilsMessengerCallbackDataFlagsEXT
zeroBits :: DebugUtilsMessengerCallbackDataFlagsEXT
$czeroBits :: DebugUtilsMessengerCallbackDataFlagsEXT
rotate :: DebugUtilsMessengerCallbackDataFlagsEXT
-> Int -> DebugUtilsMessengerCallbackDataFlagsEXT
$crotate :: DebugUtilsMessengerCallbackDataFlagsEXT
-> Int -> DebugUtilsMessengerCallbackDataFlagsEXT
shift :: DebugUtilsMessengerCallbackDataFlagsEXT
-> Int -> DebugUtilsMessengerCallbackDataFlagsEXT
$cshift :: DebugUtilsMessengerCallbackDataFlagsEXT
-> Int -> DebugUtilsMessengerCallbackDataFlagsEXT
complement :: DebugUtilsMessengerCallbackDataFlagsEXT
-> DebugUtilsMessengerCallbackDataFlagsEXT
$ccomplement :: DebugUtilsMessengerCallbackDataFlagsEXT
-> DebugUtilsMessengerCallbackDataFlagsEXT
xor :: DebugUtilsMessengerCallbackDataFlagsEXT
-> DebugUtilsMessengerCallbackDataFlagsEXT
-> DebugUtilsMessengerCallbackDataFlagsEXT
$cxor :: DebugUtilsMessengerCallbackDataFlagsEXT
-> DebugUtilsMessengerCallbackDataFlagsEXT
-> DebugUtilsMessengerCallbackDataFlagsEXT
.|. :: DebugUtilsMessengerCallbackDataFlagsEXT
-> DebugUtilsMessengerCallbackDataFlagsEXT
-> DebugUtilsMessengerCallbackDataFlagsEXT
$c.|. :: DebugUtilsMessengerCallbackDataFlagsEXT
-> DebugUtilsMessengerCallbackDataFlagsEXT
-> DebugUtilsMessengerCallbackDataFlagsEXT
.&. :: DebugUtilsMessengerCallbackDataFlagsEXT
-> DebugUtilsMessengerCallbackDataFlagsEXT
-> DebugUtilsMessengerCallbackDataFlagsEXT
$c.&. :: DebugUtilsMessengerCallbackDataFlagsEXT
-> DebugUtilsMessengerCallbackDataFlagsEXT
-> DebugUtilsMessengerCallbackDataFlagsEXT
$cp1Bits :: Eq DebugUtilsMessengerCallbackDataFlagsEXT
Bits, Bits DebugUtilsMessengerCallbackDataFlagsEXT
Bits DebugUtilsMessengerCallbackDataFlagsEXT
-> (DebugUtilsMessengerCallbackDataFlagsEXT -> Int)
-> (DebugUtilsMessengerCallbackDataFlagsEXT -> Int)
-> (DebugUtilsMessengerCallbackDataFlagsEXT -> Int)
-> FiniteBits DebugUtilsMessengerCallbackDataFlagsEXT
DebugUtilsMessengerCallbackDataFlagsEXT -> Int
forall b.
Bits b -> (b -> Int) -> (b -> Int) -> (b -> Int) -> FiniteBits b
countTrailingZeros :: DebugUtilsMessengerCallbackDataFlagsEXT -> Int
$ccountTrailingZeros :: DebugUtilsMessengerCallbackDataFlagsEXT -> Int
countLeadingZeros :: DebugUtilsMessengerCallbackDataFlagsEXT -> Int
$ccountLeadingZeros :: DebugUtilsMessengerCallbackDataFlagsEXT -> Int
finiteBitSize :: DebugUtilsMessengerCallbackDataFlagsEXT -> Int
$cfiniteBitSize :: DebugUtilsMessengerCallbackDataFlagsEXT -> Int
$cp1FiniteBits :: Bits DebugUtilsMessengerCallbackDataFlagsEXT
FiniteBits)



conNameDebugUtilsMessengerCallbackDataFlagsEXT :: String
conNameDebugUtilsMessengerCallbackDataFlagsEXT :: String
conNameDebugUtilsMessengerCallbackDataFlagsEXT = String
"DebugUtilsMessengerCallbackDataFlagsEXT"

enumPrefixDebugUtilsMessengerCallbackDataFlagsEXT :: String
enumPrefixDebugUtilsMessengerCallbackDataFlagsEXT :: String
enumPrefixDebugUtilsMessengerCallbackDataFlagsEXT = String
""

showTableDebugUtilsMessengerCallbackDataFlagsEXT :: [(DebugUtilsMessengerCallbackDataFlagsEXT, String)]
showTableDebugUtilsMessengerCallbackDataFlagsEXT :: [(DebugUtilsMessengerCallbackDataFlagsEXT, String)]
showTableDebugUtilsMessengerCallbackDataFlagsEXT = []

instance Show DebugUtilsMessengerCallbackDataFlagsEXT where
  showsPrec :: Int -> DebugUtilsMessengerCallbackDataFlagsEXT -> ShowS
showsPrec = String
-> [(DebugUtilsMessengerCallbackDataFlagsEXT, String)]
-> String
-> (DebugUtilsMessengerCallbackDataFlagsEXT -> Word32)
-> (Word32 -> ShowS)
-> Int
-> DebugUtilsMessengerCallbackDataFlagsEXT
-> ShowS
forall a i.
Eq a =>
String
-> [(a, String)]
-> String
-> (a -> i)
-> (i -> ShowS)
-> Int
-> a
-> ShowS
enumShowsPrec String
enumPrefixDebugUtilsMessengerCallbackDataFlagsEXT
                            [(DebugUtilsMessengerCallbackDataFlagsEXT, String)]
showTableDebugUtilsMessengerCallbackDataFlagsEXT
                            String
conNameDebugUtilsMessengerCallbackDataFlagsEXT
                            (\(DebugUtilsMessengerCallbackDataFlagsEXT Word32
x) -> Word32
x)
                            (\Word32
x -> String -> ShowS
showString String
"0x" ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Word32 -> ShowS
forall a. (Integral a, Show a) => a -> ShowS
showHex Word32
x)

instance Read DebugUtilsMessengerCallbackDataFlagsEXT where
  readPrec :: ReadPrec DebugUtilsMessengerCallbackDataFlagsEXT
readPrec = String
-> [(DebugUtilsMessengerCallbackDataFlagsEXT, String)]
-> String
-> (Word32 -> DebugUtilsMessengerCallbackDataFlagsEXT)
-> ReadPrec DebugUtilsMessengerCallbackDataFlagsEXT
forall i a.
Read i =>
String -> [(a, String)] -> String -> (i -> a) -> ReadPrec a
enumReadPrec String
enumPrefixDebugUtilsMessengerCallbackDataFlagsEXT
                          [(DebugUtilsMessengerCallbackDataFlagsEXT, String)]
showTableDebugUtilsMessengerCallbackDataFlagsEXT
                          String
conNameDebugUtilsMessengerCallbackDataFlagsEXT
                          Word32 -> DebugUtilsMessengerCallbackDataFlagsEXT
DebugUtilsMessengerCallbackDataFlagsEXT


type DebugUtilsMessageSeverityFlagsEXT = DebugUtilsMessageSeverityFlagBitsEXT

-- | 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
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_debug_utils VK_EXT_debug_utils>,
-- 'DebugUtilsMessageSeverityFlagsEXT', 'submitDebugUtilsMessageEXT'
newtype DebugUtilsMessageSeverityFlagBitsEXT = DebugUtilsMessageSeverityFlagBitsEXT Flags
  deriving newtype (DebugUtilsMessageSeverityFlagBitsEXT
-> DebugUtilsMessageSeverityFlagBitsEXT -> Bool
(DebugUtilsMessageSeverityFlagBitsEXT
 -> DebugUtilsMessageSeverityFlagBitsEXT -> Bool)
-> (DebugUtilsMessageSeverityFlagBitsEXT
    -> DebugUtilsMessageSeverityFlagBitsEXT -> Bool)
-> Eq DebugUtilsMessageSeverityFlagBitsEXT
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DebugUtilsMessageSeverityFlagBitsEXT
-> DebugUtilsMessageSeverityFlagBitsEXT -> Bool
$c/= :: DebugUtilsMessageSeverityFlagBitsEXT
-> DebugUtilsMessageSeverityFlagBitsEXT -> Bool
== :: DebugUtilsMessageSeverityFlagBitsEXT
-> DebugUtilsMessageSeverityFlagBitsEXT -> Bool
$c== :: DebugUtilsMessageSeverityFlagBitsEXT
-> DebugUtilsMessageSeverityFlagBitsEXT -> Bool
Eq, Eq DebugUtilsMessageSeverityFlagBitsEXT
Eq DebugUtilsMessageSeverityFlagBitsEXT
-> (DebugUtilsMessageSeverityFlagBitsEXT
    -> DebugUtilsMessageSeverityFlagBitsEXT -> Ordering)
-> (DebugUtilsMessageSeverityFlagBitsEXT
    -> DebugUtilsMessageSeverityFlagBitsEXT -> Bool)
-> (DebugUtilsMessageSeverityFlagBitsEXT
    -> DebugUtilsMessageSeverityFlagBitsEXT -> Bool)
-> (DebugUtilsMessageSeverityFlagBitsEXT
    -> DebugUtilsMessageSeverityFlagBitsEXT -> Bool)
-> (DebugUtilsMessageSeverityFlagBitsEXT
    -> DebugUtilsMessageSeverityFlagBitsEXT -> Bool)
-> (DebugUtilsMessageSeverityFlagBitsEXT
    -> DebugUtilsMessageSeverityFlagBitsEXT
    -> DebugUtilsMessageSeverityFlagBitsEXT)
-> (DebugUtilsMessageSeverityFlagBitsEXT
    -> DebugUtilsMessageSeverityFlagBitsEXT
    -> DebugUtilsMessageSeverityFlagBitsEXT)
-> Ord DebugUtilsMessageSeverityFlagBitsEXT
DebugUtilsMessageSeverityFlagBitsEXT
-> DebugUtilsMessageSeverityFlagBitsEXT -> Bool
DebugUtilsMessageSeverityFlagBitsEXT
-> DebugUtilsMessageSeverityFlagBitsEXT -> Ordering
DebugUtilsMessageSeverityFlagBitsEXT
-> DebugUtilsMessageSeverityFlagBitsEXT
-> DebugUtilsMessageSeverityFlagBitsEXT
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: DebugUtilsMessageSeverityFlagBitsEXT
-> DebugUtilsMessageSeverityFlagBitsEXT
-> DebugUtilsMessageSeverityFlagBitsEXT
$cmin :: DebugUtilsMessageSeverityFlagBitsEXT
-> DebugUtilsMessageSeverityFlagBitsEXT
-> DebugUtilsMessageSeverityFlagBitsEXT
max :: DebugUtilsMessageSeverityFlagBitsEXT
-> DebugUtilsMessageSeverityFlagBitsEXT
-> DebugUtilsMessageSeverityFlagBitsEXT
$cmax :: DebugUtilsMessageSeverityFlagBitsEXT
-> DebugUtilsMessageSeverityFlagBitsEXT
-> DebugUtilsMessageSeverityFlagBitsEXT
>= :: DebugUtilsMessageSeverityFlagBitsEXT
-> DebugUtilsMessageSeverityFlagBitsEXT -> Bool
$c>= :: DebugUtilsMessageSeverityFlagBitsEXT
-> DebugUtilsMessageSeverityFlagBitsEXT -> Bool
> :: DebugUtilsMessageSeverityFlagBitsEXT
-> DebugUtilsMessageSeverityFlagBitsEXT -> Bool
$c> :: DebugUtilsMessageSeverityFlagBitsEXT
-> DebugUtilsMessageSeverityFlagBitsEXT -> Bool
<= :: DebugUtilsMessageSeverityFlagBitsEXT
-> DebugUtilsMessageSeverityFlagBitsEXT -> Bool
$c<= :: DebugUtilsMessageSeverityFlagBitsEXT
-> DebugUtilsMessageSeverityFlagBitsEXT -> Bool
< :: DebugUtilsMessageSeverityFlagBitsEXT
-> DebugUtilsMessageSeverityFlagBitsEXT -> Bool
$c< :: DebugUtilsMessageSeverityFlagBitsEXT
-> DebugUtilsMessageSeverityFlagBitsEXT -> Bool
compare :: DebugUtilsMessageSeverityFlagBitsEXT
-> DebugUtilsMessageSeverityFlagBitsEXT -> Ordering
$ccompare :: DebugUtilsMessageSeverityFlagBitsEXT
-> DebugUtilsMessageSeverityFlagBitsEXT -> Ordering
$cp1Ord :: Eq DebugUtilsMessageSeverityFlagBitsEXT
Ord, Ptr b -> Int -> IO DebugUtilsMessageSeverityFlagBitsEXT
Ptr b -> Int -> DebugUtilsMessageSeverityFlagBitsEXT -> IO ()
Ptr DebugUtilsMessageSeverityFlagBitsEXT
-> IO DebugUtilsMessageSeverityFlagBitsEXT
Ptr DebugUtilsMessageSeverityFlagBitsEXT
-> Int -> IO DebugUtilsMessageSeverityFlagBitsEXT
Ptr DebugUtilsMessageSeverityFlagBitsEXT
-> Int -> DebugUtilsMessageSeverityFlagBitsEXT -> IO ()
Ptr DebugUtilsMessageSeverityFlagBitsEXT
-> DebugUtilsMessageSeverityFlagBitsEXT -> IO ()
DebugUtilsMessageSeverityFlagBitsEXT -> Int
(DebugUtilsMessageSeverityFlagBitsEXT -> Int)
-> (DebugUtilsMessageSeverityFlagBitsEXT -> Int)
-> (Ptr DebugUtilsMessageSeverityFlagBitsEXT
    -> Int -> IO DebugUtilsMessageSeverityFlagBitsEXT)
-> (Ptr DebugUtilsMessageSeverityFlagBitsEXT
    -> Int -> DebugUtilsMessageSeverityFlagBitsEXT -> IO ())
-> (forall b.
    Ptr b -> Int -> IO DebugUtilsMessageSeverityFlagBitsEXT)
-> (forall b.
    Ptr b -> Int -> DebugUtilsMessageSeverityFlagBitsEXT -> IO ())
-> (Ptr DebugUtilsMessageSeverityFlagBitsEXT
    -> IO DebugUtilsMessageSeverityFlagBitsEXT)
-> (Ptr DebugUtilsMessageSeverityFlagBitsEXT
    -> DebugUtilsMessageSeverityFlagBitsEXT -> IO ())
-> Storable DebugUtilsMessageSeverityFlagBitsEXT
forall b. Ptr b -> Int -> IO DebugUtilsMessageSeverityFlagBitsEXT
forall b.
Ptr b -> Int -> DebugUtilsMessageSeverityFlagBitsEXT -> IO ()
forall a.
(a -> Int)
-> (a -> Int)
-> (Ptr a -> Int -> IO a)
-> (Ptr a -> Int -> a -> IO ())
-> (forall b. Ptr b -> Int -> IO a)
-> (forall b. Ptr b -> Int -> a -> IO ())
-> (Ptr a -> IO a)
-> (Ptr a -> a -> IO ())
-> Storable a
poke :: Ptr DebugUtilsMessageSeverityFlagBitsEXT
-> DebugUtilsMessageSeverityFlagBitsEXT -> IO ()
$cpoke :: Ptr DebugUtilsMessageSeverityFlagBitsEXT
-> DebugUtilsMessageSeverityFlagBitsEXT -> IO ()
peek :: Ptr DebugUtilsMessageSeverityFlagBitsEXT
-> IO DebugUtilsMessageSeverityFlagBitsEXT
$cpeek :: Ptr DebugUtilsMessageSeverityFlagBitsEXT
-> IO DebugUtilsMessageSeverityFlagBitsEXT
pokeByteOff :: Ptr b -> Int -> DebugUtilsMessageSeverityFlagBitsEXT -> IO ()
$cpokeByteOff :: forall b.
Ptr b -> Int -> DebugUtilsMessageSeverityFlagBitsEXT -> IO ()
peekByteOff :: Ptr b -> Int -> IO DebugUtilsMessageSeverityFlagBitsEXT
$cpeekByteOff :: forall b. Ptr b -> Int -> IO DebugUtilsMessageSeverityFlagBitsEXT
pokeElemOff :: Ptr DebugUtilsMessageSeverityFlagBitsEXT
-> Int -> DebugUtilsMessageSeverityFlagBitsEXT -> IO ()
$cpokeElemOff :: Ptr DebugUtilsMessageSeverityFlagBitsEXT
-> Int -> DebugUtilsMessageSeverityFlagBitsEXT -> IO ()
peekElemOff :: Ptr DebugUtilsMessageSeverityFlagBitsEXT
-> Int -> IO DebugUtilsMessageSeverityFlagBitsEXT
$cpeekElemOff :: Ptr DebugUtilsMessageSeverityFlagBitsEXT
-> Int -> IO DebugUtilsMessageSeverityFlagBitsEXT
alignment :: DebugUtilsMessageSeverityFlagBitsEXT -> Int
$calignment :: DebugUtilsMessageSeverityFlagBitsEXT -> Int
sizeOf :: DebugUtilsMessageSeverityFlagBitsEXT -> Int
$csizeOf :: DebugUtilsMessageSeverityFlagBitsEXT -> Int
Storable, DebugUtilsMessageSeverityFlagBitsEXT
DebugUtilsMessageSeverityFlagBitsEXT
-> Zero DebugUtilsMessageSeverityFlagBitsEXT
forall a. a -> Zero a
zero :: DebugUtilsMessageSeverityFlagBitsEXT
$czero :: DebugUtilsMessageSeverityFlagBitsEXT
Zero, Eq DebugUtilsMessageSeverityFlagBitsEXT
DebugUtilsMessageSeverityFlagBitsEXT
Eq DebugUtilsMessageSeverityFlagBitsEXT
-> (DebugUtilsMessageSeverityFlagBitsEXT
    -> DebugUtilsMessageSeverityFlagBitsEXT
    -> DebugUtilsMessageSeverityFlagBitsEXT)
-> (DebugUtilsMessageSeverityFlagBitsEXT
    -> DebugUtilsMessageSeverityFlagBitsEXT
    -> DebugUtilsMessageSeverityFlagBitsEXT)
-> (DebugUtilsMessageSeverityFlagBitsEXT
    -> DebugUtilsMessageSeverityFlagBitsEXT
    -> DebugUtilsMessageSeverityFlagBitsEXT)
-> (DebugUtilsMessageSeverityFlagBitsEXT
    -> DebugUtilsMessageSeverityFlagBitsEXT)
-> (DebugUtilsMessageSeverityFlagBitsEXT
    -> Int -> DebugUtilsMessageSeverityFlagBitsEXT)
-> (DebugUtilsMessageSeverityFlagBitsEXT
    -> Int -> DebugUtilsMessageSeverityFlagBitsEXT)
-> DebugUtilsMessageSeverityFlagBitsEXT
-> (Int -> DebugUtilsMessageSeverityFlagBitsEXT)
-> (DebugUtilsMessageSeverityFlagBitsEXT
    -> Int -> DebugUtilsMessageSeverityFlagBitsEXT)
-> (DebugUtilsMessageSeverityFlagBitsEXT
    -> Int -> DebugUtilsMessageSeverityFlagBitsEXT)
-> (DebugUtilsMessageSeverityFlagBitsEXT
    -> Int -> DebugUtilsMessageSeverityFlagBitsEXT)
-> (DebugUtilsMessageSeverityFlagBitsEXT -> Int -> Bool)
-> (DebugUtilsMessageSeverityFlagBitsEXT -> Maybe Int)
-> (DebugUtilsMessageSeverityFlagBitsEXT -> Int)
-> (DebugUtilsMessageSeverityFlagBitsEXT -> Bool)
-> (DebugUtilsMessageSeverityFlagBitsEXT
    -> Int -> DebugUtilsMessageSeverityFlagBitsEXT)
-> (DebugUtilsMessageSeverityFlagBitsEXT
    -> Int -> DebugUtilsMessageSeverityFlagBitsEXT)
-> (DebugUtilsMessageSeverityFlagBitsEXT
    -> Int -> DebugUtilsMessageSeverityFlagBitsEXT)
-> (DebugUtilsMessageSeverityFlagBitsEXT
    -> Int -> DebugUtilsMessageSeverityFlagBitsEXT)
-> (DebugUtilsMessageSeverityFlagBitsEXT
    -> Int -> DebugUtilsMessageSeverityFlagBitsEXT)
-> (DebugUtilsMessageSeverityFlagBitsEXT
    -> Int -> DebugUtilsMessageSeverityFlagBitsEXT)
-> (DebugUtilsMessageSeverityFlagBitsEXT -> Int)
-> Bits DebugUtilsMessageSeverityFlagBitsEXT
Int -> DebugUtilsMessageSeverityFlagBitsEXT
DebugUtilsMessageSeverityFlagBitsEXT -> Bool
DebugUtilsMessageSeverityFlagBitsEXT -> Int
DebugUtilsMessageSeverityFlagBitsEXT -> Maybe Int
DebugUtilsMessageSeverityFlagBitsEXT
-> DebugUtilsMessageSeverityFlagBitsEXT
DebugUtilsMessageSeverityFlagBitsEXT -> Int -> Bool
DebugUtilsMessageSeverityFlagBitsEXT
-> Int -> DebugUtilsMessageSeverityFlagBitsEXT
DebugUtilsMessageSeverityFlagBitsEXT
-> DebugUtilsMessageSeverityFlagBitsEXT
-> DebugUtilsMessageSeverityFlagBitsEXT
forall a.
Eq a
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> a
-> (Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> Bool)
-> (a -> Maybe Int)
-> (a -> Int)
-> (a -> Bool)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int)
-> Bits a
popCount :: DebugUtilsMessageSeverityFlagBitsEXT -> Int
$cpopCount :: DebugUtilsMessageSeverityFlagBitsEXT -> Int
rotateR :: DebugUtilsMessageSeverityFlagBitsEXT
-> Int -> DebugUtilsMessageSeverityFlagBitsEXT
$crotateR :: DebugUtilsMessageSeverityFlagBitsEXT
-> Int -> DebugUtilsMessageSeverityFlagBitsEXT
rotateL :: DebugUtilsMessageSeverityFlagBitsEXT
-> Int -> DebugUtilsMessageSeverityFlagBitsEXT
$crotateL :: DebugUtilsMessageSeverityFlagBitsEXT
-> Int -> DebugUtilsMessageSeverityFlagBitsEXT
unsafeShiftR :: DebugUtilsMessageSeverityFlagBitsEXT
-> Int -> DebugUtilsMessageSeverityFlagBitsEXT
$cunsafeShiftR :: DebugUtilsMessageSeverityFlagBitsEXT
-> Int -> DebugUtilsMessageSeverityFlagBitsEXT
shiftR :: DebugUtilsMessageSeverityFlagBitsEXT
-> Int -> DebugUtilsMessageSeverityFlagBitsEXT
$cshiftR :: DebugUtilsMessageSeverityFlagBitsEXT
-> Int -> DebugUtilsMessageSeverityFlagBitsEXT
unsafeShiftL :: DebugUtilsMessageSeverityFlagBitsEXT
-> Int -> DebugUtilsMessageSeverityFlagBitsEXT
$cunsafeShiftL :: DebugUtilsMessageSeverityFlagBitsEXT
-> Int -> DebugUtilsMessageSeverityFlagBitsEXT
shiftL :: DebugUtilsMessageSeverityFlagBitsEXT
-> Int -> DebugUtilsMessageSeverityFlagBitsEXT
$cshiftL :: DebugUtilsMessageSeverityFlagBitsEXT
-> Int -> DebugUtilsMessageSeverityFlagBitsEXT
isSigned :: DebugUtilsMessageSeverityFlagBitsEXT -> Bool
$cisSigned :: DebugUtilsMessageSeverityFlagBitsEXT -> Bool
bitSize :: DebugUtilsMessageSeverityFlagBitsEXT -> Int
$cbitSize :: DebugUtilsMessageSeverityFlagBitsEXT -> Int
bitSizeMaybe :: DebugUtilsMessageSeverityFlagBitsEXT -> Maybe Int
$cbitSizeMaybe :: DebugUtilsMessageSeverityFlagBitsEXT -> Maybe Int
testBit :: DebugUtilsMessageSeverityFlagBitsEXT -> Int -> Bool
$ctestBit :: DebugUtilsMessageSeverityFlagBitsEXT -> Int -> Bool
complementBit :: DebugUtilsMessageSeverityFlagBitsEXT
-> Int -> DebugUtilsMessageSeverityFlagBitsEXT
$ccomplementBit :: DebugUtilsMessageSeverityFlagBitsEXT
-> Int -> DebugUtilsMessageSeverityFlagBitsEXT
clearBit :: DebugUtilsMessageSeverityFlagBitsEXT
-> Int -> DebugUtilsMessageSeverityFlagBitsEXT
$cclearBit :: DebugUtilsMessageSeverityFlagBitsEXT
-> Int -> DebugUtilsMessageSeverityFlagBitsEXT
setBit :: DebugUtilsMessageSeverityFlagBitsEXT
-> Int -> DebugUtilsMessageSeverityFlagBitsEXT
$csetBit :: DebugUtilsMessageSeverityFlagBitsEXT
-> Int -> DebugUtilsMessageSeverityFlagBitsEXT
bit :: Int -> DebugUtilsMessageSeverityFlagBitsEXT
$cbit :: Int -> DebugUtilsMessageSeverityFlagBitsEXT
zeroBits :: DebugUtilsMessageSeverityFlagBitsEXT
$czeroBits :: DebugUtilsMessageSeverityFlagBitsEXT
rotate :: DebugUtilsMessageSeverityFlagBitsEXT
-> Int -> DebugUtilsMessageSeverityFlagBitsEXT
$crotate :: DebugUtilsMessageSeverityFlagBitsEXT
-> Int -> DebugUtilsMessageSeverityFlagBitsEXT
shift :: DebugUtilsMessageSeverityFlagBitsEXT
-> Int -> DebugUtilsMessageSeverityFlagBitsEXT
$cshift :: DebugUtilsMessageSeverityFlagBitsEXT
-> Int -> DebugUtilsMessageSeverityFlagBitsEXT
complement :: DebugUtilsMessageSeverityFlagBitsEXT
-> DebugUtilsMessageSeverityFlagBitsEXT
$ccomplement :: DebugUtilsMessageSeverityFlagBitsEXT
-> DebugUtilsMessageSeverityFlagBitsEXT
xor :: DebugUtilsMessageSeverityFlagBitsEXT
-> DebugUtilsMessageSeverityFlagBitsEXT
-> DebugUtilsMessageSeverityFlagBitsEXT
$cxor :: DebugUtilsMessageSeverityFlagBitsEXT
-> DebugUtilsMessageSeverityFlagBitsEXT
-> DebugUtilsMessageSeverityFlagBitsEXT
.|. :: DebugUtilsMessageSeverityFlagBitsEXT
-> DebugUtilsMessageSeverityFlagBitsEXT
-> DebugUtilsMessageSeverityFlagBitsEXT
$c.|. :: DebugUtilsMessageSeverityFlagBitsEXT
-> DebugUtilsMessageSeverityFlagBitsEXT
-> DebugUtilsMessageSeverityFlagBitsEXT
.&. :: DebugUtilsMessageSeverityFlagBitsEXT
-> DebugUtilsMessageSeverityFlagBitsEXT
-> DebugUtilsMessageSeverityFlagBitsEXT
$c.&. :: DebugUtilsMessageSeverityFlagBitsEXT
-> DebugUtilsMessageSeverityFlagBitsEXT
-> DebugUtilsMessageSeverityFlagBitsEXT
$cp1Bits :: Eq DebugUtilsMessageSeverityFlagBitsEXT
Bits, Bits DebugUtilsMessageSeverityFlagBitsEXT
Bits DebugUtilsMessageSeverityFlagBitsEXT
-> (DebugUtilsMessageSeverityFlagBitsEXT -> Int)
-> (DebugUtilsMessageSeverityFlagBitsEXT -> Int)
-> (DebugUtilsMessageSeverityFlagBitsEXT -> Int)
-> FiniteBits DebugUtilsMessageSeverityFlagBitsEXT
DebugUtilsMessageSeverityFlagBitsEXT -> Int
forall b.
Bits b -> (b -> Int) -> (b -> Int) -> (b -> Int) -> FiniteBits b
countTrailingZeros :: DebugUtilsMessageSeverityFlagBitsEXT -> Int
$ccountTrailingZeros :: DebugUtilsMessageSeverityFlagBitsEXT -> Int
countLeadingZeros :: DebugUtilsMessageSeverityFlagBitsEXT -> Int
$ccountLeadingZeros :: DebugUtilsMessageSeverityFlagBitsEXT -> Int
finiteBitSize :: DebugUtilsMessageSeverityFlagBitsEXT -> Int
$cfiniteBitSize :: DebugUtilsMessageSeverityFlagBitsEXT -> Int
$cp1FiniteBits :: Bits DebugUtilsMessageSeverityFlagBitsEXT
FiniteBits)

-- | '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 $bDEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT :: DebugUtilsMessageSeverityFlagBitsEXT
$mDEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT :: forall r.
DebugUtilsMessageSeverityFlagBitsEXT
-> (Void# -> r) -> (Void# -> r) -> r
DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT = DebugUtilsMessageSeverityFlagBitsEXT 0x00000001
-- | 'DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT' specifies an informational
-- message such as resource details that may be handy when debugging an
-- application.
pattern $bDEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT :: DebugUtilsMessageSeverityFlagBitsEXT
$mDEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT :: forall r.
DebugUtilsMessageSeverityFlagBitsEXT
-> (Void# -> r) -> (Void# -> r) -> r
DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT    = DebugUtilsMessageSeverityFlagBitsEXT 0x00000010
-- | '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 $bDEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT :: DebugUtilsMessageSeverityFlagBitsEXT
$mDEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT :: forall r.
DebugUtilsMessageSeverityFlagBitsEXT
-> (Void# -> r) -> (Void# -> r) -> r
DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT = DebugUtilsMessageSeverityFlagBitsEXT 0x00000100
-- | 'DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT' specifies that the
-- application has violated a valid usage condition of the specification.
pattern $bDEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT :: DebugUtilsMessageSeverityFlagBitsEXT
$mDEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT :: forall r.
DebugUtilsMessageSeverityFlagBitsEXT
-> (Void# -> r) -> (Void# -> r) -> r
DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT   = DebugUtilsMessageSeverityFlagBitsEXT 0x00001000

conNameDebugUtilsMessageSeverityFlagBitsEXT :: String
conNameDebugUtilsMessageSeverityFlagBitsEXT :: String
conNameDebugUtilsMessageSeverityFlagBitsEXT = String
"DebugUtilsMessageSeverityFlagBitsEXT"

enumPrefixDebugUtilsMessageSeverityFlagBitsEXT :: String
enumPrefixDebugUtilsMessageSeverityFlagBitsEXT :: String
enumPrefixDebugUtilsMessageSeverityFlagBitsEXT = String
"DEBUG_UTILS_MESSAGE_SEVERITY_"

showTableDebugUtilsMessageSeverityFlagBitsEXT :: [(DebugUtilsMessageSeverityFlagBitsEXT, String)]
showTableDebugUtilsMessageSeverityFlagBitsEXT :: [(DebugUtilsMessageSeverityFlagBitsEXT, String)]
showTableDebugUtilsMessageSeverityFlagBitsEXT =
  [ (DebugUtilsMessageSeverityFlagBitsEXT
DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT, String
"VERBOSE_BIT_EXT")
  , (DebugUtilsMessageSeverityFlagBitsEXT
DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT   , String
"INFO_BIT_EXT")
  , (DebugUtilsMessageSeverityFlagBitsEXT
DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT, String
"WARNING_BIT_EXT")
  , (DebugUtilsMessageSeverityFlagBitsEXT
DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT  , String
"ERROR_BIT_EXT")
  ]

instance Show DebugUtilsMessageSeverityFlagBitsEXT where
  showsPrec :: Int -> DebugUtilsMessageSeverityFlagBitsEXT -> ShowS
showsPrec = String
-> [(DebugUtilsMessageSeverityFlagBitsEXT, String)]
-> String
-> (DebugUtilsMessageSeverityFlagBitsEXT -> Word32)
-> (Word32 -> ShowS)
-> Int
-> DebugUtilsMessageSeverityFlagBitsEXT
-> ShowS
forall a i.
Eq a =>
String
-> [(a, String)]
-> String
-> (a -> i)
-> (i -> ShowS)
-> Int
-> a
-> ShowS
enumShowsPrec String
enumPrefixDebugUtilsMessageSeverityFlagBitsEXT
                            [(DebugUtilsMessageSeverityFlagBitsEXT, String)]
showTableDebugUtilsMessageSeverityFlagBitsEXT
                            String
conNameDebugUtilsMessageSeverityFlagBitsEXT
                            (\(DebugUtilsMessageSeverityFlagBitsEXT Word32
x) -> Word32
x)
                            (\Word32
x -> String -> ShowS
showString String
"0x" ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Word32 -> ShowS
forall a. (Integral a, Show a) => a -> ShowS
showHex Word32
x)

instance Read DebugUtilsMessageSeverityFlagBitsEXT where
  readPrec :: ReadPrec DebugUtilsMessageSeverityFlagBitsEXT
readPrec = String
-> [(DebugUtilsMessageSeverityFlagBitsEXT, String)]
-> String
-> (Word32 -> DebugUtilsMessageSeverityFlagBitsEXT)
-> ReadPrec DebugUtilsMessageSeverityFlagBitsEXT
forall i a.
Read i =>
String -> [(a, String)] -> String -> (i -> a) -> ReadPrec a
enumReadPrec String
enumPrefixDebugUtilsMessageSeverityFlagBitsEXT
                          [(DebugUtilsMessageSeverityFlagBitsEXT, String)]
showTableDebugUtilsMessageSeverityFlagBitsEXT
                          String
conNameDebugUtilsMessageSeverityFlagBitsEXT
                          Word32 -> DebugUtilsMessageSeverityFlagBitsEXT
DebugUtilsMessageSeverityFlagBitsEXT


type DebugUtilsMessageTypeFlagsEXT = DebugUtilsMessageTypeFlagBitsEXT

-- | VkDebugUtilsMessageTypeFlagBitsEXT - Bitmask specifying which types of
-- events cause a debug messenger callback
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_debug_utils VK_EXT_debug_utils>,
-- 'DebugUtilsMessageTypeFlagsEXT'
newtype DebugUtilsMessageTypeFlagBitsEXT = DebugUtilsMessageTypeFlagBitsEXT Flags
  deriving newtype (("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT) -> Bool
(("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
 -> ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT) -> Bool)
-> (("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
    -> ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT) -> Bool)
-> Eq ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT) -> Bool
$c/= :: ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT) -> Bool
== :: ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT) -> Bool
$c== :: ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT) -> Bool
Eq, Eq ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
Eq ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> (("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
    -> ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT) -> Ordering)
-> (("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
    -> ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT) -> Bool)
-> (("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
    -> ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT) -> Bool)
-> (("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
    -> ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT) -> Bool)
-> (("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
    -> ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT) -> Bool)
-> (("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
    -> ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
    -> "messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> (("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
    -> ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
    -> "messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> Ord ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT) -> Bool
("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT) -> Ordering
("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> "messageTypes" ::: DebugUtilsMessageTypeFlagsEXT
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> "messageTypes" ::: DebugUtilsMessageTypeFlagsEXT
$cmin :: ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> "messageTypes" ::: DebugUtilsMessageTypeFlagsEXT
max :: ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> "messageTypes" ::: DebugUtilsMessageTypeFlagsEXT
$cmax :: ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> "messageTypes" ::: DebugUtilsMessageTypeFlagsEXT
>= :: ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT) -> Bool
$c>= :: ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT) -> Bool
> :: ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT) -> Bool
$c> :: ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT) -> Bool
<= :: ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT) -> Bool
$c<= :: ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT) -> Bool
< :: ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT) -> Bool
$c< :: ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT) -> Bool
compare :: ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT) -> Ordering
$ccompare :: ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT) -> Ordering
$cp1Ord :: Eq ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
Ord, Ptr b
-> Int -> IO ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
Ptr b
-> Int
-> ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> IO ()
Ptr ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> IO ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
Ptr ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> Int -> IO ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
Ptr ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> Int
-> ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> IO ()
Ptr ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT) -> IO ()
("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT) -> Int
(("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT) -> Int)
-> (("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT) -> Int)
-> (Ptr ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
    -> Int -> IO ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT))
-> (Ptr ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
    -> Int
    -> ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
    -> IO ())
-> (forall b.
    Ptr b
    -> Int -> IO ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT))
-> (forall b.
    Ptr b
    -> Int
    -> ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
    -> IO ())
-> (Ptr ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
    -> IO ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT))
-> (Ptr ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
    -> ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT) -> IO ())
-> Storable ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
forall b.
Ptr b
-> Int -> IO ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
forall b.
Ptr b
-> Int
-> ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> IO ()
forall a.
(a -> Int)
-> (a -> Int)
-> (Ptr a -> Int -> IO a)
-> (Ptr a -> Int -> a -> IO ())
-> (forall b. Ptr b -> Int -> IO a)
-> (forall b. Ptr b -> Int -> a -> IO ())
-> (Ptr a -> IO a)
-> (Ptr a -> a -> IO ())
-> Storable a
poke :: Ptr ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT) -> IO ()
$cpoke :: Ptr ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT) -> IO ()
peek :: Ptr ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> IO ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
$cpeek :: Ptr ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> IO ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
pokeByteOff :: Ptr b
-> Int
-> ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> IO ()
$cpokeByteOff :: forall b.
Ptr b
-> Int
-> ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> IO ()
peekByteOff :: Ptr b
-> Int -> IO ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
$cpeekByteOff :: forall b.
Ptr b
-> Int -> IO ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
pokeElemOff :: Ptr ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> Int
-> ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> IO ()
$cpokeElemOff :: Ptr ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> Int
-> ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> IO ()
peekElemOff :: Ptr ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> Int -> IO ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
$cpeekElemOff :: Ptr ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> Int -> IO ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
alignment :: ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT) -> Int
$calignment :: ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT) -> Int
sizeOf :: ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT) -> Int
$csizeOf :: ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT) -> Int
Storable, "messageTypes" ::: DebugUtilsMessageTypeFlagsEXT
("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> Zero ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
forall a. a -> Zero a
zero :: "messageTypes" ::: DebugUtilsMessageTypeFlagsEXT
$czero :: "messageTypes" ::: DebugUtilsMessageTypeFlagsEXT
Zero, Eq ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
"messageTypes" ::: DebugUtilsMessageTypeFlagsEXT
Eq ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> (("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
    -> ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
    -> "messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> (("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
    -> ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
    -> "messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> (("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
    -> ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
    -> "messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> (("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
    -> "messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> (("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
    -> Int -> "messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> (("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
    -> Int -> "messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> (Int -> "messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> (("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
    -> Int -> "messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> (("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
    -> Int -> "messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> (("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
    -> Int -> "messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> (("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
    -> Int -> Bool)
-> (("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
    -> Maybe Int)
-> (("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT) -> Int)
-> (("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT) -> Bool)
-> (("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
    -> Int -> "messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> (("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
    -> Int -> "messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> (("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
    -> Int -> "messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> (("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
    -> Int -> "messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> (("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
    -> Int -> "messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> (("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
    -> Int -> "messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> (("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT) -> Int)
-> Bits ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
Int -> "messageTypes" ::: DebugUtilsMessageTypeFlagsEXT
("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT) -> Bool
("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT) -> Int
("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT) -> Maybe Int
("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> "messageTypes" ::: DebugUtilsMessageTypeFlagsEXT
("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT) -> Int -> Bool
("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> Int -> "messageTypes" ::: DebugUtilsMessageTypeFlagsEXT
("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> "messageTypes" ::: DebugUtilsMessageTypeFlagsEXT
forall a.
Eq a
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> a
-> (Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> Bool)
-> (a -> Maybe Int)
-> (a -> Int)
-> (a -> Bool)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int)
-> Bits a
popCount :: ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT) -> Int
$cpopCount :: ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT) -> Int
rotateR :: ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> Int -> "messageTypes" ::: DebugUtilsMessageTypeFlagsEXT
$crotateR :: ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> Int -> "messageTypes" ::: DebugUtilsMessageTypeFlagsEXT
rotateL :: ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> Int -> "messageTypes" ::: DebugUtilsMessageTypeFlagsEXT
$crotateL :: ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> Int -> "messageTypes" ::: DebugUtilsMessageTypeFlagsEXT
unsafeShiftR :: ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> Int -> "messageTypes" ::: DebugUtilsMessageTypeFlagsEXT
$cunsafeShiftR :: ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> Int -> "messageTypes" ::: DebugUtilsMessageTypeFlagsEXT
shiftR :: ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> Int -> "messageTypes" ::: DebugUtilsMessageTypeFlagsEXT
$cshiftR :: ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> Int -> "messageTypes" ::: DebugUtilsMessageTypeFlagsEXT
unsafeShiftL :: ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> Int -> "messageTypes" ::: DebugUtilsMessageTypeFlagsEXT
$cunsafeShiftL :: ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> Int -> "messageTypes" ::: DebugUtilsMessageTypeFlagsEXT
shiftL :: ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> Int -> "messageTypes" ::: DebugUtilsMessageTypeFlagsEXT
$cshiftL :: ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> Int -> "messageTypes" ::: DebugUtilsMessageTypeFlagsEXT
isSigned :: ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT) -> Bool
$cisSigned :: ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT) -> Bool
bitSize :: ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT) -> Int
$cbitSize :: ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT) -> Int
bitSizeMaybe :: ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT) -> Maybe Int
$cbitSizeMaybe :: ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT) -> Maybe Int
testBit :: ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT) -> Int -> Bool
$ctestBit :: ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT) -> Int -> Bool
complementBit :: ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> Int -> "messageTypes" ::: DebugUtilsMessageTypeFlagsEXT
$ccomplementBit :: ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> Int -> "messageTypes" ::: DebugUtilsMessageTypeFlagsEXT
clearBit :: ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> Int -> "messageTypes" ::: DebugUtilsMessageTypeFlagsEXT
$cclearBit :: ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> Int -> "messageTypes" ::: DebugUtilsMessageTypeFlagsEXT
setBit :: ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> Int -> "messageTypes" ::: DebugUtilsMessageTypeFlagsEXT
$csetBit :: ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> Int -> "messageTypes" ::: DebugUtilsMessageTypeFlagsEXT
bit :: Int -> "messageTypes" ::: DebugUtilsMessageTypeFlagsEXT
$cbit :: Int -> "messageTypes" ::: DebugUtilsMessageTypeFlagsEXT
zeroBits :: "messageTypes" ::: DebugUtilsMessageTypeFlagsEXT
$czeroBits :: "messageTypes" ::: DebugUtilsMessageTypeFlagsEXT
rotate :: ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> Int -> "messageTypes" ::: DebugUtilsMessageTypeFlagsEXT
$crotate :: ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> Int -> "messageTypes" ::: DebugUtilsMessageTypeFlagsEXT
shift :: ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> Int -> "messageTypes" ::: DebugUtilsMessageTypeFlagsEXT
$cshift :: ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> Int -> "messageTypes" ::: DebugUtilsMessageTypeFlagsEXT
complement :: ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> "messageTypes" ::: DebugUtilsMessageTypeFlagsEXT
$ccomplement :: ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> "messageTypes" ::: DebugUtilsMessageTypeFlagsEXT
xor :: ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> "messageTypes" ::: DebugUtilsMessageTypeFlagsEXT
$cxor :: ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> "messageTypes" ::: DebugUtilsMessageTypeFlagsEXT
.|. :: ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> "messageTypes" ::: DebugUtilsMessageTypeFlagsEXT
$c.|. :: ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> "messageTypes" ::: DebugUtilsMessageTypeFlagsEXT
.&. :: ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> "messageTypes" ::: DebugUtilsMessageTypeFlagsEXT
$c.&. :: ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> "messageTypes" ::: DebugUtilsMessageTypeFlagsEXT
$cp1Bits :: Eq ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
Bits, Bits ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
Bits ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> (("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT) -> Int)
-> (("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT) -> Int)
-> (("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT) -> Int)
-> FiniteBits ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT) -> Int
forall b.
Bits b -> (b -> Int) -> (b -> Int) -> (b -> Int) -> FiniteBits b
countTrailingZeros :: ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT) -> Int
$ccountTrailingZeros :: ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT) -> Int
countLeadingZeros :: ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT) -> Int
$ccountLeadingZeros :: ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT) -> Int
finiteBitSize :: ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT) -> Int
$cfiniteBitSize :: ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT) -> Int
$cp1FiniteBits :: Bits ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
FiniteBits)

-- | 'DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT' specifies that some general
-- event has occurred. This is typically a non-specification,
-- non-performance event.
pattern $bDEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT :: "messageTypes" ::: DebugUtilsMessageTypeFlagsEXT
$mDEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT :: forall r.
("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> (Void# -> r) -> (Void# -> r) -> r
DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT     = DebugUtilsMessageTypeFlagBitsEXT 0x00000001
-- | 'DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT' specifies that something
-- has occurred during validation against the Vulkan specification that may
-- indicate invalid behavior.
pattern $bDEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT :: "messageTypes" ::: DebugUtilsMessageTypeFlagsEXT
$mDEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT :: forall r.
("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> (Void# -> r) -> (Void# -> r) -> r
DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT  = DebugUtilsMessageTypeFlagBitsEXT 0x00000002
-- | 'DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT' specifies a potentially
-- non-optimal use of Vulkan, e.g. using
-- 'Vulkan.Core10.CommandBufferBuilding.cmdClearColorImage' when setting
-- 'Vulkan.Core10.Pass.AttachmentDescription'::@loadOp@ to
-- 'Vulkan.Core10.Enums.AttachmentLoadOp.ATTACHMENT_LOAD_OP_CLEAR' would
-- have worked.
pattern $bDEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT :: "messageTypes" ::: DebugUtilsMessageTypeFlagsEXT
$mDEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT :: forall r.
("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> (Void# -> r) -> (Void# -> r) -> r
DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT = DebugUtilsMessageTypeFlagBitsEXT 0x00000004

conNameDebugUtilsMessageTypeFlagBitsEXT :: String
conNameDebugUtilsMessageTypeFlagBitsEXT :: String
conNameDebugUtilsMessageTypeFlagBitsEXT = String
"DebugUtilsMessageTypeFlagBitsEXT"

enumPrefixDebugUtilsMessageTypeFlagBitsEXT :: String
enumPrefixDebugUtilsMessageTypeFlagBitsEXT :: String
enumPrefixDebugUtilsMessageTypeFlagBitsEXT = String
"DEBUG_UTILS_MESSAGE_TYPE_"

showTableDebugUtilsMessageTypeFlagBitsEXT :: [(DebugUtilsMessageTypeFlagBitsEXT, String)]
showTableDebugUtilsMessageTypeFlagBitsEXT :: [("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT, String)]
showTableDebugUtilsMessageTypeFlagBitsEXT =
  [ ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT
DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT    , String
"GENERAL_BIT_EXT")
  , ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT
DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT , String
"VALIDATION_BIT_EXT")
  , ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT
DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT, String
"PERFORMANCE_BIT_EXT")
  ]

instance Show DebugUtilsMessageTypeFlagBitsEXT where
  showsPrec :: Int -> ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT) -> ShowS
showsPrec = String
-> [("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT, String)]
-> String
-> (("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT) -> Word32)
-> (Word32 -> ShowS)
-> Int
-> ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> ShowS
forall a i.
Eq a =>
String
-> [(a, String)]
-> String
-> (a -> i)
-> (i -> ShowS)
-> Int
-> a
-> ShowS
enumShowsPrec String
enumPrefixDebugUtilsMessageTypeFlagBitsEXT
                            [("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT, String)]
showTableDebugUtilsMessageTypeFlagBitsEXT
                            String
conNameDebugUtilsMessageTypeFlagBitsEXT
                            (\(DebugUtilsMessageTypeFlagBitsEXT Word32
x) -> Word32
x)
                            (\Word32
x -> String -> ShowS
showString String
"0x" ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Word32 -> ShowS
forall a. (Integral a, Show a) => a -> ShowS
showHex Word32
x)

instance Read DebugUtilsMessageTypeFlagBitsEXT where
  readPrec :: ReadPrec ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
readPrec = String
-> [("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT, String)]
-> String
-> (Word32 -> "messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
-> ReadPrec ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT)
forall i a.
Read i =>
String -> [(a, String)] -> String -> (i -> a) -> ReadPrec a
enumReadPrec String
enumPrefixDebugUtilsMessageTypeFlagBitsEXT
                          [("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT, String)]
showTableDebugUtilsMessageTypeFlagBitsEXT
                          String
conNameDebugUtilsMessageTypeFlagBitsEXT
                          Word32 -> "messageTypes" ::: DebugUtilsMessageTypeFlagsEXT
DebugUtilsMessageTypeFlagBitsEXT


type FN_vkDebugUtilsMessengerCallbackEXT = DebugUtilsMessageSeverityFlagBitsEXT -> ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT) -> ("pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT) -> ("pUserData" ::: Ptr ()) -> IO Bool32
-- | PFN_vkDebugUtilsMessengerCallbackEXT - Application-defined debug
-- messenger callback function
--
-- = Description
--
-- The callback returns a 'Vulkan.Core10.FundamentalTypes.Bool32', which is
-- interpreted in a layer-specified manner. The application /should/ always
-- return 'Vulkan.Core10.FundamentalTypes.FALSE'. The
-- 'Vulkan.Core10.FundamentalTypes.TRUE' value is reserved for use in layer
-- development.
--
-- == Valid Usage
--
-- -   #VUID-PFN_vkDebugUtilsMessengerCallbackEXT-None-04769# The callback
--     /must/ not make calls to any Vulkan commands
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_debug_utils VK_EXT_debug_utils>,
-- 'DebugUtilsMessengerCreateInfoEXT'
type PFN_vkDebugUtilsMessengerCallbackEXT = FunPtr FN_vkDebugUtilsMessengerCallbackEXT


type EXT_DEBUG_UTILS_SPEC_VERSION = 2

-- No documentation found for TopLevel "VK_EXT_DEBUG_UTILS_SPEC_VERSION"
pattern EXT_DEBUG_UTILS_SPEC_VERSION :: forall a . Integral a => a
pattern $bEXT_DEBUG_UTILS_SPEC_VERSION :: a
$mEXT_DEBUG_UTILS_SPEC_VERSION :: forall r a. Integral a => a -> (Void# -> r) -> (Void# -> r) -> r
EXT_DEBUG_UTILS_SPEC_VERSION = 2


type EXT_DEBUG_UTILS_EXTENSION_NAME = "VK_EXT_debug_utils"

-- No documentation found for TopLevel "VK_EXT_DEBUG_UTILS_EXTENSION_NAME"
pattern EXT_DEBUG_UTILS_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
pattern $bEXT_DEBUG_UTILS_EXTENSION_NAME :: a
$mEXT_DEBUG_UTILS_EXTENSION_NAME :: forall r a.
(Eq a, IsString a) =>
a -> (Void# -> r) -> (Void# -> r) -> r
EXT_DEBUG_UTILS_EXTENSION_NAME = "VK_EXT_debug_utils"