{-# language CPP #-}
module Vulkan.Extensions.VK_KHR_external_fence_fd ( getFenceFdKHR
, importFenceFdKHR
, ImportFenceFdInfoKHR(..)
, FenceGetFdInfoKHR(..)
, KHR_EXTERNAL_FENCE_FD_SPEC_VERSION
, pattern KHR_EXTERNAL_FENCE_FD_SPEC_VERSION
, KHR_EXTERNAL_FENCE_FD_EXTENSION_NAME
, pattern KHR_EXTERNAL_FENCE_FD_EXTENSION_NAME
) 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 Foreign.C.Types (CInt(..))
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.String (IsString)
import Data.Typeable (Typeable)
import Foreign.C.Types (CInt)
import Foreign.C.Types (CInt(..))
import Foreign.C.Types (CInt(CInt))
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 Data.Int (Int32)
import Foreign.Ptr (FunPtr)
import Foreign.Ptr (Ptr)
import Data.Kind (Type)
import Control.Monad.Trans.Cont (ContT(..))
import Vulkan.NamedType ((:::))
import Vulkan.Core10.Handles (Device)
import Vulkan.Core10.Handles (Device(..))
import Vulkan.Core10.Handles (Device(Device))
import Vulkan.Dynamic (DeviceCmds(pVkGetFenceFdKHR))
import Vulkan.Dynamic (DeviceCmds(pVkImportFenceFdKHR))
import Vulkan.Core10.Handles (Device_T)
import Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits (ExternalFenceHandleTypeFlagBits)
import Vulkan.Core10.Handles (Fence)
import Vulkan.Core11.Enums.FenceImportFlagBits (FenceImportFlags)
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_FENCE_GET_FD_INFO_KHR))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_IMPORT_FENCE_FD_INFO_KHR))
import Vulkan.Core10.Enums.Result (Result(SUCCESS))
foreign import ccall
#if !defined(SAFE_FOREIGN_CALLS)
unsafe
#endif
"dynamic" mkVkGetFenceFdKHR
:: FunPtr (Ptr Device_T -> Ptr FenceGetFdInfoKHR -> Ptr CInt -> IO Result) -> Ptr Device_T -> Ptr FenceGetFdInfoKHR -> Ptr CInt -> IO Result
getFenceFdKHR :: forall io
. (MonadIO io)
=>
Device
->
FenceGetFdInfoKHR
-> io (("fd" ::: Int32))
getFenceFdKHR :: forall (io :: * -> *).
MonadIO io =>
Device -> FenceGetFdInfoKHR -> io ("fd" ::: Int32)
getFenceFdKHR Device
device FenceGetFdInfoKHR
getFdInfo = IO ("fd" ::: Int32) -> io ("fd" ::: Int32)
forall a. IO a -> io a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ("fd" ::: Int32) -> io ("fd" ::: Int32))
-> (ContT ("fd" ::: Int32) IO ("fd" ::: Int32)
-> IO ("fd" ::: Int32))
-> ContT ("fd" ::: Int32) IO ("fd" ::: Int32)
-> io ("fd" ::: Int32)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ContT ("fd" ::: Int32) IO ("fd" ::: Int32) -> IO ("fd" ::: Int32)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT ("fd" ::: Int32) IO ("fd" ::: Int32) -> io ("fd" ::: Int32))
-> ContT ("fd" ::: Int32) IO ("fd" ::: Int32)
-> io ("fd" ::: Int32)
forall a b. (a -> b) -> a -> b
$ do
let vkGetFenceFdKHRPtr :: FunPtr
(Ptr Device_T -> Ptr FenceGetFdInfoKHR -> Ptr CInt -> IO Result)
vkGetFenceFdKHRPtr = DeviceCmds
-> FunPtr
(Ptr Device_T -> Ptr FenceGetFdInfoKHR -> Ptr CInt -> IO Result)
pVkGetFenceFdKHR (case Device
device of Device{DeviceCmds
deviceCmds :: DeviceCmds
deviceCmds :: Device -> DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
IO () -> ContT ("fd" ::: Int32) IO ()
forall (m :: * -> *) a.
Monad m =>
m a -> ContT ("fd" ::: Int32) m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT ("fd" ::: Int32) IO ())
-> IO () -> ContT ("fd" ::: Int32) IO ()
forall a b. (a -> b) -> a -> b
$ Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (FunPtr
(Ptr Device_T -> Ptr FenceGetFdInfoKHR -> Ptr CInt -> IO Result)
vkGetFenceFdKHRPtr FunPtr
(Ptr Device_T -> Ptr FenceGetFdInfoKHR -> Ptr CInt -> IO Result)
-> FunPtr
(Ptr Device_T -> Ptr FenceGetFdInfoKHR -> Ptr CInt -> IO Result)
-> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr
(Ptr Device_T -> Ptr FenceGetFdInfoKHR -> Ptr CInt -> IO Result)
forall a. FunPtr a
nullFunPtr) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
IOException -> IO ()
forall e a. (HasCallStack, Exception e) => e -> IO a
throwIO (IOException -> IO ()) -> IOException -> IO ()
forall a b. (a -> b) -> a -> b
$ Maybe Handle
-> IOErrorType
-> String
-> String
-> Maybe CInt
-> Maybe String
-> IOException
IOError Maybe Handle
forall a. Maybe a
Nothing IOErrorType
InvalidArgument String
"" String
"The function pointer for vkGetFenceFdKHR is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
let vkGetFenceFdKHR' :: Ptr Device_T -> Ptr FenceGetFdInfoKHR -> Ptr CInt -> IO Result
vkGetFenceFdKHR' = FunPtr
(Ptr Device_T -> Ptr FenceGetFdInfoKHR -> Ptr CInt -> IO Result)
-> Ptr Device_T -> Ptr FenceGetFdInfoKHR -> Ptr CInt -> IO Result
mkVkGetFenceFdKHR FunPtr
(Ptr Device_T -> Ptr FenceGetFdInfoKHR -> Ptr CInt -> IO Result)
vkGetFenceFdKHRPtr
pGetFdInfo <- ((Ptr FenceGetFdInfoKHR -> IO ("fd" ::: Int32))
-> IO ("fd" ::: Int32))
-> ContT ("fd" ::: Int32) IO (Ptr FenceGetFdInfoKHR)
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr FenceGetFdInfoKHR -> IO ("fd" ::: Int32))
-> IO ("fd" ::: Int32))
-> ContT ("fd" ::: Int32) IO (Ptr FenceGetFdInfoKHR))
-> ((Ptr FenceGetFdInfoKHR -> IO ("fd" ::: Int32))
-> IO ("fd" ::: Int32))
-> ContT ("fd" ::: Int32) IO (Ptr FenceGetFdInfoKHR)
forall a b. (a -> b) -> a -> b
$ FenceGetFdInfoKHR
-> (Ptr FenceGetFdInfoKHR -> IO ("fd" ::: Int32))
-> IO ("fd" ::: Int32)
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
forall b.
FenceGetFdInfoKHR -> (Ptr FenceGetFdInfoKHR -> IO b) -> IO b
withCStruct (FenceGetFdInfoKHR
getFdInfo)
pPFd <- ContT $ bracket (callocBytes @CInt 4) free
r <- lift $ traceAroundEvent "vkGetFenceFdKHR" (vkGetFenceFdKHR'
(deviceHandle (device))
pGetFdInfo
(pPFd))
lift $ when (r < SUCCESS) (throwIO (VulkanException r))
pFd <- lift $ peek @CInt pPFd
pure $ ((coerce @CInt @Int32 pFd))
foreign import ccall
#if !defined(SAFE_FOREIGN_CALLS)
unsafe
#endif
"dynamic" mkVkImportFenceFdKHR
:: FunPtr (Ptr Device_T -> Ptr ImportFenceFdInfoKHR -> IO Result) -> Ptr Device_T -> Ptr ImportFenceFdInfoKHR -> IO Result
importFenceFdKHR :: forall io
. (MonadIO io)
=>
Device
->
ImportFenceFdInfoKHR
-> io ()
importFenceFdKHR :: forall (io :: * -> *).
MonadIO io =>
Device -> ImportFenceFdInfoKHR -> io ()
importFenceFdKHR Device
device ImportFenceFdInfoKHR
importFenceFdInfo = IO () -> io ()
forall a. IO a -> io a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> io ())
-> (ContT () IO () -> IO ()) -> ContT () IO () -> io ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ContT () IO () -> IO ()
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT () IO () -> io ()) -> ContT () IO () -> io ()
forall a b. (a -> b) -> a -> b
$ do
let vkImportFenceFdKHRPtr :: FunPtr (Ptr Device_T -> Ptr ImportFenceFdInfoKHR -> IO Result)
vkImportFenceFdKHRPtr = DeviceCmds
-> FunPtr (Ptr Device_T -> Ptr ImportFenceFdInfoKHR -> IO Result)
pVkImportFenceFdKHR (case Device
device of Device{DeviceCmds
deviceCmds :: Device -> DeviceCmds
deviceCmds :: DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
IO () -> ContT () IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT () m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (FunPtr (Ptr Device_T -> Ptr ImportFenceFdInfoKHR -> IO Result)
vkImportFenceFdKHRPtr FunPtr (Ptr Device_T -> Ptr ImportFenceFdInfoKHR -> IO Result)
-> FunPtr (Ptr Device_T -> Ptr ImportFenceFdInfoKHR -> IO Result)
-> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr (Ptr Device_T -> Ptr ImportFenceFdInfoKHR -> IO Result)
forall a. FunPtr a
nullFunPtr) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
IOException -> IO ()
forall e a. (HasCallStack, Exception e) => e -> IO a
throwIO (IOException -> IO ()) -> IOException -> IO ()
forall a b. (a -> b) -> a -> b
$ Maybe Handle
-> IOErrorType
-> String
-> String
-> Maybe CInt
-> Maybe String
-> IOException
IOError Maybe Handle
forall a. Maybe a
Nothing IOErrorType
InvalidArgument String
"" String
"The function pointer for vkImportFenceFdKHR is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
let vkImportFenceFdKHR' :: Ptr Device_T -> Ptr ImportFenceFdInfoKHR -> IO Result
vkImportFenceFdKHR' = FunPtr (Ptr Device_T -> Ptr ImportFenceFdInfoKHR -> IO Result)
-> Ptr Device_T -> Ptr ImportFenceFdInfoKHR -> IO Result
mkVkImportFenceFdKHR FunPtr (Ptr Device_T -> Ptr ImportFenceFdInfoKHR -> IO Result)
vkImportFenceFdKHRPtr
pImportFenceFdInfo <- ((Ptr ImportFenceFdInfoKHR -> IO ()) -> IO ())
-> ContT () IO (Ptr ImportFenceFdInfoKHR)
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr ImportFenceFdInfoKHR -> IO ()) -> IO ())
-> ContT () IO (Ptr ImportFenceFdInfoKHR))
-> ((Ptr ImportFenceFdInfoKHR -> IO ()) -> IO ())
-> ContT () IO (Ptr ImportFenceFdInfoKHR)
forall a b. (a -> b) -> a -> b
$ ImportFenceFdInfoKHR
-> (Ptr ImportFenceFdInfoKHR -> IO ()) -> IO ()
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
forall b.
ImportFenceFdInfoKHR -> (Ptr ImportFenceFdInfoKHR -> IO b) -> IO b
withCStruct (ImportFenceFdInfoKHR
importFenceFdInfo)
r <- lift $ traceAroundEvent "vkImportFenceFdKHR" (vkImportFenceFdKHR'
(deviceHandle (device))
pImportFenceFdInfo)
lift $ when (r < SUCCESS) (throwIO (VulkanException r))
data ImportFenceFdInfoKHR = ImportFenceFdInfoKHR
{
ImportFenceFdInfoKHR -> Fence
fence :: Fence
,
ImportFenceFdInfoKHR -> FenceImportFlags
flags :: FenceImportFlags
,
ImportFenceFdInfoKHR -> ExternalFenceHandleTypeFlagBits
handleType :: ExternalFenceHandleTypeFlagBits
,
ImportFenceFdInfoKHR -> "fd" ::: Int32
fd :: Int32
}
deriving (Typeable, ImportFenceFdInfoKHR -> ImportFenceFdInfoKHR -> Bool
(ImportFenceFdInfoKHR -> ImportFenceFdInfoKHR -> Bool)
-> (ImportFenceFdInfoKHR -> ImportFenceFdInfoKHR -> Bool)
-> Eq ImportFenceFdInfoKHR
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: ImportFenceFdInfoKHR -> ImportFenceFdInfoKHR -> Bool
== :: ImportFenceFdInfoKHR -> ImportFenceFdInfoKHR -> Bool
$c/= :: ImportFenceFdInfoKHR -> ImportFenceFdInfoKHR -> Bool
/= :: ImportFenceFdInfoKHR -> ImportFenceFdInfoKHR -> Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (ImportFenceFdInfoKHR)
#endif
deriving instance Show ImportFenceFdInfoKHR
instance ToCStruct ImportFenceFdInfoKHR where
withCStruct :: forall b.
ImportFenceFdInfoKHR -> (Ptr ImportFenceFdInfoKHR -> IO b) -> IO b
withCStruct ImportFenceFdInfoKHR
x Ptr ImportFenceFdInfoKHR -> IO b
f = Int -> (Ptr ImportFenceFdInfoKHR -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
40 ((Ptr ImportFenceFdInfoKHR -> IO b) -> IO b)
-> (Ptr ImportFenceFdInfoKHR -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr ImportFenceFdInfoKHR
p -> Ptr ImportFenceFdInfoKHR -> ImportFenceFdInfoKHR -> IO b -> IO b
forall b.
Ptr ImportFenceFdInfoKHR -> ImportFenceFdInfoKHR -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr ImportFenceFdInfoKHR
p ImportFenceFdInfoKHR
x (Ptr ImportFenceFdInfoKHR -> IO b
f Ptr ImportFenceFdInfoKHR
p)
pokeCStruct :: forall b.
Ptr ImportFenceFdInfoKHR -> ImportFenceFdInfoKHR -> IO b -> IO b
pokeCStruct Ptr ImportFenceFdInfoKHR
p ImportFenceFdInfoKHR{"fd" ::: Int32
FenceImportFlags
ExternalFenceHandleTypeFlagBits
Fence
fence :: ImportFenceFdInfoKHR -> Fence
flags :: ImportFenceFdInfoKHR -> FenceImportFlags
handleType :: ImportFenceFdInfoKHR -> ExternalFenceHandleTypeFlagBits
fd :: ImportFenceFdInfoKHR -> "fd" ::: Int32
fence :: Fence
flags :: FenceImportFlags
handleType :: ExternalFenceHandleTypeFlagBits
fd :: "fd" ::: Int32
..} IO b
f = do
Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr ImportFenceFdInfoKHR
p Ptr ImportFenceFdInfoKHR -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_IMPORT_FENCE_FD_INFO_KHR)
Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr ImportFenceFdInfoKHR
p Ptr ImportFenceFdInfoKHR -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
Ptr Fence -> Fence -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr ImportFenceFdInfoKHR
p Ptr ImportFenceFdInfoKHR -> Int -> Ptr Fence
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Fence)) (Fence
fence)
Ptr FenceImportFlags -> FenceImportFlags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr ImportFenceFdInfoKHR
p Ptr ImportFenceFdInfoKHR -> Int -> Ptr FenceImportFlags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr FenceImportFlags)) (FenceImportFlags
flags)
Ptr ExternalFenceHandleTypeFlagBits
-> ExternalFenceHandleTypeFlagBits -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr ImportFenceFdInfoKHR
p Ptr ImportFenceFdInfoKHR
-> Int -> Ptr ExternalFenceHandleTypeFlagBits
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
28 :: Ptr ExternalFenceHandleTypeFlagBits)) (ExternalFenceHandleTypeFlagBits
handleType)
Ptr CInt -> CInt -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr ImportFenceFdInfoKHR
p Ptr ImportFenceFdInfoKHR -> Int -> Ptr CInt
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr CInt)) (("fd" ::: Int32) -> CInt
CInt ("fd" ::: Int32
fd))
IO b
f
cStructSize :: Int
cStructSize = Int
40
cStructAlignment :: Int
cStructAlignment = Int
8
pokeZeroCStruct :: forall b. Ptr ImportFenceFdInfoKHR -> IO b -> IO b
pokeZeroCStruct Ptr ImportFenceFdInfoKHR
p IO b
f = do
Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr ImportFenceFdInfoKHR
p Ptr ImportFenceFdInfoKHR -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_IMPORT_FENCE_FD_INFO_KHR)
Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr ImportFenceFdInfoKHR
p Ptr ImportFenceFdInfoKHR -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
Ptr Fence -> Fence -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr ImportFenceFdInfoKHR
p Ptr ImportFenceFdInfoKHR -> Int -> Ptr Fence
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Fence)) (Fence
forall a. Zero a => a
zero)
Ptr ExternalFenceHandleTypeFlagBits
-> ExternalFenceHandleTypeFlagBits -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr ImportFenceFdInfoKHR
p Ptr ImportFenceFdInfoKHR
-> Int -> Ptr ExternalFenceHandleTypeFlagBits
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
28 :: Ptr ExternalFenceHandleTypeFlagBits)) (ExternalFenceHandleTypeFlagBits
forall a. Zero a => a
zero)
Ptr CInt -> CInt -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr ImportFenceFdInfoKHR
p Ptr ImportFenceFdInfoKHR -> Int -> Ptr CInt
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr CInt)) (("fd" ::: Int32) -> CInt
CInt ("fd" ::: Int32
forall a. Zero a => a
zero))
IO b
f
instance FromCStruct ImportFenceFdInfoKHR where
peekCStruct :: Ptr ImportFenceFdInfoKHR -> IO ImportFenceFdInfoKHR
peekCStruct Ptr ImportFenceFdInfoKHR
p = do
fence <- forall a. Storable a => Ptr a -> IO a
peek @Fence ((Ptr ImportFenceFdInfoKHR
p Ptr ImportFenceFdInfoKHR -> Int -> Ptr Fence
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Fence))
flags <- peek @FenceImportFlags ((p `plusPtr` 24 :: Ptr FenceImportFlags))
handleType <- peek @ExternalFenceHandleTypeFlagBits ((p `plusPtr` 28 :: Ptr ExternalFenceHandleTypeFlagBits))
fd <- peek @CInt ((p `plusPtr` 32 :: Ptr CInt))
pure $ ImportFenceFdInfoKHR
fence flags handleType (coerce @CInt @Int32 fd)
instance Storable ImportFenceFdInfoKHR where
sizeOf :: ImportFenceFdInfoKHR -> Int
sizeOf ~ImportFenceFdInfoKHR
_ = Int
40
alignment :: ImportFenceFdInfoKHR -> Int
alignment ~ImportFenceFdInfoKHR
_ = Int
8
peek :: Ptr ImportFenceFdInfoKHR -> IO ImportFenceFdInfoKHR
peek = Ptr ImportFenceFdInfoKHR -> IO ImportFenceFdInfoKHR
forall a. FromCStruct a => Ptr a -> IO a
peekCStruct
poke :: Ptr ImportFenceFdInfoKHR -> ImportFenceFdInfoKHR -> IO ()
poke Ptr ImportFenceFdInfoKHR
ptr ImportFenceFdInfoKHR
poked = Ptr ImportFenceFdInfoKHR -> ImportFenceFdInfoKHR -> IO () -> IO ()
forall b.
Ptr ImportFenceFdInfoKHR -> ImportFenceFdInfoKHR -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr ImportFenceFdInfoKHR
ptr ImportFenceFdInfoKHR
poked (() -> IO ()
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ())
instance Zero ImportFenceFdInfoKHR where
zero :: ImportFenceFdInfoKHR
zero = Fence
-> FenceImportFlags
-> ExternalFenceHandleTypeFlagBits
-> ("fd" ::: Int32)
-> ImportFenceFdInfoKHR
ImportFenceFdInfoKHR
Fence
forall a. Zero a => a
zero
FenceImportFlags
forall a. Zero a => a
zero
ExternalFenceHandleTypeFlagBits
forall a. Zero a => a
zero
"fd" ::: Int32
forall a. Zero a => a
zero
data FenceGetFdInfoKHR = FenceGetFdInfoKHR
{
FenceGetFdInfoKHR -> Fence
fence :: Fence
,
FenceGetFdInfoKHR -> ExternalFenceHandleTypeFlagBits
handleType :: ExternalFenceHandleTypeFlagBits
}
deriving (Typeable, FenceGetFdInfoKHR -> FenceGetFdInfoKHR -> Bool
(FenceGetFdInfoKHR -> FenceGetFdInfoKHR -> Bool)
-> (FenceGetFdInfoKHR -> FenceGetFdInfoKHR -> Bool)
-> Eq FenceGetFdInfoKHR
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: FenceGetFdInfoKHR -> FenceGetFdInfoKHR -> Bool
== :: FenceGetFdInfoKHR -> FenceGetFdInfoKHR -> Bool
$c/= :: FenceGetFdInfoKHR -> FenceGetFdInfoKHR -> Bool
/= :: FenceGetFdInfoKHR -> FenceGetFdInfoKHR -> Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (FenceGetFdInfoKHR)
#endif
deriving instance Show FenceGetFdInfoKHR
instance ToCStruct FenceGetFdInfoKHR where
withCStruct :: forall b.
FenceGetFdInfoKHR -> (Ptr FenceGetFdInfoKHR -> IO b) -> IO b
withCStruct FenceGetFdInfoKHR
x Ptr FenceGetFdInfoKHR -> IO b
f = Int -> (Ptr FenceGetFdInfoKHR -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
32 ((Ptr FenceGetFdInfoKHR -> IO b) -> IO b)
-> (Ptr FenceGetFdInfoKHR -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr FenceGetFdInfoKHR
p -> Ptr FenceGetFdInfoKHR -> FenceGetFdInfoKHR -> IO b -> IO b
forall b.
Ptr FenceGetFdInfoKHR -> FenceGetFdInfoKHR -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr FenceGetFdInfoKHR
p FenceGetFdInfoKHR
x (Ptr FenceGetFdInfoKHR -> IO b
f Ptr FenceGetFdInfoKHR
p)
pokeCStruct :: forall b.
Ptr FenceGetFdInfoKHR -> FenceGetFdInfoKHR -> IO b -> IO b
pokeCStruct Ptr FenceGetFdInfoKHR
p FenceGetFdInfoKHR{ExternalFenceHandleTypeFlagBits
Fence
fence :: FenceGetFdInfoKHR -> Fence
handleType :: FenceGetFdInfoKHR -> ExternalFenceHandleTypeFlagBits
fence :: Fence
handleType :: ExternalFenceHandleTypeFlagBits
..} IO b
f = do
Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr FenceGetFdInfoKHR
p Ptr FenceGetFdInfoKHR -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_FENCE_GET_FD_INFO_KHR)
Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr FenceGetFdInfoKHR
p Ptr FenceGetFdInfoKHR -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
Ptr Fence -> Fence -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr FenceGetFdInfoKHR
p Ptr FenceGetFdInfoKHR -> Int -> Ptr Fence
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Fence)) (Fence
fence)
Ptr ExternalFenceHandleTypeFlagBits
-> ExternalFenceHandleTypeFlagBits -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr FenceGetFdInfoKHR
p Ptr FenceGetFdInfoKHR -> Int -> Ptr ExternalFenceHandleTypeFlagBits
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr ExternalFenceHandleTypeFlagBits)) (ExternalFenceHandleTypeFlagBits
handleType)
IO b
f
cStructSize :: Int
cStructSize = Int
32
cStructAlignment :: Int
cStructAlignment = Int
8
pokeZeroCStruct :: forall b. Ptr FenceGetFdInfoKHR -> IO b -> IO b
pokeZeroCStruct Ptr FenceGetFdInfoKHR
p IO b
f = do
Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr FenceGetFdInfoKHR
p Ptr FenceGetFdInfoKHR -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_FENCE_GET_FD_INFO_KHR)
Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr FenceGetFdInfoKHR
p Ptr FenceGetFdInfoKHR -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
Ptr Fence -> Fence -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr FenceGetFdInfoKHR
p Ptr FenceGetFdInfoKHR -> Int -> Ptr Fence
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Fence)) (Fence
forall a. Zero a => a
zero)
Ptr ExternalFenceHandleTypeFlagBits
-> ExternalFenceHandleTypeFlagBits -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr FenceGetFdInfoKHR
p Ptr FenceGetFdInfoKHR -> Int -> Ptr ExternalFenceHandleTypeFlagBits
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr ExternalFenceHandleTypeFlagBits)) (ExternalFenceHandleTypeFlagBits
forall a. Zero a => a
zero)
IO b
f
instance FromCStruct FenceGetFdInfoKHR where
peekCStruct :: Ptr FenceGetFdInfoKHR -> IO FenceGetFdInfoKHR
peekCStruct Ptr FenceGetFdInfoKHR
p = do
fence <- forall a. Storable a => Ptr a -> IO a
peek @Fence ((Ptr FenceGetFdInfoKHR
p Ptr FenceGetFdInfoKHR -> Int -> Ptr Fence
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Fence))
handleType <- peek @ExternalFenceHandleTypeFlagBits ((p `plusPtr` 24 :: Ptr ExternalFenceHandleTypeFlagBits))
pure $ FenceGetFdInfoKHR
fence handleType
instance Storable FenceGetFdInfoKHR where
sizeOf :: FenceGetFdInfoKHR -> Int
sizeOf ~FenceGetFdInfoKHR
_ = Int
32
alignment :: FenceGetFdInfoKHR -> Int
alignment ~FenceGetFdInfoKHR
_ = Int
8
peek :: Ptr FenceGetFdInfoKHR -> IO FenceGetFdInfoKHR
peek = Ptr FenceGetFdInfoKHR -> IO FenceGetFdInfoKHR
forall a. FromCStruct a => Ptr a -> IO a
peekCStruct
poke :: Ptr FenceGetFdInfoKHR -> FenceGetFdInfoKHR -> IO ()
poke Ptr FenceGetFdInfoKHR
ptr FenceGetFdInfoKHR
poked = Ptr FenceGetFdInfoKHR -> FenceGetFdInfoKHR -> IO () -> IO ()
forall b.
Ptr FenceGetFdInfoKHR -> FenceGetFdInfoKHR -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr FenceGetFdInfoKHR
ptr FenceGetFdInfoKHR
poked (() -> IO ()
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ())
instance Zero FenceGetFdInfoKHR where
zero :: FenceGetFdInfoKHR
zero = Fence -> ExternalFenceHandleTypeFlagBits -> FenceGetFdInfoKHR
FenceGetFdInfoKHR
Fence
forall a. Zero a => a
zero
ExternalFenceHandleTypeFlagBits
forall a. Zero a => a
zero
type KHR_EXTERNAL_FENCE_FD_SPEC_VERSION = 1
pattern KHR_EXTERNAL_FENCE_FD_SPEC_VERSION :: forall a . Integral a => a
pattern $mKHR_EXTERNAL_FENCE_FD_SPEC_VERSION :: forall {r} {a}.
Integral a =>
a -> ((# #) -> r) -> ((# #) -> r) -> r
$bKHR_EXTERNAL_FENCE_FD_SPEC_VERSION :: forall a. Integral a => a
KHR_EXTERNAL_FENCE_FD_SPEC_VERSION = 1
type KHR_EXTERNAL_FENCE_FD_EXTENSION_NAME = "VK_KHR_external_fence_fd"
pattern KHR_EXTERNAL_FENCE_FD_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
pattern $mKHR_EXTERNAL_FENCE_FD_EXTENSION_NAME :: forall {r} {a}.
(Eq a, IsString a) =>
a -> ((# #) -> r) -> ((# #) -> r) -> r
$bKHR_EXTERNAL_FENCE_FD_EXTENSION_NAME :: forall a. (Eq a, IsString a) => a
KHR_EXTERNAL_FENCE_FD_EXTENSION_NAME = "VK_KHR_external_fence_fd"