content: module Vulkan.Utils.Debug
    ( debugCallbackPtr
    , debugCallbackFatalPtr
    , nameObject
    ) where
  
  import           Control.Monad.IO.Class
  import           Data.ByteString
  
  import           Vulkan.Core10
  import           Vulkan.Extensions.VK_EXT_debug_utils
  
  -- | A debug callback which prints the message prefixed with "Validation: " to
  -- stderr.
  foreign import ccall unsafe "DebugCallback.c &debugCallback"
    debugCallbackPtr :: PFN_vkDebugUtilsMessengerCallbackEXT
  
  -- | A debug callback the same as 'debugCallbackPtr' except it will call
  -- @abort@ when @VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT@ is set.
  foreign import ccall unsafe "DebugCallback.c &debugCallbackFatal"
    debugCallbackFatalPtr :: PFN_vkDebugUtilsMessengerCallbackEXT
  
  -- | Assign a name to a handle using 'setDebugUtilsObjectNameEXT', note that
  -- the @VK_EXT_debug_utils@ extension must be enabled.
  nameObject :: (HasObjectType a, MonadIO m) => Device -> a -> ByteString -> m ()
  nameObject device object name = setDebugUtilsObjectNameEXT
    device
    (uncurry DebugUtilsObjectNameInfoEXT (objectTypeAndHandle object) (Just name))
  