{-# language CPP #-}
module Vulkan.Core10.OtherTypes ( MemoryBarrier(..)
, BufferMemoryBarrier(..)
, ImageMemoryBarrier(..)
, PipelineCacheHeaderVersionOne(..)
, DrawIndirectCommand(..)
, DrawIndexedIndirectCommand(..)
, DispatchIndirectCommand(..)
, BaseOutStructure(..)
, BaseInStructure(..)
, ObjectType(..)
, VendorId(..)
) where
import Vulkan.CStruct.Utils (FixedArray)
import Data.Typeable (eqT)
import Foreign.Marshal.Alloc (allocaBytes)
import GHC.Ptr (castPtr)
import Foreign.Ptr (nullPtr)
import Foreign.Ptr (plusPtr)
import Control.Monad.Trans.Class (lift)
import Control.Monad.Trans.Cont (evalContT)
import Vulkan.CStruct (FromCStruct)
import Vulkan.CStruct (FromCStruct(..))
import Vulkan.CStruct (ToCStruct)
import Vulkan.CStruct (ToCStruct(..))
import Vulkan.Zero (Zero(..))
import Data.Type.Equality ((:~:)(Refl))
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 Data.Int (Int32)
import Foreign.Ptr (Ptr)
import Data.Word (Word32)
import Data.Word (Word8)
import Data.ByteString (ByteString)
import Data.Kind (Type)
import Control.Monad.Trans.Cont (ContT(..))
import Vulkan.CStruct.Utils (peekByteStringFromSizedVectorPtr)
import Vulkan.CStruct.Utils (pokeFixedLengthByteString)
import Vulkan.Core10.Enums.AccessFlagBits (AccessFlags)
import Vulkan.Core10.Handles (Buffer)
import Vulkan.CStruct.Extends (Chain)
import Vulkan.Core10.FundamentalTypes (DeviceSize)
import Vulkan.CStruct.Extends (Extends)
import Vulkan.CStruct.Extends (Extendss)
import Vulkan.CStruct.Extends (Extensible(..))
import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_external_memory_acquire_unmodified (ExternalMemoryAcquireUnmodifiedEXT)
import Vulkan.Core10.Handles (Image)
import Vulkan.Core10.Enums.ImageLayout (ImageLayout)
import Vulkan.Core10.ImageView (ImageSubresourceRange)
import Vulkan.CStruct.Extends (PeekChain)
import Vulkan.CStruct.Extends (PeekChain(..))
import Vulkan.Core10.Enums.PipelineCacheHeaderVersion (PipelineCacheHeaderVersion)
import Vulkan.CStruct.Extends (PokeChain)
import Vulkan.CStruct.Extends (PokeChain(..))
import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_sample_locations (SampleLocationsInfoEXT)
import Vulkan.Core10.Enums.StructureType (StructureType)
import Vulkan.Core10.APIConstants (UUID_SIZE)
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_MEMORY_BARRIER))
import Vulkan.CStruct.Extends (BaseInStructure(..))
import Vulkan.CStruct.Extends (BaseOutStructure(..))
import Vulkan.Core10.Enums.ObjectType (ObjectType(..))
import Vulkan.Core10.Enums.VendorId (VendorId(..))
data MemoryBarrier = MemoryBarrier
{
MemoryBarrier -> AccessFlags
srcAccessMask :: AccessFlags
,
MemoryBarrier -> AccessFlags
dstAccessMask :: AccessFlags
}
deriving (Typeable, MemoryBarrier -> MemoryBarrier -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: MemoryBarrier -> MemoryBarrier -> Bool
$c/= :: MemoryBarrier -> MemoryBarrier -> Bool
== :: MemoryBarrier -> MemoryBarrier -> Bool
$c== :: MemoryBarrier -> MemoryBarrier -> Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (MemoryBarrier)
#endif
deriving instance Show MemoryBarrier
instance ToCStruct MemoryBarrier where
withCStruct :: forall b. MemoryBarrier -> (Ptr MemoryBarrier -> IO b) -> IO b
withCStruct MemoryBarrier
x Ptr MemoryBarrier -> IO b
f = forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
24 forall a b. (a -> b) -> a -> b
$ \Ptr MemoryBarrier
p -> forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr MemoryBarrier
p MemoryBarrier
x (Ptr MemoryBarrier -> IO b
f Ptr MemoryBarrier
p)
pokeCStruct :: forall b. Ptr MemoryBarrier -> MemoryBarrier -> IO b -> IO b
pokeCStruct Ptr MemoryBarrier
p MemoryBarrier{AccessFlags
dstAccessMask :: AccessFlags
srcAccessMask :: AccessFlags
$sel:dstAccessMask:MemoryBarrier :: MemoryBarrier -> AccessFlags
$sel:srcAccessMask:MemoryBarrier :: MemoryBarrier -> AccessFlags
..} IO b
f = do
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr MemoryBarrier
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_MEMORY_BARRIER)
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr MemoryBarrier
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 MemoryBarrier
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr AccessFlags)) (AccessFlags
srcAccessMask)
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr MemoryBarrier
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
20 :: Ptr AccessFlags)) (AccessFlags
dstAccessMask)
IO b
f
cStructSize :: Int
cStructSize = Int
24
cStructAlignment :: Int
cStructAlignment = Int
8
pokeZeroCStruct :: forall b. Ptr MemoryBarrier -> IO b -> IO b
pokeZeroCStruct Ptr MemoryBarrier
p IO b
f = do
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr MemoryBarrier
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_MEMORY_BARRIER)
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr MemoryBarrier
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (forall a. Ptr a
nullPtr)
IO b
f
instance FromCStruct MemoryBarrier where
peekCStruct :: Ptr MemoryBarrier -> IO MemoryBarrier
peekCStruct Ptr MemoryBarrier
p = do
AccessFlags
srcAccessMask <- forall a. Storable a => Ptr a -> IO a
peek @AccessFlags ((Ptr MemoryBarrier
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr AccessFlags))
AccessFlags
dstAccessMask <- forall a. Storable a => Ptr a -> IO a
peek @AccessFlags ((Ptr MemoryBarrier
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
20 :: Ptr AccessFlags))
forall (f :: * -> *) a. Applicative f => a -> f a
pure forall a b. (a -> b) -> a -> b
$ AccessFlags -> AccessFlags -> MemoryBarrier
MemoryBarrier
AccessFlags
srcAccessMask AccessFlags
dstAccessMask
instance Storable MemoryBarrier where
sizeOf :: MemoryBarrier -> Int
sizeOf ~MemoryBarrier
_ = Int
24
alignment :: MemoryBarrier -> Int
alignment ~MemoryBarrier
_ = Int
8
peek :: Ptr MemoryBarrier -> IO MemoryBarrier
peek = forall a. FromCStruct a => Ptr a -> IO a
peekCStruct
poke :: Ptr MemoryBarrier -> MemoryBarrier -> IO ()
poke Ptr MemoryBarrier
ptr MemoryBarrier
poked = forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr MemoryBarrier
ptr MemoryBarrier
poked (forall (f :: * -> *) a. Applicative f => a -> f a
pure ())
instance Zero MemoryBarrier where
zero :: MemoryBarrier
zero = AccessFlags -> AccessFlags -> MemoryBarrier
MemoryBarrier
forall a. Zero a => a
zero
forall a. Zero a => a
zero
data BufferMemoryBarrier (es :: [Type]) = BufferMemoryBarrier
{
forall (es :: [*]). BufferMemoryBarrier es -> Chain es
next :: Chain es
,
forall (es :: [*]). BufferMemoryBarrier es -> AccessFlags
srcAccessMask :: AccessFlags
,
forall (es :: [*]). BufferMemoryBarrier es -> AccessFlags
dstAccessMask :: AccessFlags
,
forall (es :: [*]). BufferMemoryBarrier es -> Word32
srcQueueFamilyIndex :: Word32
,
forall (es :: [*]). BufferMemoryBarrier es -> Word32
dstQueueFamilyIndex :: Word32
,
forall (es :: [*]). BufferMemoryBarrier es -> Buffer
buffer :: Buffer
,
forall (es :: [*]). BufferMemoryBarrier es -> DeviceSize
offset :: DeviceSize
,
forall (es :: [*]). BufferMemoryBarrier es -> DeviceSize
size :: DeviceSize
}
deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (BufferMemoryBarrier (es :: [Type]))
#endif
deriving instance Show (Chain es) => Show (BufferMemoryBarrier es)
instance Extensible BufferMemoryBarrier where
extensibleTypeName :: String
extensibleTypeName = String
"BufferMemoryBarrier"
setNext :: forall (ds :: [*]) (es :: [*]).
BufferMemoryBarrier ds -> Chain es -> BufferMemoryBarrier es
setNext BufferMemoryBarrier{Word32
DeviceSize
Chain ds
Buffer
AccessFlags
size :: DeviceSize
offset :: DeviceSize
buffer :: Buffer
dstQueueFamilyIndex :: Word32
srcQueueFamilyIndex :: Word32
dstAccessMask :: AccessFlags
srcAccessMask :: AccessFlags
next :: Chain ds
$sel:size:BufferMemoryBarrier :: forall (es :: [*]). BufferMemoryBarrier es -> DeviceSize
$sel:offset:BufferMemoryBarrier :: forall (es :: [*]). BufferMemoryBarrier es -> DeviceSize
$sel:buffer:BufferMemoryBarrier :: forall (es :: [*]). BufferMemoryBarrier es -> Buffer
$sel:dstQueueFamilyIndex:BufferMemoryBarrier :: forall (es :: [*]). BufferMemoryBarrier es -> Word32
$sel:srcQueueFamilyIndex:BufferMemoryBarrier :: forall (es :: [*]). BufferMemoryBarrier es -> Word32
$sel:dstAccessMask:BufferMemoryBarrier :: forall (es :: [*]). BufferMemoryBarrier es -> AccessFlags
$sel:srcAccessMask:BufferMemoryBarrier :: forall (es :: [*]). BufferMemoryBarrier es -> AccessFlags
$sel:next:BufferMemoryBarrier :: forall (es :: [*]). BufferMemoryBarrier es -> Chain es
..} Chain es
next' = BufferMemoryBarrier{$sel:next:BufferMemoryBarrier :: Chain es
next = Chain es
next', Word32
DeviceSize
Buffer
AccessFlags
size :: DeviceSize
offset :: DeviceSize
buffer :: Buffer
dstQueueFamilyIndex :: Word32
srcQueueFamilyIndex :: Word32
dstAccessMask :: AccessFlags
srcAccessMask :: AccessFlags
$sel:size:BufferMemoryBarrier :: DeviceSize
$sel:offset:BufferMemoryBarrier :: DeviceSize
$sel:buffer:BufferMemoryBarrier :: Buffer
$sel:dstQueueFamilyIndex:BufferMemoryBarrier :: Word32
$sel:srcQueueFamilyIndex:BufferMemoryBarrier :: Word32
$sel:dstAccessMask:BufferMemoryBarrier :: AccessFlags
$sel:srcAccessMask:BufferMemoryBarrier :: AccessFlags
..}
getNext :: forall (es :: [*]). BufferMemoryBarrier es -> Chain es
getNext BufferMemoryBarrier{Word32
DeviceSize
Chain es
Buffer
AccessFlags
size :: DeviceSize
offset :: DeviceSize
buffer :: Buffer
dstQueueFamilyIndex :: Word32
srcQueueFamilyIndex :: Word32
dstAccessMask :: AccessFlags
srcAccessMask :: AccessFlags
next :: Chain es
$sel:size:BufferMemoryBarrier :: forall (es :: [*]). BufferMemoryBarrier es -> DeviceSize
$sel:offset:BufferMemoryBarrier :: forall (es :: [*]). BufferMemoryBarrier es -> DeviceSize
$sel:buffer:BufferMemoryBarrier :: forall (es :: [*]). BufferMemoryBarrier es -> Buffer
$sel:dstQueueFamilyIndex:BufferMemoryBarrier :: forall (es :: [*]). BufferMemoryBarrier es -> Word32
$sel:srcQueueFamilyIndex:BufferMemoryBarrier :: forall (es :: [*]). BufferMemoryBarrier es -> Word32
$sel:dstAccessMask:BufferMemoryBarrier :: forall (es :: [*]). BufferMemoryBarrier es -> AccessFlags
$sel:srcAccessMask:BufferMemoryBarrier :: forall (es :: [*]). BufferMemoryBarrier es -> AccessFlags
$sel:next:BufferMemoryBarrier :: forall (es :: [*]). BufferMemoryBarrier es -> Chain es
..} = Chain es
next
extends :: forall e b proxy. Typeable e => proxy e -> (Extends BufferMemoryBarrier e => b) -> Maybe b
extends :: forall e b (proxy :: * -> *).
Typeable e =>
proxy e -> (Extends BufferMemoryBarrier e => b) -> Maybe b
extends proxy e
_ Extends BufferMemoryBarrier e => b
f
| Just e :~: ExternalMemoryAcquireUnmodifiedEXT
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
eqT @e @ExternalMemoryAcquireUnmodifiedEXT = forall a. a -> Maybe a
Just Extends BufferMemoryBarrier e => b
f
| Bool
otherwise = forall a. Maybe a
Nothing
instance ( Extendss BufferMemoryBarrier es
, PokeChain es ) => ToCStruct (BufferMemoryBarrier es) where
withCStruct :: forall b.
BufferMemoryBarrier es
-> (Ptr (BufferMemoryBarrier es) -> IO b) -> IO b
withCStruct BufferMemoryBarrier es
x Ptr (BufferMemoryBarrier es) -> IO b
f = forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
56 forall a b. (a -> b) -> a -> b
$ \Ptr (BufferMemoryBarrier es)
p -> forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr (BufferMemoryBarrier es)
p BufferMemoryBarrier es
x (Ptr (BufferMemoryBarrier es) -> IO b
f Ptr (BufferMemoryBarrier es)
p)
pokeCStruct :: forall b.
Ptr (BufferMemoryBarrier es)
-> BufferMemoryBarrier es -> IO b -> IO b
pokeCStruct Ptr (BufferMemoryBarrier es)
p BufferMemoryBarrier{Word32
DeviceSize
Chain es
Buffer
AccessFlags
size :: DeviceSize
offset :: DeviceSize
buffer :: Buffer
dstQueueFamilyIndex :: Word32
srcQueueFamilyIndex :: Word32
dstAccessMask :: AccessFlags
srcAccessMask :: AccessFlags
next :: Chain es
$sel:size:BufferMemoryBarrier :: forall (es :: [*]). BufferMemoryBarrier es -> DeviceSize
$sel:offset:BufferMemoryBarrier :: forall (es :: [*]). BufferMemoryBarrier es -> DeviceSize
$sel:buffer:BufferMemoryBarrier :: forall (es :: [*]). BufferMemoryBarrier es -> Buffer
$sel:dstQueueFamilyIndex:BufferMemoryBarrier :: forall (es :: [*]). BufferMemoryBarrier es -> Word32
$sel:srcQueueFamilyIndex:BufferMemoryBarrier :: forall (es :: [*]). BufferMemoryBarrier es -> Word32
$sel:dstAccessMask:BufferMemoryBarrier :: forall (es :: [*]). BufferMemoryBarrier es -> AccessFlags
$sel:srcAccessMask:BufferMemoryBarrier :: forall (es :: [*]). BufferMemoryBarrier es -> AccessFlags
$sel:next:BufferMemoryBarrier :: forall (es :: [*]). BufferMemoryBarrier es -> Chain es
..} 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 (BufferMemoryBarrier es)
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER)
Ptr ()
pNext'' <- forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap forall a b. Ptr a -> Ptr b
castPtr forall b c a. (b -> c) -> (a -> b) -> a -> c
. 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 (es :: [*]) a.
PokeChain es =>
Chain es -> (Ptr (Chain es) -> IO a) -> IO a
withChain (Chain es
next)
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 (BufferMemoryBarrier es)
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) Ptr ()
pNext''
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 (BufferMemoryBarrier es)
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr AccessFlags)) (AccessFlags
srcAccessMask)
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 (BufferMemoryBarrier es)
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
20 :: Ptr AccessFlags)) (AccessFlags
dstAccessMask)
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 (BufferMemoryBarrier es)
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr Word32)) (Word32
srcQueueFamilyIndex)
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 (BufferMemoryBarrier es)
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
28 :: Ptr Word32)) (Word32
dstQueueFamilyIndex)
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 (BufferMemoryBarrier es)
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr Buffer)) (Buffer
buffer)
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 (BufferMemoryBarrier es)
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
40 :: Ptr DeviceSize)) (DeviceSize
offset)
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 (BufferMemoryBarrier es)
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
48 :: Ptr DeviceSize)) (DeviceSize
size)
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
56
cStructAlignment :: Int
cStructAlignment = Int
8
pokeZeroCStruct :: forall b. Ptr (BufferMemoryBarrier es) -> IO b -> IO b
pokeZeroCStruct Ptr (BufferMemoryBarrier es)
p 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 (BufferMemoryBarrier es)
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER)
Ptr ()
pNext' <- forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap forall a b. Ptr a -> Ptr b
castPtr forall b c a. (b -> c) -> (a -> b) -> a -> c
. 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 (es :: [*]) a.
PokeChain es =>
(Ptr (Chain es) -> IO a) -> IO a
withZeroChain @es
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 (BufferMemoryBarrier es)
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) Ptr ()
pNext'
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 (BufferMemoryBarrier es)
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr AccessFlags)) (forall a. Zero a => a
zero)
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 (BufferMemoryBarrier es)
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
20 :: Ptr AccessFlags)) (forall a. Zero a => a
zero)
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 (BufferMemoryBarrier es)
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr Word32)) (forall a. Zero a => a
zero)
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 (BufferMemoryBarrier es)
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
28 :: Ptr Word32)) (forall a. Zero a => a
zero)
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 (BufferMemoryBarrier es)
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr Buffer)) (forall a. Zero a => a
zero)
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 (BufferMemoryBarrier es)
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
40 :: Ptr DeviceSize)) (forall a. Zero a => a
zero)
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 (BufferMemoryBarrier es)
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
48 :: Ptr DeviceSize)) (forall a. Zero a => a
zero)
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift forall a b. (a -> b) -> a -> b
$ IO b
f
instance ( Extendss BufferMemoryBarrier es
, PeekChain es ) => FromCStruct (BufferMemoryBarrier es) where
peekCStruct :: Ptr (BufferMemoryBarrier es) -> IO (BufferMemoryBarrier es)
peekCStruct Ptr (BufferMemoryBarrier es)
p = do
Ptr ()
pNext <- forall a. Storable a => Ptr a -> IO a
peek @(Ptr ()) ((Ptr (BufferMemoryBarrier es)
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ())))
Chain es
next <- forall (es :: [*]). PeekChain es => Ptr (Chain es) -> IO (Chain es)
peekChain (forall a b. Ptr a -> Ptr b
castPtr Ptr ()
pNext)
AccessFlags
srcAccessMask <- forall a. Storable a => Ptr a -> IO a
peek @AccessFlags ((Ptr (BufferMemoryBarrier es)
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr AccessFlags))
AccessFlags
dstAccessMask <- forall a. Storable a => Ptr a -> IO a
peek @AccessFlags ((Ptr (BufferMemoryBarrier es)
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
20 :: Ptr AccessFlags))
Word32
srcQueueFamilyIndex <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr (BufferMemoryBarrier es)
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr Word32))
Word32
dstQueueFamilyIndex <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr (BufferMemoryBarrier es)
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
28 :: Ptr Word32))
Buffer
buffer <- forall a. Storable a => Ptr a -> IO a
peek @Buffer ((Ptr (BufferMemoryBarrier es)
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr Buffer))
DeviceSize
offset <- forall a. Storable a => Ptr a -> IO a
peek @DeviceSize ((Ptr (BufferMemoryBarrier es)
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
40 :: Ptr DeviceSize))
DeviceSize
size <- forall a. Storable a => Ptr a -> IO a
peek @DeviceSize ((Ptr (BufferMemoryBarrier es)
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
48 :: Ptr DeviceSize))
forall (f :: * -> *) a. Applicative f => a -> f a
pure forall a b. (a -> b) -> a -> b
$ forall (es :: [*]).
Chain es
-> AccessFlags
-> AccessFlags
-> Word32
-> Word32
-> Buffer
-> DeviceSize
-> DeviceSize
-> BufferMemoryBarrier es
BufferMemoryBarrier
Chain es
next
AccessFlags
srcAccessMask
AccessFlags
dstAccessMask
Word32
srcQueueFamilyIndex
Word32
dstQueueFamilyIndex
Buffer
buffer
DeviceSize
offset
DeviceSize
size
instance es ~ '[] => Zero (BufferMemoryBarrier es) where
zero :: BufferMemoryBarrier es
zero = forall (es :: [*]).
Chain es
-> AccessFlags
-> AccessFlags
-> Word32
-> Word32
-> Buffer
-> DeviceSize
-> DeviceSize
-> BufferMemoryBarrier es
BufferMemoryBarrier
()
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
forall a. Zero a => a
zero
data ImageMemoryBarrier (es :: [Type]) = ImageMemoryBarrier
{
forall (es :: [*]). ImageMemoryBarrier es -> Chain es
next :: Chain es
,
forall (es :: [*]). ImageMemoryBarrier es -> AccessFlags
srcAccessMask :: AccessFlags
,
forall (es :: [*]). ImageMemoryBarrier es -> AccessFlags
dstAccessMask :: AccessFlags
,
forall (es :: [*]). ImageMemoryBarrier es -> ImageLayout
oldLayout :: ImageLayout
,
forall (es :: [*]). ImageMemoryBarrier es -> ImageLayout
newLayout :: ImageLayout
,
forall (es :: [*]). ImageMemoryBarrier es -> Word32
srcQueueFamilyIndex :: Word32
,
forall (es :: [*]). ImageMemoryBarrier es -> Word32
dstQueueFamilyIndex :: Word32
,
forall (es :: [*]). ImageMemoryBarrier es -> Image
image :: Image
,
forall (es :: [*]). ImageMemoryBarrier es -> ImageSubresourceRange
subresourceRange :: ImageSubresourceRange
}
deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (ImageMemoryBarrier (es :: [Type]))
#endif
deriving instance Show (Chain es) => Show (ImageMemoryBarrier es)
instance Extensible ImageMemoryBarrier where
extensibleTypeName :: String
extensibleTypeName = String
"ImageMemoryBarrier"
setNext :: forall (ds :: [*]) (es :: [*]).
ImageMemoryBarrier ds -> Chain es -> ImageMemoryBarrier es
setNext ImageMemoryBarrier{Word32
Chain ds
ImageLayout
Image
ImageSubresourceRange
AccessFlags
subresourceRange :: ImageSubresourceRange
image :: Image
dstQueueFamilyIndex :: Word32
srcQueueFamilyIndex :: Word32
newLayout :: ImageLayout
oldLayout :: ImageLayout
dstAccessMask :: AccessFlags
srcAccessMask :: AccessFlags
next :: Chain ds
$sel:subresourceRange:ImageMemoryBarrier :: forall (es :: [*]). ImageMemoryBarrier es -> ImageSubresourceRange
$sel:image:ImageMemoryBarrier :: forall (es :: [*]). ImageMemoryBarrier es -> Image
$sel:dstQueueFamilyIndex:ImageMemoryBarrier :: forall (es :: [*]). ImageMemoryBarrier es -> Word32
$sel:srcQueueFamilyIndex:ImageMemoryBarrier :: forall (es :: [*]). ImageMemoryBarrier es -> Word32
$sel:newLayout:ImageMemoryBarrier :: forall (es :: [*]). ImageMemoryBarrier es -> ImageLayout
$sel:oldLayout:ImageMemoryBarrier :: forall (es :: [*]). ImageMemoryBarrier es -> ImageLayout
$sel:dstAccessMask:ImageMemoryBarrier :: forall (es :: [*]). ImageMemoryBarrier es -> AccessFlags
$sel:srcAccessMask:ImageMemoryBarrier :: forall (es :: [*]). ImageMemoryBarrier es -> AccessFlags
$sel:next:ImageMemoryBarrier :: forall (es :: [*]). ImageMemoryBarrier es -> Chain es
..} Chain es
next' = ImageMemoryBarrier{$sel:next:ImageMemoryBarrier :: Chain es
next = Chain es
next', Word32
ImageLayout
Image
ImageSubresourceRange
AccessFlags
subresourceRange :: ImageSubresourceRange
image :: Image
dstQueueFamilyIndex :: Word32
srcQueueFamilyIndex :: Word32
newLayout :: ImageLayout
oldLayout :: ImageLayout
dstAccessMask :: AccessFlags
srcAccessMask :: AccessFlags
$sel:subresourceRange:ImageMemoryBarrier :: ImageSubresourceRange
$sel:image:ImageMemoryBarrier :: Image
$sel:dstQueueFamilyIndex:ImageMemoryBarrier :: Word32
$sel:srcQueueFamilyIndex:ImageMemoryBarrier :: Word32
$sel:newLayout:ImageMemoryBarrier :: ImageLayout
$sel:oldLayout:ImageMemoryBarrier :: ImageLayout
$sel:dstAccessMask:ImageMemoryBarrier :: AccessFlags
$sel:srcAccessMask:ImageMemoryBarrier :: AccessFlags
..}
getNext :: forall (es :: [*]). ImageMemoryBarrier es -> Chain es
getNext ImageMemoryBarrier{Word32
Chain es
ImageLayout
Image
ImageSubresourceRange
AccessFlags
subresourceRange :: ImageSubresourceRange
image :: Image
dstQueueFamilyIndex :: Word32
srcQueueFamilyIndex :: Word32
newLayout :: ImageLayout
oldLayout :: ImageLayout
dstAccessMask :: AccessFlags
srcAccessMask :: AccessFlags
next :: Chain es
$sel:subresourceRange:ImageMemoryBarrier :: forall (es :: [*]). ImageMemoryBarrier es -> ImageSubresourceRange
$sel:image:ImageMemoryBarrier :: forall (es :: [*]). ImageMemoryBarrier es -> Image
$sel:dstQueueFamilyIndex:ImageMemoryBarrier :: forall (es :: [*]). ImageMemoryBarrier es -> Word32
$sel:srcQueueFamilyIndex:ImageMemoryBarrier :: forall (es :: [*]). ImageMemoryBarrier es -> Word32
$sel:newLayout:ImageMemoryBarrier :: forall (es :: [*]). ImageMemoryBarrier es -> ImageLayout
$sel:oldLayout:ImageMemoryBarrier :: forall (es :: [*]). ImageMemoryBarrier es -> ImageLayout
$sel:dstAccessMask:ImageMemoryBarrier :: forall (es :: [*]). ImageMemoryBarrier es -> AccessFlags
$sel:srcAccessMask:ImageMemoryBarrier :: forall (es :: [*]). ImageMemoryBarrier es -> AccessFlags
$sel:next:ImageMemoryBarrier :: forall (es :: [*]). ImageMemoryBarrier es -> Chain es
..} = Chain es
next
extends :: forall e b proxy. Typeable e => proxy e -> (Extends ImageMemoryBarrier e => b) -> Maybe b
extends :: forall e b (proxy :: * -> *).
Typeable e =>
proxy e -> (Extends ImageMemoryBarrier e => b) -> Maybe b
extends proxy e
_ Extends ImageMemoryBarrier e => b
f
| Just e :~: ExternalMemoryAcquireUnmodifiedEXT
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
eqT @e @ExternalMemoryAcquireUnmodifiedEXT = forall a. a -> Maybe a
Just Extends ImageMemoryBarrier e => b
f
| Just e :~: SampleLocationsInfoEXT
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
eqT @e @SampleLocationsInfoEXT = forall a. a -> Maybe a
Just Extends ImageMemoryBarrier e => b
f
| Bool
otherwise = forall a. Maybe a
Nothing
instance ( Extendss ImageMemoryBarrier es
, PokeChain es ) => ToCStruct (ImageMemoryBarrier es) where
withCStruct :: forall b.
ImageMemoryBarrier es
-> (Ptr (ImageMemoryBarrier es) -> IO b) -> IO b
withCStruct ImageMemoryBarrier es
x Ptr (ImageMemoryBarrier es) -> IO b
f = forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
72 forall a b. (a -> b) -> a -> b
$ \Ptr (ImageMemoryBarrier es)
p -> forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr (ImageMemoryBarrier es)
p ImageMemoryBarrier es
x (Ptr (ImageMemoryBarrier es) -> IO b
f Ptr (ImageMemoryBarrier es)
p)
pokeCStruct :: forall b.
Ptr (ImageMemoryBarrier es)
-> ImageMemoryBarrier es -> IO b -> IO b
pokeCStruct Ptr (ImageMemoryBarrier es)
p ImageMemoryBarrier{Word32
Chain es
ImageLayout
Image
ImageSubresourceRange
AccessFlags
subresourceRange :: ImageSubresourceRange
image :: Image
dstQueueFamilyIndex :: Word32
srcQueueFamilyIndex :: Word32
newLayout :: ImageLayout
oldLayout :: ImageLayout
dstAccessMask :: AccessFlags
srcAccessMask :: AccessFlags
next :: Chain es
$sel:subresourceRange:ImageMemoryBarrier :: forall (es :: [*]). ImageMemoryBarrier es -> ImageSubresourceRange
$sel:image:ImageMemoryBarrier :: forall (es :: [*]). ImageMemoryBarrier es -> Image
$sel:dstQueueFamilyIndex:ImageMemoryBarrier :: forall (es :: [*]). ImageMemoryBarrier es -> Word32
$sel:srcQueueFamilyIndex:ImageMemoryBarrier :: forall (es :: [*]). ImageMemoryBarrier es -> Word32
$sel:newLayout:ImageMemoryBarrier :: forall (es :: [*]). ImageMemoryBarrier es -> ImageLayout
$sel:oldLayout:ImageMemoryBarrier :: forall (es :: [*]). ImageMemoryBarrier es -> ImageLayout
$sel:dstAccessMask:ImageMemoryBarrier :: forall (es :: [*]). ImageMemoryBarrier es -> AccessFlags
$sel:srcAccessMask:ImageMemoryBarrier :: forall (es :: [*]). ImageMemoryBarrier es -> AccessFlags
$sel:next:ImageMemoryBarrier :: forall (es :: [*]). ImageMemoryBarrier es -> Chain es
..} 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 (ImageMemoryBarrier es)
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER)
Ptr ()
pNext'' <- forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap forall a b. Ptr a -> Ptr b
castPtr forall b c a. (b -> c) -> (a -> b) -> a -> c
. 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 (es :: [*]) a.
PokeChain es =>
Chain es -> (Ptr (Chain es) -> IO a) -> IO a
withChain (Chain es
next)
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 (ImageMemoryBarrier es)
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) Ptr ()
pNext''
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 (ImageMemoryBarrier es)
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr AccessFlags)) (AccessFlags
srcAccessMask)
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 (ImageMemoryBarrier es)
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
20 :: Ptr AccessFlags)) (AccessFlags
dstAccessMask)
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 (ImageMemoryBarrier es)
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr ImageLayout)) (ImageLayout
oldLayout)
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 (ImageMemoryBarrier es)
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
28 :: Ptr ImageLayout)) (ImageLayout
newLayout)
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 (ImageMemoryBarrier es)
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr Word32)) (Word32
srcQueueFamilyIndex)
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 (ImageMemoryBarrier es)
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
36 :: Ptr Word32)) (Word32
dstQueueFamilyIndex)
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 (ImageMemoryBarrier es)
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
40 :: Ptr Image)) (Image
image)
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 (ImageMemoryBarrier es)
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
48 :: Ptr ImageSubresourceRange)) (ImageSubresourceRange
subresourceRange)
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. Ptr (ImageMemoryBarrier es) -> IO b -> IO b
pokeZeroCStruct Ptr (ImageMemoryBarrier es)
p 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 (ImageMemoryBarrier es)
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER)
Ptr ()
pNext' <- forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap forall a b. Ptr a -> Ptr b
castPtr forall b c a. (b -> c) -> (a -> b) -> a -> c
. 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 (es :: [*]) a.
PokeChain es =>
(Ptr (Chain es) -> IO a) -> IO a
withZeroChain @es
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 (ImageMemoryBarrier es)
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) Ptr ()
pNext'
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 (ImageMemoryBarrier es)
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr AccessFlags)) (forall a. Zero a => a
zero)
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 (ImageMemoryBarrier es)
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
20 :: Ptr AccessFlags)) (forall a. Zero a => a
zero)
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 (ImageMemoryBarrier es)
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr ImageLayout)) (forall a. Zero a => a
zero)
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 (ImageMemoryBarrier es)
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
28 :: Ptr ImageLayout)) (forall a. Zero a => a
zero)
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 (ImageMemoryBarrier es)
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr Word32)) (forall a. Zero a => a
zero)
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 (ImageMemoryBarrier es)
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
36 :: Ptr Word32)) (forall a. Zero a => a
zero)
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 (ImageMemoryBarrier es)
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
40 :: Ptr Image)) (forall a. Zero a => a
zero)
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 (ImageMemoryBarrier es)
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
48 :: Ptr ImageSubresourceRange)) (forall a. Zero a => a
zero)
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift forall a b. (a -> b) -> a -> b
$ IO b
f
instance ( Extendss ImageMemoryBarrier es
, PeekChain es ) => FromCStruct (ImageMemoryBarrier es) where
peekCStruct :: Ptr (ImageMemoryBarrier es) -> IO (ImageMemoryBarrier es)
peekCStruct Ptr (ImageMemoryBarrier es)
p = do
Ptr ()
pNext <- forall a. Storable a => Ptr a -> IO a
peek @(Ptr ()) ((Ptr (ImageMemoryBarrier es)
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ())))
Chain es
next <- forall (es :: [*]). PeekChain es => Ptr (Chain es) -> IO (Chain es)
peekChain (forall a b. Ptr a -> Ptr b
castPtr Ptr ()
pNext)
AccessFlags
srcAccessMask <- forall a. Storable a => Ptr a -> IO a
peek @AccessFlags ((Ptr (ImageMemoryBarrier es)
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr AccessFlags))
AccessFlags
dstAccessMask <- forall a. Storable a => Ptr a -> IO a
peek @AccessFlags ((Ptr (ImageMemoryBarrier es)
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
20 :: Ptr AccessFlags))
ImageLayout
oldLayout <- forall a. Storable a => Ptr a -> IO a
peek @ImageLayout ((Ptr (ImageMemoryBarrier es)
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr ImageLayout))
ImageLayout
newLayout <- forall a. Storable a => Ptr a -> IO a
peek @ImageLayout ((Ptr (ImageMemoryBarrier es)
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
28 :: Ptr ImageLayout))
Word32
srcQueueFamilyIndex <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr (ImageMemoryBarrier es)
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr Word32))
Word32
dstQueueFamilyIndex <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr (ImageMemoryBarrier es)
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
36 :: Ptr Word32))
Image
image <- forall a. Storable a => Ptr a -> IO a
peek @Image ((Ptr (ImageMemoryBarrier es)
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
40 :: Ptr Image))
ImageSubresourceRange
subresourceRange <- forall a. FromCStruct a => Ptr a -> IO a
peekCStruct @ImageSubresourceRange ((Ptr (ImageMemoryBarrier es)
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
48 :: Ptr ImageSubresourceRange))
forall (f :: * -> *) a. Applicative f => a -> f a
pure forall a b. (a -> b) -> a -> b
$ forall (es :: [*]).
Chain es
-> AccessFlags
-> AccessFlags
-> ImageLayout
-> ImageLayout
-> Word32
-> Word32
-> Image
-> ImageSubresourceRange
-> ImageMemoryBarrier es
ImageMemoryBarrier
Chain es
next
AccessFlags
srcAccessMask
AccessFlags
dstAccessMask
ImageLayout
oldLayout
ImageLayout
newLayout
Word32
srcQueueFamilyIndex
Word32
dstQueueFamilyIndex
Image
image
ImageSubresourceRange
subresourceRange
instance es ~ '[] => Zero (ImageMemoryBarrier es) where
zero :: ImageMemoryBarrier es
zero = forall (es :: [*]).
Chain es
-> AccessFlags
-> AccessFlags
-> ImageLayout
-> ImageLayout
-> Word32
-> Word32
-> Image
-> ImageSubresourceRange
-> ImageMemoryBarrier es
ImageMemoryBarrier
()
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
forall a. Zero a => a
zero
forall a. Zero a => a
zero
data =
{
:: Word32
,
:: PipelineCacheHeaderVersion
,
:: Word32
,
:: Word32
,
:: ByteString
}
deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (PipelineCacheHeaderVersionOne)
#endif
deriving instance Show PipelineCacheHeaderVersionOne
instance ToCStruct PipelineCacheHeaderVersionOne where
withCStruct :: forall b.
PipelineCacheHeaderVersionOne
-> (Ptr PipelineCacheHeaderVersionOne -> IO b) -> IO b
withCStruct PipelineCacheHeaderVersionOne
x Ptr PipelineCacheHeaderVersionOne -> IO b
f = forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
32 forall a b. (a -> b) -> a -> b
$ \Ptr PipelineCacheHeaderVersionOne
p -> forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr PipelineCacheHeaderVersionOne
p PipelineCacheHeaderVersionOne
x (Ptr PipelineCacheHeaderVersionOne -> IO b
f Ptr PipelineCacheHeaderVersionOne
p)
pokeCStruct :: forall b.
Ptr PipelineCacheHeaderVersionOne
-> PipelineCacheHeaderVersionOne -> IO b -> IO b
pokeCStruct Ptr PipelineCacheHeaderVersionOne
p PipelineCacheHeaderVersionOne{Word32
ByteString
PipelineCacheHeaderVersion
pipelineCacheUUID :: ByteString
deviceID :: Word32
vendorID :: Word32
headerVersion :: PipelineCacheHeaderVersion
headerSize :: Word32
$sel:pipelineCacheUUID:PipelineCacheHeaderVersionOne :: PipelineCacheHeaderVersionOne -> ByteString
$sel:deviceID:PipelineCacheHeaderVersionOne :: PipelineCacheHeaderVersionOne -> Word32
$sel:vendorID:PipelineCacheHeaderVersionOne :: PipelineCacheHeaderVersionOne -> Word32
$sel:headerVersion:PipelineCacheHeaderVersionOne :: PipelineCacheHeaderVersionOne -> PipelineCacheHeaderVersion
$sel:headerSize:PipelineCacheHeaderVersionOne :: PipelineCacheHeaderVersionOne -> Word32
..} IO b
f = do
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PipelineCacheHeaderVersionOne
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr Word32)) (Word32
headerSize)
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PipelineCacheHeaderVersionOne
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
4 :: Ptr PipelineCacheHeaderVersion)) (PipelineCacheHeaderVersion
headerVersion)
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PipelineCacheHeaderVersionOne
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr Word32)) (Word32
vendorID)
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PipelineCacheHeaderVersionOne
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
12 :: Ptr Word32)) (Word32
deviceID)
forall (n :: Nat).
KnownNat n =>
Ptr (FixedArray n Word8) -> ByteString -> IO ()
pokeFixedLengthByteString ((Ptr PipelineCacheHeaderVersionOne
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr (FixedArray UUID_SIZE Word8))) (ByteString
pipelineCacheUUID)
IO b
f
cStructSize :: Int
cStructSize = Int
32
cStructAlignment :: Int
cStructAlignment = Int
4
pokeZeroCStruct :: forall b. Ptr PipelineCacheHeaderVersionOne -> IO b -> IO b
pokeZeroCStruct Ptr PipelineCacheHeaderVersionOne
p IO b
f = do
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PipelineCacheHeaderVersionOne
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 PipelineCacheHeaderVersionOne
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
4 :: Ptr PipelineCacheHeaderVersion)) (forall a. Zero a => a
zero)
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PipelineCacheHeaderVersionOne
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 PipelineCacheHeaderVersionOne
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
12 :: Ptr Word32)) (forall a. Zero a => a
zero)
forall (n :: Nat).
KnownNat n =>
Ptr (FixedArray n Word8) -> ByteString -> IO ()
pokeFixedLengthByteString ((Ptr PipelineCacheHeaderVersionOne
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr (FixedArray UUID_SIZE Word8))) (forall a. Monoid a => a
mempty)
IO b
f
instance FromCStruct PipelineCacheHeaderVersionOne where
peekCStruct :: Ptr PipelineCacheHeaderVersionOne
-> IO PipelineCacheHeaderVersionOne
peekCStruct Ptr PipelineCacheHeaderVersionOne
p = do
Word32
headerSize <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr PipelineCacheHeaderVersionOne
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr Word32))
PipelineCacheHeaderVersion
headerVersion <- forall a. Storable a => Ptr a -> IO a
peek @PipelineCacheHeaderVersion ((Ptr PipelineCacheHeaderVersionOne
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
4 :: Ptr PipelineCacheHeaderVersion))
Word32
vendorID <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr PipelineCacheHeaderVersionOne
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr Word32))
Word32
deviceID <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr PipelineCacheHeaderVersionOne
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
12 :: Ptr Word32))
ByteString
pipelineCacheUUID <- forall (n :: Nat).
KnownNat n =>
Ptr (FixedArray n Word8) -> IO ByteString
peekByteStringFromSizedVectorPtr ((Ptr PipelineCacheHeaderVersionOne
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr (FixedArray UUID_SIZE Word8)))
forall (f :: * -> *) a. Applicative f => a -> f a
pure forall a b. (a -> b) -> a -> b
$ Word32
-> PipelineCacheHeaderVersion
-> Word32
-> Word32
-> ByteString
-> PipelineCacheHeaderVersionOne
PipelineCacheHeaderVersionOne
Word32
headerSize PipelineCacheHeaderVersion
headerVersion Word32
vendorID Word32
deviceID ByteString
pipelineCacheUUID
instance Storable PipelineCacheHeaderVersionOne where
sizeOf :: PipelineCacheHeaderVersionOne -> Int
sizeOf ~PipelineCacheHeaderVersionOne
_ = Int
32
alignment :: PipelineCacheHeaderVersionOne -> Int
alignment ~PipelineCacheHeaderVersionOne
_ = Int
4
peek :: Ptr PipelineCacheHeaderVersionOne
-> IO PipelineCacheHeaderVersionOne
peek = forall a. FromCStruct a => Ptr a -> IO a
peekCStruct
poke :: Ptr PipelineCacheHeaderVersionOne
-> PipelineCacheHeaderVersionOne -> IO ()
poke Ptr PipelineCacheHeaderVersionOne
ptr PipelineCacheHeaderVersionOne
poked = forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr PipelineCacheHeaderVersionOne
ptr PipelineCacheHeaderVersionOne
poked (forall (f :: * -> *) a. Applicative f => a -> f a
pure ())
instance Zero PipelineCacheHeaderVersionOne where
zero :: PipelineCacheHeaderVersionOne
zero = Word32
-> PipelineCacheHeaderVersion
-> Word32
-> Word32
-> ByteString
-> PipelineCacheHeaderVersionOne
PipelineCacheHeaderVersionOne
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. Monoid a => a
mempty
data DrawIndirectCommand = DrawIndirectCommand
{
DrawIndirectCommand -> Word32
vertexCount :: Word32
,
DrawIndirectCommand -> Word32
instanceCount :: Word32
,
DrawIndirectCommand -> Word32
firstVertex :: Word32
,
DrawIndirectCommand -> Word32
firstInstance :: Word32
}
deriving (Typeable, DrawIndirectCommand -> DrawIndirectCommand -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DrawIndirectCommand -> DrawIndirectCommand -> Bool
$c/= :: DrawIndirectCommand -> DrawIndirectCommand -> Bool
== :: DrawIndirectCommand -> DrawIndirectCommand -> Bool
$c== :: DrawIndirectCommand -> DrawIndirectCommand -> Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (DrawIndirectCommand)
#endif
deriving instance Show DrawIndirectCommand
instance ToCStruct DrawIndirectCommand where
withCStruct :: forall b.
DrawIndirectCommand -> (Ptr DrawIndirectCommand -> IO b) -> IO b
withCStruct DrawIndirectCommand
x Ptr DrawIndirectCommand -> IO b
f = forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
16 forall a b. (a -> b) -> a -> b
$ \Ptr DrawIndirectCommand
p -> forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr DrawIndirectCommand
p DrawIndirectCommand
x (Ptr DrawIndirectCommand -> IO b
f Ptr DrawIndirectCommand
p)
pokeCStruct :: forall b.
Ptr DrawIndirectCommand -> DrawIndirectCommand -> IO b -> IO b
pokeCStruct Ptr DrawIndirectCommand
p DrawIndirectCommand{Word32
firstInstance :: Word32
firstVertex :: Word32
instanceCount :: Word32
vertexCount :: Word32
$sel:firstInstance:DrawIndirectCommand :: DrawIndirectCommand -> Word32
$sel:firstVertex:DrawIndirectCommand :: DrawIndirectCommand -> Word32
$sel:instanceCount:DrawIndirectCommand :: DrawIndirectCommand -> Word32
$sel:vertexCount:DrawIndirectCommand :: DrawIndirectCommand -> Word32
..} IO b
f = do
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DrawIndirectCommand
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr Word32)) (Word32
vertexCount)
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DrawIndirectCommand
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
4 :: Ptr Word32)) (Word32
instanceCount)
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DrawIndirectCommand
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr Word32)) (Word32
firstVertex)
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DrawIndirectCommand
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
12 :: Ptr Word32)) (Word32
firstInstance)
IO b
f
cStructSize :: Int
cStructSize = Int
16
cStructAlignment :: Int
cStructAlignment = Int
4
pokeZeroCStruct :: forall b. Ptr DrawIndirectCommand -> IO b -> IO b
pokeZeroCStruct Ptr DrawIndirectCommand
p IO b
f = do
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DrawIndirectCommand
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 DrawIndirectCommand
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 DrawIndirectCommand
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 DrawIndirectCommand
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
12 :: Ptr Word32)) (forall a. Zero a => a
zero)
IO b
f
instance FromCStruct DrawIndirectCommand where
peekCStruct :: Ptr DrawIndirectCommand -> IO DrawIndirectCommand
peekCStruct Ptr DrawIndirectCommand
p = do
Word32
vertexCount <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr DrawIndirectCommand
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr Word32))
Word32
instanceCount <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr DrawIndirectCommand
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
4 :: Ptr Word32))
Word32
firstVertex <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr DrawIndirectCommand
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr Word32))
Word32
firstInstance <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr DrawIndirectCommand
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
12 :: Ptr Word32))
forall (f :: * -> *) a. Applicative f => a -> f a
pure forall a b. (a -> b) -> a -> b
$ Word32 -> Word32 -> Word32 -> Word32 -> DrawIndirectCommand
DrawIndirectCommand
Word32
vertexCount Word32
instanceCount Word32
firstVertex Word32
firstInstance
instance Storable DrawIndirectCommand where
sizeOf :: DrawIndirectCommand -> Int
sizeOf ~DrawIndirectCommand
_ = Int
16
alignment :: DrawIndirectCommand -> Int
alignment ~DrawIndirectCommand
_ = Int
4
peek :: Ptr DrawIndirectCommand -> IO DrawIndirectCommand
peek = forall a. FromCStruct a => Ptr a -> IO a
peekCStruct
poke :: Ptr DrawIndirectCommand -> DrawIndirectCommand -> IO ()
poke Ptr DrawIndirectCommand
ptr DrawIndirectCommand
poked = forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr DrawIndirectCommand
ptr DrawIndirectCommand
poked (forall (f :: * -> *) a. Applicative f => a -> f a
pure ())
instance Zero DrawIndirectCommand where
zero :: DrawIndirectCommand
zero = Word32 -> Word32 -> Word32 -> Word32 -> DrawIndirectCommand
DrawIndirectCommand
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 DrawIndexedIndirectCommand = DrawIndexedIndirectCommand
{
DrawIndexedIndirectCommand -> Word32
indexCount :: Word32
,
DrawIndexedIndirectCommand -> Word32
instanceCount :: Word32
,
DrawIndexedIndirectCommand -> Word32
firstIndex :: Word32
,
DrawIndexedIndirectCommand -> Int32
vertexOffset :: Int32
,
DrawIndexedIndirectCommand -> Word32
firstInstance :: Word32
}
deriving (Typeable, DrawIndexedIndirectCommand -> DrawIndexedIndirectCommand -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DrawIndexedIndirectCommand -> DrawIndexedIndirectCommand -> Bool
$c/= :: DrawIndexedIndirectCommand -> DrawIndexedIndirectCommand -> Bool
== :: DrawIndexedIndirectCommand -> DrawIndexedIndirectCommand -> Bool
$c== :: DrawIndexedIndirectCommand -> DrawIndexedIndirectCommand -> Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (DrawIndexedIndirectCommand)
#endif
deriving instance Show DrawIndexedIndirectCommand
instance ToCStruct DrawIndexedIndirectCommand where
withCStruct :: forall b.
DrawIndexedIndirectCommand
-> (Ptr DrawIndexedIndirectCommand -> IO b) -> IO b
withCStruct DrawIndexedIndirectCommand
x Ptr DrawIndexedIndirectCommand -> IO b
f = forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
20 forall a b. (a -> b) -> a -> b
$ \Ptr DrawIndexedIndirectCommand
p -> forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr DrawIndexedIndirectCommand
p DrawIndexedIndirectCommand
x (Ptr DrawIndexedIndirectCommand -> IO b
f Ptr DrawIndexedIndirectCommand
p)
pokeCStruct :: forall b.
Ptr DrawIndexedIndirectCommand
-> DrawIndexedIndirectCommand -> IO b -> IO b
pokeCStruct Ptr DrawIndexedIndirectCommand
p DrawIndexedIndirectCommand{Int32
Word32
firstInstance :: Word32
vertexOffset :: Int32
firstIndex :: Word32
instanceCount :: Word32
indexCount :: Word32
$sel:firstInstance:DrawIndexedIndirectCommand :: DrawIndexedIndirectCommand -> Word32
$sel:vertexOffset:DrawIndexedIndirectCommand :: DrawIndexedIndirectCommand -> Int32
$sel:firstIndex:DrawIndexedIndirectCommand :: DrawIndexedIndirectCommand -> Word32
$sel:instanceCount:DrawIndexedIndirectCommand :: DrawIndexedIndirectCommand -> Word32
$sel:indexCount:DrawIndexedIndirectCommand :: DrawIndexedIndirectCommand -> Word32
..} IO b
f = do
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DrawIndexedIndirectCommand
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr Word32)) (Word32
indexCount)
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DrawIndexedIndirectCommand
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
4 :: Ptr Word32)) (Word32
instanceCount)
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DrawIndexedIndirectCommand
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr Word32)) (Word32
firstIndex)
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DrawIndexedIndirectCommand
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
12 :: Ptr Int32)) (Int32
vertexOffset)
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DrawIndexedIndirectCommand
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Word32)) (Word32
firstInstance)
IO b
f
cStructSize :: Int
cStructSize = Int
20
cStructAlignment :: Int
cStructAlignment = Int
4
pokeZeroCStruct :: forall b. Ptr DrawIndexedIndirectCommand -> IO b -> IO b
pokeZeroCStruct Ptr DrawIndexedIndirectCommand
p IO b
f = do
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DrawIndexedIndirectCommand
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 DrawIndexedIndirectCommand
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 DrawIndexedIndirectCommand
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 DrawIndexedIndirectCommand
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
12 :: Ptr Int32)) (forall a. Zero a => a
zero)
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DrawIndexedIndirectCommand
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 DrawIndexedIndirectCommand where
peekCStruct :: Ptr DrawIndexedIndirectCommand -> IO DrawIndexedIndirectCommand
peekCStruct Ptr DrawIndexedIndirectCommand
p = do
Word32
indexCount <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr DrawIndexedIndirectCommand
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr Word32))
Word32
instanceCount <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr DrawIndexedIndirectCommand
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
4 :: Ptr Word32))
Word32
firstIndex <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr DrawIndexedIndirectCommand
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr Word32))
Int32
vertexOffset <- forall a. Storable a => Ptr a -> IO a
peek @Int32 ((Ptr DrawIndexedIndirectCommand
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
12 :: Ptr Int32))
Word32
firstInstance <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr DrawIndexedIndirectCommand
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
$ Word32
-> Word32
-> Word32
-> Int32
-> Word32
-> DrawIndexedIndirectCommand
DrawIndexedIndirectCommand
Word32
indexCount Word32
instanceCount Word32
firstIndex Int32
vertexOffset Word32
firstInstance
instance Storable DrawIndexedIndirectCommand where
sizeOf :: DrawIndexedIndirectCommand -> Int
sizeOf ~DrawIndexedIndirectCommand
_ = Int
20
alignment :: DrawIndexedIndirectCommand -> Int
alignment ~DrawIndexedIndirectCommand
_ = Int
4
peek :: Ptr DrawIndexedIndirectCommand -> IO DrawIndexedIndirectCommand
peek = forall a. FromCStruct a => Ptr a -> IO a
peekCStruct
poke :: Ptr DrawIndexedIndirectCommand
-> DrawIndexedIndirectCommand -> IO ()
poke Ptr DrawIndexedIndirectCommand
ptr DrawIndexedIndirectCommand
poked = forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr DrawIndexedIndirectCommand
ptr DrawIndexedIndirectCommand
poked (forall (f :: * -> *) a. Applicative f => a -> f a
pure ())
instance Zero DrawIndexedIndirectCommand where
zero :: DrawIndexedIndirectCommand
zero = Word32
-> Word32
-> Word32
-> Int32
-> Word32
-> DrawIndexedIndirectCommand
DrawIndexedIndirectCommand
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 DispatchIndirectCommand = DispatchIndirectCommand
{
DispatchIndirectCommand -> Word32
x :: Word32
,
DispatchIndirectCommand -> Word32
y :: Word32
,
DispatchIndirectCommand -> Word32
z :: Word32
}
deriving (Typeable, DispatchIndirectCommand -> DispatchIndirectCommand -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DispatchIndirectCommand -> DispatchIndirectCommand -> Bool
$c/= :: DispatchIndirectCommand -> DispatchIndirectCommand -> Bool
== :: DispatchIndirectCommand -> DispatchIndirectCommand -> Bool
$c== :: DispatchIndirectCommand -> DispatchIndirectCommand -> Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (DispatchIndirectCommand)
#endif
deriving instance Show DispatchIndirectCommand
instance ToCStruct DispatchIndirectCommand where
withCStruct :: forall b.
DispatchIndirectCommand
-> (Ptr DispatchIndirectCommand -> IO b) -> IO b
withCStruct DispatchIndirectCommand
x Ptr DispatchIndirectCommand -> IO b
f = forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
12 forall a b. (a -> b) -> a -> b
$ \Ptr DispatchIndirectCommand
p -> forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr DispatchIndirectCommand
p DispatchIndirectCommand
x (Ptr DispatchIndirectCommand -> IO b
f Ptr DispatchIndirectCommand
p)
pokeCStruct :: forall b.
Ptr DispatchIndirectCommand
-> DispatchIndirectCommand -> IO b -> IO b
pokeCStruct Ptr DispatchIndirectCommand
p DispatchIndirectCommand{Word32
z :: Word32
y :: Word32
x :: Word32
$sel:z:DispatchIndirectCommand :: DispatchIndirectCommand -> Word32
$sel:y:DispatchIndirectCommand :: DispatchIndirectCommand -> Word32
$sel:x:DispatchIndirectCommand :: DispatchIndirectCommand -> Word32
..} IO b
f = do
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DispatchIndirectCommand
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr Word32)) (Word32
x)
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DispatchIndirectCommand
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
4 :: Ptr Word32)) (Word32
y)
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DispatchIndirectCommand
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr Word32)) (Word32
z)
IO b
f
cStructSize :: Int
cStructSize = Int
12
cStructAlignment :: Int
cStructAlignment = Int
4
pokeZeroCStruct :: forall b. Ptr DispatchIndirectCommand -> IO b -> IO b
pokeZeroCStruct Ptr DispatchIndirectCommand
p IO b
f = do
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DispatchIndirectCommand
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 DispatchIndirectCommand
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 DispatchIndirectCommand
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr Word32)) (forall a. Zero a => a
zero)
IO b
f
instance FromCStruct DispatchIndirectCommand where
peekCStruct :: Ptr DispatchIndirectCommand -> IO DispatchIndirectCommand
peekCStruct Ptr DispatchIndirectCommand
p = do
Word32
x <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr DispatchIndirectCommand
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr Word32))
Word32
y <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr DispatchIndirectCommand
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
4 :: Ptr Word32))
Word32
z <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr DispatchIndirectCommand
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr Word32))
forall (f :: * -> *) a. Applicative f => a -> f a
pure forall a b. (a -> b) -> a -> b
$ Word32 -> Word32 -> Word32 -> DispatchIndirectCommand
DispatchIndirectCommand
Word32
x Word32
y Word32
z
instance Storable DispatchIndirectCommand where
sizeOf :: DispatchIndirectCommand -> Int
sizeOf ~DispatchIndirectCommand
_ = Int
12
alignment :: DispatchIndirectCommand -> Int
alignment ~DispatchIndirectCommand
_ = Int
4
peek :: Ptr DispatchIndirectCommand -> IO DispatchIndirectCommand
peek = forall a. FromCStruct a => Ptr a -> IO a
peekCStruct
poke :: Ptr DispatchIndirectCommand -> DispatchIndirectCommand -> IO ()
poke Ptr DispatchIndirectCommand
ptr DispatchIndirectCommand
poked = forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr DispatchIndirectCommand
ptr DispatchIndirectCommand
poked (forall (f :: * -> *) a. Applicative f => a -> f a
pure ())
instance Zero DispatchIndirectCommand where
zero :: DispatchIndirectCommand
zero = Word32 -> Word32 -> Word32 -> DispatchIndirectCommand
DispatchIndirectCommand
forall a. Zero a => a
zero
forall a. Zero a => a
zero
forall a. Zero a => a
zero