{-# language CPP #-}
-- | = Name
--
-- VK_LUNARG_direct_driver_loading - instance extension
--
-- == VK_LUNARG_direct_driver_loading
--
-- [__Name String__]
--     @VK_LUNARG_direct_driver_loading@
--
-- [__Extension Type__]
--     Instance extension
--
-- [__Registered Extension Number__]
--     460
--
-- [__Revision__]
--     1
--
-- [__Ratification Status__]
--     Not ratified
--
-- [__Extension and Version Dependencies__]
--     None
--
-- [__Contact__]
--
--     -   Charles Giessen
--         <https://github.com/KhronosGroup/Vulkan-Docs/issues/new?body=[VK_LUNARG_direct_driver_loading] @charles-lunarg%0A*Here describe the issue or question you have about the VK_LUNARG_direct_driver_loading extension* >
--
-- [__Extension Proposal__]
--     <https://github.com/KhronosGroup/Vulkan-Docs/tree/main/proposals/VK_LUNARG_direct_driver_loading.adoc VK_LUNARG_direct_driver_loading>
--
-- == Other Extension Metadata
--
-- [__Last Modified Date__]
--     2022-11-29
--
-- [__Contributors__]
--
--     -   Charles Giessen, LunarG
--
-- == Description
--
-- This extension provides a mechanism for applications to add drivers to
-- the implementation. This allows drivers to be included with an
-- application without requiring installation and is capable of being used
-- in any execution environment, such as a process running with elevated
-- privileges.
--
-- == New Structures
--
-- -   'DirectDriverLoadingInfoLUNARG'
--
-- -   Extending 'Vulkan.Core10.DeviceInitialization.InstanceCreateInfo':
--
--     -   'DirectDriverLoadingListLUNARG'
--
-- == New Function Pointers
--
-- -   'PFN_vkGetInstanceProcAddrLUNARG'
--
-- == New Enums
--
-- -   'DirectDriverLoadingModeLUNARG'
--
-- == New Bitmasks
--
-- -   'DirectDriverLoadingFlagsLUNARG'
--
-- == New Enum Constants
--
-- -   'LUNARG_DIRECT_DRIVER_LOADING_EXTENSION_NAME'
--
-- -   'LUNARG_DIRECT_DRIVER_LOADING_SPEC_VERSION'
--
-- -   Extending 'Vulkan.Core10.Enums.StructureType.StructureType':
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DIRECT_DRIVER_LOADING_INFO_LUNARG'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DIRECT_DRIVER_LOADING_LIST_LUNARG'
--
-- == Version History
--
-- -   Revision 1, 2022-11-29 (Charles Giessen)
--
--     -   Initial version
--
-- == See Also
--
-- 'PFN_vkGetInstanceProcAddrLUNARG', 'DirectDriverLoadingFlagsLUNARG',
-- 'DirectDriverLoadingInfoLUNARG', 'DirectDriverLoadingListLUNARG',
-- 'DirectDriverLoadingModeLUNARG'
--
-- == Document Notes
--
-- For more information, see the
-- <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#VK_LUNARG_direct_driver_loading Vulkan Specification>
--
-- This page is a generated document. Fixes and changes should be made to
-- the generator scripts, not directly.
module Vulkan.Extensions.VK_LUNARG_direct_driver_loading  ( DirectDriverLoadingInfoLUNARG(..)
                                                          , DirectDriverLoadingListLUNARG(..)
                                                          , DirectDriverLoadingFlagsLUNARG(..)
                                                          , DirectDriverLoadingModeLUNARG( DIRECT_DRIVER_LOADING_MODE_EXCLUSIVE_LUNARG
                                                                                         , DIRECT_DRIVER_LOADING_MODE_INCLUSIVE_LUNARG
                                                                                         , ..
                                                                                         )
                                                          , PFN_vkGetInstanceProcAddrLUNARG
                                                          , FN_vkGetInstanceProcAddrLUNARG
                                                          , LUNARG_DIRECT_DRIVER_LOADING_SPEC_VERSION
                                                          , pattern LUNARG_DIRECT_DRIVER_LOADING_SPEC_VERSION
                                                          , LUNARG_DIRECT_DRIVER_LOADING_EXTENSION_NAME
                                                          , pattern LUNARG_DIRECT_DRIVER_LOADING_EXTENSION_NAME
                                                          ) where

import Data.Bits (Bits)
import Data.Bits (FiniteBits)
import Vulkan.Internal.Utils (enumReadPrec)
import Vulkan.Internal.Utils (enumShowsPrec)
import Foreign.Marshal.Alloc (allocaBytes)
import Foreign.Ptr (nullPtr)
import Foreign.Ptr (plusPtr)
import GHC.Show (showString)
import GHC.Show (showsPrec)
import Numeric (showHex)
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 Data.String (IsString)
import Data.Typeable (Typeable)
import Foreign.C.Types (CChar)
import Foreign.Storable (Storable)
import Foreign.Storable (Storable(peek))
import Foreign.Storable (Storable(poke))
import qualified Foreign.Storable (Storable(..))
import GHC.Generics (Generic)
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.Kind (Type)
import Control.Monad.Trans.Cont (ContT(..))
import Data.Vector (Vector)
import Vulkan.CStruct.Utils (advancePtrBytes)
import Vulkan.NamedType ((:::))
import Vulkan.Core10.FundamentalTypes (Flags)
import Vulkan.Core10.Handles (Instance_T)
import Vulkan.Core10.FuncPointers (PFN_vkVoidFunction)
import Vulkan.Core10.Enums.StructureType (StructureType)
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DIRECT_DRIVER_LOADING_INFO_LUNARG))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DIRECT_DRIVER_LOADING_LIST_LUNARG))
-- | VkDirectDriverLoadingInfoLUNARG - Structure specifying the information
-- required to load an additional driver
--
-- == Valid Usage (Implicit)
--
-- = See Also
--
-- 'PFN_vkGetInstanceProcAddrLUNARG',
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_LUNARG_direct_driver_loading VK_LUNARG_direct_driver_loading>,
-- 'DirectDriverLoadingFlagsLUNARG', 'DirectDriverLoadingListLUNARG',
-- 'Vulkan.Core10.Enums.StructureType.StructureType'
data DirectDriverLoadingInfoLUNARG = DirectDriverLoadingInfoLUNARG
  { -- | @flags@ is reserved for future use.
    --
    -- #VUID-VkDirectDriverLoadingInfoLUNARG-flags-zerobitmask# @flags@ /must/
    -- be @0@
    DirectDriverLoadingInfoLUNARG -> DirectDriverLoadingFlagsLUNARG
flags :: DirectDriverLoadingFlagsLUNARG
  , -- | @pfnGetInstanceProcAddr@ is a 'PFN_vkGetInstanceProcAddrLUNARG' pointer
    -- to the driver 'Vulkan.Core10.DeviceInitialization.getInstanceProcAddr'
    -- function.
    DirectDriverLoadingInfoLUNARG -> PFN_vkGetInstanceProcAddrLUNARG
pfnGetInstanceProcAddr :: PFN_vkGetInstanceProcAddrLUNARG
  }
  deriving (Typeable, DirectDriverLoadingInfoLUNARG
-> DirectDriverLoadingInfoLUNARG -> Bool
(DirectDriverLoadingInfoLUNARG
 -> DirectDriverLoadingInfoLUNARG -> Bool)
-> (DirectDriverLoadingInfoLUNARG
    -> DirectDriverLoadingInfoLUNARG -> Bool)
-> Eq DirectDriverLoadingInfoLUNARG
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: DirectDriverLoadingInfoLUNARG
-> DirectDriverLoadingInfoLUNARG -> Bool
== :: DirectDriverLoadingInfoLUNARG
-> DirectDriverLoadingInfoLUNARG -> Bool
$c/= :: DirectDriverLoadingInfoLUNARG
-> DirectDriverLoadingInfoLUNARG -> Bool
/= :: DirectDriverLoadingInfoLUNARG
-> DirectDriverLoadingInfoLUNARG -> Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (DirectDriverLoadingInfoLUNARG)
#endif
deriving instance Show DirectDriverLoadingInfoLUNARG

instance ToCStruct DirectDriverLoadingInfoLUNARG where
  withCStruct :: forall b.
DirectDriverLoadingInfoLUNARG
-> (Ptr DirectDriverLoadingInfoLUNARG -> IO b) -> IO b
withCStruct DirectDriverLoadingInfoLUNARG
x Ptr DirectDriverLoadingInfoLUNARG -> IO b
f = Int -> (Ptr DirectDriverLoadingInfoLUNARG -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
32 ((Ptr DirectDriverLoadingInfoLUNARG -> IO b) -> IO b)
-> (Ptr DirectDriverLoadingInfoLUNARG -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr DirectDriverLoadingInfoLUNARG
p -> Ptr DirectDriverLoadingInfoLUNARG
-> DirectDriverLoadingInfoLUNARG -> IO b -> IO b
forall b.
Ptr DirectDriverLoadingInfoLUNARG
-> DirectDriverLoadingInfoLUNARG -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr DirectDriverLoadingInfoLUNARG
p DirectDriverLoadingInfoLUNARG
x (Ptr DirectDriverLoadingInfoLUNARG -> IO b
f Ptr DirectDriverLoadingInfoLUNARG
p)
  pokeCStruct :: forall b.
Ptr DirectDriverLoadingInfoLUNARG
-> DirectDriverLoadingInfoLUNARG -> IO b -> IO b
pokeCStruct Ptr DirectDriverLoadingInfoLUNARG
p DirectDriverLoadingInfoLUNARG{PFN_vkGetInstanceProcAddrLUNARG
DirectDriverLoadingFlagsLUNARG
$sel:flags:DirectDriverLoadingInfoLUNARG :: DirectDriverLoadingInfoLUNARG -> DirectDriverLoadingFlagsLUNARG
$sel:pfnGetInstanceProcAddr:DirectDriverLoadingInfoLUNARG :: DirectDriverLoadingInfoLUNARG -> PFN_vkGetInstanceProcAddrLUNARG
flags :: DirectDriverLoadingFlagsLUNARG
pfnGetInstanceProcAddr :: PFN_vkGetInstanceProcAddrLUNARG
..} IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DirectDriverLoadingInfoLUNARG
p Ptr DirectDriverLoadingInfoLUNARG -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_DIRECT_DRIVER_LOADING_INFO_LUNARG)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DirectDriverLoadingInfoLUNARG
p Ptr DirectDriverLoadingInfoLUNARG -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr DirectDriverLoadingFlagsLUNARG
-> DirectDriverLoadingFlagsLUNARG -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DirectDriverLoadingInfoLUNARG
p Ptr DirectDriverLoadingInfoLUNARG
-> Int -> Ptr DirectDriverLoadingFlagsLUNARG
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr DirectDriverLoadingFlagsLUNARG)) (DirectDriverLoadingFlagsLUNARG
flags)
    Ptr PFN_vkGetInstanceProcAddrLUNARG
-> PFN_vkGetInstanceProcAddrLUNARG -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DirectDriverLoadingInfoLUNARG
p Ptr DirectDriverLoadingInfoLUNARG
-> Int -> Ptr PFN_vkGetInstanceProcAddrLUNARG
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr PFN_vkGetInstanceProcAddrLUNARG)) (PFN_vkGetInstanceProcAddrLUNARG
pfnGetInstanceProcAddr)
    IO b
f
  cStructSize :: Int
cStructSize = Int
32
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: forall b. Ptr DirectDriverLoadingInfoLUNARG -> IO b -> IO b
pokeZeroCStruct Ptr DirectDriverLoadingInfoLUNARG
p IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DirectDriverLoadingInfoLUNARG
p Ptr DirectDriverLoadingInfoLUNARG -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_DIRECT_DRIVER_LOADING_INFO_LUNARG)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DirectDriverLoadingInfoLUNARG
p Ptr DirectDriverLoadingInfoLUNARG -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr DirectDriverLoadingFlagsLUNARG
-> DirectDriverLoadingFlagsLUNARG -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DirectDriverLoadingInfoLUNARG
p Ptr DirectDriverLoadingInfoLUNARG
-> Int -> Ptr DirectDriverLoadingFlagsLUNARG
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr DirectDriverLoadingFlagsLUNARG)) (DirectDriverLoadingFlagsLUNARG
forall a. Zero a => a
zero)
    Ptr PFN_vkGetInstanceProcAddrLUNARG
-> PFN_vkGetInstanceProcAddrLUNARG -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DirectDriverLoadingInfoLUNARG
p Ptr DirectDriverLoadingInfoLUNARG
-> Int -> Ptr PFN_vkGetInstanceProcAddrLUNARG
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr PFN_vkGetInstanceProcAddrLUNARG)) (PFN_vkGetInstanceProcAddrLUNARG
forall a. Zero a => a
zero)
    IO b
f

instance FromCStruct DirectDriverLoadingInfoLUNARG where
  peekCStruct :: Ptr DirectDriverLoadingInfoLUNARG
-> IO DirectDriverLoadingInfoLUNARG
peekCStruct Ptr DirectDriverLoadingInfoLUNARG
p = do
    DirectDriverLoadingFlagsLUNARG
flags <- forall a. Storable a => Ptr a -> IO a
peek @DirectDriverLoadingFlagsLUNARG ((Ptr DirectDriverLoadingInfoLUNARG
p Ptr DirectDriverLoadingInfoLUNARG
-> Int -> Ptr DirectDriverLoadingFlagsLUNARG
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr DirectDriverLoadingFlagsLUNARG))
    PFN_vkGetInstanceProcAddrLUNARG
pfnGetInstanceProcAddr <- forall a. Storable a => Ptr a -> IO a
peek @PFN_vkGetInstanceProcAddrLUNARG ((Ptr DirectDriverLoadingInfoLUNARG
p Ptr DirectDriverLoadingInfoLUNARG
-> Int -> Ptr PFN_vkGetInstanceProcAddrLUNARG
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr PFN_vkGetInstanceProcAddrLUNARG))
    DirectDriverLoadingInfoLUNARG -> IO DirectDriverLoadingInfoLUNARG
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (DirectDriverLoadingInfoLUNARG -> IO DirectDriverLoadingInfoLUNARG)
-> DirectDriverLoadingInfoLUNARG
-> IO DirectDriverLoadingInfoLUNARG
forall a b. (a -> b) -> a -> b
$ DirectDriverLoadingFlagsLUNARG
-> PFN_vkGetInstanceProcAddrLUNARG -> DirectDriverLoadingInfoLUNARG
DirectDriverLoadingInfoLUNARG
             DirectDriverLoadingFlagsLUNARG
flags PFN_vkGetInstanceProcAddrLUNARG
pfnGetInstanceProcAddr

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

instance Zero DirectDriverLoadingInfoLUNARG where
  zero :: DirectDriverLoadingInfoLUNARG
zero = DirectDriverLoadingFlagsLUNARG
-> PFN_vkGetInstanceProcAddrLUNARG -> DirectDriverLoadingInfoLUNARG
DirectDriverLoadingInfoLUNARG
           DirectDriverLoadingFlagsLUNARG
forall a. Zero a => a
zero
           PFN_vkGetInstanceProcAddrLUNARG
forall a. Zero a => a
zero


-- | VkDirectDriverLoadingListLUNARG - Structure specifying additional
-- drivers to load
--
-- = Description
--
-- When creating a Vulkan instance for which additional drivers are to be
-- included, add a 'DirectDriverLoadingListLUNARG' structure to the pNext
-- chain of the 'Vulkan.Core10.DeviceInitialization.InstanceCreateInfo'
-- structure, and include in it the list of 'DirectDriverLoadingInfoLUNARG'
-- structures which contain the information necessary to load additional
-- drivers.
--
-- == Valid Usage (Implicit)
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_LUNARG_direct_driver_loading VK_LUNARG_direct_driver_loading>,
-- 'DirectDriverLoadingInfoLUNARG', 'DirectDriverLoadingModeLUNARG',
-- 'Vulkan.Core10.Enums.StructureType.StructureType'
data DirectDriverLoadingListLUNARG = DirectDriverLoadingListLUNARG
  { -- | @mode@ controls the mode in which to load the provided drivers.
    --
    -- #VUID-VkDirectDriverLoadingListLUNARG-mode-parameter# @mode@ /must/ be a
    -- valid 'DirectDriverLoadingModeLUNARG' value
    DirectDriverLoadingListLUNARG -> DirectDriverLoadingModeLUNARG
mode :: DirectDriverLoadingModeLUNARG
  , -- | @pDrivers@ is a pointer to an array of @driverCount@
    -- 'DirectDriverLoadingInfoLUNARG' structures.
    --
    -- #VUID-VkDirectDriverLoadingListLUNARG-pDrivers-parameter# @pDrivers@
    -- /must/ be a valid pointer to an array of @driverCount@ valid
    -- 'DirectDriverLoadingInfoLUNARG' structures
    DirectDriverLoadingListLUNARG
-> Vector DirectDriverLoadingInfoLUNARG
drivers :: Vector DirectDriverLoadingInfoLUNARG
  }
  deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (DirectDriverLoadingListLUNARG)
#endif
deriving instance Show DirectDriverLoadingListLUNARG

instance ToCStruct DirectDriverLoadingListLUNARG where
  withCStruct :: forall b.
DirectDriverLoadingListLUNARG
-> (Ptr DirectDriverLoadingListLUNARG -> IO b) -> IO b
withCStruct DirectDriverLoadingListLUNARG
x Ptr DirectDriverLoadingListLUNARG -> IO b
f = Int -> (Ptr DirectDriverLoadingListLUNARG -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
32 ((Ptr DirectDriverLoadingListLUNARG -> IO b) -> IO b)
-> (Ptr DirectDriverLoadingListLUNARG -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr DirectDriverLoadingListLUNARG
p -> Ptr DirectDriverLoadingListLUNARG
-> DirectDriverLoadingListLUNARG -> IO b -> IO b
forall b.
Ptr DirectDriverLoadingListLUNARG
-> DirectDriverLoadingListLUNARG -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr DirectDriverLoadingListLUNARG
p DirectDriverLoadingListLUNARG
x (Ptr DirectDriverLoadingListLUNARG -> IO b
f Ptr DirectDriverLoadingListLUNARG
p)
  pokeCStruct :: forall b.
Ptr DirectDriverLoadingListLUNARG
-> DirectDriverLoadingListLUNARG -> IO b -> IO b
pokeCStruct Ptr DirectDriverLoadingListLUNARG
p DirectDriverLoadingListLUNARG{Vector DirectDriverLoadingInfoLUNARG
DirectDriverLoadingModeLUNARG
$sel:mode:DirectDriverLoadingListLUNARG :: DirectDriverLoadingListLUNARG -> DirectDriverLoadingModeLUNARG
$sel:drivers:DirectDriverLoadingListLUNARG :: DirectDriverLoadingListLUNARG
-> Vector DirectDriverLoadingInfoLUNARG
mode :: DirectDriverLoadingModeLUNARG
drivers :: Vector DirectDriverLoadingInfoLUNARG
..} 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 (m :: * -> *) a. Monad m => m a -> ContT b m a
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 ((Ptr DirectDriverLoadingListLUNARG
p Ptr DirectDriverLoadingListLUNARG -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_DIRECT_DRIVER_LOADING_LIST_LUNARG)
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
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 ((Ptr DirectDriverLoadingListLUNARG
p Ptr DirectDriverLoadingListLUNARG -> 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 (m :: * -> *) a. Monad m => m a -> ContT b m a
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 DirectDriverLoadingModeLUNARG
-> DirectDriverLoadingModeLUNARG -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DirectDriverLoadingListLUNARG
p Ptr DirectDriverLoadingListLUNARG
-> Int -> Ptr DirectDriverLoadingModeLUNARG
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr DirectDriverLoadingModeLUNARG)) (DirectDriverLoadingModeLUNARG
mode)
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
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 ((Ptr DirectDriverLoadingListLUNARG
p Ptr DirectDriverLoadingListLUNARG -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
20 :: Ptr Word32)) ((Int -> Word32
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Vector DirectDriverLoadingInfoLUNARG -> Int
forall a. Vector a -> Int
Data.Vector.length (Vector DirectDriverLoadingInfoLUNARG -> Int)
-> Vector DirectDriverLoadingInfoLUNARG -> Int
forall a b. (a -> b) -> a -> b
$ (Vector DirectDriverLoadingInfoLUNARG
drivers)) :: Word32))
    Ptr DirectDriverLoadingInfoLUNARG
pPDrivers' <- ((Ptr DirectDriverLoadingInfoLUNARG -> IO b) -> IO b)
-> ContT b IO (Ptr DirectDriverLoadingInfoLUNARG)
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr DirectDriverLoadingInfoLUNARG -> IO b) -> IO b)
 -> ContT b IO (Ptr DirectDriverLoadingInfoLUNARG))
-> ((Ptr DirectDriverLoadingInfoLUNARG -> IO b) -> IO b)
-> ContT b IO (Ptr DirectDriverLoadingInfoLUNARG)
forall a b. (a -> b) -> a -> b
$ forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes @DirectDriverLoadingInfoLUNARG ((Vector DirectDriverLoadingInfoLUNARG -> Int
forall a. Vector a -> Int
Data.Vector.length (Vector DirectDriverLoadingInfoLUNARG
drivers)) Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
32)
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
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
$ (Int -> DirectDriverLoadingInfoLUNARG -> IO ())
-> Vector DirectDriverLoadingInfoLUNARG -> IO ()
forall (m :: * -> *) a b.
Monad m =>
(Int -> a -> m b) -> Vector a -> m ()
Data.Vector.imapM_ (\Int
i DirectDriverLoadingInfoLUNARG
e -> Ptr DirectDriverLoadingInfoLUNARG
-> DirectDriverLoadingInfoLUNARG -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr DirectDriverLoadingInfoLUNARG
pPDrivers' Ptr DirectDriverLoadingInfoLUNARG
-> Int -> Ptr DirectDriverLoadingInfoLUNARG
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
32 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr DirectDriverLoadingInfoLUNARG) (DirectDriverLoadingInfoLUNARG
e)) (Vector DirectDriverLoadingInfoLUNARG
drivers)
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
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 DirectDriverLoadingInfoLUNARG)
-> Ptr DirectDriverLoadingInfoLUNARG -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DirectDriverLoadingListLUNARG
p Ptr DirectDriverLoadingListLUNARG
-> Int -> Ptr (Ptr DirectDriverLoadingInfoLUNARG)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr (Ptr DirectDriverLoadingInfoLUNARG))) (Ptr DirectDriverLoadingInfoLUNARG
pPDrivers')
    IO b -> ContT b IO b
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
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
32
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: forall b. Ptr DirectDriverLoadingListLUNARG -> IO b -> IO b
pokeZeroCStruct Ptr DirectDriverLoadingListLUNARG
p IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DirectDriverLoadingListLUNARG
p Ptr DirectDriverLoadingListLUNARG -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_DIRECT_DRIVER_LOADING_LIST_LUNARG)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DirectDriverLoadingListLUNARG
p Ptr DirectDriverLoadingListLUNARG -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr DirectDriverLoadingModeLUNARG
-> DirectDriverLoadingModeLUNARG -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DirectDriverLoadingListLUNARG
p Ptr DirectDriverLoadingListLUNARG
-> Int -> Ptr DirectDriverLoadingModeLUNARG
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr DirectDriverLoadingModeLUNARG)) (DirectDriverLoadingModeLUNARG
forall a. Zero a => a
zero)
    IO b
f

instance FromCStruct DirectDriverLoadingListLUNARG where
  peekCStruct :: Ptr DirectDriverLoadingListLUNARG
-> IO DirectDriverLoadingListLUNARG
peekCStruct Ptr DirectDriverLoadingListLUNARG
p = do
    DirectDriverLoadingModeLUNARG
mode <- forall a. Storable a => Ptr a -> IO a
peek @DirectDriverLoadingModeLUNARG ((Ptr DirectDriverLoadingListLUNARG
p Ptr DirectDriverLoadingListLUNARG
-> Int -> Ptr DirectDriverLoadingModeLUNARG
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr DirectDriverLoadingModeLUNARG))
    Word32
driverCount <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr DirectDriverLoadingListLUNARG
p Ptr DirectDriverLoadingListLUNARG -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
20 :: Ptr Word32))
    Ptr DirectDriverLoadingInfoLUNARG
pDrivers <- forall a. Storable a => Ptr a -> IO a
peek @(Ptr DirectDriverLoadingInfoLUNARG) ((Ptr DirectDriverLoadingListLUNARG
p Ptr DirectDriverLoadingListLUNARG
-> Int -> Ptr (Ptr DirectDriverLoadingInfoLUNARG)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr (Ptr DirectDriverLoadingInfoLUNARG)))
    Vector DirectDriverLoadingInfoLUNARG
pDrivers' <- Int
-> (Int -> IO DirectDriverLoadingInfoLUNARG)
-> IO (Vector DirectDriverLoadingInfoLUNARG)
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
driverCount) (\Int
i -> forall a. FromCStruct a => Ptr a -> IO a
peekCStruct @DirectDriverLoadingInfoLUNARG ((Ptr DirectDriverLoadingInfoLUNARG
pDrivers Ptr DirectDriverLoadingInfoLUNARG
-> Int -> Ptr DirectDriverLoadingInfoLUNARG
forall a. Ptr a -> Int -> Ptr a
`advancePtrBytes` (Int
32 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr DirectDriverLoadingInfoLUNARG)))
    DirectDriverLoadingListLUNARG -> IO DirectDriverLoadingListLUNARG
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (DirectDriverLoadingListLUNARG -> IO DirectDriverLoadingListLUNARG)
-> DirectDriverLoadingListLUNARG
-> IO DirectDriverLoadingListLUNARG
forall a b. (a -> b) -> a -> b
$ DirectDriverLoadingModeLUNARG
-> Vector DirectDriverLoadingInfoLUNARG
-> DirectDriverLoadingListLUNARG
DirectDriverLoadingListLUNARG
             DirectDriverLoadingModeLUNARG
mode Vector DirectDriverLoadingInfoLUNARG
pDrivers'

instance Zero DirectDriverLoadingListLUNARG where
  zero :: DirectDriverLoadingListLUNARG
zero = DirectDriverLoadingModeLUNARG
-> Vector DirectDriverLoadingInfoLUNARG
-> DirectDriverLoadingListLUNARG
DirectDriverLoadingListLUNARG
           DirectDriverLoadingModeLUNARG
forall a. Zero a => a
zero
           Vector DirectDriverLoadingInfoLUNARG
forall a. Monoid a => a
mempty


-- | VkDirectDriverLoadingFlagsLUNARG - Reserved for future use
--
-- = Description
--
-- 'DirectDriverLoadingFlagsLUNARG' 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_LUNARG_direct_driver_loading VK_LUNARG_direct_driver_loading>,
-- 'DirectDriverLoadingInfoLUNARG'
newtype DirectDriverLoadingFlagsLUNARG = DirectDriverLoadingFlagsLUNARG Flags
  deriving newtype (DirectDriverLoadingFlagsLUNARG
-> DirectDriverLoadingFlagsLUNARG -> Bool
(DirectDriverLoadingFlagsLUNARG
 -> DirectDriverLoadingFlagsLUNARG -> Bool)
-> (DirectDriverLoadingFlagsLUNARG
    -> DirectDriverLoadingFlagsLUNARG -> Bool)
-> Eq DirectDriverLoadingFlagsLUNARG
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: DirectDriverLoadingFlagsLUNARG
-> DirectDriverLoadingFlagsLUNARG -> Bool
== :: DirectDriverLoadingFlagsLUNARG
-> DirectDriverLoadingFlagsLUNARG -> Bool
$c/= :: DirectDriverLoadingFlagsLUNARG
-> DirectDriverLoadingFlagsLUNARG -> Bool
/= :: DirectDriverLoadingFlagsLUNARG
-> DirectDriverLoadingFlagsLUNARG -> Bool
Eq, Eq DirectDriverLoadingFlagsLUNARG
Eq DirectDriverLoadingFlagsLUNARG =>
(DirectDriverLoadingFlagsLUNARG
 -> DirectDriverLoadingFlagsLUNARG -> Ordering)
-> (DirectDriverLoadingFlagsLUNARG
    -> DirectDriverLoadingFlagsLUNARG -> Bool)
-> (DirectDriverLoadingFlagsLUNARG
    -> DirectDriverLoadingFlagsLUNARG -> Bool)
-> (DirectDriverLoadingFlagsLUNARG
    -> DirectDriverLoadingFlagsLUNARG -> Bool)
-> (DirectDriverLoadingFlagsLUNARG
    -> DirectDriverLoadingFlagsLUNARG -> Bool)
-> (DirectDriverLoadingFlagsLUNARG
    -> DirectDriverLoadingFlagsLUNARG
    -> DirectDriverLoadingFlagsLUNARG)
-> (DirectDriverLoadingFlagsLUNARG
    -> DirectDriverLoadingFlagsLUNARG
    -> DirectDriverLoadingFlagsLUNARG)
-> Ord DirectDriverLoadingFlagsLUNARG
DirectDriverLoadingFlagsLUNARG
-> DirectDriverLoadingFlagsLUNARG -> Bool
DirectDriverLoadingFlagsLUNARG
-> DirectDriverLoadingFlagsLUNARG -> Ordering
DirectDriverLoadingFlagsLUNARG
-> DirectDriverLoadingFlagsLUNARG -> DirectDriverLoadingFlagsLUNARG
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
$ccompare :: DirectDriverLoadingFlagsLUNARG
-> DirectDriverLoadingFlagsLUNARG -> Ordering
compare :: DirectDriverLoadingFlagsLUNARG
-> DirectDriverLoadingFlagsLUNARG -> Ordering
$c< :: DirectDriverLoadingFlagsLUNARG
-> DirectDriverLoadingFlagsLUNARG -> Bool
< :: DirectDriverLoadingFlagsLUNARG
-> DirectDriverLoadingFlagsLUNARG -> Bool
$c<= :: DirectDriverLoadingFlagsLUNARG
-> DirectDriverLoadingFlagsLUNARG -> Bool
<= :: DirectDriverLoadingFlagsLUNARG
-> DirectDriverLoadingFlagsLUNARG -> Bool
$c> :: DirectDriverLoadingFlagsLUNARG
-> DirectDriverLoadingFlagsLUNARG -> Bool
> :: DirectDriverLoadingFlagsLUNARG
-> DirectDriverLoadingFlagsLUNARG -> Bool
$c>= :: DirectDriverLoadingFlagsLUNARG
-> DirectDriverLoadingFlagsLUNARG -> Bool
>= :: DirectDriverLoadingFlagsLUNARG
-> DirectDriverLoadingFlagsLUNARG -> Bool
$cmax :: DirectDriverLoadingFlagsLUNARG
-> DirectDriverLoadingFlagsLUNARG -> DirectDriverLoadingFlagsLUNARG
max :: DirectDriverLoadingFlagsLUNARG
-> DirectDriverLoadingFlagsLUNARG -> DirectDriverLoadingFlagsLUNARG
$cmin :: DirectDriverLoadingFlagsLUNARG
-> DirectDriverLoadingFlagsLUNARG -> DirectDriverLoadingFlagsLUNARG
min :: DirectDriverLoadingFlagsLUNARG
-> DirectDriverLoadingFlagsLUNARG -> DirectDriverLoadingFlagsLUNARG
Ord, Ptr DirectDriverLoadingFlagsLUNARG
-> IO DirectDriverLoadingFlagsLUNARG
Ptr DirectDriverLoadingFlagsLUNARG
-> Int -> IO DirectDriverLoadingFlagsLUNARG
Ptr DirectDriverLoadingFlagsLUNARG
-> Int -> DirectDriverLoadingFlagsLUNARG -> IO ()
Ptr DirectDriverLoadingFlagsLUNARG
-> DirectDriverLoadingFlagsLUNARG -> IO ()
DirectDriverLoadingFlagsLUNARG -> Int
(DirectDriverLoadingFlagsLUNARG -> Int)
-> (DirectDriverLoadingFlagsLUNARG -> Int)
-> (Ptr DirectDriverLoadingFlagsLUNARG
    -> Int -> IO DirectDriverLoadingFlagsLUNARG)
-> (Ptr DirectDriverLoadingFlagsLUNARG
    -> Int -> DirectDriverLoadingFlagsLUNARG -> IO ())
-> (forall b. Ptr b -> Int -> IO DirectDriverLoadingFlagsLUNARG)
-> (forall b.
    Ptr b -> Int -> DirectDriverLoadingFlagsLUNARG -> IO ())
-> (Ptr DirectDriverLoadingFlagsLUNARG
    -> IO DirectDriverLoadingFlagsLUNARG)
-> (Ptr DirectDriverLoadingFlagsLUNARG
    -> DirectDriverLoadingFlagsLUNARG -> IO ())
-> Storable DirectDriverLoadingFlagsLUNARG
forall b. Ptr b -> Int -> IO DirectDriverLoadingFlagsLUNARG
forall b. Ptr b -> Int -> DirectDriverLoadingFlagsLUNARG -> 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
$csizeOf :: DirectDriverLoadingFlagsLUNARG -> Int
sizeOf :: DirectDriverLoadingFlagsLUNARG -> Int
$calignment :: DirectDriverLoadingFlagsLUNARG -> Int
alignment :: DirectDriverLoadingFlagsLUNARG -> Int
$cpeekElemOff :: Ptr DirectDriverLoadingFlagsLUNARG
-> Int -> IO DirectDriverLoadingFlagsLUNARG
peekElemOff :: Ptr DirectDriverLoadingFlagsLUNARG
-> Int -> IO DirectDriverLoadingFlagsLUNARG
$cpokeElemOff :: Ptr DirectDriverLoadingFlagsLUNARG
-> Int -> DirectDriverLoadingFlagsLUNARG -> IO ()
pokeElemOff :: Ptr DirectDriverLoadingFlagsLUNARG
-> Int -> DirectDriverLoadingFlagsLUNARG -> IO ()
$cpeekByteOff :: forall b. Ptr b -> Int -> IO DirectDriverLoadingFlagsLUNARG
peekByteOff :: forall b. Ptr b -> Int -> IO DirectDriverLoadingFlagsLUNARG
$cpokeByteOff :: forall b. Ptr b -> Int -> DirectDriverLoadingFlagsLUNARG -> IO ()
pokeByteOff :: forall b. Ptr b -> Int -> DirectDriverLoadingFlagsLUNARG -> IO ()
$cpeek :: Ptr DirectDriverLoadingFlagsLUNARG
-> IO DirectDriverLoadingFlagsLUNARG
peek :: Ptr DirectDriverLoadingFlagsLUNARG
-> IO DirectDriverLoadingFlagsLUNARG
$cpoke :: Ptr DirectDriverLoadingFlagsLUNARG
-> DirectDriverLoadingFlagsLUNARG -> IO ()
poke :: Ptr DirectDriverLoadingFlagsLUNARG
-> DirectDriverLoadingFlagsLUNARG -> IO ()
Storable, DirectDriverLoadingFlagsLUNARG
DirectDriverLoadingFlagsLUNARG
-> Zero DirectDriverLoadingFlagsLUNARG
forall a. a -> Zero a
$czero :: DirectDriverLoadingFlagsLUNARG
zero :: DirectDriverLoadingFlagsLUNARG
Zero, Eq DirectDriverLoadingFlagsLUNARG
DirectDriverLoadingFlagsLUNARG
Eq DirectDriverLoadingFlagsLUNARG =>
(DirectDriverLoadingFlagsLUNARG
 -> DirectDriverLoadingFlagsLUNARG
 -> DirectDriverLoadingFlagsLUNARG)
-> (DirectDriverLoadingFlagsLUNARG
    -> DirectDriverLoadingFlagsLUNARG
    -> DirectDriverLoadingFlagsLUNARG)
-> (DirectDriverLoadingFlagsLUNARG
    -> DirectDriverLoadingFlagsLUNARG
    -> DirectDriverLoadingFlagsLUNARG)
-> (DirectDriverLoadingFlagsLUNARG
    -> DirectDriverLoadingFlagsLUNARG)
-> (DirectDriverLoadingFlagsLUNARG
    -> Int -> DirectDriverLoadingFlagsLUNARG)
-> (DirectDriverLoadingFlagsLUNARG
    -> Int -> DirectDriverLoadingFlagsLUNARG)
-> DirectDriverLoadingFlagsLUNARG
-> (Int -> DirectDriverLoadingFlagsLUNARG)
-> (DirectDriverLoadingFlagsLUNARG
    -> Int -> DirectDriverLoadingFlagsLUNARG)
-> (DirectDriverLoadingFlagsLUNARG
    -> Int -> DirectDriverLoadingFlagsLUNARG)
-> (DirectDriverLoadingFlagsLUNARG
    -> Int -> DirectDriverLoadingFlagsLUNARG)
-> (DirectDriverLoadingFlagsLUNARG -> Int -> Bool)
-> (DirectDriverLoadingFlagsLUNARG -> Maybe Int)
-> (DirectDriverLoadingFlagsLUNARG -> Int)
-> (DirectDriverLoadingFlagsLUNARG -> Bool)
-> (DirectDriverLoadingFlagsLUNARG
    -> Int -> DirectDriverLoadingFlagsLUNARG)
-> (DirectDriverLoadingFlagsLUNARG
    -> Int -> DirectDriverLoadingFlagsLUNARG)
-> (DirectDriverLoadingFlagsLUNARG
    -> Int -> DirectDriverLoadingFlagsLUNARG)
-> (DirectDriverLoadingFlagsLUNARG
    -> Int -> DirectDriverLoadingFlagsLUNARG)
-> (DirectDriverLoadingFlagsLUNARG
    -> Int -> DirectDriverLoadingFlagsLUNARG)
-> (DirectDriverLoadingFlagsLUNARG
    -> Int -> DirectDriverLoadingFlagsLUNARG)
-> (DirectDriverLoadingFlagsLUNARG -> Int)
-> Bits DirectDriverLoadingFlagsLUNARG
Int -> DirectDriverLoadingFlagsLUNARG
DirectDriverLoadingFlagsLUNARG -> Bool
DirectDriverLoadingFlagsLUNARG -> Int
DirectDriverLoadingFlagsLUNARG -> Maybe Int
DirectDriverLoadingFlagsLUNARG -> DirectDriverLoadingFlagsLUNARG
DirectDriverLoadingFlagsLUNARG -> Int -> Bool
DirectDriverLoadingFlagsLUNARG
-> Int -> DirectDriverLoadingFlagsLUNARG
DirectDriverLoadingFlagsLUNARG
-> DirectDriverLoadingFlagsLUNARG -> DirectDriverLoadingFlagsLUNARG
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
$c.&. :: DirectDriverLoadingFlagsLUNARG
-> DirectDriverLoadingFlagsLUNARG -> DirectDriverLoadingFlagsLUNARG
.&. :: DirectDriverLoadingFlagsLUNARG
-> DirectDriverLoadingFlagsLUNARG -> DirectDriverLoadingFlagsLUNARG
$c.|. :: DirectDriverLoadingFlagsLUNARG
-> DirectDriverLoadingFlagsLUNARG -> DirectDriverLoadingFlagsLUNARG
.|. :: DirectDriverLoadingFlagsLUNARG
-> DirectDriverLoadingFlagsLUNARG -> DirectDriverLoadingFlagsLUNARG
$cxor :: DirectDriverLoadingFlagsLUNARG
-> DirectDriverLoadingFlagsLUNARG -> DirectDriverLoadingFlagsLUNARG
xor :: DirectDriverLoadingFlagsLUNARG
-> DirectDriverLoadingFlagsLUNARG -> DirectDriverLoadingFlagsLUNARG
$ccomplement :: DirectDriverLoadingFlagsLUNARG -> DirectDriverLoadingFlagsLUNARG
complement :: DirectDriverLoadingFlagsLUNARG -> DirectDriverLoadingFlagsLUNARG
$cshift :: DirectDriverLoadingFlagsLUNARG
-> Int -> DirectDriverLoadingFlagsLUNARG
shift :: DirectDriverLoadingFlagsLUNARG
-> Int -> DirectDriverLoadingFlagsLUNARG
$crotate :: DirectDriverLoadingFlagsLUNARG
-> Int -> DirectDriverLoadingFlagsLUNARG
rotate :: DirectDriverLoadingFlagsLUNARG
-> Int -> DirectDriverLoadingFlagsLUNARG
$czeroBits :: DirectDriverLoadingFlagsLUNARG
zeroBits :: DirectDriverLoadingFlagsLUNARG
$cbit :: Int -> DirectDriverLoadingFlagsLUNARG
bit :: Int -> DirectDriverLoadingFlagsLUNARG
$csetBit :: DirectDriverLoadingFlagsLUNARG
-> Int -> DirectDriverLoadingFlagsLUNARG
setBit :: DirectDriverLoadingFlagsLUNARG
-> Int -> DirectDriverLoadingFlagsLUNARG
$cclearBit :: DirectDriverLoadingFlagsLUNARG
-> Int -> DirectDriverLoadingFlagsLUNARG
clearBit :: DirectDriverLoadingFlagsLUNARG
-> Int -> DirectDriverLoadingFlagsLUNARG
$ccomplementBit :: DirectDriverLoadingFlagsLUNARG
-> Int -> DirectDriverLoadingFlagsLUNARG
complementBit :: DirectDriverLoadingFlagsLUNARG
-> Int -> DirectDriverLoadingFlagsLUNARG
$ctestBit :: DirectDriverLoadingFlagsLUNARG -> Int -> Bool
testBit :: DirectDriverLoadingFlagsLUNARG -> Int -> Bool
$cbitSizeMaybe :: DirectDriverLoadingFlagsLUNARG -> Maybe Int
bitSizeMaybe :: DirectDriverLoadingFlagsLUNARG -> Maybe Int
$cbitSize :: DirectDriverLoadingFlagsLUNARG -> Int
bitSize :: DirectDriverLoadingFlagsLUNARG -> Int
$cisSigned :: DirectDriverLoadingFlagsLUNARG -> Bool
isSigned :: DirectDriverLoadingFlagsLUNARG -> Bool
$cshiftL :: DirectDriverLoadingFlagsLUNARG
-> Int -> DirectDriverLoadingFlagsLUNARG
shiftL :: DirectDriverLoadingFlagsLUNARG
-> Int -> DirectDriverLoadingFlagsLUNARG
$cunsafeShiftL :: DirectDriverLoadingFlagsLUNARG
-> Int -> DirectDriverLoadingFlagsLUNARG
unsafeShiftL :: DirectDriverLoadingFlagsLUNARG
-> Int -> DirectDriverLoadingFlagsLUNARG
$cshiftR :: DirectDriverLoadingFlagsLUNARG
-> Int -> DirectDriverLoadingFlagsLUNARG
shiftR :: DirectDriverLoadingFlagsLUNARG
-> Int -> DirectDriverLoadingFlagsLUNARG
$cunsafeShiftR :: DirectDriverLoadingFlagsLUNARG
-> Int -> DirectDriverLoadingFlagsLUNARG
unsafeShiftR :: DirectDriverLoadingFlagsLUNARG
-> Int -> DirectDriverLoadingFlagsLUNARG
$crotateL :: DirectDriverLoadingFlagsLUNARG
-> Int -> DirectDriverLoadingFlagsLUNARG
rotateL :: DirectDriverLoadingFlagsLUNARG
-> Int -> DirectDriverLoadingFlagsLUNARG
$crotateR :: DirectDriverLoadingFlagsLUNARG
-> Int -> DirectDriverLoadingFlagsLUNARG
rotateR :: DirectDriverLoadingFlagsLUNARG
-> Int -> DirectDriverLoadingFlagsLUNARG
$cpopCount :: DirectDriverLoadingFlagsLUNARG -> Int
popCount :: DirectDriverLoadingFlagsLUNARG -> Int
Bits, Bits DirectDriverLoadingFlagsLUNARG
Bits DirectDriverLoadingFlagsLUNARG =>
(DirectDriverLoadingFlagsLUNARG -> Int)
-> (DirectDriverLoadingFlagsLUNARG -> Int)
-> (DirectDriverLoadingFlagsLUNARG -> Int)
-> FiniteBits DirectDriverLoadingFlagsLUNARG
DirectDriverLoadingFlagsLUNARG -> Int
forall b.
Bits b =>
(b -> Int) -> (b -> Int) -> (b -> Int) -> FiniteBits b
$cfiniteBitSize :: DirectDriverLoadingFlagsLUNARG -> Int
finiteBitSize :: DirectDriverLoadingFlagsLUNARG -> Int
$ccountLeadingZeros :: DirectDriverLoadingFlagsLUNARG -> Int
countLeadingZeros :: DirectDriverLoadingFlagsLUNARG -> Int
$ccountTrailingZeros :: DirectDriverLoadingFlagsLUNARG -> Int
countTrailingZeros :: DirectDriverLoadingFlagsLUNARG -> Int
FiniteBits)

conNameDirectDriverLoadingFlagsLUNARG :: String
conNameDirectDriverLoadingFlagsLUNARG :: String
conNameDirectDriverLoadingFlagsLUNARG = String
"DirectDriverLoadingFlagsLUNARG"

enumPrefixDirectDriverLoadingFlagsLUNARG :: String
enumPrefixDirectDriverLoadingFlagsLUNARG :: String
enumPrefixDirectDriverLoadingFlagsLUNARG = String
""

showTableDirectDriverLoadingFlagsLUNARG :: [(DirectDriverLoadingFlagsLUNARG, String)]
showTableDirectDriverLoadingFlagsLUNARG :: [(DirectDriverLoadingFlagsLUNARG, String)]
showTableDirectDriverLoadingFlagsLUNARG = []

instance Show DirectDriverLoadingFlagsLUNARG where
  showsPrec :: Int -> DirectDriverLoadingFlagsLUNARG -> ShowS
showsPrec =
    String
-> [(DirectDriverLoadingFlagsLUNARG, String)]
-> String
-> (DirectDriverLoadingFlagsLUNARG -> Word32)
-> (Word32 -> ShowS)
-> Int
-> DirectDriverLoadingFlagsLUNARG
-> ShowS
forall a i.
Eq a =>
String
-> [(a, String)]
-> String
-> (a -> i)
-> (i -> ShowS)
-> Int
-> a
-> ShowS
enumShowsPrec
      String
enumPrefixDirectDriverLoadingFlagsLUNARG
      [(DirectDriverLoadingFlagsLUNARG, String)]
showTableDirectDriverLoadingFlagsLUNARG
      String
conNameDirectDriverLoadingFlagsLUNARG
      (\(DirectDriverLoadingFlagsLUNARG 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 => a -> ShowS
showHex Word32
x)

instance Read DirectDriverLoadingFlagsLUNARG where
  readPrec :: ReadPrec DirectDriverLoadingFlagsLUNARG
readPrec =
    String
-> [(DirectDriverLoadingFlagsLUNARG, String)]
-> String
-> (Word32 -> DirectDriverLoadingFlagsLUNARG)
-> ReadPrec DirectDriverLoadingFlagsLUNARG
forall i a.
Read i =>
String -> [(a, String)] -> String -> (i -> a) -> ReadPrec a
enumReadPrec
      String
enumPrefixDirectDriverLoadingFlagsLUNARG
      [(DirectDriverLoadingFlagsLUNARG, String)]
showTableDirectDriverLoadingFlagsLUNARG
      String
conNameDirectDriverLoadingFlagsLUNARG
      Word32 -> DirectDriverLoadingFlagsLUNARG
DirectDriverLoadingFlagsLUNARG

-- | VkDirectDriverLoadingModeLUNARG - Specify loader behavior of added
-- drivers
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_LUNARG_direct_driver_loading VK_LUNARG_direct_driver_loading>,
-- 'DirectDriverLoadingListLUNARG'
newtype DirectDriverLoadingModeLUNARG = DirectDriverLoadingModeLUNARG Int32
  deriving newtype (DirectDriverLoadingModeLUNARG
-> DirectDriverLoadingModeLUNARG -> Bool
(DirectDriverLoadingModeLUNARG
 -> DirectDriverLoadingModeLUNARG -> Bool)
-> (DirectDriverLoadingModeLUNARG
    -> DirectDriverLoadingModeLUNARG -> Bool)
-> Eq DirectDriverLoadingModeLUNARG
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: DirectDriverLoadingModeLUNARG
-> DirectDriverLoadingModeLUNARG -> Bool
== :: DirectDriverLoadingModeLUNARG
-> DirectDriverLoadingModeLUNARG -> Bool
$c/= :: DirectDriverLoadingModeLUNARG
-> DirectDriverLoadingModeLUNARG -> Bool
/= :: DirectDriverLoadingModeLUNARG
-> DirectDriverLoadingModeLUNARG -> Bool
Eq, Eq DirectDriverLoadingModeLUNARG
Eq DirectDriverLoadingModeLUNARG =>
(DirectDriverLoadingModeLUNARG
 -> DirectDriverLoadingModeLUNARG -> Ordering)
-> (DirectDriverLoadingModeLUNARG
    -> DirectDriverLoadingModeLUNARG -> Bool)
-> (DirectDriverLoadingModeLUNARG
    -> DirectDriverLoadingModeLUNARG -> Bool)
-> (DirectDriverLoadingModeLUNARG
    -> DirectDriverLoadingModeLUNARG -> Bool)
-> (DirectDriverLoadingModeLUNARG
    -> DirectDriverLoadingModeLUNARG -> Bool)
-> (DirectDriverLoadingModeLUNARG
    -> DirectDriverLoadingModeLUNARG -> DirectDriverLoadingModeLUNARG)
-> (DirectDriverLoadingModeLUNARG
    -> DirectDriverLoadingModeLUNARG -> DirectDriverLoadingModeLUNARG)
-> Ord DirectDriverLoadingModeLUNARG
DirectDriverLoadingModeLUNARG
-> DirectDriverLoadingModeLUNARG -> Bool
DirectDriverLoadingModeLUNARG
-> DirectDriverLoadingModeLUNARG -> Ordering
DirectDriverLoadingModeLUNARG
-> DirectDriverLoadingModeLUNARG -> DirectDriverLoadingModeLUNARG
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
$ccompare :: DirectDriverLoadingModeLUNARG
-> DirectDriverLoadingModeLUNARG -> Ordering
compare :: DirectDriverLoadingModeLUNARG
-> DirectDriverLoadingModeLUNARG -> Ordering
$c< :: DirectDriverLoadingModeLUNARG
-> DirectDriverLoadingModeLUNARG -> Bool
< :: DirectDriverLoadingModeLUNARG
-> DirectDriverLoadingModeLUNARG -> Bool
$c<= :: DirectDriverLoadingModeLUNARG
-> DirectDriverLoadingModeLUNARG -> Bool
<= :: DirectDriverLoadingModeLUNARG
-> DirectDriverLoadingModeLUNARG -> Bool
$c> :: DirectDriverLoadingModeLUNARG
-> DirectDriverLoadingModeLUNARG -> Bool
> :: DirectDriverLoadingModeLUNARG
-> DirectDriverLoadingModeLUNARG -> Bool
$c>= :: DirectDriverLoadingModeLUNARG
-> DirectDriverLoadingModeLUNARG -> Bool
>= :: DirectDriverLoadingModeLUNARG
-> DirectDriverLoadingModeLUNARG -> Bool
$cmax :: DirectDriverLoadingModeLUNARG
-> DirectDriverLoadingModeLUNARG -> DirectDriverLoadingModeLUNARG
max :: DirectDriverLoadingModeLUNARG
-> DirectDriverLoadingModeLUNARG -> DirectDriverLoadingModeLUNARG
$cmin :: DirectDriverLoadingModeLUNARG
-> DirectDriverLoadingModeLUNARG -> DirectDriverLoadingModeLUNARG
min :: DirectDriverLoadingModeLUNARG
-> DirectDriverLoadingModeLUNARG -> DirectDriverLoadingModeLUNARG
Ord, Ptr DirectDriverLoadingModeLUNARG
-> IO DirectDriverLoadingModeLUNARG
Ptr DirectDriverLoadingModeLUNARG
-> Int -> IO DirectDriverLoadingModeLUNARG
Ptr DirectDriverLoadingModeLUNARG
-> Int -> DirectDriverLoadingModeLUNARG -> IO ()
Ptr DirectDriverLoadingModeLUNARG
-> DirectDriverLoadingModeLUNARG -> IO ()
DirectDriverLoadingModeLUNARG -> Int
(DirectDriverLoadingModeLUNARG -> Int)
-> (DirectDriverLoadingModeLUNARG -> Int)
-> (Ptr DirectDriverLoadingModeLUNARG
    -> Int -> IO DirectDriverLoadingModeLUNARG)
-> (Ptr DirectDriverLoadingModeLUNARG
    -> Int -> DirectDriverLoadingModeLUNARG -> IO ())
-> (forall b. Ptr b -> Int -> IO DirectDriverLoadingModeLUNARG)
-> (forall b.
    Ptr b -> Int -> DirectDriverLoadingModeLUNARG -> IO ())
-> (Ptr DirectDriverLoadingModeLUNARG
    -> IO DirectDriverLoadingModeLUNARG)
-> (Ptr DirectDriverLoadingModeLUNARG
    -> DirectDriverLoadingModeLUNARG -> IO ())
-> Storable DirectDriverLoadingModeLUNARG
forall b. Ptr b -> Int -> IO DirectDriverLoadingModeLUNARG
forall b. Ptr b -> Int -> DirectDriverLoadingModeLUNARG -> 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
$csizeOf :: DirectDriverLoadingModeLUNARG -> Int
sizeOf :: DirectDriverLoadingModeLUNARG -> Int
$calignment :: DirectDriverLoadingModeLUNARG -> Int
alignment :: DirectDriverLoadingModeLUNARG -> Int
$cpeekElemOff :: Ptr DirectDriverLoadingModeLUNARG
-> Int -> IO DirectDriverLoadingModeLUNARG
peekElemOff :: Ptr DirectDriverLoadingModeLUNARG
-> Int -> IO DirectDriverLoadingModeLUNARG
$cpokeElemOff :: Ptr DirectDriverLoadingModeLUNARG
-> Int -> DirectDriverLoadingModeLUNARG -> IO ()
pokeElemOff :: Ptr DirectDriverLoadingModeLUNARG
-> Int -> DirectDriverLoadingModeLUNARG -> IO ()
$cpeekByteOff :: forall b. Ptr b -> Int -> IO DirectDriverLoadingModeLUNARG
peekByteOff :: forall b. Ptr b -> Int -> IO DirectDriverLoadingModeLUNARG
$cpokeByteOff :: forall b. Ptr b -> Int -> DirectDriverLoadingModeLUNARG -> IO ()
pokeByteOff :: forall b. Ptr b -> Int -> DirectDriverLoadingModeLUNARG -> IO ()
$cpeek :: Ptr DirectDriverLoadingModeLUNARG
-> IO DirectDriverLoadingModeLUNARG
peek :: Ptr DirectDriverLoadingModeLUNARG
-> IO DirectDriverLoadingModeLUNARG
$cpoke :: Ptr DirectDriverLoadingModeLUNARG
-> DirectDriverLoadingModeLUNARG -> IO ()
poke :: Ptr DirectDriverLoadingModeLUNARG
-> DirectDriverLoadingModeLUNARG -> IO ()
Storable, DirectDriverLoadingModeLUNARG
DirectDriverLoadingModeLUNARG -> Zero DirectDriverLoadingModeLUNARG
forall a. a -> Zero a
$czero :: DirectDriverLoadingModeLUNARG
zero :: DirectDriverLoadingModeLUNARG
Zero)

-- | 'DIRECT_DRIVER_LOADING_MODE_EXCLUSIVE_LUNARG' specifies that the
-- provided drivers are used instead of the system-loaded drivers.
pattern $bDIRECT_DRIVER_LOADING_MODE_EXCLUSIVE_LUNARG :: DirectDriverLoadingModeLUNARG
$mDIRECT_DRIVER_LOADING_MODE_EXCLUSIVE_LUNARG :: forall {r}.
DirectDriverLoadingModeLUNARG -> ((# #) -> r) -> ((# #) -> r) -> r
DIRECT_DRIVER_LOADING_MODE_EXCLUSIVE_LUNARG = DirectDriverLoadingModeLUNARG 0

-- | 'DIRECT_DRIVER_LOADING_MODE_INCLUSIVE_LUNARG' specifies that the
-- provided drivers are used in addition to the system-loaded drivers.
pattern $bDIRECT_DRIVER_LOADING_MODE_INCLUSIVE_LUNARG :: DirectDriverLoadingModeLUNARG
$mDIRECT_DRIVER_LOADING_MODE_INCLUSIVE_LUNARG :: forall {r}.
DirectDriverLoadingModeLUNARG -> ((# #) -> r) -> ((# #) -> r) -> r
DIRECT_DRIVER_LOADING_MODE_INCLUSIVE_LUNARG = DirectDriverLoadingModeLUNARG 1

{-# COMPLETE
  DIRECT_DRIVER_LOADING_MODE_EXCLUSIVE_LUNARG
  , DIRECT_DRIVER_LOADING_MODE_INCLUSIVE_LUNARG ::
    DirectDriverLoadingModeLUNARG
  #-}

conNameDirectDriverLoadingModeLUNARG :: String
conNameDirectDriverLoadingModeLUNARG :: String
conNameDirectDriverLoadingModeLUNARG = String
"DirectDriverLoadingModeLUNARG"

enumPrefixDirectDriverLoadingModeLUNARG :: String
enumPrefixDirectDriverLoadingModeLUNARG :: String
enumPrefixDirectDriverLoadingModeLUNARG = String
"DIRECT_DRIVER_LOADING_MODE_"

showTableDirectDriverLoadingModeLUNARG :: [(DirectDriverLoadingModeLUNARG, String)]
showTableDirectDriverLoadingModeLUNARG :: [(DirectDriverLoadingModeLUNARG, String)]
showTableDirectDriverLoadingModeLUNARG =
  [
    ( DirectDriverLoadingModeLUNARG
DIRECT_DRIVER_LOADING_MODE_EXCLUSIVE_LUNARG
    , String
"EXCLUSIVE_LUNARG"
    )
  ,
    ( DirectDriverLoadingModeLUNARG
DIRECT_DRIVER_LOADING_MODE_INCLUSIVE_LUNARG
    , String
"INCLUSIVE_LUNARG"
    )
  ]

instance Show DirectDriverLoadingModeLUNARG where
  showsPrec :: Int -> DirectDriverLoadingModeLUNARG -> ShowS
showsPrec =
    String
-> [(DirectDriverLoadingModeLUNARG, String)]
-> String
-> (DirectDriverLoadingModeLUNARG -> Int32)
-> (Int32 -> ShowS)
-> Int
-> DirectDriverLoadingModeLUNARG
-> ShowS
forall a i.
Eq a =>
String
-> [(a, String)]
-> String
-> (a -> i)
-> (i -> ShowS)
-> Int
-> a
-> ShowS
enumShowsPrec
      String
enumPrefixDirectDriverLoadingModeLUNARG
      [(DirectDriverLoadingModeLUNARG, String)]
showTableDirectDriverLoadingModeLUNARG
      String
conNameDirectDriverLoadingModeLUNARG
      (\(DirectDriverLoadingModeLUNARG Int32
x) -> Int32
x)
      (Int -> Int32 -> ShowS
forall a. Show a => Int -> a -> ShowS
showsPrec Int
11)

instance Read DirectDriverLoadingModeLUNARG where
  readPrec :: ReadPrec DirectDriverLoadingModeLUNARG
readPrec =
    String
-> [(DirectDriverLoadingModeLUNARG, String)]
-> String
-> (Int32 -> DirectDriverLoadingModeLUNARG)
-> ReadPrec DirectDriverLoadingModeLUNARG
forall i a.
Read i =>
String -> [(a, String)] -> String -> (i -> a) -> ReadPrec a
enumReadPrec
      String
enumPrefixDirectDriverLoadingModeLUNARG
      [(DirectDriverLoadingModeLUNARG, String)]
showTableDirectDriverLoadingModeLUNARG
      String
conNameDirectDriverLoadingModeLUNARG
      Int32 -> DirectDriverLoadingModeLUNARG
DirectDriverLoadingModeLUNARG

type FN_vkGetInstanceProcAddrLUNARG = Ptr Instance_T -> ("pName" ::: Ptr CChar) -> IO PFN_vkVoidFunction
-- | PFN_vkGetInstanceProcAddrLUNARG - Type definition for
-- vkGetInstanceProcAddr
--
-- = Description
--
-- This type is compatible with the type of a pointer to the
-- 'Vulkan.Core10.DeviceInitialization.getInstanceProcAddr' command, but is
-- used only to specify device driver addresses in
-- 'DirectDriverLoadingInfoLUNARG'::@pfnGetInstanceProcAddr@.
--
-- Note
--
-- This type exists only because of limitations in the XML schema and
-- processing scripts, and its name may change in the future. Ideally we
-- would use the @PFN_vkGetInstanceProcAddr@ type generated in the
-- @vulkan_core.h@ header.
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_LUNARG_direct_driver_loading VK_LUNARG_direct_driver_loading>,
-- 'DirectDriverLoadingInfoLUNARG'
type PFN_vkGetInstanceProcAddrLUNARG = FunPtr FN_vkGetInstanceProcAddrLUNARG


type LUNARG_DIRECT_DRIVER_LOADING_SPEC_VERSION = 1

-- No documentation found for TopLevel "VK_LUNARG_DIRECT_DRIVER_LOADING_SPEC_VERSION"
pattern LUNARG_DIRECT_DRIVER_LOADING_SPEC_VERSION :: forall a . Integral a => a
pattern $bLUNARG_DIRECT_DRIVER_LOADING_SPEC_VERSION :: forall a. Integral a => a
$mLUNARG_DIRECT_DRIVER_LOADING_SPEC_VERSION :: forall {r} {a}.
Integral a =>
a -> ((# #) -> r) -> ((# #) -> r) -> r
LUNARG_DIRECT_DRIVER_LOADING_SPEC_VERSION = 1


type LUNARG_DIRECT_DRIVER_LOADING_EXTENSION_NAME = "VK_LUNARG_direct_driver_loading"

-- No documentation found for TopLevel "VK_LUNARG_DIRECT_DRIVER_LOADING_EXTENSION_NAME"
pattern LUNARG_DIRECT_DRIVER_LOADING_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
pattern $bLUNARG_DIRECT_DRIVER_LOADING_EXTENSION_NAME :: forall a. (Eq a, IsString a) => a
$mLUNARG_DIRECT_DRIVER_LOADING_EXTENSION_NAME :: forall {r} {a}.
(Eq a, IsString a) =>
a -> ((# #) -> r) -> ((# #) -> r) -> r
LUNARG_DIRECT_DRIVER_LOADING_EXTENSION_NAME = "VK_LUNARG_direct_driver_loading"