{-# language CPP #-}
module Vulkan.Extensions.VK_EXT_mutable_descriptor_type ( PhysicalDeviceMutableDescriptorTypeFeaturesEXT(..)
, MutableDescriptorTypeListEXT(..)
, MutableDescriptorTypeCreateInfoEXT(..)
, EXT_MUTABLE_DESCRIPTOR_TYPE_SPEC_VERSION
, pattern EXT_MUTABLE_DESCRIPTOR_TYPE_SPEC_VERSION
, EXT_MUTABLE_DESCRIPTOR_TYPE_EXTENSION_NAME
, pattern EXT_MUTABLE_DESCRIPTOR_TYPE_EXTENSION_NAME
) where
import Foreign.Marshal.Alloc (allocaBytes)
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 Data.String (IsString)
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 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.Core10.FundamentalTypes (bool32ToBool)
import Vulkan.Core10.FundamentalTypes (boolToBool32)
import Vulkan.Core10.FundamentalTypes (Bool32)
import Vulkan.Core10.Enums.DescriptorType (DescriptorType)
import Vulkan.Core10.Enums.StructureType (StructureType)
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_MUTABLE_DESCRIPTOR_TYPE_CREATE_INFO_EXT))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_MUTABLE_DESCRIPTOR_TYPE_FEATURES_EXT))
data PhysicalDeviceMutableDescriptorTypeFeaturesEXT = PhysicalDeviceMutableDescriptorTypeFeaturesEXT
{
PhysicalDeviceMutableDescriptorTypeFeaturesEXT -> Bool
mutableDescriptorType :: Bool }
deriving (Typeable, PhysicalDeviceMutableDescriptorTypeFeaturesEXT
-> PhysicalDeviceMutableDescriptorTypeFeaturesEXT -> Bool
(PhysicalDeviceMutableDescriptorTypeFeaturesEXT
-> PhysicalDeviceMutableDescriptorTypeFeaturesEXT -> Bool)
-> (PhysicalDeviceMutableDescriptorTypeFeaturesEXT
-> PhysicalDeviceMutableDescriptorTypeFeaturesEXT -> Bool)
-> Eq PhysicalDeviceMutableDescriptorTypeFeaturesEXT
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PhysicalDeviceMutableDescriptorTypeFeaturesEXT
-> PhysicalDeviceMutableDescriptorTypeFeaturesEXT -> Bool
$c/= :: PhysicalDeviceMutableDescriptorTypeFeaturesEXT
-> PhysicalDeviceMutableDescriptorTypeFeaturesEXT -> Bool
== :: PhysicalDeviceMutableDescriptorTypeFeaturesEXT
-> PhysicalDeviceMutableDescriptorTypeFeaturesEXT -> Bool
$c== :: PhysicalDeviceMutableDescriptorTypeFeaturesEXT
-> PhysicalDeviceMutableDescriptorTypeFeaturesEXT -> Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (PhysicalDeviceMutableDescriptorTypeFeaturesEXT)
#endif
deriving instance Show PhysicalDeviceMutableDescriptorTypeFeaturesEXT
instance ToCStruct PhysicalDeviceMutableDescriptorTypeFeaturesEXT where
withCStruct :: PhysicalDeviceMutableDescriptorTypeFeaturesEXT
-> (Ptr PhysicalDeviceMutableDescriptorTypeFeaturesEXT -> IO b)
-> IO b
withCStruct PhysicalDeviceMutableDescriptorTypeFeaturesEXT
x Ptr PhysicalDeviceMutableDescriptorTypeFeaturesEXT -> IO b
f = Int
-> (Ptr PhysicalDeviceMutableDescriptorTypeFeaturesEXT -> IO b)
-> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
24 ((Ptr PhysicalDeviceMutableDescriptorTypeFeaturesEXT -> IO b)
-> IO b)
-> (Ptr PhysicalDeviceMutableDescriptorTypeFeaturesEXT -> IO b)
-> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr PhysicalDeviceMutableDescriptorTypeFeaturesEXT
p -> Ptr PhysicalDeviceMutableDescriptorTypeFeaturesEXT
-> PhysicalDeviceMutableDescriptorTypeFeaturesEXT -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr PhysicalDeviceMutableDescriptorTypeFeaturesEXT
p PhysicalDeviceMutableDescriptorTypeFeaturesEXT
x (Ptr PhysicalDeviceMutableDescriptorTypeFeaturesEXT -> IO b
f Ptr PhysicalDeviceMutableDescriptorTypeFeaturesEXT
p)
pokeCStruct :: Ptr PhysicalDeviceMutableDescriptorTypeFeaturesEXT
-> PhysicalDeviceMutableDescriptorTypeFeaturesEXT -> IO b -> IO b
pokeCStruct Ptr PhysicalDeviceMutableDescriptorTypeFeaturesEXT
p PhysicalDeviceMutableDescriptorTypeFeaturesEXT{Bool
mutableDescriptorType :: Bool
$sel:mutableDescriptorType:PhysicalDeviceMutableDescriptorTypeFeaturesEXT :: PhysicalDeviceMutableDescriptorTypeFeaturesEXT -> Bool
..} IO b
f = do
Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceMutableDescriptorTypeFeaturesEXT
p Ptr PhysicalDeviceMutableDescriptorTypeFeaturesEXT
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_PHYSICAL_DEVICE_MUTABLE_DESCRIPTOR_TYPE_FEATURES_EXT)
Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceMutableDescriptorTypeFeaturesEXT
p Ptr PhysicalDeviceMutableDescriptorTypeFeaturesEXT
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
Ptr Bool32 -> Bool32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceMutableDescriptorTypeFeaturesEXT
p Ptr PhysicalDeviceMutableDescriptorTypeFeaturesEXT
-> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Bool32)) (Bool -> Bool32
boolToBool32 (Bool
mutableDescriptorType))
IO b
f
cStructSize :: Int
cStructSize = Int
24
cStructAlignment :: Int
cStructAlignment = Int
8
pokeZeroCStruct :: Ptr PhysicalDeviceMutableDescriptorTypeFeaturesEXT -> IO b -> IO b
pokeZeroCStruct Ptr PhysicalDeviceMutableDescriptorTypeFeaturesEXT
p IO b
f = do
Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceMutableDescriptorTypeFeaturesEXT
p Ptr PhysicalDeviceMutableDescriptorTypeFeaturesEXT
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_PHYSICAL_DEVICE_MUTABLE_DESCRIPTOR_TYPE_FEATURES_EXT)
Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceMutableDescriptorTypeFeaturesEXT
p Ptr PhysicalDeviceMutableDescriptorTypeFeaturesEXT
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
Ptr Bool32 -> Bool32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceMutableDescriptorTypeFeaturesEXT
p Ptr PhysicalDeviceMutableDescriptorTypeFeaturesEXT
-> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Bool32)) (Bool -> Bool32
boolToBool32 (Bool
forall a. Zero a => a
zero))
IO b
f
instance FromCStruct PhysicalDeviceMutableDescriptorTypeFeaturesEXT where
peekCStruct :: Ptr PhysicalDeviceMutableDescriptorTypeFeaturesEXT
-> IO PhysicalDeviceMutableDescriptorTypeFeaturesEXT
peekCStruct Ptr PhysicalDeviceMutableDescriptorTypeFeaturesEXT
p = do
Bool32
mutableDescriptorType <- Ptr Bool32 -> IO Bool32
forall a. Storable a => Ptr a -> IO a
peek @Bool32 ((Ptr PhysicalDeviceMutableDescriptorTypeFeaturesEXT
p Ptr PhysicalDeviceMutableDescriptorTypeFeaturesEXT
-> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Bool32))
PhysicalDeviceMutableDescriptorTypeFeaturesEXT
-> IO PhysicalDeviceMutableDescriptorTypeFeaturesEXT
forall (f :: * -> *) a. Applicative f => a -> f a
pure (PhysicalDeviceMutableDescriptorTypeFeaturesEXT
-> IO PhysicalDeviceMutableDescriptorTypeFeaturesEXT)
-> PhysicalDeviceMutableDescriptorTypeFeaturesEXT
-> IO PhysicalDeviceMutableDescriptorTypeFeaturesEXT
forall a b. (a -> b) -> a -> b
$ Bool -> PhysicalDeviceMutableDescriptorTypeFeaturesEXT
PhysicalDeviceMutableDescriptorTypeFeaturesEXT
(Bool32 -> Bool
bool32ToBool Bool32
mutableDescriptorType)
instance Storable PhysicalDeviceMutableDescriptorTypeFeaturesEXT where
sizeOf :: PhysicalDeviceMutableDescriptorTypeFeaturesEXT -> Int
sizeOf ~PhysicalDeviceMutableDescriptorTypeFeaturesEXT
_ = Int
24
alignment :: PhysicalDeviceMutableDescriptorTypeFeaturesEXT -> Int
alignment ~PhysicalDeviceMutableDescriptorTypeFeaturesEXT
_ = Int
8
peek :: Ptr PhysicalDeviceMutableDescriptorTypeFeaturesEXT
-> IO PhysicalDeviceMutableDescriptorTypeFeaturesEXT
peek = Ptr PhysicalDeviceMutableDescriptorTypeFeaturesEXT
-> IO PhysicalDeviceMutableDescriptorTypeFeaturesEXT
forall a. FromCStruct a => Ptr a -> IO a
peekCStruct
poke :: Ptr PhysicalDeviceMutableDescriptorTypeFeaturesEXT
-> PhysicalDeviceMutableDescriptorTypeFeaturesEXT -> IO ()
poke Ptr PhysicalDeviceMutableDescriptorTypeFeaturesEXT
ptr PhysicalDeviceMutableDescriptorTypeFeaturesEXT
poked = Ptr PhysicalDeviceMutableDescriptorTypeFeaturesEXT
-> PhysicalDeviceMutableDescriptorTypeFeaturesEXT -> IO () -> IO ()
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr PhysicalDeviceMutableDescriptorTypeFeaturesEXT
ptr PhysicalDeviceMutableDescriptorTypeFeaturesEXT
poked (() -> IO ()
forall (f :: * -> *) a. Applicative f => a -> f a
pure ())
instance Zero PhysicalDeviceMutableDescriptorTypeFeaturesEXT where
zero :: PhysicalDeviceMutableDescriptorTypeFeaturesEXT
zero = Bool -> PhysicalDeviceMutableDescriptorTypeFeaturesEXT
PhysicalDeviceMutableDescriptorTypeFeaturesEXT
Bool
forall a. Zero a => a
zero
data MutableDescriptorTypeListEXT = MutableDescriptorTypeListEXT
{
MutableDescriptorTypeListEXT -> Vector DescriptorType
descriptorTypes :: Vector DescriptorType }
deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (MutableDescriptorTypeListEXT)
#endif
deriving instance Show MutableDescriptorTypeListEXT
instance ToCStruct MutableDescriptorTypeListEXT where
withCStruct :: MutableDescriptorTypeListEXT
-> (Ptr MutableDescriptorTypeListEXT -> IO b) -> IO b
withCStruct MutableDescriptorTypeListEXT
x Ptr MutableDescriptorTypeListEXT -> IO b
f = Int -> (Ptr MutableDescriptorTypeListEXT -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
16 ((Ptr MutableDescriptorTypeListEXT -> IO b) -> IO b)
-> (Ptr MutableDescriptorTypeListEXT -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr MutableDescriptorTypeListEXT
p -> Ptr MutableDescriptorTypeListEXT
-> MutableDescriptorTypeListEXT -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr MutableDescriptorTypeListEXT
p MutableDescriptorTypeListEXT
x (Ptr MutableDescriptorTypeListEXT -> IO b
f Ptr MutableDescriptorTypeListEXT
p)
pokeCStruct :: Ptr MutableDescriptorTypeListEXT
-> MutableDescriptorTypeListEXT -> IO b -> IO b
pokeCStruct Ptr MutableDescriptorTypeListEXT
p MutableDescriptorTypeListEXT{Vector DescriptorType
descriptorTypes :: Vector DescriptorType
$sel:descriptorTypes:MutableDescriptorTypeListEXT :: MutableDescriptorTypeListEXT -> Vector DescriptorType
..} 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 (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr MutableDescriptorTypeListEXT
p Ptr MutableDescriptorTypeListEXT -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr Word32)) ((Int -> Word32
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Vector DescriptorType -> Int
forall a. Vector a -> Int
Data.Vector.length (Vector DescriptorType -> Int) -> Vector DescriptorType -> Int
forall a b. (a -> b) -> a -> b
$ (Vector DescriptorType
descriptorTypes)) :: Word32))
Ptr DescriptorType
pPDescriptorTypes' <- ((Ptr DescriptorType -> IO b) -> IO b)
-> ContT b IO (Ptr DescriptorType)
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr DescriptorType -> IO b) -> IO b)
-> ContT b IO (Ptr DescriptorType))
-> ((Ptr DescriptorType -> IO b) -> IO b)
-> ContT b IO (Ptr DescriptorType)
forall a b. (a -> b) -> a -> b
$ Int -> (Ptr DescriptorType -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes @DescriptorType ((Vector DescriptorType -> Int
forall a. Vector a -> Int
Data.Vector.length (Vector DescriptorType
descriptorTypes)) Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
4)
IO () -> ContT b IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ (Int -> DescriptorType -> IO ()) -> Vector DescriptorType -> IO ()
forall (m :: * -> *) a b.
Monad m =>
(Int -> a -> m b) -> Vector a -> m ()
Data.Vector.imapM_ (\Int
i DescriptorType
e -> Ptr DescriptorType -> DescriptorType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr DescriptorType
pPDescriptorTypes' Ptr DescriptorType -> Int -> Ptr DescriptorType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
4 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr DescriptorType) (DescriptorType
e)) (Vector DescriptorType
descriptorTypes)
IO () -> ContT b IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr (Ptr DescriptorType) -> Ptr DescriptorType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr MutableDescriptorTypeListEXT
p Ptr MutableDescriptorTypeListEXT -> Int -> Ptr (Ptr DescriptorType)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr DescriptorType))) (Ptr DescriptorType
pPDescriptorTypes')
IO b -> ContT b IO b
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO b -> ContT b IO b) -> IO b -> ContT b IO b
forall a b. (a -> b) -> a -> b
$ IO b
f
cStructSize :: Int
cStructSize = Int
16
cStructAlignment :: Int
cStructAlignment = Int
8
pokeZeroCStruct :: Ptr MutableDescriptorTypeListEXT -> IO b -> IO b
pokeZeroCStruct Ptr MutableDescriptorTypeListEXT
_ IO b
f = IO b
f
instance FromCStruct MutableDescriptorTypeListEXT where
peekCStruct :: Ptr MutableDescriptorTypeListEXT -> IO MutableDescriptorTypeListEXT
peekCStruct Ptr MutableDescriptorTypeListEXT
p = do
Word32
descriptorTypeCount <- Ptr Word32 -> IO Word32
forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr MutableDescriptorTypeListEXT
p Ptr MutableDescriptorTypeListEXT -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr Word32))
Ptr DescriptorType
pDescriptorTypes <- Ptr (Ptr DescriptorType) -> IO (Ptr DescriptorType)
forall a. Storable a => Ptr a -> IO a
peek @(Ptr DescriptorType) ((Ptr MutableDescriptorTypeListEXT
p Ptr MutableDescriptorTypeListEXT -> Int -> Ptr (Ptr DescriptorType)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr DescriptorType)))
Vector DescriptorType
pDescriptorTypes' <- Int -> (Int -> IO DescriptorType) -> IO (Vector DescriptorType)
forall (m :: * -> *) a.
Monad m =>
Int -> (Int -> m a) -> m (Vector a)
generateM (Word32 -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral Word32
descriptorTypeCount) (\Int
i -> Ptr DescriptorType -> IO DescriptorType
forall a. Storable a => Ptr a -> IO a
peek @DescriptorType ((Ptr DescriptorType
pDescriptorTypes Ptr DescriptorType -> Int -> Ptr DescriptorType
forall a. Ptr a -> Int -> Ptr a
`advancePtrBytes` (Int
4 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr DescriptorType)))
MutableDescriptorTypeListEXT -> IO MutableDescriptorTypeListEXT
forall (f :: * -> *) a. Applicative f => a -> f a
pure (MutableDescriptorTypeListEXT -> IO MutableDescriptorTypeListEXT)
-> MutableDescriptorTypeListEXT -> IO MutableDescriptorTypeListEXT
forall a b. (a -> b) -> a -> b
$ Vector DescriptorType -> MutableDescriptorTypeListEXT
MutableDescriptorTypeListEXT
Vector DescriptorType
pDescriptorTypes'
instance Zero MutableDescriptorTypeListEXT where
zero :: MutableDescriptorTypeListEXT
zero = Vector DescriptorType -> MutableDescriptorTypeListEXT
MutableDescriptorTypeListEXT
Vector DescriptorType
forall a. Monoid a => a
mempty
data MutableDescriptorTypeCreateInfoEXT = MutableDescriptorTypeCreateInfoEXT
{
MutableDescriptorTypeCreateInfoEXT
-> Vector MutableDescriptorTypeListEXT
mutableDescriptorTypeLists :: Vector MutableDescriptorTypeListEXT }
deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (MutableDescriptorTypeCreateInfoEXT)
#endif
deriving instance Show MutableDescriptorTypeCreateInfoEXT
instance ToCStruct MutableDescriptorTypeCreateInfoEXT where
withCStruct :: MutableDescriptorTypeCreateInfoEXT
-> (Ptr MutableDescriptorTypeCreateInfoEXT -> IO b) -> IO b
withCStruct MutableDescriptorTypeCreateInfoEXT
x Ptr MutableDescriptorTypeCreateInfoEXT -> IO b
f = Int -> (Ptr MutableDescriptorTypeCreateInfoEXT -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
32 ((Ptr MutableDescriptorTypeCreateInfoEXT -> IO b) -> IO b)
-> (Ptr MutableDescriptorTypeCreateInfoEXT -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr MutableDescriptorTypeCreateInfoEXT
p -> Ptr MutableDescriptorTypeCreateInfoEXT
-> MutableDescriptorTypeCreateInfoEXT -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr MutableDescriptorTypeCreateInfoEXT
p MutableDescriptorTypeCreateInfoEXT
x (Ptr MutableDescriptorTypeCreateInfoEXT -> IO b
f Ptr MutableDescriptorTypeCreateInfoEXT
p)
pokeCStruct :: Ptr MutableDescriptorTypeCreateInfoEXT
-> MutableDescriptorTypeCreateInfoEXT -> IO b -> IO b
pokeCStruct Ptr MutableDescriptorTypeCreateInfoEXT
p MutableDescriptorTypeCreateInfoEXT{Vector MutableDescriptorTypeListEXT
mutableDescriptorTypeLists :: Vector MutableDescriptorTypeListEXT
$sel:mutableDescriptorTypeLists:MutableDescriptorTypeCreateInfoEXT :: MutableDescriptorTypeCreateInfoEXT
-> Vector MutableDescriptorTypeListEXT
..} 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 (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 MutableDescriptorTypeCreateInfoEXT
p Ptr MutableDescriptorTypeCreateInfoEXT -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_MUTABLE_DESCRIPTOR_TYPE_CREATE_INFO_EXT)
IO () -> ContT b IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr MutableDescriptorTypeCreateInfoEXT
p Ptr MutableDescriptorTypeCreateInfoEXT -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
IO () -> ContT b IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr MutableDescriptorTypeCreateInfoEXT
p Ptr MutableDescriptorTypeCreateInfoEXT -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Word32)) ((Int -> Word32
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Vector MutableDescriptorTypeListEXT -> Int
forall a. Vector a -> Int
Data.Vector.length (Vector MutableDescriptorTypeListEXT -> Int)
-> Vector MutableDescriptorTypeListEXT -> Int
forall a b. (a -> b) -> a -> b
$ (Vector MutableDescriptorTypeListEXT
mutableDescriptorTypeLists)) :: Word32))
Ptr MutableDescriptorTypeListEXT
pPMutableDescriptorTypeLists' <- ((Ptr MutableDescriptorTypeListEXT -> IO b) -> IO b)
-> ContT b IO (Ptr MutableDescriptorTypeListEXT)
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr MutableDescriptorTypeListEXT -> IO b) -> IO b)
-> ContT b IO (Ptr MutableDescriptorTypeListEXT))
-> ((Ptr MutableDescriptorTypeListEXT -> IO b) -> IO b)
-> ContT b IO (Ptr MutableDescriptorTypeListEXT)
forall a b. (a -> b) -> a -> b
$ Int -> (Ptr MutableDescriptorTypeListEXT -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes @MutableDescriptorTypeListEXT ((Vector MutableDescriptorTypeListEXT -> Int
forall a. Vector a -> Int
Data.Vector.length (Vector MutableDescriptorTypeListEXT
mutableDescriptorTypeLists)) Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
16)
(Int -> MutableDescriptorTypeListEXT -> ContT b IO ())
-> Vector MutableDescriptorTypeListEXT -> ContT b IO ()
forall (m :: * -> *) a b.
Monad m =>
(Int -> a -> m b) -> Vector a -> m ()
Data.Vector.imapM_ (\Int
i MutableDescriptorTypeListEXT
e -> ((() -> IO b) -> IO b) -> ContT b IO ()
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((() -> IO b) -> IO b) -> ContT b IO ())
-> ((() -> IO b) -> IO b) -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr MutableDescriptorTypeListEXT
-> MutableDescriptorTypeListEXT -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct (Ptr MutableDescriptorTypeListEXT
pPMutableDescriptorTypeLists' Ptr MutableDescriptorTypeListEXT
-> Int -> Ptr MutableDescriptorTypeListEXT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
16 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr MutableDescriptorTypeListEXT) (MutableDescriptorTypeListEXT
e) (IO b -> IO b) -> ((() -> IO b) -> IO b) -> (() -> IO b) -> IO b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((() -> IO b) -> () -> IO b
forall a b. (a -> b) -> a -> b
$ ())) (Vector MutableDescriptorTypeListEXT
mutableDescriptorTypeLists)
IO () -> ContT b IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr (Ptr MutableDescriptorTypeListEXT)
-> Ptr MutableDescriptorTypeListEXT -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr MutableDescriptorTypeCreateInfoEXT
p Ptr MutableDescriptorTypeCreateInfoEXT
-> Int -> Ptr (Ptr MutableDescriptorTypeListEXT)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr (Ptr MutableDescriptorTypeListEXT))) (Ptr MutableDescriptorTypeListEXT
pPMutableDescriptorTypeLists')
IO b -> ContT b IO b
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO b -> ContT b IO b) -> IO b -> ContT b IO b
forall a b. (a -> b) -> a -> b
$ IO b
f
cStructSize :: Int
cStructSize = Int
32
cStructAlignment :: Int
cStructAlignment = Int
8
pokeZeroCStruct :: Ptr MutableDescriptorTypeCreateInfoEXT -> IO b -> IO b
pokeZeroCStruct Ptr MutableDescriptorTypeCreateInfoEXT
p IO b
f = do
Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr MutableDescriptorTypeCreateInfoEXT
p Ptr MutableDescriptorTypeCreateInfoEXT -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_MUTABLE_DESCRIPTOR_TYPE_CREATE_INFO_EXT)
Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr MutableDescriptorTypeCreateInfoEXT
p Ptr MutableDescriptorTypeCreateInfoEXT -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
IO b
f
instance FromCStruct MutableDescriptorTypeCreateInfoEXT where
peekCStruct :: Ptr MutableDescriptorTypeCreateInfoEXT
-> IO MutableDescriptorTypeCreateInfoEXT
peekCStruct Ptr MutableDescriptorTypeCreateInfoEXT
p = do
Word32
mutableDescriptorTypeListCount <- Ptr Word32 -> IO Word32
forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr MutableDescriptorTypeCreateInfoEXT
p Ptr MutableDescriptorTypeCreateInfoEXT -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Word32))
Ptr MutableDescriptorTypeListEXT
pMutableDescriptorTypeLists <- Ptr (Ptr MutableDescriptorTypeListEXT)
-> IO (Ptr MutableDescriptorTypeListEXT)
forall a. Storable a => Ptr a -> IO a
peek @(Ptr MutableDescriptorTypeListEXT) ((Ptr MutableDescriptorTypeCreateInfoEXT
p Ptr MutableDescriptorTypeCreateInfoEXT
-> Int -> Ptr (Ptr MutableDescriptorTypeListEXT)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr (Ptr MutableDescriptorTypeListEXT)))
Vector MutableDescriptorTypeListEXT
pMutableDescriptorTypeLists' <- Int
-> (Int -> IO MutableDescriptorTypeListEXT)
-> IO (Vector MutableDescriptorTypeListEXT)
forall (m :: * -> *) a.
Monad m =>
Int -> (Int -> m a) -> m (Vector a)
generateM (Word32 -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral Word32
mutableDescriptorTypeListCount) (\Int
i -> Ptr MutableDescriptorTypeListEXT -> IO MutableDescriptorTypeListEXT
forall a. FromCStruct a => Ptr a -> IO a
peekCStruct @MutableDescriptorTypeListEXT ((Ptr MutableDescriptorTypeListEXT
pMutableDescriptorTypeLists Ptr MutableDescriptorTypeListEXT
-> Int -> Ptr MutableDescriptorTypeListEXT
forall a. Ptr a -> Int -> Ptr a
`advancePtrBytes` (Int
16 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr MutableDescriptorTypeListEXT)))
MutableDescriptorTypeCreateInfoEXT
-> IO MutableDescriptorTypeCreateInfoEXT
forall (f :: * -> *) a. Applicative f => a -> f a
pure (MutableDescriptorTypeCreateInfoEXT
-> IO MutableDescriptorTypeCreateInfoEXT)
-> MutableDescriptorTypeCreateInfoEXT
-> IO MutableDescriptorTypeCreateInfoEXT
forall a b. (a -> b) -> a -> b
$ Vector MutableDescriptorTypeListEXT
-> MutableDescriptorTypeCreateInfoEXT
MutableDescriptorTypeCreateInfoEXT
Vector MutableDescriptorTypeListEXT
pMutableDescriptorTypeLists'
instance Zero MutableDescriptorTypeCreateInfoEXT where
zero :: MutableDescriptorTypeCreateInfoEXT
zero = Vector MutableDescriptorTypeListEXT
-> MutableDescriptorTypeCreateInfoEXT
MutableDescriptorTypeCreateInfoEXT
Vector MutableDescriptorTypeListEXT
forall a. Monoid a => a
mempty
type EXT_MUTABLE_DESCRIPTOR_TYPE_SPEC_VERSION = 1
pattern EXT_MUTABLE_DESCRIPTOR_TYPE_SPEC_VERSION :: forall a . Integral a => a
pattern $bEXT_MUTABLE_DESCRIPTOR_TYPE_SPEC_VERSION :: a
$mEXT_MUTABLE_DESCRIPTOR_TYPE_SPEC_VERSION :: forall r a. Integral a => a -> (Void# -> r) -> (Void# -> r) -> r
EXT_MUTABLE_DESCRIPTOR_TYPE_SPEC_VERSION = 1
type EXT_MUTABLE_DESCRIPTOR_TYPE_EXTENSION_NAME = "VK_EXT_mutable_descriptor_type"
pattern EXT_MUTABLE_DESCRIPTOR_TYPE_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
pattern $bEXT_MUTABLE_DESCRIPTOR_TYPE_EXTENSION_NAME :: a
$mEXT_MUTABLE_DESCRIPTOR_TYPE_EXTENSION_NAME :: forall r a.
(Eq a, IsString a) =>
a -> (Void# -> r) -> (Void# -> r) -> r
EXT_MUTABLE_DESCRIPTOR_TYPE_EXTENSION_NAME = "VK_EXT_mutable_descriptor_type"