{-# language CPP #-}
module Vulkan.Core11.Promoted_From_VK_KHR_device_group ( getDeviceGroupPeerMemoryFeatures
, cmdSetDeviceMask
, cmdDispatchBase
, pattern PIPELINE_CREATE_DISPATCH_BASE
, MemoryAllocateFlagsInfo(..)
, DeviceGroupRenderPassBeginInfo(..)
, DeviceGroupCommandBufferBeginInfo(..)
, DeviceGroupSubmitInfo(..)
, DeviceGroupBindSparseInfo(..)
, StructureType(..)
, PipelineCreateFlagBits(..)
, PipelineCreateFlags
, DependencyFlagBits(..)
, DependencyFlags
, PeerMemoryFeatureFlagBits(..)
, PeerMemoryFeatureFlags
, MemoryAllocateFlagBits(..)
, MemoryAllocateFlags
) where
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 GHC.IO (throwIO)
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 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 Control.Monad.IO.Class (MonadIO)
import Data.Typeable (Typeable)
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 Foreign.Ptr (FunPtr)
import Foreign.Ptr (Ptr)
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.Handles (CommandBuffer)
import Vulkan.Core10.Handles (CommandBuffer(..))
import Vulkan.Core10.Handles (CommandBuffer(CommandBuffer))
import Vulkan.Core10.Handles (CommandBuffer_T)
import Vulkan.Core10.Handles (Device)
import Vulkan.Core10.Handles (Device(..))
import Vulkan.Core10.Handles (Device(Device))
import Vulkan.Dynamic (DeviceCmds(pVkCmdDispatchBase))
import Vulkan.Dynamic (DeviceCmds(pVkCmdSetDeviceMask))
import Vulkan.Dynamic (DeviceCmds(pVkGetDeviceGroupPeerMemoryFeatures))
import Vulkan.Core10.Handles (Device_T)
import Vulkan.Core11.Enums.MemoryAllocateFlagBits (MemoryAllocateFlags)
import Vulkan.Core11.Enums.PeerMemoryFeatureFlagBits (PeerMemoryFeatureFlagBits(..))
import Vulkan.Core11.Enums.PeerMemoryFeatureFlagBits (PeerMemoryFeatureFlags)
import Vulkan.Core10.FundamentalTypes (Rect2D)
import Vulkan.Core10.Enums.StructureType (StructureType)
import Vulkan.Core10.Enums.PipelineCreateFlagBits (PipelineCreateFlags)
import Vulkan.Core10.Enums.PipelineCreateFlagBits (PipelineCreateFlagBits(PIPELINE_CREATE_DISPATCH_BASE_BIT))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO))
import Vulkan.Core10.Enums.DependencyFlagBits (DependencyFlagBits(..))
import Vulkan.Core10.Enums.DependencyFlagBits (DependencyFlags)
import Vulkan.Core11.Enums.MemoryAllocateFlagBits (MemoryAllocateFlagBits(..))
import Vulkan.Core11.Enums.MemoryAllocateFlagBits (MemoryAllocateFlags)
import Vulkan.Core11.Enums.PeerMemoryFeatureFlagBits (PeerMemoryFeatureFlagBits(..))
import Vulkan.Core11.Enums.PeerMemoryFeatureFlagBits (PeerMemoryFeatureFlags)
import Vulkan.Core10.Enums.PipelineCreateFlagBits (PipelineCreateFlagBits(..))
import Vulkan.Core10.Enums.PipelineCreateFlagBits (PipelineCreateFlags)
import Vulkan.Core10.Enums.StructureType (StructureType(..))
foreign import ccall
#if !defined(SAFE_FOREIGN_CALLS)
unsafe
#endif
"dynamic" mkVkGetDeviceGroupPeerMemoryFeatures
:: FunPtr (Ptr Device_T -> Word32 -> Word32 -> Word32 -> Ptr PeerMemoryFeatureFlags -> IO ()) -> Ptr Device_T -> Word32 -> Word32 -> Word32 -> Ptr PeerMemoryFeatureFlags -> IO ()
getDeviceGroupPeerMemoryFeatures :: forall io
. (MonadIO io)
=>
Device
->
("heapIndex" ::: Word32)
->
("localDeviceIndex" ::: Word32)
->
("remoteDeviceIndex" ::: Word32)
-> io (("peerMemoryFeatures" ::: PeerMemoryFeatureFlags))
getDeviceGroupPeerMemoryFeatures :: forall (io :: * -> *).
MonadIO io =>
Device
-> ("heapIndex" ::: Word32)
-> ("heapIndex" ::: Word32)
-> ("heapIndex" ::: Word32)
-> io ("peerMemoryFeatures" ::: PeerMemoryFeatureFlags)
getDeviceGroupPeerMemoryFeatures Device
device
"heapIndex" ::: Word32
heapIndex
"heapIndex" ::: Word32
localDeviceIndex
"heapIndex" ::: Word32
remoteDeviceIndex = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT forall a b. (a -> b) -> a -> b
$ do
let vkGetDeviceGroupPeerMemoryFeaturesPtr :: FunPtr
(Ptr Device_T
-> ("heapIndex" ::: Word32)
-> ("heapIndex" ::: Word32)
-> ("heapIndex" ::: Word32)
-> ("pPeerMemoryFeatures"
::: Ptr ("peerMemoryFeatures" ::: PeerMemoryFeatureFlags))
-> IO ())
vkGetDeviceGroupPeerMemoryFeaturesPtr = DeviceCmds
-> FunPtr
(Ptr Device_T
-> ("heapIndex" ::: Word32)
-> ("heapIndex" ::: Word32)
-> ("heapIndex" ::: Word32)
-> ("pPeerMemoryFeatures"
::: Ptr ("peerMemoryFeatures" ::: PeerMemoryFeatureFlags))
-> IO ())
pVkGetDeviceGroupPeerMemoryFeatures (case Device
device of Device{DeviceCmds
$sel:deviceCmds:Device :: Device -> DeviceCmds
deviceCmds :: DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift forall a b. (a -> b) -> a -> b
$ forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (FunPtr
(Ptr Device_T
-> ("heapIndex" ::: Word32)
-> ("heapIndex" ::: Word32)
-> ("heapIndex" ::: Word32)
-> ("pPeerMemoryFeatures"
::: Ptr ("peerMemoryFeatures" ::: PeerMemoryFeatureFlags))
-> IO ())
vkGetDeviceGroupPeerMemoryFeaturesPtr forall a. Eq a => a -> a -> Bool
/= forall a. FunPtr a
nullFunPtr) forall a b. (a -> b) -> a -> b
$
forall e a. Exception e => e -> IO a
throwIO forall a b. (a -> b) -> a -> b
$ Maybe Handle
-> IOErrorType
-> String
-> String
-> Maybe CInt
-> Maybe String
-> IOException
IOError forall a. Maybe a
Nothing IOErrorType
InvalidArgument String
"" String
"The function pointer for vkGetDeviceGroupPeerMemoryFeatures is null" forall a. Maybe a
Nothing forall a. Maybe a
Nothing
let vkGetDeviceGroupPeerMemoryFeatures' :: Ptr Device_T
-> ("heapIndex" ::: Word32)
-> ("heapIndex" ::: Word32)
-> ("heapIndex" ::: Word32)
-> ("pPeerMemoryFeatures"
::: Ptr ("peerMemoryFeatures" ::: PeerMemoryFeatureFlags))
-> IO ()
vkGetDeviceGroupPeerMemoryFeatures' = FunPtr
(Ptr Device_T
-> ("heapIndex" ::: Word32)
-> ("heapIndex" ::: Word32)
-> ("heapIndex" ::: Word32)
-> ("pPeerMemoryFeatures"
::: Ptr ("peerMemoryFeatures" ::: PeerMemoryFeatureFlags))
-> IO ())
-> Ptr Device_T
-> ("heapIndex" ::: Word32)
-> ("heapIndex" ::: Word32)
-> ("heapIndex" ::: Word32)
-> ("pPeerMemoryFeatures"
::: Ptr ("peerMemoryFeatures" ::: PeerMemoryFeatureFlags))
-> IO ()
mkVkGetDeviceGroupPeerMemoryFeatures FunPtr
(Ptr Device_T
-> ("heapIndex" ::: Word32)
-> ("heapIndex" ::: Word32)
-> ("heapIndex" ::: Word32)
-> ("pPeerMemoryFeatures"
::: Ptr ("peerMemoryFeatures" ::: PeerMemoryFeatureFlags))
-> IO ())
vkGetDeviceGroupPeerMemoryFeaturesPtr
"pPeerMemoryFeatures"
::: Ptr ("peerMemoryFeatures" ::: PeerMemoryFeatureFlags)
pPPeerMemoryFeatures <- forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT forall a b. (a -> b) -> a -> b
$ forall a b c. IO a -> (a -> IO b) -> (a -> IO c) -> IO c
bracket (forall a. Int -> IO (Ptr a)
callocBytes @PeerMemoryFeatureFlags Int
4) forall a. Ptr a -> IO ()
free
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift forall a b. (a -> b) -> a -> b
$ forall a. String -> IO a -> IO a
traceAroundEvent String
"vkGetDeviceGroupPeerMemoryFeatures" (Ptr Device_T
-> ("heapIndex" ::: Word32)
-> ("heapIndex" ::: Word32)
-> ("heapIndex" ::: Word32)
-> ("pPeerMemoryFeatures"
::: Ptr ("peerMemoryFeatures" ::: PeerMemoryFeatureFlags))
-> IO ()
vkGetDeviceGroupPeerMemoryFeatures'
(Device -> Ptr Device_T
deviceHandle (Device
device))
("heapIndex" ::: Word32
heapIndex)
("heapIndex" ::: Word32
localDeviceIndex)
("heapIndex" ::: Word32
remoteDeviceIndex)
("pPeerMemoryFeatures"
::: Ptr ("peerMemoryFeatures" ::: PeerMemoryFeatureFlags)
pPPeerMemoryFeatures))
"peerMemoryFeatures" ::: PeerMemoryFeatureFlags
pPeerMemoryFeatures <- forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift forall a b. (a -> b) -> a -> b
$ forall a. Storable a => Ptr a -> IO a
peek @PeerMemoryFeatureFlags "pPeerMemoryFeatures"
::: Ptr ("peerMemoryFeatures" ::: PeerMemoryFeatureFlags)
pPPeerMemoryFeatures
forall (f :: * -> *) a. Applicative f => a -> f a
pure forall a b. (a -> b) -> a -> b
$ ("peerMemoryFeatures" ::: PeerMemoryFeatureFlags
pPeerMemoryFeatures)
foreign import ccall
#if !defined(SAFE_FOREIGN_CALLS)
unsafe
#endif
"dynamic" mkVkCmdSetDeviceMask
:: FunPtr (Ptr CommandBuffer_T -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> IO ()
cmdSetDeviceMask :: forall io
. (MonadIO io)
=>
CommandBuffer
->
("deviceMask" ::: Word32)
-> io ()
cmdSetDeviceMask :: forall (io :: * -> *).
MonadIO io =>
CommandBuffer -> ("heapIndex" ::: Word32) -> io ()
cmdSetDeviceMask CommandBuffer
commandBuffer "heapIndex" ::: Word32
deviceMask = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall a b. (a -> b) -> a -> b
$ do
let vkCmdSetDeviceMaskPtr :: FunPtr (Ptr CommandBuffer_T -> ("heapIndex" ::: Word32) -> IO ())
vkCmdSetDeviceMaskPtr = DeviceCmds
-> FunPtr
(Ptr CommandBuffer_T -> ("heapIndex" ::: Word32) -> IO ())
pVkCmdSetDeviceMask (case CommandBuffer
commandBuffer of CommandBuffer{DeviceCmds
$sel:deviceCmds:CommandBuffer :: CommandBuffer -> DeviceCmds
deviceCmds :: DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (FunPtr (Ptr CommandBuffer_T -> ("heapIndex" ::: Word32) -> IO ())
vkCmdSetDeviceMaskPtr forall a. Eq a => a -> a -> Bool
/= forall a. FunPtr a
nullFunPtr) forall a b. (a -> b) -> a -> b
$
forall e a. Exception e => e -> IO a
throwIO forall a b. (a -> b) -> a -> b
$ Maybe Handle
-> IOErrorType
-> String
-> String
-> Maybe CInt
-> Maybe String
-> IOException
IOError forall a. Maybe a
Nothing IOErrorType
InvalidArgument String
"" String
"The function pointer for vkCmdSetDeviceMask is null" forall a. Maybe a
Nothing forall a. Maybe a
Nothing
let vkCmdSetDeviceMask' :: Ptr CommandBuffer_T -> ("heapIndex" ::: Word32) -> IO ()
vkCmdSetDeviceMask' = FunPtr (Ptr CommandBuffer_T -> ("heapIndex" ::: Word32) -> IO ())
-> Ptr CommandBuffer_T -> ("heapIndex" ::: Word32) -> IO ()
mkVkCmdSetDeviceMask FunPtr (Ptr CommandBuffer_T -> ("heapIndex" ::: Word32) -> IO ())
vkCmdSetDeviceMaskPtr
forall a. String -> IO a -> IO a
traceAroundEvent String
"vkCmdSetDeviceMask" (Ptr CommandBuffer_T -> ("heapIndex" ::: Word32) -> IO ()
vkCmdSetDeviceMask'
(CommandBuffer -> Ptr CommandBuffer_T
commandBufferHandle (CommandBuffer
commandBuffer))
("heapIndex" ::: Word32
deviceMask))
forall (f :: * -> *) a. Applicative f => a -> f a
pure forall a b. (a -> b) -> a -> b
$ ()
foreign import ccall
#if !defined(SAFE_FOREIGN_CALLS)
unsafe
#endif
"dynamic" mkVkCmdDispatchBase
:: FunPtr (Ptr CommandBuffer_T -> Word32 -> Word32 -> Word32 -> Word32 -> Word32 -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Word32 -> Word32 -> Word32 -> Word32 -> Word32 -> IO ()
cmdDispatchBase :: forall io
. (MonadIO io)
=>
CommandBuffer
->
("baseGroupX" ::: Word32)
->
("baseGroupY" ::: Word32)
->
("baseGroupZ" ::: Word32)
->
("groupCountX" ::: Word32)
->
("groupCountY" ::: Word32)
->
("groupCountZ" ::: Word32)
-> io ()
cmdDispatchBase :: forall (io :: * -> *).
MonadIO io =>
CommandBuffer
-> ("heapIndex" ::: Word32)
-> ("heapIndex" ::: Word32)
-> ("heapIndex" ::: Word32)
-> ("heapIndex" ::: Word32)
-> ("heapIndex" ::: Word32)
-> ("heapIndex" ::: Word32)
-> io ()
cmdDispatchBase CommandBuffer
commandBuffer
"heapIndex" ::: Word32
baseGroupX
"heapIndex" ::: Word32
baseGroupY
"heapIndex" ::: Word32
baseGroupZ
"heapIndex" ::: Word32
groupCountX
"heapIndex" ::: Word32
groupCountY
"heapIndex" ::: Word32
groupCountZ = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall a b. (a -> b) -> a -> b
$ do
let vkCmdDispatchBasePtr :: FunPtr
(Ptr CommandBuffer_T
-> ("heapIndex" ::: Word32)
-> ("heapIndex" ::: Word32)
-> ("heapIndex" ::: Word32)
-> ("heapIndex" ::: Word32)
-> ("heapIndex" ::: Word32)
-> ("heapIndex" ::: Word32)
-> IO ())
vkCmdDispatchBasePtr = DeviceCmds
-> FunPtr
(Ptr CommandBuffer_T
-> ("heapIndex" ::: Word32)
-> ("heapIndex" ::: Word32)
-> ("heapIndex" ::: Word32)
-> ("heapIndex" ::: Word32)
-> ("heapIndex" ::: Word32)
-> ("heapIndex" ::: Word32)
-> IO ())
pVkCmdDispatchBase (case CommandBuffer
commandBuffer of CommandBuffer{DeviceCmds
deviceCmds :: DeviceCmds
$sel:deviceCmds:CommandBuffer :: CommandBuffer -> DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (FunPtr
(Ptr CommandBuffer_T
-> ("heapIndex" ::: Word32)
-> ("heapIndex" ::: Word32)
-> ("heapIndex" ::: Word32)
-> ("heapIndex" ::: Word32)
-> ("heapIndex" ::: Word32)
-> ("heapIndex" ::: Word32)
-> IO ())
vkCmdDispatchBasePtr forall a. Eq a => a -> a -> Bool
/= forall a. FunPtr a
nullFunPtr) forall a b. (a -> b) -> a -> b
$
forall e a. Exception e => e -> IO a
throwIO forall a b. (a -> b) -> a -> b
$ Maybe Handle
-> IOErrorType
-> String
-> String
-> Maybe CInt
-> Maybe String
-> IOException
IOError forall a. Maybe a
Nothing IOErrorType
InvalidArgument String
"" String
"The function pointer for vkCmdDispatchBase is null" forall a. Maybe a
Nothing forall a. Maybe a
Nothing
let vkCmdDispatchBase' :: Ptr CommandBuffer_T
-> ("heapIndex" ::: Word32)
-> ("heapIndex" ::: Word32)
-> ("heapIndex" ::: Word32)
-> ("heapIndex" ::: Word32)
-> ("heapIndex" ::: Word32)
-> ("heapIndex" ::: Word32)
-> IO ()
vkCmdDispatchBase' = FunPtr
(Ptr CommandBuffer_T
-> ("heapIndex" ::: Word32)
-> ("heapIndex" ::: Word32)
-> ("heapIndex" ::: Word32)
-> ("heapIndex" ::: Word32)
-> ("heapIndex" ::: Word32)
-> ("heapIndex" ::: Word32)
-> IO ())
-> Ptr CommandBuffer_T
-> ("heapIndex" ::: Word32)
-> ("heapIndex" ::: Word32)
-> ("heapIndex" ::: Word32)
-> ("heapIndex" ::: Word32)
-> ("heapIndex" ::: Word32)
-> ("heapIndex" ::: Word32)
-> IO ()
mkVkCmdDispatchBase FunPtr
(Ptr CommandBuffer_T
-> ("heapIndex" ::: Word32)
-> ("heapIndex" ::: Word32)
-> ("heapIndex" ::: Word32)
-> ("heapIndex" ::: Word32)
-> ("heapIndex" ::: Word32)
-> ("heapIndex" ::: Word32)
-> IO ())
vkCmdDispatchBasePtr
forall a. String -> IO a -> IO a
traceAroundEvent String
"vkCmdDispatchBase" (Ptr CommandBuffer_T
-> ("heapIndex" ::: Word32)
-> ("heapIndex" ::: Word32)
-> ("heapIndex" ::: Word32)
-> ("heapIndex" ::: Word32)
-> ("heapIndex" ::: Word32)
-> ("heapIndex" ::: Word32)
-> IO ()
vkCmdDispatchBase'
(CommandBuffer -> Ptr CommandBuffer_T
commandBufferHandle (CommandBuffer
commandBuffer))
("heapIndex" ::: Word32
baseGroupX)
("heapIndex" ::: Word32
baseGroupY)
("heapIndex" ::: Word32
baseGroupZ)
("heapIndex" ::: Word32
groupCountX)
("heapIndex" ::: Word32
groupCountY)
("heapIndex" ::: Word32
groupCountZ))
forall (f :: * -> *) a. Applicative f => a -> f a
pure forall a b. (a -> b) -> a -> b
$ ()
pattern $bPIPELINE_CREATE_DISPATCH_BASE :: PipelineCreateFlagBits
$mPIPELINE_CREATE_DISPATCH_BASE :: forall {r}.
PipelineCreateFlagBits -> ((# #) -> r) -> ((# #) -> r) -> r
PIPELINE_CREATE_DISPATCH_BASE = PIPELINE_CREATE_DISPATCH_BASE_BIT
data MemoryAllocateFlagsInfo = MemoryAllocateFlagsInfo
{
MemoryAllocateFlagsInfo -> MemoryAllocateFlags
flags :: MemoryAllocateFlags
,
MemoryAllocateFlagsInfo -> "heapIndex" ::: Word32
deviceMask :: Word32
}
deriving (Typeable, MemoryAllocateFlagsInfo -> MemoryAllocateFlagsInfo -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: MemoryAllocateFlagsInfo -> MemoryAllocateFlagsInfo -> Bool
$c/= :: MemoryAllocateFlagsInfo -> MemoryAllocateFlagsInfo -> Bool
== :: MemoryAllocateFlagsInfo -> MemoryAllocateFlagsInfo -> Bool
$c== :: MemoryAllocateFlagsInfo -> MemoryAllocateFlagsInfo -> Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (MemoryAllocateFlagsInfo)
#endif
deriving instance Show MemoryAllocateFlagsInfo
instance ToCStruct MemoryAllocateFlagsInfo where
withCStruct :: forall b.
MemoryAllocateFlagsInfo
-> (Ptr MemoryAllocateFlagsInfo -> IO b) -> IO b
withCStruct MemoryAllocateFlagsInfo
x Ptr MemoryAllocateFlagsInfo -> IO b
f = forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
24 forall a b. (a -> b) -> a -> b
$ \Ptr MemoryAllocateFlagsInfo
p -> forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr MemoryAllocateFlagsInfo
p MemoryAllocateFlagsInfo
x (Ptr MemoryAllocateFlagsInfo -> IO b
f Ptr MemoryAllocateFlagsInfo
p)
pokeCStruct :: forall b.
Ptr MemoryAllocateFlagsInfo
-> MemoryAllocateFlagsInfo -> IO b -> IO b
pokeCStruct Ptr MemoryAllocateFlagsInfo
p MemoryAllocateFlagsInfo{"heapIndex" ::: Word32
MemoryAllocateFlags
deviceMask :: "heapIndex" ::: Word32
flags :: MemoryAllocateFlags
$sel:deviceMask:MemoryAllocateFlagsInfo :: MemoryAllocateFlagsInfo -> "heapIndex" ::: Word32
$sel:flags:MemoryAllocateFlagsInfo :: MemoryAllocateFlagsInfo -> MemoryAllocateFlags
..} IO b
f = do
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr MemoryAllocateFlagsInfo
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO)
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr MemoryAllocateFlagsInfo
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (forall a. Ptr a
nullPtr)
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr MemoryAllocateFlagsInfo
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr MemoryAllocateFlags)) (MemoryAllocateFlags
flags)
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr MemoryAllocateFlagsInfo
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
20 :: Ptr Word32)) ("heapIndex" ::: Word32
deviceMask)
IO b
f
cStructSize :: Int
cStructSize = Int
24
cStructAlignment :: Int
cStructAlignment = Int
8
pokeZeroCStruct :: forall b. Ptr MemoryAllocateFlagsInfo -> IO b -> IO b
pokeZeroCStruct Ptr MemoryAllocateFlagsInfo
p IO b
f = do
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr MemoryAllocateFlagsInfo
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO)
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr MemoryAllocateFlagsInfo
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (forall a. Ptr a
nullPtr)
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr MemoryAllocateFlagsInfo
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
20 :: Ptr Word32)) (forall a. Zero a => a
zero)
IO b
f
instance FromCStruct MemoryAllocateFlagsInfo where
peekCStruct :: Ptr MemoryAllocateFlagsInfo -> IO MemoryAllocateFlagsInfo
peekCStruct Ptr MemoryAllocateFlagsInfo
p = do
MemoryAllocateFlags
flags <- forall a. Storable a => Ptr a -> IO a
peek @MemoryAllocateFlags ((Ptr MemoryAllocateFlagsInfo
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr MemoryAllocateFlags))
"heapIndex" ::: Word32
deviceMask <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr MemoryAllocateFlagsInfo
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
20 :: Ptr Word32))
forall (f :: * -> *) a. Applicative f => a -> f a
pure forall a b. (a -> b) -> a -> b
$ MemoryAllocateFlags
-> ("heapIndex" ::: Word32) -> MemoryAllocateFlagsInfo
MemoryAllocateFlagsInfo
MemoryAllocateFlags
flags "heapIndex" ::: Word32
deviceMask
instance Storable MemoryAllocateFlagsInfo where
sizeOf :: MemoryAllocateFlagsInfo -> Int
sizeOf ~MemoryAllocateFlagsInfo
_ = Int
24
alignment :: MemoryAllocateFlagsInfo -> Int
alignment ~MemoryAllocateFlagsInfo
_ = Int
8
peek :: Ptr MemoryAllocateFlagsInfo -> IO MemoryAllocateFlagsInfo
peek = forall a. FromCStruct a => Ptr a -> IO a
peekCStruct
poke :: Ptr MemoryAllocateFlagsInfo -> MemoryAllocateFlagsInfo -> IO ()
poke Ptr MemoryAllocateFlagsInfo
ptr MemoryAllocateFlagsInfo
poked = forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr MemoryAllocateFlagsInfo
ptr MemoryAllocateFlagsInfo
poked (forall (f :: * -> *) a. Applicative f => a -> f a
pure ())
instance Zero MemoryAllocateFlagsInfo where
zero :: MemoryAllocateFlagsInfo
zero = MemoryAllocateFlags
-> ("heapIndex" ::: Word32) -> MemoryAllocateFlagsInfo
MemoryAllocateFlagsInfo
forall a. Zero a => a
zero
forall a. Zero a => a
zero
data DeviceGroupRenderPassBeginInfo = DeviceGroupRenderPassBeginInfo
{
DeviceGroupRenderPassBeginInfo -> "heapIndex" ::: Word32
deviceMask :: Word32
,
DeviceGroupRenderPassBeginInfo -> Vector Rect2D
deviceRenderAreas :: Vector Rect2D
}
deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (DeviceGroupRenderPassBeginInfo)
#endif
deriving instance Show DeviceGroupRenderPassBeginInfo
instance ToCStruct DeviceGroupRenderPassBeginInfo where
withCStruct :: forall b.
DeviceGroupRenderPassBeginInfo
-> (Ptr DeviceGroupRenderPassBeginInfo -> IO b) -> IO b
withCStruct DeviceGroupRenderPassBeginInfo
x Ptr DeviceGroupRenderPassBeginInfo -> IO b
f = forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
32 forall a b. (a -> b) -> a -> b
$ \Ptr DeviceGroupRenderPassBeginInfo
p -> forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr DeviceGroupRenderPassBeginInfo
p DeviceGroupRenderPassBeginInfo
x (Ptr DeviceGroupRenderPassBeginInfo -> IO b
f Ptr DeviceGroupRenderPassBeginInfo
p)
pokeCStruct :: forall b.
Ptr DeviceGroupRenderPassBeginInfo
-> DeviceGroupRenderPassBeginInfo -> IO b -> IO b
pokeCStruct Ptr DeviceGroupRenderPassBeginInfo
p DeviceGroupRenderPassBeginInfo{"heapIndex" ::: Word32
Vector Rect2D
deviceRenderAreas :: Vector Rect2D
deviceMask :: "heapIndex" ::: Word32
$sel:deviceRenderAreas:DeviceGroupRenderPassBeginInfo :: DeviceGroupRenderPassBeginInfo -> Vector Rect2D
$sel:deviceMask:DeviceGroupRenderPassBeginInfo :: DeviceGroupRenderPassBeginInfo -> "heapIndex" ::: Word32
..} IO b
f = forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT forall a b. (a -> b) -> a -> b
$ do
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift forall a b. (a -> b) -> a -> b
$ forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DeviceGroupRenderPassBeginInfo
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO)
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift forall a b. (a -> b) -> a -> b
$ forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DeviceGroupRenderPassBeginInfo
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (forall a. Ptr a
nullPtr)
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift forall a b. (a -> b) -> a -> b
$ forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DeviceGroupRenderPassBeginInfo
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Word32)) ("heapIndex" ::: Word32
deviceMask)
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift forall a b. (a -> b) -> a -> b
$ forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DeviceGroupRenderPassBeginInfo
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
20 :: Ptr Word32)) ((forall a b. (Integral a, Num b) => a -> b
fromIntegral (forall a. Vector a -> Int
Data.Vector.length forall a b. (a -> b) -> a -> b
$ (Vector Rect2D
deviceRenderAreas)) :: Word32))
Ptr Rect2D
pPDeviceRenderAreas' <- forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT forall a b. (a -> b) -> a -> b
$ forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes @Rect2D ((forall a. Vector a -> Int
Data.Vector.length (Vector Rect2D
deviceRenderAreas)) forall a. Num a => a -> a -> a
* Int
16)
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift forall a b. (a -> b) -> a -> b
$ forall (m :: * -> *) a b.
Monad m =>
(Int -> a -> m b) -> Vector a -> m ()
Data.Vector.imapM_ (\Int
i Rect2D
e -> forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr Rect2D
pPDeviceRenderAreas' forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
16 forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr Rect2D) (Rect2D
e)) (Vector Rect2D
deviceRenderAreas)
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift forall a b. (a -> b) -> a -> b
$ forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DeviceGroupRenderPassBeginInfo
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr (Ptr Rect2D))) (Ptr Rect2D
pPDeviceRenderAreas')
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift forall a b. (a -> b) -> a -> b
$ IO b
f
cStructSize :: Int
cStructSize = Int
32
cStructAlignment :: Int
cStructAlignment = Int
8
pokeZeroCStruct :: forall b. Ptr DeviceGroupRenderPassBeginInfo -> IO b -> IO b
pokeZeroCStruct Ptr DeviceGroupRenderPassBeginInfo
p IO b
f = do
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DeviceGroupRenderPassBeginInfo
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO)
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DeviceGroupRenderPassBeginInfo
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (forall a. Ptr a
nullPtr)
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DeviceGroupRenderPassBeginInfo
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Word32)) (forall a. Zero a => a
zero)
IO b
f
instance FromCStruct DeviceGroupRenderPassBeginInfo where
peekCStruct :: Ptr DeviceGroupRenderPassBeginInfo
-> IO DeviceGroupRenderPassBeginInfo
peekCStruct Ptr DeviceGroupRenderPassBeginInfo
p = do
"heapIndex" ::: Word32
deviceMask <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr DeviceGroupRenderPassBeginInfo
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Word32))
"heapIndex" ::: Word32
deviceRenderAreaCount <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr DeviceGroupRenderPassBeginInfo
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
20 :: Ptr Word32))
Ptr Rect2D
pDeviceRenderAreas <- forall a. Storable a => Ptr a -> IO a
peek @(Ptr Rect2D) ((Ptr DeviceGroupRenderPassBeginInfo
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr (Ptr Rect2D)))
Vector Rect2D
pDeviceRenderAreas' <- forall (m :: * -> *) a.
Monad m =>
Int -> (Int -> m a) -> m (Vector a)
generateM (forall a b. (Integral a, Num b) => a -> b
fromIntegral "heapIndex" ::: Word32
deviceRenderAreaCount) (\Int
i -> forall a. FromCStruct a => Ptr a -> IO a
peekCStruct @Rect2D ((Ptr Rect2D
pDeviceRenderAreas forall a. Ptr a -> Int -> Ptr a
`advancePtrBytes` (Int
16 forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr Rect2D)))
forall (f :: * -> *) a. Applicative f => a -> f a
pure forall a b. (a -> b) -> a -> b
$ ("heapIndex" ::: Word32)
-> Vector Rect2D -> DeviceGroupRenderPassBeginInfo
DeviceGroupRenderPassBeginInfo
"heapIndex" ::: Word32
deviceMask Vector Rect2D
pDeviceRenderAreas'
instance Zero DeviceGroupRenderPassBeginInfo where
zero :: DeviceGroupRenderPassBeginInfo
zero = ("heapIndex" ::: Word32)
-> Vector Rect2D -> DeviceGroupRenderPassBeginInfo
DeviceGroupRenderPassBeginInfo
forall a. Zero a => a
zero
forall a. Monoid a => a
mempty
data DeviceGroupCommandBufferBeginInfo = DeviceGroupCommandBufferBeginInfo
{
DeviceGroupCommandBufferBeginInfo -> "heapIndex" ::: Word32
deviceMask :: Word32 }
deriving (Typeable, DeviceGroupCommandBufferBeginInfo
-> DeviceGroupCommandBufferBeginInfo -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DeviceGroupCommandBufferBeginInfo
-> DeviceGroupCommandBufferBeginInfo -> Bool
$c/= :: DeviceGroupCommandBufferBeginInfo
-> DeviceGroupCommandBufferBeginInfo -> Bool
== :: DeviceGroupCommandBufferBeginInfo
-> DeviceGroupCommandBufferBeginInfo -> Bool
$c== :: DeviceGroupCommandBufferBeginInfo
-> DeviceGroupCommandBufferBeginInfo -> Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (DeviceGroupCommandBufferBeginInfo)
#endif
deriving instance Show DeviceGroupCommandBufferBeginInfo
instance ToCStruct DeviceGroupCommandBufferBeginInfo where
withCStruct :: forall b.
DeviceGroupCommandBufferBeginInfo
-> (Ptr DeviceGroupCommandBufferBeginInfo -> IO b) -> IO b
withCStruct DeviceGroupCommandBufferBeginInfo
x Ptr DeviceGroupCommandBufferBeginInfo -> IO b
f = forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
24 forall a b. (a -> b) -> a -> b
$ \Ptr DeviceGroupCommandBufferBeginInfo
p -> forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr DeviceGroupCommandBufferBeginInfo
p DeviceGroupCommandBufferBeginInfo
x (Ptr DeviceGroupCommandBufferBeginInfo -> IO b
f Ptr DeviceGroupCommandBufferBeginInfo
p)
pokeCStruct :: forall b.
Ptr DeviceGroupCommandBufferBeginInfo
-> DeviceGroupCommandBufferBeginInfo -> IO b -> IO b
pokeCStruct Ptr DeviceGroupCommandBufferBeginInfo
p DeviceGroupCommandBufferBeginInfo{"heapIndex" ::: Word32
deviceMask :: "heapIndex" ::: Word32
$sel:deviceMask:DeviceGroupCommandBufferBeginInfo :: DeviceGroupCommandBufferBeginInfo -> "heapIndex" ::: Word32
..} IO b
f = do
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DeviceGroupCommandBufferBeginInfo
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO)
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DeviceGroupCommandBufferBeginInfo
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (forall a. Ptr a
nullPtr)
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DeviceGroupCommandBufferBeginInfo
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Word32)) ("heapIndex" ::: Word32
deviceMask)
IO b
f
cStructSize :: Int
cStructSize = Int
24
cStructAlignment :: Int
cStructAlignment = Int
8
pokeZeroCStruct :: forall b. Ptr DeviceGroupCommandBufferBeginInfo -> IO b -> IO b
pokeZeroCStruct Ptr DeviceGroupCommandBufferBeginInfo
p IO b
f = do
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DeviceGroupCommandBufferBeginInfo
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO)
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DeviceGroupCommandBufferBeginInfo
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (forall a. Ptr a
nullPtr)
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DeviceGroupCommandBufferBeginInfo
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Word32)) (forall a. Zero a => a
zero)
IO b
f
instance FromCStruct DeviceGroupCommandBufferBeginInfo where
peekCStruct :: Ptr DeviceGroupCommandBufferBeginInfo
-> IO DeviceGroupCommandBufferBeginInfo
peekCStruct Ptr DeviceGroupCommandBufferBeginInfo
p = do
"heapIndex" ::: Word32
deviceMask <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr DeviceGroupCommandBufferBeginInfo
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Word32))
forall (f :: * -> *) a. Applicative f => a -> f a
pure forall a b. (a -> b) -> a -> b
$ ("heapIndex" ::: Word32) -> DeviceGroupCommandBufferBeginInfo
DeviceGroupCommandBufferBeginInfo
"heapIndex" ::: Word32
deviceMask
instance Storable DeviceGroupCommandBufferBeginInfo where
sizeOf :: DeviceGroupCommandBufferBeginInfo -> Int
sizeOf ~DeviceGroupCommandBufferBeginInfo
_ = Int
24
alignment :: DeviceGroupCommandBufferBeginInfo -> Int
alignment ~DeviceGroupCommandBufferBeginInfo
_ = Int
8
peek :: Ptr DeviceGroupCommandBufferBeginInfo
-> IO DeviceGroupCommandBufferBeginInfo
peek = forall a. FromCStruct a => Ptr a -> IO a
peekCStruct
poke :: Ptr DeviceGroupCommandBufferBeginInfo
-> DeviceGroupCommandBufferBeginInfo -> IO ()
poke Ptr DeviceGroupCommandBufferBeginInfo
ptr DeviceGroupCommandBufferBeginInfo
poked = forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr DeviceGroupCommandBufferBeginInfo
ptr DeviceGroupCommandBufferBeginInfo
poked (forall (f :: * -> *) a. Applicative f => a -> f a
pure ())
instance Zero DeviceGroupCommandBufferBeginInfo where
zero :: DeviceGroupCommandBufferBeginInfo
zero = ("heapIndex" ::: Word32) -> DeviceGroupCommandBufferBeginInfo
DeviceGroupCommandBufferBeginInfo
forall a. Zero a => a
zero
data DeviceGroupSubmitInfo = DeviceGroupSubmitInfo
{
DeviceGroupSubmitInfo -> Vector ("heapIndex" ::: Word32)
waitSemaphoreDeviceIndices :: Vector Word32
,
DeviceGroupSubmitInfo -> Vector ("heapIndex" ::: Word32)
commandBufferDeviceMasks :: Vector Word32
,
DeviceGroupSubmitInfo -> Vector ("heapIndex" ::: Word32)
signalSemaphoreDeviceIndices :: Vector Word32
}
deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (DeviceGroupSubmitInfo)
#endif
deriving instance Show DeviceGroupSubmitInfo
instance ToCStruct DeviceGroupSubmitInfo where
withCStruct :: forall b.
DeviceGroupSubmitInfo
-> (Ptr DeviceGroupSubmitInfo -> IO b) -> IO b
withCStruct DeviceGroupSubmitInfo
x Ptr DeviceGroupSubmitInfo -> IO b
f = forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
64 forall a b. (a -> b) -> a -> b
$ \Ptr DeviceGroupSubmitInfo
p -> forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr DeviceGroupSubmitInfo
p DeviceGroupSubmitInfo
x (Ptr DeviceGroupSubmitInfo -> IO b
f Ptr DeviceGroupSubmitInfo
p)
pokeCStruct :: forall b.
Ptr DeviceGroupSubmitInfo -> DeviceGroupSubmitInfo -> IO b -> IO b
pokeCStruct Ptr DeviceGroupSubmitInfo
p DeviceGroupSubmitInfo{Vector ("heapIndex" ::: Word32)
signalSemaphoreDeviceIndices :: Vector ("heapIndex" ::: Word32)
commandBufferDeviceMasks :: Vector ("heapIndex" ::: Word32)
waitSemaphoreDeviceIndices :: Vector ("heapIndex" ::: Word32)
$sel:signalSemaphoreDeviceIndices:DeviceGroupSubmitInfo :: DeviceGroupSubmitInfo -> Vector ("heapIndex" ::: Word32)
$sel:commandBufferDeviceMasks:DeviceGroupSubmitInfo :: DeviceGroupSubmitInfo -> Vector ("heapIndex" ::: Word32)
$sel:waitSemaphoreDeviceIndices:DeviceGroupSubmitInfo :: DeviceGroupSubmitInfo -> Vector ("heapIndex" ::: Word32)
..} IO b
f = forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT forall a b. (a -> b) -> a -> b
$ do
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift forall a b. (a -> b) -> a -> b
$ forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DeviceGroupSubmitInfo
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO)
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift forall a b. (a -> b) -> a -> b
$ forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DeviceGroupSubmitInfo
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (forall a. Ptr a
nullPtr)
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift forall a b. (a -> b) -> a -> b
$ forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DeviceGroupSubmitInfo
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Word32)) ((forall a b. (Integral a, Num b) => a -> b
fromIntegral (forall a. Vector a -> Int
Data.Vector.length forall a b. (a -> b) -> a -> b
$ (Vector ("heapIndex" ::: Word32)
waitSemaphoreDeviceIndices)) :: Word32))
Ptr ("heapIndex" ::: Word32)
pPWaitSemaphoreDeviceIndices' <- forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT forall a b. (a -> b) -> a -> b
$ forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes @Word32 ((forall a. Vector a -> Int
Data.Vector.length (Vector ("heapIndex" ::: Word32)
waitSemaphoreDeviceIndices)) forall a. Num a => a -> a -> a
* Int
4)
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift forall a b. (a -> b) -> a -> b
$ forall (m :: * -> *) a b.
Monad m =>
(Int -> a -> m b) -> Vector a -> m ()
Data.Vector.imapM_ (\Int
i "heapIndex" ::: Word32
e -> forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr ("heapIndex" ::: Word32)
pPWaitSemaphoreDeviceIndices' forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
4 forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr Word32) ("heapIndex" ::: Word32
e)) (Vector ("heapIndex" ::: Word32)
waitSemaphoreDeviceIndices)
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift forall a b. (a -> b) -> a -> b
$ forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DeviceGroupSubmitInfo
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr (Ptr Word32))) (Ptr ("heapIndex" ::: Word32)
pPWaitSemaphoreDeviceIndices')
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift forall a b. (a -> b) -> a -> b
$ forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DeviceGroupSubmitInfo
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr Word32)) ((forall a b. (Integral a, Num b) => a -> b
fromIntegral (forall a. Vector a -> Int
Data.Vector.length forall a b. (a -> b) -> a -> b
$ (Vector ("heapIndex" ::: Word32)
commandBufferDeviceMasks)) :: Word32))
Ptr ("heapIndex" ::: Word32)
pPCommandBufferDeviceMasks' <- forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT forall a b. (a -> b) -> a -> b
$ forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes @Word32 ((forall a. Vector a -> Int
Data.Vector.length (Vector ("heapIndex" ::: Word32)
commandBufferDeviceMasks)) forall a. Num a => a -> a -> a
* Int
4)
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift forall a b. (a -> b) -> a -> b
$ forall (m :: * -> *) a b.
Monad m =>
(Int -> a -> m b) -> Vector a -> m ()
Data.Vector.imapM_ (\Int
i "heapIndex" ::: Word32
e -> forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr ("heapIndex" ::: Word32)
pPCommandBufferDeviceMasks' forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
4 forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr Word32) ("heapIndex" ::: Word32
e)) (Vector ("heapIndex" ::: Word32)
commandBufferDeviceMasks)
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift forall a b. (a -> b) -> a -> b
$ forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DeviceGroupSubmitInfo
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
40 :: Ptr (Ptr Word32))) (Ptr ("heapIndex" ::: Word32)
pPCommandBufferDeviceMasks')
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift forall a b. (a -> b) -> a -> b
$ forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DeviceGroupSubmitInfo
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
48 :: Ptr Word32)) ((forall a b. (Integral a, Num b) => a -> b
fromIntegral (forall a. Vector a -> Int
Data.Vector.length forall a b. (a -> b) -> a -> b
$ (Vector ("heapIndex" ::: Word32)
signalSemaphoreDeviceIndices)) :: Word32))
Ptr ("heapIndex" ::: Word32)
pPSignalSemaphoreDeviceIndices' <- forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT forall a b. (a -> b) -> a -> b
$ forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes @Word32 ((forall a. Vector a -> Int
Data.Vector.length (Vector ("heapIndex" ::: Word32)
signalSemaphoreDeviceIndices)) forall a. Num a => a -> a -> a
* Int
4)
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift forall a b. (a -> b) -> a -> b
$ forall (m :: * -> *) a b.
Monad m =>
(Int -> a -> m b) -> Vector a -> m ()
Data.Vector.imapM_ (\Int
i "heapIndex" ::: Word32
e -> forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr ("heapIndex" ::: Word32)
pPSignalSemaphoreDeviceIndices' forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
4 forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr Word32) ("heapIndex" ::: Word32
e)) (Vector ("heapIndex" ::: Word32)
signalSemaphoreDeviceIndices)
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift forall a b. (a -> b) -> a -> b
$ forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DeviceGroupSubmitInfo
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
56 :: Ptr (Ptr Word32))) (Ptr ("heapIndex" ::: Word32)
pPSignalSemaphoreDeviceIndices')
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift forall a b. (a -> b) -> a -> b
$ IO b
f
cStructSize :: Int
cStructSize = Int
64
cStructAlignment :: Int
cStructAlignment = Int
8
pokeZeroCStruct :: forall b. Ptr DeviceGroupSubmitInfo -> IO b -> IO b
pokeZeroCStruct Ptr DeviceGroupSubmitInfo
p IO b
f = do
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DeviceGroupSubmitInfo
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO)
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DeviceGroupSubmitInfo
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (forall a. Ptr a
nullPtr)
IO b
f
instance FromCStruct DeviceGroupSubmitInfo where
peekCStruct :: Ptr DeviceGroupSubmitInfo -> IO DeviceGroupSubmitInfo
peekCStruct Ptr DeviceGroupSubmitInfo
p = do
"heapIndex" ::: Word32
waitSemaphoreCount <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr DeviceGroupSubmitInfo
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Word32))
Ptr ("heapIndex" ::: Word32)
pWaitSemaphoreDeviceIndices <- forall a. Storable a => Ptr a -> IO a
peek @(Ptr Word32) ((Ptr DeviceGroupSubmitInfo
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr (Ptr Word32)))
Vector ("heapIndex" ::: Word32)
pWaitSemaphoreDeviceIndices' <- forall (m :: * -> *) a.
Monad m =>
Int -> (Int -> m a) -> m (Vector a)
generateM (forall a b. (Integral a, Num b) => a -> b
fromIntegral "heapIndex" ::: Word32
waitSemaphoreCount) (\Int
i -> forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr ("heapIndex" ::: Word32)
pWaitSemaphoreDeviceIndices forall a. Ptr a -> Int -> Ptr a
`advancePtrBytes` (Int
4 forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr Word32)))
"heapIndex" ::: Word32
commandBufferCount <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr DeviceGroupSubmitInfo
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr Word32))
Ptr ("heapIndex" ::: Word32)
pCommandBufferDeviceMasks <- forall a. Storable a => Ptr a -> IO a
peek @(Ptr Word32) ((Ptr DeviceGroupSubmitInfo
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
40 :: Ptr (Ptr Word32)))
Vector ("heapIndex" ::: Word32)
pCommandBufferDeviceMasks' <- forall (m :: * -> *) a.
Monad m =>
Int -> (Int -> m a) -> m (Vector a)
generateM (forall a b. (Integral a, Num b) => a -> b
fromIntegral "heapIndex" ::: Word32
commandBufferCount) (\Int
i -> forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr ("heapIndex" ::: Word32)
pCommandBufferDeviceMasks forall a. Ptr a -> Int -> Ptr a
`advancePtrBytes` (Int
4 forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr Word32)))
"heapIndex" ::: Word32
signalSemaphoreCount <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr DeviceGroupSubmitInfo
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
48 :: Ptr Word32))
Ptr ("heapIndex" ::: Word32)
pSignalSemaphoreDeviceIndices <- forall a. Storable a => Ptr a -> IO a
peek @(Ptr Word32) ((Ptr DeviceGroupSubmitInfo
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
56 :: Ptr (Ptr Word32)))
Vector ("heapIndex" ::: Word32)
pSignalSemaphoreDeviceIndices' <- forall (m :: * -> *) a.
Monad m =>
Int -> (Int -> m a) -> m (Vector a)
generateM (forall a b. (Integral a, Num b) => a -> b
fromIntegral "heapIndex" ::: Word32
signalSemaphoreCount) (\Int
i -> forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr ("heapIndex" ::: Word32)
pSignalSemaphoreDeviceIndices forall a. Ptr a -> Int -> Ptr a
`advancePtrBytes` (Int
4 forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr Word32)))
forall (f :: * -> *) a. Applicative f => a -> f a
pure forall a b. (a -> b) -> a -> b
$ Vector ("heapIndex" ::: Word32)
-> Vector ("heapIndex" ::: Word32)
-> Vector ("heapIndex" ::: Word32)
-> DeviceGroupSubmitInfo
DeviceGroupSubmitInfo
Vector ("heapIndex" ::: Word32)
pWaitSemaphoreDeviceIndices'
Vector ("heapIndex" ::: Word32)
pCommandBufferDeviceMasks'
Vector ("heapIndex" ::: Word32)
pSignalSemaphoreDeviceIndices'
instance Zero DeviceGroupSubmitInfo where
zero :: DeviceGroupSubmitInfo
zero = Vector ("heapIndex" ::: Word32)
-> Vector ("heapIndex" ::: Word32)
-> Vector ("heapIndex" ::: Word32)
-> DeviceGroupSubmitInfo
DeviceGroupSubmitInfo
forall a. Monoid a => a
mempty
forall a. Monoid a => a
mempty
forall a. Monoid a => a
mempty
data DeviceGroupBindSparseInfo = DeviceGroupBindSparseInfo
{
DeviceGroupBindSparseInfo -> "heapIndex" ::: Word32
resourceDeviceIndex :: Word32
,
DeviceGroupBindSparseInfo -> "heapIndex" ::: Word32
memoryDeviceIndex :: Word32
}
deriving (Typeable, DeviceGroupBindSparseInfo -> DeviceGroupBindSparseInfo -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DeviceGroupBindSparseInfo -> DeviceGroupBindSparseInfo -> Bool
$c/= :: DeviceGroupBindSparseInfo -> DeviceGroupBindSparseInfo -> Bool
== :: DeviceGroupBindSparseInfo -> DeviceGroupBindSparseInfo -> Bool
$c== :: DeviceGroupBindSparseInfo -> DeviceGroupBindSparseInfo -> Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (DeviceGroupBindSparseInfo)
#endif
deriving instance Show DeviceGroupBindSparseInfo
instance ToCStruct DeviceGroupBindSparseInfo where
withCStruct :: forall b.
DeviceGroupBindSparseInfo
-> (Ptr DeviceGroupBindSparseInfo -> IO b) -> IO b
withCStruct DeviceGroupBindSparseInfo
x Ptr DeviceGroupBindSparseInfo -> IO b
f = forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
24 forall a b. (a -> b) -> a -> b
$ \Ptr DeviceGroupBindSparseInfo
p -> forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr DeviceGroupBindSparseInfo
p DeviceGroupBindSparseInfo
x (Ptr DeviceGroupBindSparseInfo -> IO b
f Ptr DeviceGroupBindSparseInfo
p)
pokeCStruct :: forall b.
Ptr DeviceGroupBindSparseInfo
-> DeviceGroupBindSparseInfo -> IO b -> IO b
pokeCStruct Ptr DeviceGroupBindSparseInfo
p DeviceGroupBindSparseInfo{"heapIndex" ::: Word32
memoryDeviceIndex :: "heapIndex" ::: Word32
resourceDeviceIndex :: "heapIndex" ::: Word32
$sel:memoryDeviceIndex:DeviceGroupBindSparseInfo :: DeviceGroupBindSparseInfo -> "heapIndex" ::: Word32
$sel:resourceDeviceIndex:DeviceGroupBindSparseInfo :: DeviceGroupBindSparseInfo -> "heapIndex" ::: Word32
..} IO b
f = do
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DeviceGroupBindSparseInfo
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO)
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DeviceGroupBindSparseInfo
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (forall a. Ptr a
nullPtr)
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DeviceGroupBindSparseInfo
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Word32)) ("heapIndex" ::: Word32
resourceDeviceIndex)
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DeviceGroupBindSparseInfo
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
20 :: Ptr Word32)) ("heapIndex" ::: Word32
memoryDeviceIndex)
IO b
f
cStructSize :: Int
cStructSize = Int
24
cStructAlignment :: Int
cStructAlignment = Int
8
pokeZeroCStruct :: forall b. Ptr DeviceGroupBindSparseInfo -> IO b -> IO b
pokeZeroCStruct Ptr DeviceGroupBindSparseInfo
p IO b
f = do
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DeviceGroupBindSparseInfo
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO)
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DeviceGroupBindSparseInfo
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (forall a. Ptr a
nullPtr)
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DeviceGroupBindSparseInfo
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Word32)) (forall a. Zero a => a
zero)
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DeviceGroupBindSparseInfo
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
20 :: Ptr Word32)) (forall a. Zero a => a
zero)
IO b
f
instance FromCStruct DeviceGroupBindSparseInfo where
peekCStruct :: Ptr DeviceGroupBindSparseInfo -> IO DeviceGroupBindSparseInfo
peekCStruct Ptr DeviceGroupBindSparseInfo
p = do
"heapIndex" ::: Word32
resourceDeviceIndex <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr DeviceGroupBindSparseInfo
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Word32))
"heapIndex" ::: Word32
memoryDeviceIndex <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr DeviceGroupBindSparseInfo
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
20 :: Ptr Word32))
forall (f :: * -> *) a. Applicative f => a -> f a
pure forall a b. (a -> b) -> a -> b
$ ("heapIndex" ::: Word32)
-> ("heapIndex" ::: Word32) -> DeviceGroupBindSparseInfo
DeviceGroupBindSparseInfo
"heapIndex" ::: Word32
resourceDeviceIndex "heapIndex" ::: Word32
memoryDeviceIndex
instance Storable DeviceGroupBindSparseInfo where
sizeOf :: DeviceGroupBindSparseInfo -> Int
sizeOf ~DeviceGroupBindSparseInfo
_ = Int
24
alignment :: DeviceGroupBindSparseInfo -> Int
alignment ~DeviceGroupBindSparseInfo
_ = Int
8
peek :: Ptr DeviceGroupBindSparseInfo -> IO DeviceGroupBindSparseInfo
peek = forall a. FromCStruct a => Ptr a -> IO a
peekCStruct
poke :: Ptr DeviceGroupBindSparseInfo -> DeviceGroupBindSparseInfo -> IO ()
poke Ptr DeviceGroupBindSparseInfo
ptr DeviceGroupBindSparseInfo
poked = forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr DeviceGroupBindSparseInfo
ptr DeviceGroupBindSparseInfo
poked (forall (f :: * -> *) a. Applicative f => a -> f a
pure ())
instance Zero DeviceGroupBindSparseInfo where
zero :: DeviceGroupBindSparseInfo
zero = ("heapIndex" ::: Word32)
-> ("heapIndex" ::: Word32) -> DeviceGroupBindSparseInfo
DeviceGroupBindSparseInfo
forall a. Zero a => a
zero
forall a. Zero a => a
zero