{-# language CPP #-}
module Vulkan.Core11.Promoted_From_VK_KHR_descriptor_update_template ( createDescriptorUpdateTemplate
, withDescriptorUpdateTemplate
, destroyDescriptorUpdateTemplate
, updateDescriptorSetWithTemplate
, DescriptorUpdateTemplateEntry(..)
, DescriptorUpdateTemplateCreateInfo(..)
, DescriptorUpdateTemplate(..)
, DescriptorUpdateTemplateCreateFlags(..)
, StructureType(..)
, DescriptorUpdateTemplateType(..)
, ObjectType(..)
) 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.Base (when)
import GHC.IO (throwIO)
import GHC.Ptr (nullFunPtr)
import Foreign.Ptr (nullPtr)
import Foreign.Ptr (plusPtr)
import Data.Coerce (coerce)
import Control.Monad.Trans.Class (lift)
import Control.Monad.Trans.Cont (evalContT)
import Data.Vector (generateM)
import qualified Data.Vector (imapM_)
import qualified Data.Vector (length)
import Vulkan.CStruct (FromCStruct)
import Vulkan.CStruct (FromCStruct(..))
import Vulkan.CStruct (ToCStruct)
import Vulkan.CStruct (ToCStruct(..))
import Vulkan.Zero (Zero(..))
import Control.Monad.IO.Class (MonadIO)
import Data.Typeable (Typeable)
import Foreign.C.Types (CSize)
import Foreign.C.Types (CSize(..))
import Foreign.C.Types (CSize(CSize))
import Foreign.Storable (Storable)
import Foreign.Storable (Storable(peek))
import Foreign.Storable (Storable(poke))
import qualified Foreign.Storable (Storable(..))
import GHC.Generics (Generic)
import GHC.IO.Exception (IOErrorType(..))
import GHC.IO.Exception (IOException(..))
import Foreign.Ptr (FunPtr)
import Foreign.Ptr (Ptr)
import Data.Word (Word32)
import Data.Word (Word64)
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.AllocationCallbacks (AllocationCallbacks)
import Vulkan.Core10.Handles (DescriptorSet)
import Vulkan.Core10.Handles (DescriptorSet(..))
import Vulkan.Core10.Handles (DescriptorSetLayout)
import Vulkan.Core10.Enums.DescriptorType (DescriptorType)
import Vulkan.Core11.Handles (DescriptorUpdateTemplate)
import Vulkan.Core11.Handles (DescriptorUpdateTemplate(..))
import Vulkan.Core11.Enums.DescriptorUpdateTemplateCreateFlags (DescriptorUpdateTemplateCreateFlags)
import Vulkan.Core11.Enums.DescriptorUpdateTemplateType (DescriptorUpdateTemplateType)
import Vulkan.Core10.Handles (Device)
import Vulkan.Core10.Handles (Device(..))
import Vulkan.Core10.Handles (Device(Device))
import Vulkan.Dynamic (DeviceCmds(pVkCreateDescriptorUpdateTemplate))
import Vulkan.Dynamic (DeviceCmds(pVkDestroyDescriptorUpdateTemplate))
import Vulkan.Dynamic (DeviceCmds(pVkUpdateDescriptorSetWithTemplate))
import Vulkan.Core10.Handles (Device_T)
import Vulkan.Core10.Enums.PipelineBindPoint (PipelineBindPoint)
import Vulkan.Core10.Handles (PipelineLayout)
import Vulkan.Core10.Enums.Result (Result)
import Vulkan.Core10.Enums.Result (Result(..))
import Vulkan.Core10.Enums.StructureType (StructureType)
import Vulkan.Exception (VulkanException(..))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO))
import Vulkan.Core10.Enums.Result (Result(SUCCESS))
import Vulkan.Core11.Handles (DescriptorUpdateTemplate(..))
import Vulkan.Core11.Enums.DescriptorUpdateTemplateCreateFlags (DescriptorUpdateTemplateCreateFlags(..))
import Vulkan.Core11.Enums.DescriptorUpdateTemplateType (DescriptorUpdateTemplateType(..))
import Vulkan.Core10.Enums.ObjectType (ObjectType(..))
import Vulkan.Core10.Enums.StructureType (StructureType(..))
foreign import ccall
#if !defined(SAFE_FOREIGN_CALLS)
unsafe
#endif
"dynamic" mkVkCreateDescriptorUpdateTemplate
:: FunPtr (Ptr Device_T -> Ptr DescriptorUpdateTemplateCreateInfo -> Ptr AllocationCallbacks -> Ptr DescriptorUpdateTemplate -> IO Result) -> Ptr Device_T -> Ptr DescriptorUpdateTemplateCreateInfo -> Ptr AllocationCallbacks -> Ptr DescriptorUpdateTemplate -> IO Result
createDescriptorUpdateTemplate :: forall io
. (MonadIO io)
=>
Device
->
DescriptorUpdateTemplateCreateInfo
->
("allocator" ::: Maybe AllocationCallbacks)
-> io (DescriptorUpdateTemplate)
createDescriptorUpdateTemplate :: forall (io :: * -> *).
MonadIO io =>
Device
-> DescriptorUpdateTemplateCreateInfo
-> ("allocator" ::: Maybe AllocationCallbacks)
-> io DescriptorUpdateTemplate
createDescriptorUpdateTemplate Device
device
DescriptorUpdateTemplateCreateInfo
createInfo
"allocator" ::: Maybe AllocationCallbacks
allocator = 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 vkCreateDescriptorUpdateTemplatePtr :: FunPtr
(Ptr Device_T
-> ("pCreateInfo" ::: Ptr DescriptorUpdateTemplateCreateInfo)
-> ("pAllocator" ::: Ptr AllocationCallbacks)
-> ("pDescriptorUpdateTemplate" ::: Ptr DescriptorUpdateTemplate)
-> IO Result)
vkCreateDescriptorUpdateTemplatePtr = DeviceCmds
-> FunPtr
(Ptr Device_T
-> ("pCreateInfo" ::: Ptr DescriptorUpdateTemplateCreateInfo)
-> ("pAllocator" ::: Ptr AllocationCallbacks)
-> ("pDescriptorUpdateTemplate" ::: Ptr DescriptorUpdateTemplate)
-> IO Result)
pVkCreateDescriptorUpdateTemplate (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
-> ("pCreateInfo" ::: Ptr DescriptorUpdateTemplateCreateInfo)
-> ("pAllocator" ::: Ptr AllocationCallbacks)
-> ("pDescriptorUpdateTemplate" ::: Ptr DescriptorUpdateTemplate)
-> IO Result)
vkCreateDescriptorUpdateTemplatePtr 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 vkCreateDescriptorUpdateTemplate is null" forall a. Maybe a
Nothing forall a. Maybe a
Nothing
let vkCreateDescriptorUpdateTemplate' :: Ptr Device_T
-> ("pCreateInfo" ::: Ptr DescriptorUpdateTemplateCreateInfo)
-> ("pAllocator" ::: Ptr AllocationCallbacks)
-> ("pDescriptorUpdateTemplate" ::: Ptr DescriptorUpdateTemplate)
-> IO Result
vkCreateDescriptorUpdateTemplate' = FunPtr
(Ptr Device_T
-> ("pCreateInfo" ::: Ptr DescriptorUpdateTemplateCreateInfo)
-> ("pAllocator" ::: Ptr AllocationCallbacks)
-> ("pDescriptorUpdateTemplate" ::: Ptr DescriptorUpdateTemplate)
-> IO Result)
-> Ptr Device_T
-> ("pCreateInfo" ::: Ptr DescriptorUpdateTemplateCreateInfo)
-> ("pAllocator" ::: Ptr AllocationCallbacks)
-> ("pDescriptorUpdateTemplate" ::: Ptr DescriptorUpdateTemplate)
-> IO Result
mkVkCreateDescriptorUpdateTemplate FunPtr
(Ptr Device_T
-> ("pCreateInfo" ::: Ptr DescriptorUpdateTemplateCreateInfo)
-> ("pAllocator" ::: Ptr AllocationCallbacks)
-> ("pDescriptorUpdateTemplate" ::: Ptr DescriptorUpdateTemplate)
-> IO Result)
vkCreateDescriptorUpdateTemplatePtr
"pCreateInfo" ::: Ptr DescriptorUpdateTemplateCreateInfo
pCreateInfo <- 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. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
withCStruct (DescriptorUpdateTemplateCreateInfo
createInfo)
"pAllocator" ::: Ptr AllocationCallbacks
pAllocator <- case ("allocator" ::: Maybe AllocationCallbacks
allocator) of
"allocator" ::: Maybe AllocationCallbacks
Nothing -> forall (f :: * -> *) a. Applicative f => a -> f a
pure forall a. Ptr a
nullPtr
Just AllocationCallbacks
j -> 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. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
withCStruct (AllocationCallbacks
j)
"pDescriptorUpdateTemplate" ::: Ptr DescriptorUpdateTemplate
pPDescriptorUpdateTemplate <- 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 @DescriptorUpdateTemplate Int
8) forall a. Ptr a -> IO ()
free
Result
r <- 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
"vkCreateDescriptorUpdateTemplate" (Ptr Device_T
-> ("pCreateInfo" ::: Ptr DescriptorUpdateTemplateCreateInfo)
-> ("pAllocator" ::: Ptr AllocationCallbacks)
-> ("pDescriptorUpdateTemplate" ::: Ptr DescriptorUpdateTemplate)
-> IO Result
vkCreateDescriptorUpdateTemplate'
(Device -> Ptr Device_T
deviceHandle (Device
device))
"pCreateInfo" ::: Ptr DescriptorUpdateTemplateCreateInfo
pCreateInfo
"pAllocator" ::: Ptr AllocationCallbacks
pAllocator
("pDescriptorUpdateTemplate" ::: Ptr DescriptorUpdateTemplate
pPDescriptorUpdateTemplate))
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 ()
when (Result
r forall a. Ord a => a -> a -> Bool
< Result
SUCCESS) (forall e a. Exception e => e -> IO a
throwIO (Result -> VulkanException
VulkanException Result
r))
DescriptorUpdateTemplate
pDescriptorUpdateTemplate <- 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 @DescriptorUpdateTemplate "pDescriptorUpdateTemplate" ::: Ptr DescriptorUpdateTemplate
pPDescriptorUpdateTemplate
forall (f :: * -> *) a. Applicative f => a -> f a
pure forall a b. (a -> b) -> a -> b
$ (DescriptorUpdateTemplate
pDescriptorUpdateTemplate)
withDescriptorUpdateTemplate :: forall io r . MonadIO io => Device -> DescriptorUpdateTemplateCreateInfo -> Maybe AllocationCallbacks -> (io DescriptorUpdateTemplate -> (DescriptorUpdateTemplate -> io ()) -> r) -> r
withDescriptorUpdateTemplate :: forall (io :: * -> *) r.
MonadIO io =>
Device
-> DescriptorUpdateTemplateCreateInfo
-> ("allocator" ::: Maybe AllocationCallbacks)
-> (io DescriptorUpdateTemplate
-> (DescriptorUpdateTemplate -> io ()) -> r)
-> r
withDescriptorUpdateTemplate Device
device DescriptorUpdateTemplateCreateInfo
pCreateInfo "allocator" ::: Maybe AllocationCallbacks
pAllocator io DescriptorUpdateTemplate
-> (DescriptorUpdateTemplate -> io ()) -> r
b =
io DescriptorUpdateTemplate
-> (DescriptorUpdateTemplate -> io ()) -> r
b (forall (io :: * -> *).
MonadIO io =>
Device
-> DescriptorUpdateTemplateCreateInfo
-> ("allocator" ::: Maybe AllocationCallbacks)
-> io DescriptorUpdateTemplate
createDescriptorUpdateTemplate Device
device DescriptorUpdateTemplateCreateInfo
pCreateInfo "allocator" ::: Maybe AllocationCallbacks
pAllocator)
(\(DescriptorUpdateTemplate
o0) -> forall (io :: * -> *).
MonadIO io =>
Device
-> DescriptorUpdateTemplate
-> ("allocator" ::: Maybe AllocationCallbacks)
-> io ()
destroyDescriptorUpdateTemplate Device
device DescriptorUpdateTemplate
o0 "allocator" ::: Maybe AllocationCallbacks
pAllocator)
foreign import ccall
#if !defined(SAFE_FOREIGN_CALLS)
unsafe
#endif
"dynamic" mkVkDestroyDescriptorUpdateTemplate
:: FunPtr (Ptr Device_T -> DescriptorUpdateTemplate -> Ptr AllocationCallbacks -> IO ()) -> Ptr Device_T -> DescriptorUpdateTemplate -> Ptr AllocationCallbacks -> IO ()
destroyDescriptorUpdateTemplate :: forall io
. (MonadIO io)
=>
Device
->
DescriptorUpdateTemplate
->
("allocator" ::: Maybe AllocationCallbacks)
-> io ()
destroyDescriptorUpdateTemplate :: forall (io :: * -> *).
MonadIO io =>
Device
-> DescriptorUpdateTemplate
-> ("allocator" ::: Maybe AllocationCallbacks)
-> io ()
destroyDescriptorUpdateTemplate Device
device
DescriptorUpdateTemplate
descriptorUpdateTemplate
"allocator" ::: Maybe AllocationCallbacks
allocator = 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 vkDestroyDescriptorUpdateTemplatePtr :: FunPtr
(Ptr Device_T
-> DescriptorUpdateTemplate
-> ("pAllocator" ::: Ptr AllocationCallbacks)
-> IO ())
vkDestroyDescriptorUpdateTemplatePtr = DeviceCmds
-> FunPtr
(Ptr Device_T
-> DescriptorUpdateTemplate
-> ("pAllocator" ::: Ptr AllocationCallbacks)
-> IO ())
pVkDestroyDescriptorUpdateTemplate (case Device
device of Device{DeviceCmds
deviceCmds :: DeviceCmds
$sel:deviceCmds:Device :: Device -> 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
-> DescriptorUpdateTemplate
-> ("pAllocator" ::: Ptr AllocationCallbacks)
-> IO ())
vkDestroyDescriptorUpdateTemplatePtr 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 vkDestroyDescriptorUpdateTemplate is null" forall a. Maybe a
Nothing forall a. Maybe a
Nothing
let vkDestroyDescriptorUpdateTemplate' :: Ptr Device_T
-> DescriptorUpdateTemplate
-> ("pAllocator" ::: Ptr AllocationCallbacks)
-> IO ()
vkDestroyDescriptorUpdateTemplate' = FunPtr
(Ptr Device_T
-> DescriptorUpdateTemplate
-> ("pAllocator" ::: Ptr AllocationCallbacks)
-> IO ())
-> Ptr Device_T
-> DescriptorUpdateTemplate
-> ("pAllocator" ::: Ptr AllocationCallbacks)
-> IO ()
mkVkDestroyDescriptorUpdateTemplate FunPtr
(Ptr Device_T
-> DescriptorUpdateTemplate
-> ("pAllocator" ::: Ptr AllocationCallbacks)
-> IO ())
vkDestroyDescriptorUpdateTemplatePtr
"pAllocator" ::: Ptr AllocationCallbacks
pAllocator <- case ("allocator" ::: Maybe AllocationCallbacks
allocator) of
"allocator" ::: Maybe AllocationCallbacks
Nothing -> forall (f :: * -> *) a. Applicative f => a -> f a
pure forall a. Ptr a
nullPtr
Just AllocationCallbacks
j -> 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. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
withCStruct (AllocationCallbacks
j)
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
"vkDestroyDescriptorUpdateTemplate" (Ptr Device_T
-> DescriptorUpdateTemplate
-> ("pAllocator" ::: Ptr AllocationCallbacks)
-> IO ()
vkDestroyDescriptorUpdateTemplate'
(Device -> Ptr Device_T
deviceHandle (Device
device))
(DescriptorUpdateTemplate
descriptorUpdateTemplate)
"pAllocator" ::: Ptr AllocationCallbacks
pAllocator)
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" mkVkUpdateDescriptorSetWithTemplate
:: FunPtr (Ptr Device_T -> DescriptorSet -> DescriptorUpdateTemplate -> Ptr () -> IO ()) -> Ptr Device_T -> DescriptorSet -> DescriptorUpdateTemplate -> Ptr () -> IO ()
updateDescriptorSetWithTemplate :: forall io
. (MonadIO io)
=>
Device
->
DescriptorSet
->
DescriptorUpdateTemplate
->
("data" ::: Ptr ())
-> io ()
updateDescriptorSetWithTemplate :: forall (io :: * -> *).
MonadIO io =>
Device
-> DescriptorSet
-> DescriptorUpdateTemplate
-> ("data" ::: Ptr ())
-> io ()
updateDescriptorSetWithTemplate Device
device
DescriptorSet
descriptorSet
DescriptorUpdateTemplate
descriptorUpdateTemplate
"data" ::: Ptr ()
data' = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall a b. (a -> b) -> a -> b
$ do
let vkUpdateDescriptorSetWithTemplatePtr :: FunPtr
(Ptr Device_T
-> DescriptorSet
-> DescriptorUpdateTemplate
-> ("data" ::: Ptr ())
-> IO ())
vkUpdateDescriptorSetWithTemplatePtr = DeviceCmds
-> FunPtr
(Ptr Device_T
-> DescriptorSet
-> DescriptorUpdateTemplate
-> ("data" ::: Ptr ())
-> IO ())
pVkUpdateDescriptorSetWithTemplate (case Device
device of Device{DeviceCmds
deviceCmds :: DeviceCmds
$sel:deviceCmds:Device :: Device -> DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (FunPtr
(Ptr Device_T
-> DescriptorSet
-> DescriptorUpdateTemplate
-> ("data" ::: Ptr ())
-> IO ())
vkUpdateDescriptorSetWithTemplatePtr 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 vkUpdateDescriptorSetWithTemplate is null" forall a. Maybe a
Nothing forall a. Maybe a
Nothing
let vkUpdateDescriptorSetWithTemplate' :: Ptr Device_T
-> DescriptorSet
-> DescriptorUpdateTemplate
-> ("data" ::: Ptr ())
-> IO ()
vkUpdateDescriptorSetWithTemplate' = FunPtr
(Ptr Device_T
-> DescriptorSet
-> DescriptorUpdateTemplate
-> ("data" ::: Ptr ())
-> IO ())
-> Ptr Device_T
-> DescriptorSet
-> DescriptorUpdateTemplate
-> ("data" ::: Ptr ())
-> IO ()
mkVkUpdateDescriptorSetWithTemplate FunPtr
(Ptr Device_T
-> DescriptorSet
-> DescriptorUpdateTemplate
-> ("data" ::: Ptr ())
-> IO ())
vkUpdateDescriptorSetWithTemplatePtr
forall a. String -> IO a -> IO a
traceAroundEvent String
"vkUpdateDescriptorSetWithTemplate" (Ptr Device_T
-> DescriptorSet
-> DescriptorUpdateTemplate
-> ("data" ::: Ptr ())
-> IO ()
vkUpdateDescriptorSetWithTemplate'
(Device -> Ptr Device_T
deviceHandle (Device
device))
(DescriptorSet
descriptorSet)
(DescriptorUpdateTemplate
descriptorUpdateTemplate)
("data" ::: Ptr ()
data'))
forall (f :: * -> *) a. Applicative f => a -> f a
pure forall a b. (a -> b) -> a -> b
$ ()
data DescriptorUpdateTemplateEntry = DescriptorUpdateTemplateEntry
{
DescriptorUpdateTemplateEntry -> Word32
dstBinding :: Word32
,
DescriptorUpdateTemplateEntry -> Word32
dstArrayElement :: Word32
,
DescriptorUpdateTemplateEntry -> Word32
descriptorCount :: Word32
,
DescriptorUpdateTemplateEntry -> DescriptorType
descriptorType :: DescriptorType
,
DescriptorUpdateTemplateEntry -> Word64
offset :: Word64
,
DescriptorUpdateTemplateEntry -> Word64
stride :: Word64
}
deriving (Typeable, DescriptorUpdateTemplateEntry
-> DescriptorUpdateTemplateEntry -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DescriptorUpdateTemplateEntry
-> DescriptorUpdateTemplateEntry -> Bool
$c/= :: DescriptorUpdateTemplateEntry
-> DescriptorUpdateTemplateEntry -> Bool
== :: DescriptorUpdateTemplateEntry
-> DescriptorUpdateTemplateEntry -> Bool
$c== :: DescriptorUpdateTemplateEntry
-> DescriptorUpdateTemplateEntry -> Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (DescriptorUpdateTemplateEntry)
#endif
deriving instance Show DescriptorUpdateTemplateEntry
instance ToCStruct DescriptorUpdateTemplateEntry where
withCStruct :: forall b.
DescriptorUpdateTemplateEntry
-> (Ptr DescriptorUpdateTemplateEntry -> IO b) -> IO b
withCStruct DescriptorUpdateTemplateEntry
x Ptr DescriptorUpdateTemplateEntry -> IO b
f = forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
32 forall a b. (a -> b) -> a -> b
$ \Ptr DescriptorUpdateTemplateEntry
p -> forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr DescriptorUpdateTemplateEntry
p DescriptorUpdateTemplateEntry
x (Ptr DescriptorUpdateTemplateEntry -> IO b
f Ptr DescriptorUpdateTemplateEntry
p)
pokeCStruct :: forall b.
Ptr DescriptorUpdateTemplateEntry
-> DescriptorUpdateTemplateEntry -> IO b -> IO b
pokeCStruct Ptr DescriptorUpdateTemplateEntry
p DescriptorUpdateTemplateEntry{Word32
Word64
DescriptorType
stride :: Word64
offset :: Word64
descriptorType :: DescriptorType
descriptorCount :: Word32
dstArrayElement :: Word32
dstBinding :: Word32
$sel:stride:DescriptorUpdateTemplateEntry :: DescriptorUpdateTemplateEntry -> Word64
$sel:offset:DescriptorUpdateTemplateEntry :: DescriptorUpdateTemplateEntry -> Word64
$sel:descriptorType:DescriptorUpdateTemplateEntry :: DescriptorUpdateTemplateEntry -> DescriptorType
$sel:descriptorCount:DescriptorUpdateTemplateEntry :: DescriptorUpdateTemplateEntry -> Word32
$sel:dstArrayElement:DescriptorUpdateTemplateEntry :: DescriptorUpdateTemplateEntry -> Word32
$sel:dstBinding:DescriptorUpdateTemplateEntry :: DescriptorUpdateTemplateEntry -> Word32
..} IO b
f = do
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DescriptorUpdateTemplateEntry
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr Word32)) (Word32
dstBinding)
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DescriptorUpdateTemplateEntry
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
4 :: Ptr Word32)) (Word32
dstArrayElement)
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DescriptorUpdateTemplateEntry
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr Word32)) (Word32
descriptorCount)
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DescriptorUpdateTemplateEntry
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
12 :: Ptr DescriptorType)) (DescriptorType
descriptorType)
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DescriptorUpdateTemplateEntry
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr CSize)) (Word64 -> CSize
CSize (Word64
offset))
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DescriptorUpdateTemplateEntry
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr CSize)) (Word64 -> CSize
CSize (Word64
stride))
IO b
f
cStructSize :: Int
cStructSize = Int
32
cStructAlignment :: Int
cStructAlignment = Int
8
pokeZeroCStruct :: forall b. Ptr DescriptorUpdateTemplateEntry -> IO b -> IO b
pokeZeroCStruct Ptr DescriptorUpdateTemplateEntry
p IO b
f = do
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DescriptorUpdateTemplateEntry
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr Word32)) (forall a. Zero a => a
zero)
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DescriptorUpdateTemplateEntry
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
4 :: Ptr Word32)) (forall a. Zero a => a
zero)
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DescriptorUpdateTemplateEntry
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr Word32)) (forall a. Zero a => a
zero)
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DescriptorUpdateTemplateEntry
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
12 :: Ptr DescriptorType)) (forall a. Zero a => a
zero)
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DescriptorUpdateTemplateEntry
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr CSize)) (Word64 -> CSize
CSize (forall a. Zero a => a
zero))
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DescriptorUpdateTemplateEntry
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr CSize)) (Word64 -> CSize
CSize (forall a. Zero a => a
zero))
IO b
f
instance FromCStruct DescriptorUpdateTemplateEntry where
peekCStruct :: Ptr DescriptorUpdateTemplateEntry
-> IO DescriptorUpdateTemplateEntry
peekCStruct Ptr DescriptorUpdateTemplateEntry
p = do
Word32
dstBinding <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr DescriptorUpdateTemplateEntry
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr Word32))
Word32
dstArrayElement <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr DescriptorUpdateTemplateEntry
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
4 :: Ptr Word32))
Word32
descriptorCount <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr DescriptorUpdateTemplateEntry
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr Word32))
DescriptorType
descriptorType <- forall a. Storable a => Ptr a -> IO a
peek @DescriptorType ((Ptr DescriptorUpdateTemplateEntry
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
12 :: Ptr DescriptorType))
CSize
offset <- forall a. Storable a => Ptr a -> IO a
peek @CSize ((Ptr DescriptorUpdateTemplateEntry
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr CSize))
CSize
stride <- forall a. Storable a => Ptr a -> IO a
peek @CSize ((Ptr DescriptorUpdateTemplateEntry
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr CSize))
forall (f :: * -> *) a. Applicative f => a -> f a
pure forall a b. (a -> b) -> a -> b
$ Word32
-> Word32
-> Word32
-> DescriptorType
-> Word64
-> Word64
-> DescriptorUpdateTemplateEntry
DescriptorUpdateTemplateEntry
Word32
dstBinding
Word32
dstArrayElement
Word32
descriptorCount
DescriptorType
descriptorType
(coerce :: forall a b. Coercible a b => a -> b
coerce @CSize @Word64 CSize
offset)
(coerce :: forall a b. Coercible a b => a -> b
coerce @CSize @Word64 CSize
stride)
instance Storable DescriptorUpdateTemplateEntry where
sizeOf :: DescriptorUpdateTemplateEntry -> Int
sizeOf ~DescriptorUpdateTemplateEntry
_ = Int
32
alignment :: DescriptorUpdateTemplateEntry -> Int
alignment ~DescriptorUpdateTemplateEntry
_ = Int
8
peek :: Ptr DescriptorUpdateTemplateEntry
-> IO DescriptorUpdateTemplateEntry
peek = forall a. FromCStruct a => Ptr a -> IO a
peekCStruct
poke :: Ptr DescriptorUpdateTemplateEntry
-> DescriptorUpdateTemplateEntry -> IO ()
poke Ptr DescriptorUpdateTemplateEntry
ptr DescriptorUpdateTemplateEntry
poked = forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr DescriptorUpdateTemplateEntry
ptr DescriptorUpdateTemplateEntry
poked (forall (f :: * -> *) a. Applicative f => a -> f a
pure ())
instance Zero DescriptorUpdateTemplateEntry where
zero :: DescriptorUpdateTemplateEntry
zero = Word32
-> Word32
-> Word32
-> DescriptorType
-> Word64
-> Word64
-> DescriptorUpdateTemplateEntry
DescriptorUpdateTemplateEntry
forall a. Zero a => a
zero
forall a. Zero a => a
zero
forall a. Zero a => a
zero
forall a. Zero a => a
zero
forall a. Zero a => a
zero
forall a. Zero a => a
zero
data DescriptorUpdateTemplateCreateInfo = DescriptorUpdateTemplateCreateInfo
{
DescriptorUpdateTemplateCreateInfo
-> DescriptorUpdateTemplateCreateFlags
flags :: DescriptorUpdateTemplateCreateFlags
,
DescriptorUpdateTemplateCreateInfo
-> Vector DescriptorUpdateTemplateEntry
descriptorUpdateEntries :: Vector DescriptorUpdateTemplateEntry
,
DescriptorUpdateTemplateCreateInfo -> DescriptorUpdateTemplateType
templateType :: DescriptorUpdateTemplateType
,
DescriptorUpdateTemplateCreateInfo -> DescriptorSetLayout
descriptorSetLayout :: DescriptorSetLayout
,
DescriptorUpdateTemplateCreateInfo -> PipelineBindPoint
pipelineBindPoint :: PipelineBindPoint
,
DescriptorUpdateTemplateCreateInfo -> PipelineLayout
pipelineLayout :: PipelineLayout
,
DescriptorUpdateTemplateCreateInfo -> Word32
set :: Word32
}
deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (DescriptorUpdateTemplateCreateInfo)
#endif
deriving instance Show DescriptorUpdateTemplateCreateInfo
instance ToCStruct DescriptorUpdateTemplateCreateInfo where
withCStruct :: forall b.
DescriptorUpdateTemplateCreateInfo
-> (("pCreateInfo" ::: Ptr DescriptorUpdateTemplateCreateInfo)
-> IO b)
-> IO b
withCStruct DescriptorUpdateTemplateCreateInfo
x ("pCreateInfo" ::: Ptr DescriptorUpdateTemplateCreateInfo) -> IO b
f = forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
72 forall a b. (a -> b) -> a -> b
$ \"pCreateInfo" ::: Ptr DescriptorUpdateTemplateCreateInfo
p -> forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct "pCreateInfo" ::: Ptr DescriptorUpdateTemplateCreateInfo
p DescriptorUpdateTemplateCreateInfo
x (("pCreateInfo" ::: Ptr DescriptorUpdateTemplateCreateInfo) -> IO b
f "pCreateInfo" ::: Ptr DescriptorUpdateTemplateCreateInfo
p)
pokeCStruct :: forall b.
("pCreateInfo" ::: Ptr DescriptorUpdateTemplateCreateInfo)
-> DescriptorUpdateTemplateCreateInfo -> IO b -> IO b
pokeCStruct "pCreateInfo" ::: Ptr DescriptorUpdateTemplateCreateInfo
p DescriptorUpdateTemplateCreateInfo{Word32
Vector DescriptorUpdateTemplateEntry
PipelineBindPoint
PipelineLayout
DescriptorSetLayout
DescriptorUpdateTemplateType
DescriptorUpdateTemplateCreateFlags
set :: Word32
pipelineLayout :: PipelineLayout
pipelineBindPoint :: PipelineBindPoint
descriptorSetLayout :: DescriptorSetLayout
templateType :: DescriptorUpdateTemplateType
descriptorUpdateEntries :: Vector DescriptorUpdateTemplateEntry
flags :: DescriptorUpdateTemplateCreateFlags
$sel:set:DescriptorUpdateTemplateCreateInfo :: DescriptorUpdateTemplateCreateInfo -> Word32
$sel:pipelineLayout:DescriptorUpdateTemplateCreateInfo :: DescriptorUpdateTemplateCreateInfo -> PipelineLayout
$sel:pipelineBindPoint:DescriptorUpdateTemplateCreateInfo :: DescriptorUpdateTemplateCreateInfo -> PipelineBindPoint
$sel:descriptorSetLayout:DescriptorUpdateTemplateCreateInfo :: DescriptorUpdateTemplateCreateInfo -> DescriptorSetLayout
$sel:templateType:DescriptorUpdateTemplateCreateInfo :: DescriptorUpdateTemplateCreateInfo -> DescriptorUpdateTemplateType
$sel:descriptorUpdateEntries:DescriptorUpdateTemplateCreateInfo :: DescriptorUpdateTemplateCreateInfo
-> Vector DescriptorUpdateTemplateEntry
$sel:flags:DescriptorUpdateTemplateCreateInfo :: DescriptorUpdateTemplateCreateInfo
-> DescriptorUpdateTemplateCreateFlags
..} 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 (("pCreateInfo" ::: Ptr DescriptorUpdateTemplateCreateInfo
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_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 (("pCreateInfo" ::: Ptr DescriptorUpdateTemplateCreateInfo
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 (("pCreateInfo" ::: Ptr DescriptorUpdateTemplateCreateInfo
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr DescriptorUpdateTemplateCreateFlags)) (DescriptorUpdateTemplateCreateFlags
flags)
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 (("pCreateInfo" ::: Ptr DescriptorUpdateTemplateCreateInfo
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 DescriptorUpdateTemplateEntry
descriptorUpdateEntries)) :: Word32))
Ptr DescriptorUpdateTemplateEntry
pPDescriptorUpdateEntries' <- 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 @DescriptorUpdateTemplateEntry ((forall a. Vector a -> Int
Data.Vector.length (Vector DescriptorUpdateTemplateEntry
descriptorUpdateEntries)) forall a. Num a => a -> a -> a
* Int
32)
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 DescriptorUpdateTemplateEntry
e -> forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr DescriptorUpdateTemplateEntry
pPDescriptorUpdateEntries' forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
32 forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr DescriptorUpdateTemplateEntry) (DescriptorUpdateTemplateEntry
e)) (Vector DescriptorUpdateTemplateEntry
descriptorUpdateEntries)
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 (("pCreateInfo" ::: Ptr DescriptorUpdateTemplateCreateInfo
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr (Ptr DescriptorUpdateTemplateEntry))) (Ptr DescriptorUpdateTemplateEntry
pPDescriptorUpdateEntries')
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 (("pCreateInfo" ::: Ptr DescriptorUpdateTemplateCreateInfo
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr DescriptorUpdateTemplateType)) (DescriptorUpdateTemplateType
templateType)
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 (("pCreateInfo" ::: Ptr DescriptorUpdateTemplateCreateInfo
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
40 :: Ptr DescriptorSetLayout)) (DescriptorSetLayout
descriptorSetLayout)
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 (("pCreateInfo" ::: Ptr DescriptorUpdateTemplateCreateInfo
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
48 :: Ptr PipelineBindPoint)) (PipelineBindPoint
pipelineBindPoint)
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 (("pCreateInfo" ::: Ptr DescriptorUpdateTemplateCreateInfo
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
56 :: Ptr PipelineLayout)) (PipelineLayout
pipelineLayout)
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 (("pCreateInfo" ::: Ptr DescriptorUpdateTemplateCreateInfo
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
64 :: Ptr Word32)) (Word32
set)
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
72
cStructAlignment :: Int
cStructAlignment = Int
8
pokeZeroCStruct :: forall b.
("pCreateInfo" ::: Ptr DescriptorUpdateTemplateCreateInfo)
-> IO b -> IO b
pokeZeroCStruct "pCreateInfo" ::: Ptr DescriptorUpdateTemplateCreateInfo
p IO b
f = do
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pCreateInfo" ::: Ptr DescriptorUpdateTemplateCreateInfo
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO)
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pCreateInfo" ::: Ptr DescriptorUpdateTemplateCreateInfo
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 (("pCreateInfo" ::: Ptr DescriptorUpdateTemplateCreateInfo
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr DescriptorUpdateTemplateType)) (forall a. Zero a => a
zero)
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pCreateInfo" ::: Ptr DescriptorUpdateTemplateCreateInfo
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
40 :: Ptr DescriptorSetLayout)) (forall a. Zero a => a
zero)
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pCreateInfo" ::: Ptr DescriptorUpdateTemplateCreateInfo
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
48 :: Ptr PipelineBindPoint)) (forall a. Zero a => a
zero)
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pCreateInfo" ::: Ptr DescriptorUpdateTemplateCreateInfo
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
56 :: Ptr PipelineLayout)) (forall a. Zero a => a
zero)
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pCreateInfo" ::: Ptr DescriptorUpdateTemplateCreateInfo
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
64 :: Ptr Word32)) (forall a. Zero a => a
zero)
IO b
f
instance FromCStruct DescriptorUpdateTemplateCreateInfo where
peekCStruct :: ("pCreateInfo" ::: Ptr DescriptorUpdateTemplateCreateInfo)
-> IO DescriptorUpdateTemplateCreateInfo
peekCStruct "pCreateInfo" ::: Ptr DescriptorUpdateTemplateCreateInfo
p = do
DescriptorUpdateTemplateCreateFlags
flags <- forall a. Storable a => Ptr a -> IO a
peek @DescriptorUpdateTemplateCreateFlags (("pCreateInfo" ::: Ptr DescriptorUpdateTemplateCreateInfo
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr DescriptorUpdateTemplateCreateFlags))
Word32
descriptorUpdateEntryCount <- forall a. Storable a => Ptr a -> IO a
peek @Word32 (("pCreateInfo" ::: Ptr DescriptorUpdateTemplateCreateInfo
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
20 :: Ptr Word32))
Ptr DescriptorUpdateTemplateEntry
pDescriptorUpdateEntries <- forall a. Storable a => Ptr a -> IO a
peek @(Ptr DescriptorUpdateTemplateEntry) (("pCreateInfo" ::: Ptr DescriptorUpdateTemplateCreateInfo
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr (Ptr DescriptorUpdateTemplateEntry)))
Vector DescriptorUpdateTemplateEntry
pDescriptorUpdateEntries' <- forall (m :: * -> *) a.
Monad m =>
Int -> (Int -> m a) -> m (Vector a)
generateM (forall a b. (Integral a, Num b) => a -> b
fromIntegral Word32
descriptorUpdateEntryCount) (\Int
i -> forall a. FromCStruct a => Ptr a -> IO a
peekCStruct @DescriptorUpdateTemplateEntry ((Ptr DescriptorUpdateTemplateEntry
pDescriptorUpdateEntries forall a. Ptr a -> Int -> Ptr a
`advancePtrBytes` (Int
32 forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr DescriptorUpdateTemplateEntry)))
DescriptorUpdateTemplateType
templateType <- forall a. Storable a => Ptr a -> IO a
peek @DescriptorUpdateTemplateType (("pCreateInfo" ::: Ptr DescriptorUpdateTemplateCreateInfo
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr DescriptorUpdateTemplateType))
DescriptorSetLayout
descriptorSetLayout <- forall a. Storable a => Ptr a -> IO a
peek @DescriptorSetLayout (("pCreateInfo" ::: Ptr DescriptorUpdateTemplateCreateInfo
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
40 :: Ptr DescriptorSetLayout))
PipelineBindPoint
pipelineBindPoint <- forall a. Storable a => Ptr a -> IO a
peek @PipelineBindPoint (("pCreateInfo" ::: Ptr DescriptorUpdateTemplateCreateInfo
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
48 :: Ptr PipelineBindPoint))
PipelineLayout
pipelineLayout <- forall a. Storable a => Ptr a -> IO a
peek @PipelineLayout (("pCreateInfo" ::: Ptr DescriptorUpdateTemplateCreateInfo
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
56 :: Ptr PipelineLayout))
Word32
set <- forall a. Storable a => Ptr a -> IO a
peek @Word32 (("pCreateInfo" ::: Ptr DescriptorUpdateTemplateCreateInfo
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
64 :: Ptr Word32))
forall (f :: * -> *) a. Applicative f => a -> f a
pure forall a b. (a -> b) -> a -> b
$ DescriptorUpdateTemplateCreateFlags
-> Vector DescriptorUpdateTemplateEntry
-> DescriptorUpdateTemplateType
-> DescriptorSetLayout
-> PipelineBindPoint
-> PipelineLayout
-> Word32
-> DescriptorUpdateTemplateCreateInfo
DescriptorUpdateTemplateCreateInfo
DescriptorUpdateTemplateCreateFlags
flags
Vector DescriptorUpdateTemplateEntry
pDescriptorUpdateEntries'
DescriptorUpdateTemplateType
templateType
DescriptorSetLayout
descriptorSetLayout
PipelineBindPoint
pipelineBindPoint
PipelineLayout
pipelineLayout
Word32
set
instance Zero DescriptorUpdateTemplateCreateInfo where
zero :: DescriptorUpdateTemplateCreateInfo
zero = DescriptorUpdateTemplateCreateFlags
-> Vector DescriptorUpdateTemplateEntry
-> DescriptorUpdateTemplateType
-> DescriptorSetLayout
-> PipelineBindPoint
-> PipelineLayout
-> Word32
-> DescriptorUpdateTemplateCreateInfo
DescriptorUpdateTemplateCreateInfo
forall a. Zero a => a
zero
forall a. Monoid a => a
mempty
forall a. Zero a => a
zero
forall a. Zero a => a
zero
forall a. Zero a => a
zero
forall a. Zero a => a
zero
forall a. Zero a => a
zero