{-# language CPP #-}
module Vulkan.Extensions.VK_EXT_calibrated_timestamps ( getPhysicalDeviceCalibrateableTimeDomainsEXT
, getCalibratedTimestampsEXT
, CalibratedTimestampInfoEXT(..)
, TimeDomainEXT( TIME_DOMAIN_DEVICE_EXT
, TIME_DOMAIN_CLOCK_MONOTONIC_EXT
, TIME_DOMAIN_CLOCK_MONOTONIC_RAW_EXT
, TIME_DOMAIN_QUERY_PERFORMANCE_COUNTER_EXT
, ..
)
, EXT_CALIBRATED_TIMESTAMPS_SPEC_VERSION
, pattern EXT_CALIBRATED_TIMESTAMPS_SPEC_VERSION
, EXT_CALIBRATED_TIMESTAMPS_EXTENSION_NAME
, pattern EXT_CALIBRATED_TIMESTAMPS_EXTENSION_NAME
) where
import Vulkan.Internal.Utils (enumReadPrec)
import Vulkan.Internal.Utils (enumShowsPrec)
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 GHC.Show (showsPrec)
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 Vulkan.Zero (Zero(..))
import Control.Monad.IO.Class (MonadIO)
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 GHC.IO.Exception (IOErrorType(..))
import GHC.IO.Exception (IOException(..))
import Data.Int (Int32)
import Foreign.Ptr (FunPtr)
import Foreign.Ptr (Ptr)
import GHC.Read (Read(readPrec))
import GHC.Show (Show(showsPrec))
import Data.Word (Word32)
import Data.Word (Word64)
import Data.Kind (Type)
import Control.Monad.Trans.Cont (ContT(..))
import Data.Vector (Vector)
import Vulkan.CStruct.Utils (advancePtrBytes)
import Vulkan.NamedType ((:::))
import Vulkan.Core10.Handles (Device)
import Vulkan.Core10.Handles (Device(..))
import Vulkan.Core10.Handles (Device(Device))
import Vulkan.Dynamic (DeviceCmds(pVkGetCalibratedTimestampsEXT))
import Vulkan.Core10.Handles (Device_T)
import Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDeviceCalibrateableTimeDomainsEXT))
import Vulkan.Core10.Handles (PhysicalDevice)
import Vulkan.Core10.Handles (PhysicalDevice(..))
import Vulkan.Core10.Handles (PhysicalDevice(PhysicalDevice))
import Vulkan.Core10.Handles (PhysicalDevice_T)
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_CALIBRATED_TIMESTAMP_INFO_EXT))
import Vulkan.Core10.Enums.Result (Result(SUCCESS))
foreign import ccall
#if !defined(SAFE_FOREIGN_CALLS)
unsafe
#endif
"dynamic" mkVkGetPhysicalDeviceCalibrateableTimeDomainsEXT
:: FunPtr (Ptr PhysicalDevice_T -> Ptr Word32 -> Ptr TimeDomainEXT -> IO Result) -> Ptr PhysicalDevice_T -> Ptr Word32 -> Ptr TimeDomainEXT -> IO Result
getPhysicalDeviceCalibrateableTimeDomainsEXT :: forall io
. (MonadIO io)
=>
PhysicalDevice
-> io (Result, ("timeDomains" ::: Vector TimeDomainEXT))
getPhysicalDeviceCalibrateableTimeDomainsEXT :: forall (io :: * -> *).
MonadIO io =>
PhysicalDevice
-> io (Result, "timeDomains" ::: Vector TimeDomainEXT)
getPhysicalDeviceCalibrateableTimeDomainsEXT PhysicalDevice
physicalDevice = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT forall a b. (a -> b) -> a -> b
$ do
let vkGetPhysicalDeviceCalibrateableTimeDomainsEXTPtr :: FunPtr
(Ptr PhysicalDevice_T
-> ("pTimeDomainCount" ::: Ptr Word32)
-> ("pTimeDomains" ::: Ptr TimeDomainEXT)
-> IO Result)
vkGetPhysicalDeviceCalibrateableTimeDomainsEXTPtr = InstanceCmds
-> FunPtr
(Ptr PhysicalDevice_T
-> ("pTimeDomainCount" ::: Ptr Word32)
-> ("pTimeDomains" ::: Ptr TimeDomainEXT)
-> IO Result)
pVkGetPhysicalDeviceCalibrateableTimeDomainsEXT (case PhysicalDevice
physicalDevice of PhysicalDevice{InstanceCmds
$sel:instanceCmds:PhysicalDevice :: PhysicalDevice -> InstanceCmds
instanceCmds :: InstanceCmds
instanceCmds} -> InstanceCmds
instanceCmds)
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift forall a b. (a -> b) -> a -> b
$ forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (FunPtr
(Ptr PhysicalDevice_T
-> ("pTimeDomainCount" ::: Ptr Word32)
-> ("pTimeDomains" ::: Ptr TimeDomainEXT)
-> IO Result)
vkGetPhysicalDeviceCalibrateableTimeDomainsEXTPtr forall a. Eq a => a -> a -> Bool
/= forall a. FunPtr a
nullFunPtr) forall a b. (a -> b) -> a -> b
$
forall e a. Exception e => e -> IO a
throwIO forall a b. (a -> b) -> a -> b
$ Maybe Handle
-> IOErrorType
-> String
-> String
-> Maybe CInt
-> Maybe String
-> IOException
IOError forall a. Maybe a
Nothing IOErrorType
InvalidArgument String
"" String
"The function pointer for vkGetPhysicalDeviceCalibrateableTimeDomainsEXT is null" forall a. Maybe a
Nothing forall a. Maybe a
Nothing
let vkGetPhysicalDeviceCalibrateableTimeDomainsEXT' :: Ptr PhysicalDevice_T
-> ("pTimeDomainCount" ::: Ptr Word32)
-> ("pTimeDomains" ::: Ptr TimeDomainEXT)
-> IO Result
vkGetPhysicalDeviceCalibrateableTimeDomainsEXT' = FunPtr
(Ptr PhysicalDevice_T
-> ("pTimeDomainCount" ::: Ptr Word32)
-> ("pTimeDomains" ::: Ptr TimeDomainEXT)
-> IO Result)
-> Ptr PhysicalDevice_T
-> ("pTimeDomainCount" ::: Ptr Word32)
-> ("pTimeDomains" ::: Ptr TimeDomainEXT)
-> IO Result
mkVkGetPhysicalDeviceCalibrateableTimeDomainsEXT FunPtr
(Ptr PhysicalDevice_T
-> ("pTimeDomainCount" ::: Ptr Word32)
-> ("pTimeDomains" ::: Ptr TimeDomainEXT)
-> IO Result)
vkGetPhysicalDeviceCalibrateableTimeDomainsEXTPtr
let physicalDevice' :: Ptr PhysicalDevice_T
physicalDevice' = PhysicalDevice -> Ptr PhysicalDevice_T
physicalDeviceHandle (PhysicalDevice
physicalDevice)
"pTimeDomainCount" ::: Ptr Word32
pPTimeDomainCount <- forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT forall a b. (a -> b) -> a -> b
$ forall a b c. IO a -> (a -> IO b) -> (a -> IO c) -> IO c
bracket (forall a. Int -> IO (Ptr a)
callocBytes @Word32 Int
4) forall a. Ptr a -> IO ()
free
Result
r <- forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift forall a b. (a -> b) -> a -> b
$ forall a. String -> IO a -> IO a
traceAroundEvent String
"vkGetPhysicalDeviceCalibrateableTimeDomainsEXT" (Ptr PhysicalDevice_T
-> ("pTimeDomainCount" ::: Ptr Word32)
-> ("pTimeDomains" ::: Ptr TimeDomainEXT)
-> IO Result
vkGetPhysicalDeviceCalibrateableTimeDomainsEXT'
Ptr PhysicalDevice_T
physicalDevice'
("pTimeDomainCount" ::: Ptr Word32
pPTimeDomainCount)
(forall a. Ptr a
nullPtr))
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift forall a b. (a -> b) -> a -> b
$ forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
when (Result
r forall a. Ord a => a -> a -> Bool
< Result
SUCCESS) (forall e a. Exception e => e -> IO a
throwIO (Result -> VulkanException
VulkanException Result
r))
Word32
pTimeDomainCount <- forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift forall a b. (a -> b) -> a -> b
$ forall a. Storable a => Ptr a -> IO a
peek @Word32 "pTimeDomainCount" ::: Ptr Word32
pPTimeDomainCount
"pTimeDomains" ::: Ptr TimeDomainEXT
pPTimeDomains <- forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT forall a b. (a -> b) -> a -> b
$ forall a b c. IO a -> (a -> IO b) -> (a -> IO c) -> IO c
bracket (forall a. Int -> IO (Ptr a)
callocBytes @TimeDomainEXT ((forall a b. (Integral a, Num b) => a -> b
fromIntegral (Word32
pTimeDomainCount)) forall a. Num a => a -> a -> a
* Int
4)) forall a. Ptr a -> IO ()
free
Result
r' <- forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift forall a b. (a -> b) -> a -> b
$ forall a. String -> IO a -> IO a
traceAroundEvent String
"vkGetPhysicalDeviceCalibrateableTimeDomainsEXT" (Ptr PhysicalDevice_T
-> ("pTimeDomainCount" ::: Ptr Word32)
-> ("pTimeDomains" ::: Ptr TimeDomainEXT)
-> IO Result
vkGetPhysicalDeviceCalibrateableTimeDomainsEXT'
Ptr PhysicalDevice_T
physicalDevice'
("pTimeDomainCount" ::: Ptr Word32
pPTimeDomainCount)
("pTimeDomains" ::: Ptr TimeDomainEXT
pPTimeDomains))
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift forall a b. (a -> b) -> a -> b
$ forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
when (Result
r' forall a. Ord a => a -> a -> Bool
< Result
SUCCESS) (forall e a. Exception e => e -> IO a
throwIO (Result -> VulkanException
VulkanException Result
r'))
Word32
pTimeDomainCount' <- forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift forall a b. (a -> b) -> a -> b
$ forall a. Storable a => Ptr a -> IO a
peek @Word32 "pTimeDomainCount" ::: Ptr Word32
pPTimeDomainCount
"timeDomains" ::: Vector TimeDomainEXT
pTimeDomains' <- forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift forall a b. (a -> b) -> a -> b
$ forall (m :: * -> *) a.
Monad m =>
Int -> (Int -> m a) -> m (Vector a)
generateM (forall a b. (Integral a, Num b) => a -> b
fromIntegral (Word32
pTimeDomainCount')) (\Int
i -> forall a. Storable a => Ptr a -> IO a
peek @TimeDomainEXT (("pTimeDomains" ::: Ptr TimeDomainEXT
pPTimeDomains forall a. Ptr a -> Int -> Ptr a
`advancePtrBytes` (Int
4 forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr TimeDomainEXT)))
forall (f :: * -> *) a. Applicative f => a -> f a
pure forall a b. (a -> b) -> a -> b
$ ((Result
r'), "timeDomains" ::: Vector TimeDomainEXT
pTimeDomains')
foreign import ccall
#if !defined(SAFE_FOREIGN_CALLS)
unsafe
#endif
"dynamic" mkVkGetCalibratedTimestampsEXT
:: FunPtr (Ptr Device_T -> Word32 -> Ptr CalibratedTimestampInfoEXT -> Ptr Word64 -> Ptr Word64 -> IO Result) -> Ptr Device_T -> Word32 -> Ptr CalibratedTimestampInfoEXT -> Ptr Word64 -> Ptr Word64 -> IO Result
getCalibratedTimestampsEXT :: forall io
. (MonadIO io)
=>
Device
->
("timestampInfos" ::: Vector CalibratedTimestampInfoEXT)
-> io (("timestamps" ::: Vector Word64), ("maxDeviation" ::: Word64))
getCalibratedTimestampsEXT :: forall (io :: * -> *).
MonadIO io =>
Device
-> ("timestampInfos" ::: Vector CalibratedTimestampInfoEXT)
-> io ("timestamps" ::: Vector Word64, Word64)
getCalibratedTimestampsEXT Device
device "timestampInfos" ::: Vector CalibratedTimestampInfoEXT
timestampInfos = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT forall a b. (a -> b) -> a -> b
$ do
let vkGetCalibratedTimestampsEXTPtr :: FunPtr
(Ptr Device_T
-> Word32
-> ("pTimestampInfos" ::: Ptr CalibratedTimestampInfoEXT)
-> ("pTimestamps" ::: Ptr Word64)
-> ("pTimestamps" ::: Ptr Word64)
-> IO Result)
vkGetCalibratedTimestampsEXTPtr = DeviceCmds
-> FunPtr
(Ptr Device_T
-> Word32
-> ("pTimestampInfos" ::: Ptr CalibratedTimestampInfoEXT)
-> ("pTimestamps" ::: Ptr Word64)
-> ("pTimestamps" ::: Ptr Word64)
-> IO Result)
pVkGetCalibratedTimestampsEXT (case Device
device of Device{DeviceCmds
$sel:deviceCmds:Device :: Device -> DeviceCmds
deviceCmds :: DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift forall a b. (a -> b) -> a -> b
$ forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (FunPtr
(Ptr Device_T
-> Word32
-> ("pTimestampInfos" ::: Ptr CalibratedTimestampInfoEXT)
-> ("pTimestamps" ::: Ptr Word64)
-> ("pTimestamps" ::: Ptr Word64)
-> IO Result)
vkGetCalibratedTimestampsEXTPtr forall a. Eq a => a -> a -> Bool
/= forall a. FunPtr a
nullFunPtr) forall a b. (a -> b) -> a -> b
$
forall e a. Exception e => e -> IO a
throwIO forall a b. (a -> b) -> a -> b
$ Maybe Handle
-> IOErrorType
-> String
-> String
-> Maybe CInt
-> Maybe String
-> IOException
IOError forall a. Maybe a
Nothing IOErrorType
InvalidArgument String
"" String
"The function pointer for vkGetCalibratedTimestampsEXT is null" forall a. Maybe a
Nothing forall a. Maybe a
Nothing
let vkGetCalibratedTimestampsEXT' :: Ptr Device_T
-> Word32
-> ("pTimestampInfos" ::: Ptr CalibratedTimestampInfoEXT)
-> ("pTimestamps" ::: Ptr Word64)
-> ("pTimestamps" ::: Ptr Word64)
-> IO Result
vkGetCalibratedTimestampsEXT' = FunPtr
(Ptr Device_T
-> Word32
-> ("pTimestampInfos" ::: Ptr CalibratedTimestampInfoEXT)
-> ("pTimestamps" ::: Ptr Word64)
-> ("pTimestamps" ::: Ptr Word64)
-> IO Result)
-> Ptr Device_T
-> Word32
-> ("pTimestampInfos" ::: Ptr CalibratedTimestampInfoEXT)
-> ("pTimestamps" ::: Ptr Word64)
-> ("pTimestamps" ::: Ptr Word64)
-> IO Result
mkVkGetCalibratedTimestampsEXT FunPtr
(Ptr Device_T
-> Word32
-> ("pTimestampInfos" ::: Ptr CalibratedTimestampInfoEXT)
-> ("pTimestamps" ::: Ptr Word64)
-> ("pTimestamps" ::: Ptr Word64)
-> IO Result)
vkGetCalibratedTimestampsEXTPtr
"pTimestampInfos" ::: Ptr CalibratedTimestampInfoEXT
pPTimestampInfos <- forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT forall a b. (a -> b) -> a -> b
$ forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes @CalibratedTimestampInfoEXT ((forall a. Vector a -> Int
Data.Vector.length ("timestampInfos" ::: Vector CalibratedTimestampInfoEXT
timestampInfos)) forall a. Num a => a -> a -> a
* Int
24)
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift forall a b. (a -> b) -> a -> b
$ forall (m :: * -> *) a b.
Monad m =>
(Int -> a -> m b) -> Vector a -> m ()
Data.Vector.imapM_ (\Int
i CalibratedTimestampInfoEXT
e -> forall a. Storable a => Ptr a -> a -> IO ()
poke ("pTimestampInfos" ::: Ptr CalibratedTimestampInfoEXT
pPTimestampInfos forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
24 forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr CalibratedTimestampInfoEXT) (CalibratedTimestampInfoEXT
e)) ("timestampInfos" ::: Vector CalibratedTimestampInfoEXT
timestampInfos)
"pTimestamps" ::: Ptr Word64
pPTimestamps <- forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT forall a b. (a -> b) -> a -> b
$ forall a b c. IO a -> (a -> IO b) -> (a -> IO c) -> IO c
bracket (forall a. Int -> IO (Ptr a)
callocBytes @Word64 ((forall a b. (Integral a, Num b) => a -> b
fromIntegral ((forall a b. (Integral a, Num b) => a -> b
fromIntegral (forall a. Vector a -> Int
Data.Vector.length forall a b. (a -> b) -> a -> b
$ ("timestampInfos" ::: Vector CalibratedTimestampInfoEXT
timestampInfos)) :: Word32))) forall a. Num a => a -> a -> a
* Int
8)) forall a. Ptr a -> IO ()
free
"pTimestamps" ::: Ptr Word64
pPMaxDeviation <- forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT forall a b. (a -> b) -> a -> b
$ forall a b c. IO a -> (a -> IO b) -> (a -> IO c) -> IO c
bracket (forall a. Int -> IO (Ptr a)
callocBytes @Word64 Int
8) forall a. Ptr a -> IO ()
free
Result
r <- forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift forall a b. (a -> b) -> a -> b
$ forall a. String -> IO a -> IO a
traceAroundEvent String
"vkGetCalibratedTimestampsEXT" (Ptr Device_T
-> Word32
-> ("pTimestampInfos" ::: Ptr CalibratedTimestampInfoEXT)
-> ("pTimestamps" ::: Ptr Word64)
-> ("pTimestamps" ::: Ptr Word64)
-> IO Result
vkGetCalibratedTimestampsEXT'
(Device -> Ptr Device_T
deviceHandle (Device
device))
((forall a b. (Integral a, Num b) => a -> b
fromIntegral (forall a. Vector a -> Int
Data.Vector.length forall a b. (a -> b) -> a -> b
$ ("timestampInfos" ::: Vector CalibratedTimestampInfoEXT
timestampInfos)) :: Word32))
("pTimestampInfos" ::: Ptr CalibratedTimestampInfoEXT
pPTimestampInfos)
("pTimestamps" ::: Ptr Word64
pPTimestamps)
("pTimestamps" ::: Ptr Word64
pPMaxDeviation))
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift forall a b. (a -> b) -> a -> b
$ forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
when (Result
r forall a. Ord a => a -> a -> Bool
< Result
SUCCESS) (forall e a. Exception e => e -> IO a
throwIO (Result -> VulkanException
VulkanException Result
r))
"timestamps" ::: Vector Word64
pTimestamps <- forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift forall a b. (a -> b) -> a -> b
$ forall (m :: * -> *) a.
Monad m =>
Int -> (Int -> m a) -> m (Vector a)
generateM (forall a b. (Integral a, Num b) => a -> b
fromIntegral ((forall a b. (Integral a, Num b) => a -> b
fromIntegral (forall a. Vector a -> Int
Data.Vector.length forall a b. (a -> b) -> a -> b
$ ("timestampInfos" ::: Vector CalibratedTimestampInfoEXT
timestampInfos)) :: Word32))) (\Int
i -> forall a. Storable a => Ptr a -> IO a
peek @Word64 (("pTimestamps" ::: Ptr Word64
pPTimestamps forall a. Ptr a -> Int -> Ptr a
`advancePtrBytes` (Int
8 forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr Word64)))
Word64
pMaxDeviation <- forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift forall a b. (a -> b) -> a -> b
$ forall a. Storable a => Ptr a -> IO a
peek @Word64 "pTimestamps" ::: Ptr Word64
pPMaxDeviation
forall (f :: * -> *) a. Applicative f => a -> f a
pure forall a b. (a -> b) -> a -> b
$ ("timestamps" ::: Vector Word64
pTimestamps, Word64
pMaxDeviation)
data CalibratedTimestampInfoEXT = CalibratedTimestampInfoEXT
{
CalibratedTimestampInfoEXT -> TimeDomainEXT
timeDomain :: TimeDomainEXT }
deriving (Typeable, CalibratedTimestampInfoEXT -> CalibratedTimestampInfoEXT -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CalibratedTimestampInfoEXT -> CalibratedTimestampInfoEXT -> Bool
$c/= :: CalibratedTimestampInfoEXT -> CalibratedTimestampInfoEXT -> Bool
== :: CalibratedTimestampInfoEXT -> CalibratedTimestampInfoEXT -> Bool
$c== :: CalibratedTimestampInfoEXT -> CalibratedTimestampInfoEXT -> Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (CalibratedTimestampInfoEXT)
#endif
deriving instance Show CalibratedTimestampInfoEXT
instance ToCStruct CalibratedTimestampInfoEXT where
withCStruct :: forall b.
CalibratedTimestampInfoEXT
-> (("pTimestampInfos" ::: Ptr CalibratedTimestampInfoEXT) -> IO b)
-> IO b
withCStruct CalibratedTimestampInfoEXT
x ("pTimestampInfos" ::: Ptr CalibratedTimestampInfoEXT) -> IO b
f = forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
24 forall a b. (a -> b) -> a -> b
$ \"pTimestampInfos" ::: Ptr CalibratedTimestampInfoEXT
p -> forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct "pTimestampInfos" ::: Ptr CalibratedTimestampInfoEXT
p CalibratedTimestampInfoEXT
x (("pTimestampInfos" ::: Ptr CalibratedTimestampInfoEXT) -> IO b
f "pTimestampInfos" ::: Ptr CalibratedTimestampInfoEXT
p)
pokeCStruct :: forall b.
("pTimestampInfos" ::: Ptr CalibratedTimestampInfoEXT)
-> CalibratedTimestampInfoEXT -> IO b -> IO b
pokeCStruct "pTimestampInfos" ::: Ptr CalibratedTimestampInfoEXT
p CalibratedTimestampInfoEXT{TimeDomainEXT
timeDomain :: TimeDomainEXT
$sel:timeDomain:CalibratedTimestampInfoEXT :: CalibratedTimestampInfoEXT -> TimeDomainEXT
..} IO b
f = do
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pTimestampInfos" ::: Ptr CalibratedTimestampInfoEXT
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_CALIBRATED_TIMESTAMP_INFO_EXT)
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pTimestampInfos" ::: Ptr CalibratedTimestampInfoEXT
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 (("pTimestampInfos" ::: Ptr CalibratedTimestampInfoEXT
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr TimeDomainEXT)) (TimeDomainEXT
timeDomain)
IO b
f
cStructSize :: Int
cStructSize = Int
24
cStructAlignment :: Int
cStructAlignment = Int
8
pokeZeroCStruct :: forall b.
("pTimestampInfos" ::: Ptr CalibratedTimestampInfoEXT)
-> IO b -> IO b
pokeZeroCStruct "pTimestampInfos" ::: Ptr CalibratedTimestampInfoEXT
p IO b
f = do
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pTimestampInfos" ::: Ptr CalibratedTimestampInfoEXT
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_CALIBRATED_TIMESTAMP_INFO_EXT)
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pTimestampInfos" ::: Ptr CalibratedTimestampInfoEXT
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 (("pTimestampInfos" ::: Ptr CalibratedTimestampInfoEXT
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr TimeDomainEXT)) (forall a. Zero a => a
zero)
IO b
f
instance FromCStruct CalibratedTimestampInfoEXT where
peekCStruct :: ("pTimestampInfos" ::: Ptr CalibratedTimestampInfoEXT)
-> IO CalibratedTimestampInfoEXT
peekCStruct "pTimestampInfos" ::: Ptr CalibratedTimestampInfoEXT
p = do
TimeDomainEXT
timeDomain <- forall a. Storable a => Ptr a -> IO a
peek @TimeDomainEXT (("pTimestampInfos" ::: Ptr CalibratedTimestampInfoEXT
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr TimeDomainEXT))
forall (f :: * -> *) a. Applicative f => a -> f a
pure forall a b. (a -> b) -> a -> b
$ TimeDomainEXT -> CalibratedTimestampInfoEXT
CalibratedTimestampInfoEXT
TimeDomainEXT
timeDomain
instance Storable CalibratedTimestampInfoEXT where
sizeOf :: CalibratedTimestampInfoEXT -> Int
sizeOf ~CalibratedTimestampInfoEXT
_ = Int
24
alignment :: CalibratedTimestampInfoEXT -> Int
alignment ~CalibratedTimestampInfoEXT
_ = Int
8
peek :: ("pTimestampInfos" ::: Ptr CalibratedTimestampInfoEXT)
-> IO CalibratedTimestampInfoEXT
peek = forall a. FromCStruct a => Ptr a -> IO a
peekCStruct
poke :: ("pTimestampInfos" ::: Ptr CalibratedTimestampInfoEXT)
-> CalibratedTimestampInfoEXT -> IO ()
poke "pTimestampInfos" ::: Ptr CalibratedTimestampInfoEXT
ptr CalibratedTimestampInfoEXT
poked = forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct "pTimestampInfos" ::: Ptr CalibratedTimestampInfoEXT
ptr CalibratedTimestampInfoEXT
poked (forall (f :: * -> *) a. Applicative f => a -> f a
pure ())
instance Zero CalibratedTimestampInfoEXT where
zero :: CalibratedTimestampInfoEXT
zero = TimeDomainEXT -> CalibratedTimestampInfoEXT
CalibratedTimestampInfoEXT
forall a. Zero a => a
zero
newtype TimeDomainEXT = TimeDomainEXT Int32
deriving newtype (TimeDomainEXT -> TimeDomainEXT -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: TimeDomainEXT -> TimeDomainEXT -> Bool
$c/= :: TimeDomainEXT -> TimeDomainEXT -> Bool
== :: TimeDomainEXT -> TimeDomainEXT -> Bool
$c== :: TimeDomainEXT -> TimeDomainEXT -> Bool
Eq, Eq TimeDomainEXT
TimeDomainEXT -> TimeDomainEXT -> Bool
TimeDomainEXT -> TimeDomainEXT -> Ordering
TimeDomainEXT -> TimeDomainEXT -> TimeDomainEXT
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: TimeDomainEXT -> TimeDomainEXT -> TimeDomainEXT
$cmin :: TimeDomainEXT -> TimeDomainEXT -> TimeDomainEXT
max :: TimeDomainEXT -> TimeDomainEXT -> TimeDomainEXT
$cmax :: TimeDomainEXT -> TimeDomainEXT -> TimeDomainEXT
>= :: TimeDomainEXT -> TimeDomainEXT -> Bool
$c>= :: TimeDomainEXT -> TimeDomainEXT -> Bool
> :: TimeDomainEXT -> TimeDomainEXT -> Bool
$c> :: TimeDomainEXT -> TimeDomainEXT -> Bool
<= :: TimeDomainEXT -> TimeDomainEXT -> Bool
$c<= :: TimeDomainEXT -> TimeDomainEXT -> Bool
< :: TimeDomainEXT -> TimeDomainEXT -> Bool
$c< :: TimeDomainEXT -> TimeDomainEXT -> Bool
compare :: TimeDomainEXT -> TimeDomainEXT -> Ordering
$ccompare :: TimeDomainEXT -> TimeDomainEXT -> Ordering
Ord, ("pTimeDomains" ::: Ptr TimeDomainEXT) -> IO TimeDomainEXT
("pTimeDomains" ::: Ptr TimeDomainEXT) -> Int -> IO TimeDomainEXT
("pTimeDomains" ::: Ptr TimeDomainEXT)
-> Int -> TimeDomainEXT -> IO ()
("pTimeDomains" ::: Ptr TimeDomainEXT) -> TimeDomainEXT -> IO ()
TimeDomainEXT -> Int
forall b. Ptr b -> Int -> IO TimeDomainEXT
forall b. Ptr b -> Int -> TimeDomainEXT -> IO ()
forall a.
(a -> Int)
-> (a -> Int)
-> (Ptr a -> Int -> IO a)
-> (Ptr a -> Int -> a -> IO ())
-> (forall b. Ptr b -> Int -> IO a)
-> (forall b. Ptr b -> Int -> a -> IO ())
-> (Ptr a -> IO a)
-> (Ptr a -> a -> IO ())
-> Storable a
poke :: ("pTimeDomains" ::: Ptr TimeDomainEXT) -> TimeDomainEXT -> IO ()
$cpoke :: ("pTimeDomains" ::: Ptr TimeDomainEXT) -> TimeDomainEXT -> IO ()
peek :: ("pTimeDomains" ::: Ptr TimeDomainEXT) -> IO TimeDomainEXT
$cpeek :: ("pTimeDomains" ::: Ptr TimeDomainEXT) -> IO TimeDomainEXT
pokeByteOff :: forall b. Ptr b -> Int -> TimeDomainEXT -> IO ()
$cpokeByteOff :: forall b. Ptr b -> Int -> TimeDomainEXT -> IO ()
peekByteOff :: forall b. Ptr b -> Int -> IO TimeDomainEXT
$cpeekByteOff :: forall b. Ptr b -> Int -> IO TimeDomainEXT
pokeElemOff :: ("pTimeDomains" ::: Ptr TimeDomainEXT)
-> Int -> TimeDomainEXT -> IO ()
$cpokeElemOff :: ("pTimeDomains" ::: Ptr TimeDomainEXT)
-> Int -> TimeDomainEXT -> IO ()
peekElemOff :: ("pTimeDomains" ::: Ptr TimeDomainEXT) -> Int -> IO TimeDomainEXT
$cpeekElemOff :: ("pTimeDomains" ::: Ptr TimeDomainEXT) -> Int -> IO TimeDomainEXT
alignment :: TimeDomainEXT -> Int
$calignment :: TimeDomainEXT -> Int
sizeOf :: TimeDomainEXT -> Int
$csizeOf :: TimeDomainEXT -> Int
Storable, TimeDomainEXT
forall a. a -> Zero a
zero :: TimeDomainEXT
$czero :: TimeDomainEXT
Zero)
pattern $bTIME_DOMAIN_DEVICE_EXT :: TimeDomainEXT
$mTIME_DOMAIN_DEVICE_EXT :: forall {r}. TimeDomainEXT -> ((# #) -> r) -> ((# #) -> r) -> r
TIME_DOMAIN_DEVICE_EXT = TimeDomainEXT 0
pattern $bTIME_DOMAIN_CLOCK_MONOTONIC_EXT :: TimeDomainEXT
$mTIME_DOMAIN_CLOCK_MONOTONIC_EXT :: forall {r}. TimeDomainEXT -> ((# #) -> r) -> ((# #) -> r) -> r
TIME_DOMAIN_CLOCK_MONOTONIC_EXT = TimeDomainEXT 1
pattern $bTIME_DOMAIN_CLOCK_MONOTONIC_RAW_EXT :: TimeDomainEXT
$mTIME_DOMAIN_CLOCK_MONOTONIC_RAW_EXT :: forall {r}. TimeDomainEXT -> ((# #) -> r) -> ((# #) -> r) -> r
TIME_DOMAIN_CLOCK_MONOTONIC_RAW_EXT = TimeDomainEXT 2
pattern $bTIME_DOMAIN_QUERY_PERFORMANCE_COUNTER_EXT :: TimeDomainEXT
$mTIME_DOMAIN_QUERY_PERFORMANCE_COUNTER_EXT :: forall {r}. TimeDomainEXT -> ((# #) -> r) -> ((# #) -> r) -> r
TIME_DOMAIN_QUERY_PERFORMANCE_COUNTER_EXT = TimeDomainEXT 3
{-# COMPLETE
TIME_DOMAIN_DEVICE_EXT
, TIME_DOMAIN_CLOCK_MONOTONIC_EXT
, TIME_DOMAIN_CLOCK_MONOTONIC_RAW_EXT
, TIME_DOMAIN_QUERY_PERFORMANCE_COUNTER_EXT ::
TimeDomainEXT
#-}
conNameTimeDomainEXT :: String
conNameTimeDomainEXT :: String
conNameTimeDomainEXT = String
"TimeDomainEXT"
enumPrefixTimeDomainEXT :: String
enumPrefixTimeDomainEXT :: String
enumPrefixTimeDomainEXT = String
"TIME_DOMAIN_"
showTableTimeDomainEXT :: [(TimeDomainEXT, String)]
showTableTimeDomainEXT :: [(TimeDomainEXT, String)]
showTableTimeDomainEXT =
[ (TimeDomainEXT
TIME_DOMAIN_DEVICE_EXT, String
"DEVICE_EXT")
,
( TimeDomainEXT
TIME_DOMAIN_CLOCK_MONOTONIC_EXT
, String
"CLOCK_MONOTONIC_EXT"
)
,
( TimeDomainEXT
TIME_DOMAIN_CLOCK_MONOTONIC_RAW_EXT
, String
"CLOCK_MONOTONIC_RAW_EXT"
)
,
( TimeDomainEXT
TIME_DOMAIN_QUERY_PERFORMANCE_COUNTER_EXT
, String
"QUERY_PERFORMANCE_COUNTER_EXT"
)
]
instance Show TimeDomainEXT where
showsPrec :: Int -> TimeDomainEXT -> ShowS
showsPrec =
forall a i.
Eq a =>
String
-> [(a, String)]
-> String
-> (a -> i)
-> (i -> ShowS)
-> Int
-> a
-> ShowS
enumShowsPrec
String
enumPrefixTimeDomainEXT
[(TimeDomainEXT, String)]
showTableTimeDomainEXT
String
conNameTimeDomainEXT
(\(TimeDomainEXT Int32
x) -> Int32
x)
(forall a. Show a => Int -> a -> ShowS
showsPrec Int
11)
instance Read TimeDomainEXT where
readPrec :: ReadPrec TimeDomainEXT
readPrec =
forall i a.
Read i =>
String -> [(a, String)] -> String -> (i -> a) -> ReadPrec a
enumReadPrec
String
enumPrefixTimeDomainEXT
[(TimeDomainEXT, String)]
showTableTimeDomainEXT
String
conNameTimeDomainEXT
Int32 -> TimeDomainEXT
TimeDomainEXT
type EXT_CALIBRATED_TIMESTAMPS_SPEC_VERSION = 2
pattern EXT_CALIBRATED_TIMESTAMPS_SPEC_VERSION :: forall a . Integral a => a
pattern $bEXT_CALIBRATED_TIMESTAMPS_SPEC_VERSION :: forall a. Integral a => a
$mEXT_CALIBRATED_TIMESTAMPS_SPEC_VERSION :: forall {r} {a}.
Integral a =>
a -> ((# #) -> r) -> ((# #) -> r) -> r
EXT_CALIBRATED_TIMESTAMPS_SPEC_VERSION = 2
type EXT_CALIBRATED_TIMESTAMPS_EXTENSION_NAME = "VK_EXT_calibrated_timestamps"
pattern EXT_CALIBRATED_TIMESTAMPS_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
pattern $bEXT_CALIBRATED_TIMESTAMPS_EXTENSION_NAME :: forall a. (Eq a, IsString a) => a
$mEXT_CALIBRATED_TIMESTAMPS_EXTENSION_NAME :: forall {r} {a}.
(Eq a, IsString a) =>
a -> ((# #) -> r) -> ((# #) -> r) -> r
EXT_CALIBRATED_TIMESTAMPS_EXTENSION_NAME = "VK_EXT_calibrated_timestamps"