{-# language CPP #-}
module Vulkan.Core10.CommandPool ( createCommandPool
, withCommandPool
, destroyCommandPool
, resetCommandPool
, CommandPoolCreateInfo(..)
, CommandPool(..)
, CommandPoolCreateFlagBits(..)
, CommandPoolCreateFlags
, CommandPoolResetFlagBits(..)
, CommandPoolResetFlags
) where
import Vulkan.Internal.Utils (traceAroundEvent)
import Control.Exception.Base (bracket)
import Control.Monad (unless)
import Control.Monad.IO.Class (liftIO)
import Data.Typeable (eqT)
import Foreign.Marshal.Alloc (allocaBytes)
import Foreign.Marshal.Alloc (callocBytes)
import Foreign.Marshal.Alloc (free)
import GHC.Base (when)
import GHC.IO (throwIO)
import GHC.Ptr (castPtr)
import GHC.Ptr (nullFunPtr)
import Foreign.Ptr (nullPtr)
import Foreign.Ptr (plusPtr)
import Control.Monad.Trans.Class (lift)
import Control.Monad.Trans.Cont (evalContT)
import Vulkan.CStruct (FromCStruct)
import Vulkan.CStruct (FromCStruct(..))
import Vulkan.CStruct (ToCStruct)
import Vulkan.CStruct (ToCStruct(..))
import Vulkan.Zero (Zero(..))
import Control.Monad.IO.Class (MonadIO)
import Data.Type.Equality ((:~:)(Refl))
import Data.Typeable (Typeable)
import Foreign.Storable (Storable(peek))
import Foreign.Storable (Storable(poke))
import GHC.Generics (Generic)
import GHC.IO.Exception (IOErrorType(..))
import GHC.IO.Exception (IOException(..))
import Foreign.Ptr (FunPtr)
import Foreign.Ptr (Ptr)
import Data.Word (Word32)
import Data.Kind (Type)
import Control.Monad.Trans.Cont (ContT(..))
import Vulkan.CStruct.Extends (forgetExtensions)
import Vulkan.NamedType ((:::))
import Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
import Vulkan.CStruct.Extends (Chain)
import Vulkan.Core10.Handles (CommandPool)
import Vulkan.Core10.Handles (CommandPool(..))
import Vulkan.Core10.Enums.CommandPoolCreateFlagBits (CommandPoolCreateFlags)
import Vulkan.Core10.Enums.CommandPoolResetFlagBits (CommandPoolResetFlagBits(..))
import Vulkan.Core10.Enums.CommandPoolResetFlagBits (CommandPoolResetFlags)
import {-# SOURCE #-} Vulkan.Extensions.VK_ARM_data_graph (DataGraphProcessingEngineCreateInfoARM)
import Vulkan.Core10.Handles (Device)
import Vulkan.Core10.Handles (Device(..))
import Vulkan.Core10.Handles (Device(Device))
import Vulkan.Dynamic (DeviceCmds(pVkCreateCommandPool))
import Vulkan.Dynamic (DeviceCmds(pVkDestroyCommandPool))
import Vulkan.Dynamic (DeviceCmds(pVkResetCommandPool))
import Vulkan.Core10.Handles (Device_T)
import Vulkan.CStruct.Extends (Extends)
import Vulkan.CStruct.Extends (Extendss)
import Vulkan.CStruct.Extends (Extensible(..))
import Vulkan.CStruct.Extends (PeekChain)
import Vulkan.CStruct.Extends (PeekChain(..))
import Vulkan.CStruct.Extends (PokeChain)
import Vulkan.CStruct.Extends (PokeChain(..))
import Vulkan.Core10.Enums.Result (Result)
import Vulkan.Core10.Enums.Result (Result(..))
import Vulkan.CStruct.Extends (SomeStruct)
import Vulkan.Core10.Enums.StructureType (StructureType)
import Vulkan.Exception (VulkanException(..))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO))
import Vulkan.Core10.Enums.Result (Result(SUCCESS))
import Vulkan.Core10.Handles (CommandPool(..))
import Vulkan.Core10.Enums.CommandPoolCreateFlagBits (CommandPoolCreateFlagBits(..))
import Vulkan.Core10.Enums.CommandPoolCreateFlagBits (CommandPoolCreateFlags)
import Vulkan.Core10.Enums.CommandPoolResetFlagBits (CommandPoolResetFlagBits(..))
import Vulkan.Core10.Enums.CommandPoolResetFlagBits (CommandPoolResetFlags)
foreign import ccall
#if !defined(SAFE_FOREIGN_CALLS)
unsafe
#endif
"dynamic" mkVkCreateCommandPool
:: FunPtr (Ptr Device_T -> Ptr (SomeStruct CommandPoolCreateInfo) -> Ptr AllocationCallbacks -> Ptr CommandPool -> IO Result) -> Ptr Device_T -> Ptr (SomeStruct CommandPoolCreateInfo) -> Ptr AllocationCallbacks -> Ptr CommandPool -> IO Result
createCommandPool :: forall a io
. (Extendss CommandPoolCreateInfo a, PokeChain a, MonadIO io)
=>
Device
->
(CommandPoolCreateInfo a)
->
("allocator" ::: Maybe AllocationCallbacks)
-> io (CommandPool)
createCommandPool :: forall (a :: [*]) (io :: * -> *).
(Extendss CommandPoolCreateInfo a, PokeChain a, MonadIO io) =>
Device
-> CommandPoolCreateInfo a
-> ("allocator" ::: Maybe AllocationCallbacks)
-> io CommandPool
createCommandPool Device
device CommandPoolCreateInfo a
createInfo "allocator" ::: Maybe AllocationCallbacks
allocator = IO CommandPool -> io CommandPool
forall a. IO a -> io a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO CommandPool -> io CommandPool)
-> (ContT CommandPool IO CommandPool -> IO CommandPool)
-> ContT CommandPool IO CommandPool
-> io CommandPool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ContT CommandPool IO CommandPool -> IO CommandPool
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT CommandPool IO CommandPool -> io CommandPool)
-> ContT CommandPool IO CommandPool -> io CommandPool
forall a b. (a -> b) -> a -> b
$ do
let vkCreateCommandPoolPtr :: FunPtr
(Ptr Device_T
-> Ptr (SomeStruct CommandPoolCreateInfo)
-> Ptr AllocationCallbacks
-> Ptr CommandPool
-> IO Result)
vkCreateCommandPoolPtr = DeviceCmds
-> FunPtr
(Ptr Device_T
-> Ptr (SomeStruct CommandPoolCreateInfo)
-> Ptr AllocationCallbacks
-> Ptr CommandPool
-> IO Result)
pVkCreateCommandPool (case Device
device of Device{DeviceCmds
deviceCmds :: DeviceCmds
deviceCmds :: Device -> DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
IO () -> ContT CommandPool IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT CommandPool m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT CommandPool IO ())
-> IO () -> ContT CommandPool IO ()
forall a b. (a -> b) -> a -> b
$ Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (FunPtr
(Ptr Device_T
-> Ptr (SomeStruct CommandPoolCreateInfo)
-> Ptr AllocationCallbacks
-> Ptr CommandPool
-> IO Result)
vkCreateCommandPoolPtr FunPtr
(Ptr Device_T
-> Ptr (SomeStruct CommandPoolCreateInfo)
-> Ptr AllocationCallbacks
-> Ptr CommandPool
-> IO Result)
-> FunPtr
(Ptr Device_T
-> Ptr (SomeStruct CommandPoolCreateInfo)
-> Ptr AllocationCallbacks
-> Ptr CommandPool
-> IO Result)
-> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr
(Ptr Device_T
-> Ptr (SomeStruct CommandPoolCreateInfo)
-> Ptr AllocationCallbacks
-> Ptr CommandPool
-> IO Result)
forall a. FunPtr a
nullFunPtr) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
IOException -> IO ()
forall e a. (HasCallStack, 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 vkCreateCommandPool is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
let vkCreateCommandPool' :: Ptr Device_T
-> Ptr (SomeStruct CommandPoolCreateInfo)
-> Ptr AllocationCallbacks
-> Ptr CommandPool
-> IO Result
vkCreateCommandPool' = FunPtr
(Ptr Device_T
-> Ptr (SomeStruct CommandPoolCreateInfo)
-> Ptr AllocationCallbacks
-> Ptr CommandPool
-> IO Result)
-> Ptr Device_T
-> Ptr (SomeStruct CommandPoolCreateInfo)
-> Ptr AllocationCallbacks
-> Ptr CommandPool
-> IO Result
mkVkCreateCommandPool FunPtr
(Ptr Device_T
-> Ptr (SomeStruct CommandPoolCreateInfo)
-> Ptr AllocationCallbacks
-> Ptr CommandPool
-> IO Result)
vkCreateCommandPoolPtr
pCreateInfo <- ((Ptr (CommandPoolCreateInfo a) -> IO CommandPool)
-> IO CommandPool)
-> ContT CommandPool IO (Ptr (CommandPoolCreateInfo a))
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr (CommandPoolCreateInfo a) -> IO CommandPool)
-> IO CommandPool)
-> ContT CommandPool IO (Ptr (CommandPoolCreateInfo a)))
-> ((Ptr (CommandPoolCreateInfo a) -> IO CommandPool)
-> IO CommandPool)
-> ContT CommandPool IO (Ptr (CommandPoolCreateInfo a))
forall a b. (a -> b) -> a -> b
$ CommandPoolCreateInfo a
-> (Ptr (CommandPoolCreateInfo a) -> IO CommandPool)
-> IO CommandPool
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
forall b.
CommandPoolCreateInfo a
-> (Ptr (CommandPoolCreateInfo a) -> IO b) -> IO b
withCStruct (CommandPoolCreateInfo a
createInfo)
pAllocator <- case (allocator) of
"allocator" ::: Maybe AllocationCallbacks
Nothing -> Ptr AllocationCallbacks
-> ContT CommandPool IO (Ptr AllocationCallbacks)
forall a. a -> ContT CommandPool IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Ptr AllocationCallbacks
forall a. Ptr a
nullPtr
Just AllocationCallbacks
j -> ((Ptr AllocationCallbacks -> IO CommandPool) -> IO CommandPool)
-> ContT CommandPool IO (Ptr AllocationCallbacks)
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr AllocationCallbacks -> IO CommandPool) -> IO CommandPool)
-> ContT CommandPool IO (Ptr AllocationCallbacks))
-> ((Ptr AllocationCallbacks -> IO CommandPool) -> IO CommandPool)
-> ContT CommandPool IO (Ptr AllocationCallbacks)
forall a b. (a -> b) -> a -> b
$ AllocationCallbacks
-> (Ptr AllocationCallbacks -> IO CommandPool) -> IO CommandPool
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
forall b.
AllocationCallbacks -> (Ptr AllocationCallbacks -> IO b) -> IO b
withCStruct (AllocationCallbacks
j)
pPCommandPool <- ContT $ bracket (callocBytes @CommandPool 8) free
r <- lift $ traceAroundEvent "vkCreateCommandPool" (vkCreateCommandPool'
(deviceHandle (device))
(forgetExtensions pCreateInfo)
pAllocator
(pPCommandPool))
lift $ when (r < SUCCESS) (throwIO (VulkanException r))
pCommandPool <- lift $ peek @CommandPool pPCommandPool
pure $ (pCommandPool)
withCommandPool :: forall a io r . (Extendss CommandPoolCreateInfo a, PokeChain a, MonadIO io) => Device -> CommandPoolCreateInfo a -> Maybe AllocationCallbacks -> (io CommandPool -> (CommandPool -> io ()) -> r) -> r
withCommandPool :: forall (a :: [*]) (io :: * -> *) r.
(Extendss CommandPoolCreateInfo a, PokeChain a, MonadIO io) =>
Device
-> CommandPoolCreateInfo a
-> ("allocator" ::: Maybe AllocationCallbacks)
-> (io CommandPool -> (CommandPool -> io ()) -> r)
-> r
withCommandPool Device
device CommandPoolCreateInfo a
pCreateInfo "allocator" ::: Maybe AllocationCallbacks
pAllocator io CommandPool -> (CommandPool -> io ()) -> r
b =
io CommandPool -> (CommandPool -> io ()) -> r
b (Device
-> CommandPoolCreateInfo a
-> ("allocator" ::: Maybe AllocationCallbacks)
-> io CommandPool
forall (a :: [*]) (io :: * -> *).
(Extendss CommandPoolCreateInfo a, PokeChain a, MonadIO io) =>
Device
-> CommandPoolCreateInfo a
-> ("allocator" ::: Maybe AllocationCallbacks)
-> io CommandPool
createCommandPool Device
device CommandPoolCreateInfo a
pCreateInfo "allocator" ::: Maybe AllocationCallbacks
pAllocator)
(\(CommandPool
o0) -> Device
-> CommandPool
-> ("allocator" ::: Maybe AllocationCallbacks)
-> io ()
forall (io :: * -> *).
MonadIO io =>
Device
-> CommandPool
-> ("allocator" ::: Maybe AllocationCallbacks)
-> io ()
destroyCommandPool Device
device CommandPool
o0 "allocator" ::: Maybe AllocationCallbacks
pAllocator)
foreign import ccall
#if !defined(SAFE_FOREIGN_CALLS)
unsafe
#endif
"dynamic" mkVkDestroyCommandPool
:: FunPtr (Ptr Device_T -> CommandPool -> Ptr AllocationCallbacks -> IO ()) -> Ptr Device_T -> CommandPool -> Ptr AllocationCallbacks -> IO ()
destroyCommandPool :: forall io
. (MonadIO io)
=>
Device
->
CommandPool
->
("allocator" ::: Maybe AllocationCallbacks)
-> io ()
destroyCommandPool :: forall (io :: * -> *).
MonadIO io =>
Device
-> CommandPool
-> ("allocator" ::: Maybe AllocationCallbacks)
-> io ()
destroyCommandPool Device
device CommandPool
commandPool "allocator" ::: Maybe AllocationCallbacks
allocator = IO () -> io ()
forall a. IO a -> io a
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 vkDestroyCommandPoolPtr :: FunPtr
(Ptr Device_T -> CommandPool -> Ptr AllocationCallbacks -> IO ())
vkDestroyCommandPoolPtr = DeviceCmds
-> FunPtr
(Ptr Device_T -> CommandPool -> Ptr AllocationCallbacks -> IO ())
pVkDestroyCommandPool (case Device
device of Device{DeviceCmds
deviceCmds :: Device -> DeviceCmds
deviceCmds :: DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
IO () -> ContT () IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT () m a
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 -> CommandPool -> Ptr AllocationCallbacks -> IO ())
vkDestroyCommandPoolPtr FunPtr
(Ptr Device_T -> CommandPool -> Ptr AllocationCallbacks -> IO ())
-> FunPtr
(Ptr Device_T -> CommandPool -> Ptr AllocationCallbacks -> IO ())
-> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr
(Ptr Device_T -> CommandPool -> Ptr AllocationCallbacks -> IO ())
forall a. FunPtr a
nullFunPtr) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
IOException -> IO ()
forall e a. (HasCallStack, 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 vkDestroyCommandPool is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
let vkDestroyCommandPool' :: Ptr Device_T -> CommandPool -> Ptr AllocationCallbacks -> IO ()
vkDestroyCommandPool' = FunPtr
(Ptr Device_T -> CommandPool -> Ptr AllocationCallbacks -> IO ())
-> Ptr Device_T -> CommandPool -> Ptr AllocationCallbacks -> IO ()
mkVkDestroyCommandPool FunPtr
(Ptr Device_T -> CommandPool -> Ptr AllocationCallbacks -> IO ())
vkDestroyCommandPoolPtr
pAllocator <- case ("allocator" ::: Maybe AllocationCallbacks
allocator) of
"allocator" ::: Maybe AllocationCallbacks
Nothing -> Ptr AllocationCallbacks -> ContT () IO (Ptr AllocationCallbacks)
forall a. a -> ContT () IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Ptr AllocationCallbacks
forall a. Ptr a
nullPtr
Just AllocationCallbacks
j -> ((Ptr AllocationCallbacks -> IO ()) -> IO ())
-> ContT () IO (Ptr AllocationCallbacks)
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr AllocationCallbacks -> IO ()) -> IO ())
-> ContT () IO (Ptr AllocationCallbacks))
-> ((Ptr AllocationCallbacks -> IO ()) -> IO ())
-> ContT () IO (Ptr AllocationCallbacks)
forall a b. (a -> b) -> a -> b
$ AllocationCallbacks -> (Ptr AllocationCallbacks -> IO ()) -> IO ()
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
forall b.
AllocationCallbacks -> (Ptr AllocationCallbacks -> IO b) -> IO b
withCStruct (AllocationCallbacks
j)
lift $ traceAroundEvent "vkDestroyCommandPool" (vkDestroyCommandPool'
(deviceHandle (device))
(commandPool)
pAllocator)
pure $ ()
foreign import ccall
#if !defined(SAFE_FOREIGN_CALLS)
unsafe
#endif
"dynamic" mkVkResetCommandPool
:: FunPtr (Ptr Device_T -> CommandPool -> CommandPoolResetFlags -> IO Result) -> Ptr Device_T -> CommandPool -> CommandPoolResetFlags -> IO Result
resetCommandPool :: forall io
. (MonadIO io)
=>
Device
->
CommandPool
->
CommandPoolResetFlags
-> io ()
resetCommandPool :: forall (io :: * -> *).
MonadIO io =>
Device -> CommandPool -> CommandPoolResetFlags -> io ()
resetCommandPool Device
device CommandPool
commandPool CommandPoolResetFlags
flags = IO () -> io ()
forall a. IO a -> io a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> io ()) -> IO () -> io ()
forall a b. (a -> b) -> a -> b
$ do
let vkResetCommandPoolPtr :: FunPtr
(Ptr Device_T -> CommandPool -> CommandPoolResetFlags -> IO Result)
vkResetCommandPoolPtr = DeviceCmds
-> FunPtr
(Ptr Device_T -> CommandPool -> CommandPoolResetFlags -> IO Result)
pVkResetCommandPool (case Device
device of Device{DeviceCmds
deviceCmds :: Device -> DeviceCmds
deviceCmds :: DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (FunPtr
(Ptr Device_T -> CommandPool -> CommandPoolResetFlags -> IO Result)
vkResetCommandPoolPtr FunPtr
(Ptr Device_T -> CommandPool -> CommandPoolResetFlags -> IO Result)
-> FunPtr
(Ptr Device_T -> CommandPool -> CommandPoolResetFlags -> IO Result)
-> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr
(Ptr Device_T -> CommandPool -> CommandPoolResetFlags -> IO Result)
forall a. FunPtr a
nullFunPtr) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
IOException -> IO ()
forall e a. (HasCallStack, 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 vkResetCommandPool is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
let vkResetCommandPool' :: Ptr Device_T -> CommandPool -> CommandPoolResetFlags -> IO Result
vkResetCommandPool' = FunPtr
(Ptr Device_T -> CommandPool -> CommandPoolResetFlags -> IO Result)
-> Ptr Device_T
-> CommandPool
-> CommandPoolResetFlags
-> IO Result
mkVkResetCommandPool FunPtr
(Ptr Device_T -> CommandPool -> CommandPoolResetFlags -> IO Result)
vkResetCommandPoolPtr
r <- String -> IO Result -> IO Result
forall a. String -> IO a -> IO a
traceAroundEvent String
"vkResetCommandPool" (Ptr Device_T -> CommandPool -> CommandPoolResetFlags -> IO Result
vkResetCommandPool'
(Device -> Ptr Device_T
deviceHandle (Device
device))
(CommandPool
commandPool)
(CommandPoolResetFlags
flags))
when (r < SUCCESS) (throwIO (VulkanException r))
data CommandPoolCreateInfo (es :: [Type]) = CommandPoolCreateInfo
{
forall (es :: [*]). CommandPoolCreateInfo es -> Chain es
next :: Chain es
,
forall (es :: [*]).
CommandPoolCreateInfo es -> CommandPoolCreateFlags
flags :: CommandPoolCreateFlags
,
forall (es :: [*]). CommandPoolCreateInfo es -> Word32
queueFamilyIndex :: Word32
}
deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (CommandPoolCreateInfo (es :: [Type]))
#endif
deriving instance Show (Chain es) => Show (CommandPoolCreateInfo es)
instance Extensible CommandPoolCreateInfo where
extensibleTypeName :: String
extensibleTypeName = String
"CommandPoolCreateInfo"
setNext :: forall (ds :: [*]) (es :: [*]).
CommandPoolCreateInfo ds -> Chain es -> CommandPoolCreateInfo es
setNext CommandPoolCreateInfo{Word32
CommandPoolCreateFlags
Chain ds
next :: forall (es :: [*]). CommandPoolCreateInfo es -> Chain es
flags :: forall (es :: [*]).
CommandPoolCreateInfo es -> CommandPoolCreateFlags
queueFamilyIndex :: forall (es :: [*]). CommandPoolCreateInfo es -> Word32
next :: Chain ds
flags :: CommandPoolCreateFlags
queueFamilyIndex :: Word32
..} Chain es
next' = CommandPoolCreateInfo{next :: Chain es
next = Chain es
next', Word32
CommandPoolCreateFlags
flags :: CommandPoolCreateFlags
queueFamilyIndex :: Word32
flags :: CommandPoolCreateFlags
queueFamilyIndex :: Word32
..}
getNext :: forall (es :: [*]). CommandPoolCreateInfo es -> Chain es
getNext CommandPoolCreateInfo{Word32
CommandPoolCreateFlags
Chain es
next :: forall (es :: [*]). CommandPoolCreateInfo es -> Chain es
flags :: forall (es :: [*]).
CommandPoolCreateInfo es -> CommandPoolCreateFlags
queueFamilyIndex :: forall (es :: [*]). CommandPoolCreateInfo es -> Word32
next :: Chain es
flags :: CommandPoolCreateFlags
queueFamilyIndex :: Word32
..} = Chain es
next
extends :: forall e b proxy. Typeable e => proxy e -> (Extends CommandPoolCreateInfo e => b) -> Maybe b
extends :: forall e b (proxy :: * -> *).
Typeable e =>
proxy e -> (Extends CommandPoolCreateInfo e => b) -> Maybe b
extends proxy e
_ Extends CommandPoolCreateInfo e => b
f
| Just e :~: DataGraphProcessingEngineCreateInfoARM
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @DataGraphProcessingEngineCreateInfoARM = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends CommandPoolCreateInfo e => b
f
| Bool
otherwise = Maybe b
forall a. Maybe a
Nothing
instance ( Extendss CommandPoolCreateInfo es
, PokeChain es ) => ToCStruct (CommandPoolCreateInfo es) where
withCStruct :: forall b.
CommandPoolCreateInfo es
-> (Ptr (CommandPoolCreateInfo es) -> IO b) -> IO b
withCStruct CommandPoolCreateInfo es
x Ptr (CommandPoolCreateInfo es) -> IO b
f = Int -> (Ptr (CommandPoolCreateInfo es) -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
24 ((Ptr (CommandPoolCreateInfo es) -> IO b) -> IO b)
-> (Ptr (CommandPoolCreateInfo es) -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr (CommandPoolCreateInfo es)
p -> Ptr (CommandPoolCreateInfo es)
-> CommandPoolCreateInfo es -> IO b -> IO b
forall b.
Ptr (CommandPoolCreateInfo es)
-> CommandPoolCreateInfo es -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr (CommandPoolCreateInfo es)
p CommandPoolCreateInfo es
x (Ptr (CommandPoolCreateInfo es) -> IO b
f Ptr (CommandPoolCreateInfo es)
p)
pokeCStruct :: forall b.
Ptr (CommandPoolCreateInfo es)
-> CommandPoolCreateInfo es -> IO b -> IO b
pokeCStruct Ptr (CommandPoolCreateInfo es)
p CommandPoolCreateInfo{Word32
CommandPoolCreateFlags
Chain es
next :: forall (es :: [*]). CommandPoolCreateInfo es -> Chain es
flags :: forall (es :: [*]).
CommandPoolCreateInfo es -> CommandPoolCreateFlags
queueFamilyIndex :: forall (es :: [*]). CommandPoolCreateInfo es -> Word32
next :: Chain es
flags :: CommandPoolCreateFlags
queueFamilyIndex :: Word32
..} 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 (CommandPoolCreateInfo es)
p Ptr (CommandPoolCreateInfo es) -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO)
pNext'' <- (Ptr (Chain es) -> Ptr ())
-> ContT b IO (Ptr (Chain es)) -> ContT b IO (Ptr ())
forall a b. (a -> b) -> ContT b IO a -> ContT b IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Ptr (Chain es) -> Ptr ()
forall a b. Ptr a -> Ptr b
castPtr (ContT b IO (Ptr (Chain es)) -> ContT b IO (Ptr ()))
-> (((Ptr (Chain es) -> IO b) -> IO b)
-> ContT b IO (Ptr (Chain es)))
-> ((Ptr (Chain es) -> IO b) -> IO b)
-> ContT b IO (Ptr ())
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((Ptr (Chain es) -> IO b) -> IO b) -> ContT b IO (Ptr (Chain es))
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr (Chain es) -> IO b) -> IO b) -> ContT b IO (Ptr ()))
-> ((Ptr (Chain es) -> IO b) -> IO b) -> ContT b IO (Ptr ())
forall a b. (a -> b) -> a -> b
$ Chain es -> (Ptr (Chain es) -> IO b) -> IO b
forall (es :: [*]) a.
PokeChain es =>
Chain es -> (Ptr (Chain es) -> IO a) -> IO a
forall a. Chain es -> (Ptr (Chain es) -> IO a) -> IO a
withChain (Chain es
next)
lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
lift $ poke ((p `plusPtr` 16 :: Ptr CommandPoolCreateFlags)) (flags)
lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) (queueFamilyIndex)
lift $ f
cStructSize :: Int
cStructSize = Int
24
cStructAlignment :: Int
cStructAlignment = Int
8
pokeZeroCStruct :: forall b. Ptr (CommandPoolCreateInfo es) -> IO b -> IO b
pokeZeroCStruct Ptr (CommandPoolCreateInfo es)
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 (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 (CommandPoolCreateInfo es)
p Ptr (CommandPoolCreateInfo es) -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO)
pNext' <- (Ptr (Chain es) -> Ptr ())
-> ContT b IO (Ptr (Chain es)) -> ContT b IO (Ptr ())
forall a b. (a -> b) -> ContT b IO a -> ContT b IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Ptr (Chain es) -> Ptr ()
forall a b. Ptr a -> Ptr b
castPtr (ContT b IO (Ptr (Chain es)) -> ContT b IO (Ptr ()))
-> (((Ptr (Chain es) -> IO b) -> IO b)
-> ContT b IO (Ptr (Chain es)))
-> ((Ptr (Chain es) -> IO b) -> IO b)
-> ContT b IO (Ptr ())
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((Ptr (Chain es) -> IO b) -> IO b) -> ContT b IO (Ptr (Chain es))
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr (Chain es) -> IO b) -> IO b) -> ContT b IO (Ptr ()))
-> ((Ptr (Chain es) -> IO b) -> IO b) -> ContT b IO (Ptr ())
forall a b. (a -> b) -> a -> b
$ forall (es :: [*]) a.
PokeChain es =>
(Ptr (Chain es) -> IO a) -> IO a
withZeroChain @es
lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) (zero)
lift $ f
instance ( Extendss CommandPoolCreateInfo es
, PeekChain es ) => FromCStruct (CommandPoolCreateInfo es) where
peekCStruct :: Ptr (CommandPoolCreateInfo es) -> IO (CommandPoolCreateInfo es)
peekCStruct Ptr (CommandPoolCreateInfo es)
p = do
pNext <- forall a. Storable a => Ptr a -> IO a
peek @(Ptr ()) ((Ptr (CommandPoolCreateInfo es)
p Ptr (CommandPoolCreateInfo es) -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ())))
next <- peekChain (castPtr pNext)
flags <- peek @CommandPoolCreateFlags ((p `plusPtr` 16 :: Ptr CommandPoolCreateFlags))
queueFamilyIndex <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
pure $ CommandPoolCreateInfo
next flags queueFamilyIndex
instance es ~ '[] => Zero (CommandPoolCreateInfo es) where
zero :: CommandPoolCreateInfo es
zero = Chain es
-> CommandPoolCreateFlags -> Word32 -> CommandPoolCreateInfo es
forall (es :: [*]).
Chain es
-> CommandPoolCreateFlags -> Word32 -> CommandPoolCreateInfo es
CommandPoolCreateInfo
()
CommandPoolCreateFlags
forall a. Zero a => a
zero
Word32
forall a. Zero a => a
zero