{-# language CPP #-}
module Vulkan.Extensions.VK_GOOGLE_display_timing ( getRefreshCycleDurationGOOGLE
, getPastPresentationTimingGOOGLE
, RefreshCycleDurationGOOGLE(..)
, PastPresentationTimingGOOGLE(..)
, PresentTimesInfoGOOGLE(..)
, PresentTimeGOOGLE(..)
, GOOGLE_DISPLAY_TIMING_SPEC_VERSION
, pattern GOOGLE_DISPLAY_TIMING_SPEC_VERSION
, GOOGLE_DISPLAY_TIMING_EXTENSION_NAME
, pattern GOOGLE_DISPLAY_TIMING_EXTENSION_NAME
, SwapchainKHR(..)
) 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 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 qualified Data.Vector (null)
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.Storable (Storable)
import Foreign.Storable (Storable(peek))
import Foreign.Storable (Storable(poke))
import qualified Foreign.Storable (Storable(..))
import GHC.Generics (Generic)
import GHC.IO.Exception (IOErrorType(..))
import GHC.IO.Exception (IOException(..))
import Foreign.Ptr (FunPtr)
import Foreign.Ptr (Ptr)
import Data.Word (Word32)
import Data.Word (Word64)
import Data.Kind (Type)
import Control.Monad.Trans.Cont (ContT(..))
import Data.Vector (Vector)
import Vulkan.CStruct.Utils (advancePtrBytes)
import Vulkan.NamedType ((:::))
import Vulkan.Core10.Handles (Device)
import Vulkan.Core10.Handles (Device(..))
import Vulkan.Core10.Handles (Device(Device))
import Vulkan.Dynamic (DeviceCmds(pVkGetPastPresentationTimingGOOGLE))
import Vulkan.Dynamic (DeviceCmds(pVkGetRefreshCycleDurationGOOGLE))
import Vulkan.Core10.Handles (Device_T)
import Vulkan.Core10.Enums.Result (Result)
import Vulkan.Core10.Enums.Result (Result(..))
import Vulkan.Core10.Enums.StructureType (StructureType)
import Vulkan.Extensions.Handles (SwapchainKHR)
import Vulkan.Extensions.Handles (SwapchainKHR(..))
import Vulkan.Exception (VulkanException(..))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE))
import Vulkan.Core10.Enums.Result (Result(SUCCESS))
import Vulkan.Extensions.Handles (SwapchainKHR(..))
foreign import ccall
#if !defined(SAFE_FOREIGN_CALLS)
unsafe
#endif
"dynamic" mkVkGetRefreshCycleDurationGOOGLE
:: FunPtr (Ptr Device_T -> SwapchainKHR -> Ptr RefreshCycleDurationGOOGLE -> IO Result) -> Ptr Device_T -> SwapchainKHR -> Ptr RefreshCycleDurationGOOGLE -> IO Result
getRefreshCycleDurationGOOGLE :: forall io
. (MonadIO io)
=>
Device
->
SwapchainKHR
-> io (("displayTimingProperties" ::: RefreshCycleDurationGOOGLE))
getRefreshCycleDurationGOOGLE :: forall (io :: * -> *).
MonadIO io =>
Device -> SwapchainKHR -> io RefreshCycleDurationGOOGLE
getRefreshCycleDurationGOOGLE Device
device SwapchainKHR
swapchain = IO RefreshCycleDurationGOOGLE -> io RefreshCycleDurationGOOGLE
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO RefreshCycleDurationGOOGLE -> io RefreshCycleDurationGOOGLE)
-> (ContT RefreshCycleDurationGOOGLE IO RefreshCycleDurationGOOGLE
-> IO RefreshCycleDurationGOOGLE)
-> ContT RefreshCycleDurationGOOGLE IO RefreshCycleDurationGOOGLE
-> io RefreshCycleDurationGOOGLE
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ContT RefreshCycleDurationGOOGLE IO RefreshCycleDurationGOOGLE
-> IO RefreshCycleDurationGOOGLE
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT RefreshCycleDurationGOOGLE IO RefreshCycleDurationGOOGLE
-> io RefreshCycleDurationGOOGLE)
-> ContT RefreshCycleDurationGOOGLE IO RefreshCycleDurationGOOGLE
-> io RefreshCycleDurationGOOGLE
forall a b. (a -> b) -> a -> b
$ do
let vkGetRefreshCycleDurationGOOGLEPtr :: FunPtr
(Ptr Device_T
-> SwapchainKHR
-> ("pDisplayTimingProperties" ::: Ptr RefreshCycleDurationGOOGLE)
-> IO Result)
vkGetRefreshCycleDurationGOOGLEPtr = DeviceCmds
-> FunPtr
(Ptr Device_T
-> SwapchainKHR
-> ("pDisplayTimingProperties" ::: Ptr RefreshCycleDurationGOOGLE)
-> IO Result)
pVkGetRefreshCycleDurationGOOGLE (case Device
device of Device{DeviceCmds
$sel:deviceCmds:Device :: Device -> DeviceCmds
deviceCmds :: DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
IO () -> ContT RefreshCycleDurationGOOGLE IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT RefreshCycleDurationGOOGLE IO ())
-> IO () -> ContT RefreshCycleDurationGOOGLE IO ()
forall a b. (a -> b) -> a -> b
$ Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (FunPtr
(Ptr Device_T
-> SwapchainKHR
-> ("pDisplayTimingProperties" ::: Ptr RefreshCycleDurationGOOGLE)
-> IO Result)
vkGetRefreshCycleDurationGOOGLEPtr FunPtr
(Ptr Device_T
-> SwapchainKHR
-> ("pDisplayTimingProperties" ::: Ptr RefreshCycleDurationGOOGLE)
-> IO Result)
-> FunPtr
(Ptr Device_T
-> SwapchainKHR
-> ("pDisplayTimingProperties" ::: Ptr RefreshCycleDurationGOOGLE)
-> IO Result)
-> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr
(Ptr Device_T
-> SwapchainKHR
-> ("pDisplayTimingProperties" ::: Ptr RefreshCycleDurationGOOGLE)
-> IO Result)
forall a. FunPtr a
nullFunPtr) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
IOException -> IO ()
forall e a. 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 vkGetRefreshCycleDurationGOOGLE is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
let vkGetRefreshCycleDurationGOOGLE' :: Ptr Device_T
-> SwapchainKHR
-> ("pDisplayTimingProperties" ::: Ptr RefreshCycleDurationGOOGLE)
-> IO Result
vkGetRefreshCycleDurationGOOGLE' = FunPtr
(Ptr Device_T
-> SwapchainKHR
-> ("pDisplayTimingProperties" ::: Ptr RefreshCycleDurationGOOGLE)
-> IO Result)
-> Ptr Device_T
-> SwapchainKHR
-> ("pDisplayTimingProperties" ::: Ptr RefreshCycleDurationGOOGLE)
-> IO Result
mkVkGetRefreshCycleDurationGOOGLE FunPtr
(Ptr Device_T
-> SwapchainKHR
-> ("pDisplayTimingProperties" ::: Ptr RefreshCycleDurationGOOGLE)
-> IO Result)
vkGetRefreshCycleDurationGOOGLEPtr
"pDisplayTimingProperties" ::: Ptr RefreshCycleDurationGOOGLE
pPDisplayTimingProperties <- ((("pDisplayTimingProperties" ::: Ptr RefreshCycleDurationGOOGLE)
-> IO RefreshCycleDurationGOOGLE)
-> IO RefreshCycleDurationGOOGLE)
-> ContT
RefreshCycleDurationGOOGLE
IO
("pDisplayTimingProperties" ::: Ptr RefreshCycleDurationGOOGLE)
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (forall a b. ToCStruct a => (Ptr a -> IO b) -> IO b
withZeroCStruct @RefreshCycleDurationGOOGLE)
Result
r <- IO Result -> ContT RefreshCycleDurationGOOGLE IO Result
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO Result -> ContT RefreshCycleDurationGOOGLE IO Result)
-> IO Result -> ContT RefreshCycleDurationGOOGLE IO Result
forall a b. (a -> b) -> a -> b
$ String -> IO Result -> IO Result
forall a. String -> IO a -> IO a
traceAroundEvent String
"vkGetRefreshCycleDurationGOOGLE" (Ptr Device_T
-> SwapchainKHR
-> ("pDisplayTimingProperties" ::: Ptr RefreshCycleDurationGOOGLE)
-> IO Result
vkGetRefreshCycleDurationGOOGLE'
(Device -> Ptr Device_T
deviceHandle (Device
device))
(SwapchainKHR
swapchain)
("pDisplayTimingProperties" ::: Ptr RefreshCycleDurationGOOGLE
pPDisplayTimingProperties))
IO () -> ContT RefreshCycleDurationGOOGLE IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT RefreshCycleDurationGOOGLE IO ())
-> IO () -> ContT RefreshCycleDurationGOOGLE IO ()
forall a b. (a -> b) -> a -> b
$ Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
when (Result
r Result -> Result -> Bool
forall a. Ord a => a -> a -> Bool
< Result
SUCCESS) (VulkanException -> IO ()
forall e a. Exception e => e -> IO a
throwIO (Result -> VulkanException
VulkanException Result
r))
RefreshCycleDurationGOOGLE
pDisplayTimingProperties <- IO RefreshCycleDurationGOOGLE
-> ContT RefreshCycleDurationGOOGLE IO RefreshCycleDurationGOOGLE
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO RefreshCycleDurationGOOGLE
-> ContT RefreshCycleDurationGOOGLE IO RefreshCycleDurationGOOGLE)
-> IO RefreshCycleDurationGOOGLE
-> ContT RefreshCycleDurationGOOGLE IO RefreshCycleDurationGOOGLE
forall a b. (a -> b) -> a -> b
$ forall a. FromCStruct a => Ptr a -> IO a
peekCStruct @RefreshCycleDurationGOOGLE "pDisplayTimingProperties" ::: Ptr RefreshCycleDurationGOOGLE
pPDisplayTimingProperties
RefreshCycleDurationGOOGLE
-> ContT RefreshCycleDurationGOOGLE IO RefreshCycleDurationGOOGLE
forall (f :: * -> *) a. Applicative f => a -> f a
pure (RefreshCycleDurationGOOGLE
-> ContT RefreshCycleDurationGOOGLE IO RefreshCycleDurationGOOGLE)
-> RefreshCycleDurationGOOGLE
-> ContT RefreshCycleDurationGOOGLE IO RefreshCycleDurationGOOGLE
forall a b. (a -> b) -> a -> b
$ (RefreshCycleDurationGOOGLE
pDisplayTimingProperties)
foreign import ccall
#if !defined(SAFE_FOREIGN_CALLS)
unsafe
#endif
"dynamic" mkVkGetPastPresentationTimingGOOGLE
:: FunPtr (Ptr Device_T -> SwapchainKHR -> Ptr Word32 -> Ptr PastPresentationTimingGOOGLE -> IO Result) -> Ptr Device_T -> SwapchainKHR -> Ptr Word32 -> Ptr PastPresentationTimingGOOGLE -> IO Result
getPastPresentationTimingGOOGLE :: forall io
. (MonadIO io)
=>
Device
->
SwapchainKHR
-> io (Result, ("presentationTimings" ::: Vector PastPresentationTimingGOOGLE))
getPastPresentationTimingGOOGLE :: forall (io :: * -> *).
MonadIO io =>
Device
-> SwapchainKHR
-> io
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE)
getPastPresentationTimingGOOGLE Device
device SwapchainKHR
swapchain = IO
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE)
-> io
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE)
-> io
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE))
-> (ContT
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE)
IO
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE)
-> IO
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE))
-> ContT
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE)
IO
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE)
-> io
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ContT
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE)
IO
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE)
-> IO
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE)
IO
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE)
-> io
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE))
-> ContT
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE)
IO
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE)
-> io
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE)
forall a b. (a -> b) -> a -> b
$ do
let vkGetPastPresentationTimingGOOGLEPtr :: FunPtr
(Ptr Device_T
-> SwapchainKHR
-> ("pPresentationTimingCount" ::: Ptr Word32)
-> ("pPresentationTimings" ::: Ptr PastPresentationTimingGOOGLE)
-> IO Result)
vkGetPastPresentationTimingGOOGLEPtr = DeviceCmds
-> FunPtr
(Ptr Device_T
-> SwapchainKHR
-> ("pPresentationTimingCount" ::: Ptr Word32)
-> ("pPresentationTimings" ::: Ptr PastPresentationTimingGOOGLE)
-> IO Result)
pVkGetPastPresentationTimingGOOGLE (case Device
device of Device{DeviceCmds
deviceCmds :: DeviceCmds
$sel:deviceCmds:Device :: Device -> DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
IO ()
-> ContT
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE)
IO
()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO ()
-> ContT
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE)
IO
())
-> IO ()
-> ContT
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE)
IO
()
forall a b. (a -> b) -> a -> b
$ Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (FunPtr
(Ptr Device_T
-> SwapchainKHR
-> ("pPresentationTimingCount" ::: Ptr Word32)
-> ("pPresentationTimings" ::: Ptr PastPresentationTimingGOOGLE)
-> IO Result)
vkGetPastPresentationTimingGOOGLEPtr FunPtr
(Ptr Device_T
-> SwapchainKHR
-> ("pPresentationTimingCount" ::: Ptr Word32)
-> ("pPresentationTimings" ::: Ptr PastPresentationTimingGOOGLE)
-> IO Result)
-> FunPtr
(Ptr Device_T
-> SwapchainKHR
-> ("pPresentationTimingCount" ::: Ptr Word32)
-> ("pPresentationTimings" ::: Ptr PastPresentationTimingGOOGLE)
-> IO Result)
-> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr
(Ptr Device_T
-> SwapchainKHR
-> ("pPresentationTimingCount" ::: Ptr Word32)
-> ("pPresentationTimings" ::: Ptr PastPresentationTimingGOOGLE)
-> IO Result)
forall a. FunPtr a
nullFunPtr) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
IOException -> IO ()
forall e a. 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 vkGetPastPresentationTimingGOOGLE is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
let vkGetPastPresentationTimingGOOGLE' :: Ptr Device_T
-> SwapchainKHR
-> ("pPresentationTimingCount" ::: Ptr Word32)
-> ("pPresentationTimings" ::: Ptr PastPresentationTimingGOOGLE)
-> IO Result
vkGetPastPresentationTimingGOOGLE' = FunPtr
(Ptr Device_T
-> SwapchainKHR
-> ("pPresentationTimingCount" ::: Ptr Word32)
-> ("pPresentationTimings" ::: Ptr PastPresentationTimingGOOGLE)
-> IO Result)
-> Ptr Device_T
-> SwapchainKHR
-> ("pPresentationTimingCount" ::: Ptr Word32)
-> ("pPresentationTimings" ::: Ptr PastPresentationTimingGOOGLE)
-> IO Result
mkVkGetPastPresentationTimingGOOGLE FunPtr
(Ptr Device_T
-> SwapchainKHR
-> ("pPresentationTimingCount" ::: Ptr Word32)
-> ("pPresentationTimings" ::: Ptr PastPresentationTimingGOOGLE)
-> IO Result)
vkGetPastPresentationTimingGOOGLEPtr
let device' :: Ptr Device_T
device' = Device -> Ptr Device_T
deviceHandle (Device
device)
"pPresentationTimingCount" ::: Ptr Word32
pPPresentationTimingCount <- ((("pPresentationTimingCount" ::: Ptr Word32)
-> IO
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE))
-> IO
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE))
-> ContT
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE)
IO
("pPresentationTimingCount" ::: Ptr Word32)
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((("pPresentationTimingCount" ::: Ptr Word32)
-> IO
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE))
-> IO
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE))
-> ContT
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE)
IO
("pPresentationTimingCount" ::: Ptr Word32))
-> ((("pPresentationTimingCount" ::: Ptr Word32)
-> IO
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE))
-> IO
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE))
-> ContT
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE)
IO
("pPresentationTimingCount" ::: Ptr Word32)
forall a b. (a -> b) -> a -> b
$ IO ("pPresentationTimingCount" ::: Ptr Word32)
-> (("pPresentationTimingCount" ::: Ptr Word32) -> IO ())
-> (("pPresentationTimingCount" ::: Ptr Word32)
-> IO
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE))
-> IO
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE)
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) ("pPresentationTimingCount" ::: Ptr Word32) -> IO ()
forall a. Ptr a -> IO ()
free
Result
r <- IO Result
-> ContT
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE)
IO
Result
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO Result
-> ContT
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE)
IO
Result)
-> IO Result
-> ContT
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE)
IO
Result
forall a b. (a -> b) -> a -> b
$ String -> IO Result -> IO Result
forall a. String -> IO a -> IO a
traceAroundEvent String
"vkGetPastPresentationTimingGOOGLE" (Ptr Device_T
-> SwapchainKHR
-> ("pPresentationTimingCount" ::: Ptr Word32)
-> ("pPresentationTimings" ::: Ptr PastPresentationTimingGOOGLE)
-> IO Result
vkGetPastPresentationTimingGOOGLE'
Ptr Device_T
device'
(SwapchainKHR
swapchain)
("pPresentationTimingCount" ::: Ptr Word32
pPPresentationTimingCount)
("pPresentationTimings" ::: Ptr PastPresentationTimingGOOGLE
forall a. Ptr a
nullPtr))
IO ()
-> ContT
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE)
IO
()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO ()
-> ContT
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE)
IO
())
-> IO ()
-> ContT
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE)
IO
()
forall a b. (a -> b) -> a -> b
$ Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
when (Result
r Result -> Result -> Bool
forall a. Ord a => a -> a -> Bool
< Result
SUCCESS) (VulkanException -> IO ()
forall e a. Exception e => e -> IO a
throwIO (Result -> VulkanException
VulkanException Result
r))
Word32
pPresentationTimingCount <- IO Word32
-> ContT
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE)
IO
Word32
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO Word32
-> ContT
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE)
IO
Word32)
-> IO Word32
-> ContT
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE)
IO
Word32
forall a b. (a -> b) -> a -> b
$ forall a. Storable a => Ptr a -> IO a
peek @Word32 "pPresentationTimingCount" ::: Ptr Word32
pPPresentationTimingCount
"pPresentationTimings" ::: Ptr PastPresentationTimingGOOGLE
pPPresentationTimings <- ((("pPresentationTimings" ::: Ptr PastPresentationTimingGOOGLE)
-> IO
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE))
-> IO
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE))
-> ContT
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE)
IO
("pPresentationTimings" ::: Ptr PastPresentationTimingGOOGLE)
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((("pPresentationTimings" ::: Ptr PastPresentationTimingGOOGLE)
-> IO
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE))
-> IO
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE))
-> ContT
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE)
IO
("pPresentationTimings" ::: Ptr PastPresentationTimingGOOGLE))
-> ((("pPresentationTimings" ::: Ptr PastPresentationTimingGOOGLE)
-> IO
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE))
-> IO
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE))
-> ContT
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE)
IO
("pPresentationTimings" ::: Ptr PastPresentationTimingGOOGLE)
forall a b. (a -> b) -> a -> b
$ IO ("pPresentationTimings" ::: Ptr PastPresentationTimingGOOGLE)
-> (("pPresentationTimings" ::: Ptr PastPresentationTimingGOOGLE)
-> IO ())
-> (("pPresentationTimings" ::: Ptr PastPresentationTimingGOOGLE)
-> IO
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE))
-> IO
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE)
forall a b c. IO a -> (a -> IO b) -> (a -> IO c) -> IO c
bracket (forall a. Int -> IO (Ptr a)
callocBytes @PastPresentationTimingGOOGLE ((Word32 -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Word32
pPresentationTimingCount)) Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
40)) ("pPresentationTimings" ::: Ptr PastPresentationTimingGOOGLE)
-> IO ()
forall a. Ptr a -> IO ()
free
[()]
_ <- (Int
-> ContT
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE)
IO
())
-> [Int]
-> ContT
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE)
IO
[()]
forall (t :: * -> *) (f :: * -> *) a b.
(Traversable t, Applicative f) =>
(a -> f b) -> t a -> f (t b)
traverse (\Int
i -> ((()
-> IO
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE))
-> IO
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE))
-> ContT
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE)
IO
()
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((()
-> IO
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE))
-> IO
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE))
-> ContT
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE)
IO
())
-> ((()
-> IO
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE))
-> IO
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE))
-> ContT
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE)
IO
()
forall a b. (a -> b) -> a -> b
$ ("pPresentationTimings" ::: Ptr PastPresentationTimingGOOGLE)
-> IO
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE)
-> IO
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE)
forall a b. ToCStruct a => Ptr a -> IO b -> IO b
pokeZeroCStruct ("pPresentationTimings" ::: Ptr PastPresentationTimingGOOGLE
pPPresentationTimings ("pPresentationTimings" ::: Ptr PastPresentationTimingGOOGLE)
-> Int
-> "pPresentationTimings" ::: Ptr PastPresentationTimingGOOGLE
forall a. Ptr a -> Int -> Ptr a
`advancePtrBytes` (Int
i Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
40) :: Ptr PastPresentationTimingGOOGLE) (IO
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE)
-> IO
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE))
-> ((()
-> IO
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE))
-> IO
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE))
-> (()
-> IO
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE))
-> IO
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((()
-> IO
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE))
-> ()
-> IO
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE)
forall a b. (a -> b) -> a -> b
$ ())) [Int
0..(Word32 -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Word32
pPresentationTimingCount)) Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1]
Result
r' <- IO Result
-> ContT
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE)
IO
Result
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO Result
-> ContT
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE)
IO
Result)
-> IO Result
-> ContT
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE)
IO
Result
forall a b. (a -> b) -> a -> b
$ String -> IO Result -> IO Result
forall a. String -> IO a -> IO a
traceAroundEvent String
"vkGetPastPresentationTimingGOOGLE" (Ptr Device_T
-> SwapchainKHR
-> ("pPresentationTimingCount" ::: Ptr Word32)
-> ("pPresentationTimings" ::: Ptr PastPresentationTimingGOOGLE)
-> IO Result
vkGetPastPresentationTimingGOOGLE'
Ptr Device_T
device'
(SwapchainKHR
swapchain)
("pPresentationTimingCount" ::: Ptr Word32
pPPresentationTimingCount)
(("pPresentationTimings" ::: Ptr PastPresentationTimingGOOGLE
pPPresentationTimings)))
IO ()
-> ContT
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE)
IO
()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO ()
-> ContT
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE)
IO
())
-> IO ()
-> ContT
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE)
IO
()
forall a b. (a -> b) -> a -> b
$ Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
when (Result
r' Result -> Result -> Bool
forall a. Ord a => a -> a -> Bool
< Result
SUCCESS) (VulkanException -> IO ()
forall e a. Exception e => e -> IO a
throwIO (Result -> VulkanException
VulkanException Result
r'))
Word32
pPresentationTimingCount' <- IO Word32
-> ContT
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE)
IO
Word32
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO Word32
-> ContT
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE)
IO
Word32)
-> IO Word32
-> ContT
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE)
IO
Word32
forall a b. (a -> b) -> a -> b
$ forall a. Storable a => Ptr a -> IO a
peek @Word32 "pPresentationTimingCount" ::: Ptr Word32
pPPresentationTimingCount
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE
pPresentationTimings' <- IO ("presentationTimings" ::: Vector PastPresentationTimingGOOGLE)
-> ContT
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE)
IO
("presentationTimings" ::: Vector PastPresentationTimingGOOGLE)
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO ("presentationTimings" ::: Vector PastPresentationTimingGOOGLE)
-> ContT
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE)
IO
("presentationTimings" ::: Vector PastPresentationTimingGOOGLE))
-> IO
("presentationTimings" ::: Vector PastPresentationTimingGOOGLE)
-> ContT
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE)
IO
("presentationTimings" ::: Vector PastPresentationTimingGOOGLE)
forall a b. (a -> b) -> a -> b
$ Int
-> (Int -> IO PastPresentationTimingGOOGLE)
-> IO
("presentationTimings" ::: Vector PastPresentationTimingGOOGLE)
forall (m :: * -> *) a.
Monad m =>
Int -> (Int -> m a) -> m (Vector a)
generateM (Word32 -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Word32
pPresentationTimingCount')) (\Int
i -> forall a. FromCStruct a => Ptr a -> IO a
peekCStruct @PastPresentationTimingGOOGLE ((("pPresentationTimings" ::: Ptr PastPresentationTimingGOOGLE
pPPresentationTimings) ("pPresentationTimings" ::: Ptr PastPresentationTimingGOOGLE)
-> Int
-> "pPresentationTimings" ::: Ptr PastPresentationTimingGOOGLE
forall a. Ptr a -> Int -> Ptr a
`advancePtrBytes` (Int
40 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr PastPresentationTimingGOOGLE)))
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE)
-> ContT
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE)
IO
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE)
forall (f :: * -> *) a. Applicative f => a -> f a
pure ((Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE)
-> ContT
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE)
IO
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE))
-> (Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE)
-> ContT
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE)
IO
(Result,
"presentationTimings" ::: Vector PastPresentationTimingGOOGLE)
forall a b. (a -> b) -> a -> b
$ ((Result
r'), "presentationTimings" ::: Vector PastPresentationTimingGOOGLE
pPresentationTimings')
data RefreshCycleDurationGOOGLE = RefreshCycleDurationGOOGLE
{
RefreshCycleDurationGOOGLE -> Word64
refreshDuration :: Word64 }
deriving (Typeable, RefreshCycleDurationGOOGLE -> RefreshCycleDurationGOOGLE -> Bool
(RefreshCycleDurationGOOGLE -> RefreshCycleDurationGOOGLE -> Bool)
-> (RefreshCycleDurationGOOGLE
-> RefreshCycleDurationGOOGLE -> Bool)
-> Eq RefreshCycleDurationGOOGLE
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: RefreshCycleDurationGOOGLE -> RefreshCycleDurationGOOGLE -> Bool
$c/= :: RefreshCycleDurationGOOGLE -> RefreshCycleDurationGOOGLE -> Bool
== :: RefreshCycleDurationGOOGLE -> RefreshCycleDurationGOOGLE -> Bool
$c== :: RefreshCycleDurationGOOGLE -> RefreshCycleDurationGOOGLE -> Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (RefreshCycleDurationGOOGLE)
#endif
deriving instance Show RefreshCycleDurationGOOGLE
instance ToCStruct RefreshCycleDurationGOOGLE where
withCStruct :: forall b.
RefreshCycleDurationGOOGLE
-> (("pDisplayTimingProperties" ::: Ptr RefreshCycleDurationGOOGLE)
-> IO b)
-> IO b
withCStruct RefreshCycleDurationGOOGLE
x ("pDisplayTimingProperties" ::: Ptr RefreshCycleDurationGOOGLE)
-> IO b
f = Int
-> (("pDisplayTimingProperties" ::: Ptr RefreshCycleDurationGOOGLE)
-> IO b)
-> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
8 ((("pDisplayTimingProperties" ::: Ptr RefreshCycleDurationGOOGLE)
-> IO b)
-> IO b)
-> (("pDisplayTimingProperties" ::: Ptr RefreshCycleDurationGOOGLE)
-> IO b)
-> IO b
forall a b. (a -> b) -> a -> b
$ \"pDisplayTimingProperties" ::: Ptr RefreshCycleDurationGOOGLE
p -> ("pDisplayTimingProperties" ::: Ptr RefreshCycleDurationGOOGLE)
-> RefreshCycleDurationGOOGLE -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct "pDisplayTimingProperties" ::: Ptr RefreshCycleDurationGOOGLE
p RefreshCycleDurationGOOGLE
x (("pDisplayTimingProperties" ::: Ptr RefreshCycleDurationGOOGLE)
-> IO b
f "pDisplayTimingProperties" ::: Ptr RefreshCycleDurationGOOGLE
p)
pokeCStruct :: forall b.
("pDisplayTimingProperties" ::: Ptr RefreshCycleDurationGOOGLE)
-> RefreshCycleDurationGOOGLE -> IO b -> IO b
pokeCStruct "pDisplayTimingProperties" ::: Ptr RefreshCycleDurationGOOGLE
p RefreshCycleDurationGOOGLE{Word64
refreshDuration :: Word64
$sel:refreshDuration:RefreshCycleDurationGOOGLE :: RefreshCycleDurationGOOGLE -> Word64
..} IO b
f = do
Ptr Word64 -> Word64 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pDisplayTimingProperties" ::: Ptr RefreshCycleDurationGOOGLE
p ("pDisplayTimingProperties" ::: Ptr RefreshCycleDurationGOOGLE)
-> Int -> Ptr Word64
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr Word64)) (Word64
refreshDuration)
IO b
f
cStructSize :: Int
cStructSize = Int
8
cStructAlignment :: Int
cStructAlignment = Int
8
pokeZeroCStruct :: forall b.
("pDisplayTimingProperties" ::: Ptr RefreshCycleDurationGOOGLE)
-> IO b -> IO b
pokeZeroCStruct "pDisplayTimingProperties" ::: Ptr RefreshCycleDurationGOOGLE
p IO b
f = do
Ptr Word64 -> Word64 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pDisplayTimingProperties" ::: Ptr RefreshCycleDurationGOOGLE
p ("pDisplayTimingProperties" ::: Ptr RefreshCycleDurationGOOGLE)
-> Int -> Ptr Word64
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr Word64)) (Word64
forall a. Zero a => a
zero)
IO b
f
instance FromCStruct RefreshCycleDurationGOOGLE where
peekCStruct :: ("pDisplayTimingProperties" ::: Ptr RefreshCycleDurationGOOGLE)
-> IO RefreshCycleDurationGOOGLE
peekCStruct "pDisplayTimingProperties" ::: Ptr RefreshCycleDurationGOOGLE
p = do
Word64
refreshDuration <- forall a. Storable a => Ptr a -> IO a
peek @Word64 (("pDisplayTimingProperties" ::: Ptr RefreshCycleDurationGOOGLE
p ("pDisplayTimingProperties" ::: Ptr RefreshCycleDurationGOOGLE)
-> Int -> Ptr Word64
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr Word64))
RefreshCycleDurationGOOGLE -> IO RefreshCycleDurationGOOGLE
forall (f :: * -> *) a. Applicative f => a -> f a
pure (RefreshCycleDurationGOOGLE -> IO RefreshCycleDurationGOOGLE)
-> RefreshCycleDurationGOOGLE -> IO RefreshCycleDurationGOOGLE
forall a b. (a -> b) -> a -> b
$ Word64 -> RefreshCycleDurationGOOGLE
RefreshCycleDurationGOOGLE
Word64
refreshDuration
instance Storable RefreshCycleDurationGOOGLE where
sizeOf :: RefreshCycleDurationGOOGLE -> Int
sizeOf ~RefreshCycleDurationGOOGLE
_ = Int
8
alignment :: RefreshCycleDurationGOOGLE -> Int
alignment ~RefreshCycleDurationGOOGLE
_ = Int
8
peek :: ("pDisplayTimingProperties" ::: Ptr RefreshCycleDurationGOOGLE)
-> IO RefreshCycleDurationGOOGLE
peek = ("pDisplayTimingProperties" ::: Ptr RefreshCycleDurationGOOGLE)
-> IO RefreshCycleDurationGOOGLE
forall a. FromCStruct a => Ptr a -> IO a
peekCStruct
poke :: ("pDisplayTimingProperties" ::: Ptr RefreshCycleDurationGOOGLE)
-> RefreshCycleDurationGOOGLE -> IO ()
poke "pDisplayTimingProperties" ::: Ptr RefreshCycleDurationGOOGLE
ptr RefreshCycleDurationGOOGLE
poked = ("pDisplayTimingProperties" ::: Ptr RefreshCycleDurationGOOGLE)
-> RefreshCycleDurationGOOGLE -> IO () -> IO ()
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct "pDisplayTimingProperties" ::: Ptr RefreshCycleDurationGOOGLE
ptr RefreshCycleDurationGOOGLE
poked (() -> IO ()
forall (f :: * -> *) a. Applicative f => a -> f a
pure ())
instance Zero RefreshCycleDurationGOOGLE where
zero :: RefreshCycleDurationGOOGLE
zero = Word64 -> RefreshCycleDurationGOOGLE
RefreshCycleDurationGOOGLE
Word64
forall a. Zero a => a
zero
data PastPresentationTimingGOOGLE = PastPresentationTimingGOOGLE
{
PastPresentationTimingGOOGLE -> Word32
presentID :: Word32
,
PastPresentationTimingGOOGLE -> Word64
desiredPresentTime :: Word64
,
PastPresentationTimingGOOGLE -> Word64
actualPresentTime :: Word64
,
PastPresentationTimingGOOGLE -> Word64
earliestPresentTime :: Word64
,
PastPresentationTimingGOOGLE -> Word64
presentMargin :: Word64
}
deriving (Typeable, PastPresentationTimingGOOGLE
-> PastPresentationTimingGOOGLE -> Bool
(PastPresentationTimingGOOGLE
-> PastPresentationTimingGOOGLE -> Bool)
-> (PastPresentationTimingGOOGLE
-> PastPresentationTimingGOOGLE -> Bool)
-> Eq PastPresentationTimingGOOGLE
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PastPresentationTimingGOOGLE
-> PastPresentationTimingGOOGLE -> Bool
$c/= :: PastPresentationTimingGOOGLE
-> PastPresentationTimingGOOGLE -> Bool
== :: PastPresentationTimingGOOGLE
-> PastPresentationTimingGOOGLE -> Bool
$c== :: PastPresentationTimingGOOGLE
-> PastPresentationTimingGOOGLE -> Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (PastPresentationTimingGOOGLE)
#endif
deriving instance Show PastPresentationTimingGOOGLE
instance ToCStruct PastPresentationTimingGOOGLE where
withCStruct :: forall b.
PastPresentationTimingGOOGLE
-> (("pPresentationTimings" ::: Ptr PastPresentationTimingGOOGLE)
-> IO b)
-> IO b
withCStruct PastPresentationTimingGOOGLE
x ("pPresentationTimings" ::: Ptr PastPresentationTimingGOOGLE)
-> IO b
f = Int
-> (("pPresentationTimings" ::: Ptr PastPresentationTimingGOOGLE)
-> IO b)
-> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
40 ((("pPresentationTimings" ::: Ptr PastPresentationTimingGOOGLE)
-> IO b)
-> IO b)
-> (("pPresentationTimings" ::: Ptr PastPresentationTimingGOOGLE)
-> IO b)
-> IO b
forall a b. (a -> b) -> a -> b
$ \"pPresentationTimings" ::: Ptr PastPresentationTimingGOOGLE
p -> ("pPresentationTimings" ::: Ptr PastPresentationTimingGOOGLE)
-> PastPresentationTimingGOOGLE -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct "pPresentationTimings" ::: Ptr PastPresentationTimingGOOGLE
p PastPresentationTimingGOOGLE
x (("pPresentationTimings" ::: Ptr PastPresentationTimingGOOGLE)
-> IO b
f "pPresentationTimings" ::: Ptr PastPresentationTimingGOOGLE
p)
pokeCStruct :: forall b.
("pPresentationTimings" ::: Ptr PastPresentationTimingGOOGLE)
-> PastPresentationTimingGOOGLE -> IO b -> IO b
pokeCStruct "pPresentationTimings" ::: Ptr PastPresentationTimingGOOGLE
p PastPresentationTimingGOOGLE{Word32
Word64
presentMargin :: Word64
earliestPresentTime :: Word64
actualPresentTime :: Word64
desiredPresentTime :: Word64
presentID :: Word32
$sel:presentMargin:PastPresentationTimingGOOGLE :: PastPresentationTimingGOOGLE -> Word64
$sel:earliestPresentTime:PastPresentationTimingGOOGLE :: PastPresentationTimingGOOGLE -> Word64
$sel:actualPresentTime:PastPresentationTimingGOOGLE :: PastPresentationTimingGOOGLE -> Word64
$sel:desiredPresentTime:PastPresentationTimingGOOGLE :: PastPresentationTimingGOOGLE -> Word64
$sel:presentID:PastPresentationTimingGOOGLE :: PastPresentationTimingGOOGLE -> Word32
..} IO b
f = do
("pPresentationTimingCount" ::: Ptr Word32) -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pPresentationTimings" ::: Ptr PastPresentationTimingGOOGLE
p ("pPresentationTimings" ::: Ptr PastPresentationTimingGOOGLE)
-> Int -> "pPresentationTimingCount" ::: Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr Word32)) (Word32
presentID)
Ptr Word64 -> Word64 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pPresentationTimings" ::: Ptr PastPresentationTimingGOOGLE
p ("pPresentationTimings" ::: Ptr PastPresentationTimingGOOGLE)
-> Int -> Ptr Word64
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr Word64)) (Word64
desiredPresentTime)
Ptr Word64 -> Word64 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pPresentationTimings" ::: Ptr PastPresentationTimingGOOGLE
p ("pPresentationTimings" ::: Ptr PastPresentationTimingGOOGLE)
-> Int -> Ptr Word64
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Word64)) (Word64
actualPresentTime)
Ptr Word64 -> Word64 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pPresentationTimings" ::: Ptr PastPresentationTimingGOOGLE
p ("pPresentationTimings" ::: Ptr PastPresentationTimingGOOGLE)
-> Int -> Ptr Word64
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr Word64)) (Word64
earliestPresentTime)
Ptr Word64 -> Word64 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pPresentationTimings" ::: Ptr PastPresentationTimingGOOGLE
p ("pPresentationTimings" ::: Ptr PastPresentationTimingGOOGLE)
-> Int -> Ptr Word64
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr Word64)) (Word64
presentMargin)
IO b
f
cStructSize :: Int
cStructSize = Int
40
cStructAlignment :: Int
cStructAlignment = Int
8
pokeZeroCStruct :: forall b.
("pPresentationTimings" ::: Ptr PastPresentationTimingGOOGLE)
-> IO b -> IO b
pokeZeroCStruct "pPresentationTimings" ::: Ptr PastPresentationTimingGOOGLE
p IO b
f = do
("pPresentationTimingCount" ::: Ptr Word32) -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pPresentationTimings" ::: Ptr PastPresentationTimingGOOGLE
p ("pPresentationTimings" ::: Ptr PastPresentationTimingGOOGLE)
-> Int -> "pPresentationTimingCount" ::: Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr Word32)) (Word32
forall a. Zero a => a
zero)
Ptr Word64 -> Word64 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pPresentationTimings" ::: Ptr PastPresentationTimingGOOGLE
p ("pPresentationTimings" ::: Ptr PastPresentationTimingGOOGLE)
-> Int -> Ptr Word64
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr Word64)) (Word64
forall a. Zero a => a
zero)
Ptr Word64 -> Word64 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pPresentationTimings" ::: Ptr PastPresentationTimingGOOGLE
p ("pPresentationTimings" ::: Ptr PastPresentationTimingGOOGLE)
-> Int -> Ptr Word64
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Word64)) (Word64
forall a. Zero a => a
zero)
Ptr Word64 -> Word64 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pPresentationTimings" ::: Ptr PastPresentationTimingGOOGLE
p ("pPresentationTimings" ::: Ptr PastPresentationTimingGOOGLE)
-> Int -> Ptr Word64
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr Word64)) (Word64
forall a. Zero a => a
zero)
Ptr Word64 -> Word64 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pPresentationTimings" ::: Ptr PastPresentationTimingGOOGLE
p ("pPresentationTimings" ::: Ptr PastPresentationTimingGOOGLE)
-> Int -> Ptr Word64
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr Word64)) (Word64
forall a. Zero a => a
zero)
IO b
f
instance FromCStruct PastPresentationTimingGOOGLE where
peekCStruct :: ("pPresentationTimings" ::: Ptr PastPresentationTimingGOOGLE)
-> IO PastPresentationTimingGOOGLE
peekCStruct "pPresentationTimings" ::: Ptr PastPresentationTimingGOOGLE
p = do
Word32
presentID <- forall a. Storable a => Ptr a -> IO a
peek @Word32 (("pPresentationTimings" ::: Ptr PastPresentationTimingGOOGLE
p ("pPresentationTimings" ::: Ptr PastPresentationTimingGOOGLE)
-> Int -> "pPresentationTimingCount" ::: Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr Word32))
Word64
desiredPresentTime <- forall a. Storable a => Ptr a -> IO a
peek @Word64 (("pPresentationTimings" ::: Ptr PastPresentationTimingGOOGLE
p ("pPresentationTimings" ::: Ptr PastPresentationTimingGOOGLE)
-> Int -> Ptr Word64
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr Word64))
Word64
actualPresentTime <- forall a. Storable a => Ptr a -> IO a
peek @Word64 (("pPresentationTimings" ::: Ptr PastPresentationTimingGOOGLE
p ("pPresentationTimings" ::: Ptr PastPresentationTimingGOOGLE)
-> Int -> Ptr Word64
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Word64))
Word64
earliestPresentTime <- forall a. Storable a => Ptr a -> IO a
peek @Word64 (("pPresentationTimings" ::: Ptr PastPresentationTimingGOOGLE
p ("pPresentationTimings" ::: Ptr PastPresentationTimingGOOGLE)
-> Int -> Ptr Word64
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr Word64))
Word64
presentMargin <- forall a. Storable a => Ptr a -> IO a
peek @Word64 (("pPresentationTimings" ::: Ptr PastPresentationTimingGOOGLE
p ("pPresentationTimings" ::: Ptr PastPresentationTimingGOOGLE)
-> Int -> Ptr Word64
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr Word64))
PastPresentationTimingGOOGLE -> IO PastPresentationTimingGOOGLE
forall (f :: * -> *) a. Applicative f => a -> f a
pure (PastPresentationTimingGOOGLE -> IO PastPresentationTimingGOOGLE)
-> PastPresentationTimingGOOGLE -> IO PastPresentationTimingGOOGLE
forall a b. (a -> b) -> a -> b
$ Word32
-> Word64
-> Word64
-> Word64
-> Word64
-> PastPresentationTimingGOOGLE
PastPresentationTimingGOOGLE
Word32
presentID
Word64
desiredPresentTime
Word64
actualPresentTime
Word64
earliestPresentTime
Word64
presentMargin
instance Storable PastPresentationTimingGOOGLE where
sizeOf :: PastPresentationTimingGOOGLE -> Int
sizeOf ~PastPresentationTimingGOOGLE
_ = Int
40
alignment :: PastPresentationTimingGOOGLE -> Int
alignment ~PastPresentationTimingGOOGLE
_ = Int
8
peek :: ("pPresentationTimings" ::: Ptr PastPresentationTimingGOOGLE)
-> IO PastPresentationTimingGOOGLE
peek = ("pPresentationTimings" ::: Ptr PastPresentationTimingGOOGLE)
-> IO PastPresentationTimingGOOGLE
forall a. FromCStruct a => Ptr a -> IO a
peekCStruct
poke :: ("pPresentationTimings" ::: Ptr PastPresentationTimingGOOGLE)
-> PastPresentationTimingGOOGLE -> IO ()
poke "pPresentationTimings" ::: Ptr PastPresentationTimingGOOGLE
ptr PastPresentationTimingGOOGLE
poked = ("pPresentationTimings" ::: Ptr PastPresentationTimingGOOGLE)
-> PastPresentationTimingGOOGLE -> IO () -> IO ()
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct "pPresentationTimings" ::: Ptr PastPresentationTimingGOOGLE
ptr PastPresentationTimingGOOGLE
poked (() -> IO ()
forall (f :: * -> *) a. Applicative f => a -> f a
pure ())
instance Zero PastPresentationTimingGOOGLE where
zero :: PastPresentationTimingGOOGLE
zero = Word32
-> Word64
-> Word64
-> Word64
-> Word64
-> PastPresentationTimingGOOGLE
PastPresentationTimingGOOGLE
Word32
forall a. Zero a => a
zero
Word64
forall a. Zero a => a
zero
Word64
forall a. Zero a => a
zero
Word64
forall a. Zero a => a
zero
Word64
forall a. Zero a => a
zero
data PresentTimesInfoGOOGLE = PresentTimesInfoGOOGLE
{
PresentTimesInfoGOOGLE -> Word32
swapchainCount :: Word32
,
PresentTimesInfoGOOGLE -> Vector PresentTimeGOOGLE
times :: Vector PresentTimeGOOGLE
}
deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (PresentTimesInfoGOOGLE)
#endif
deriving instance Show PresentTimesInfoGOOGLE
instance ToCStruct PresentTimesInfoGOOGLE where
withCStruct :: forall b.
PresentTimesInfoGOOGLE
-> (Ptr PresentTimesInfoGOOGLE -> IO b) -> IO b
withCStruct PresentTimesInfoGOOGLE
x Ptr PresentTimesInfoGOOGLE -> IO b
f = Int -> (Ptr PresentTimesInfoGOOGLE -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
32 ((Ptr PresentTimesInfoGOOGLE -> IO b) -> IO b)
-> (Ptr PresentTimesInfoGOOGLE -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr PresentTimesInfoGOOGLE
p -> Ptr PresentTimesInfoGOOGLE
-> PresentTimesInfoGOOGLE -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr PresentTimesInfoGOOGLE
p PresentTimesInfoGOOGLE
x (Ptr PresentTimesInfoGOOGLE -> IO b
f Ptr PresentTimesInfoGOOGLE
p)
pokeCStruct :: forall b.
Ptr PresentTimesInfoGOOGLE
-> PresentTimesInfoGOOGLE -> IO b -> IO b
pokeCStruct Ptr PresentTimesInfoGOOGLE
p PresentTimesInfoGOOGLE{Word32
Vector PresentTimeGOOGLE
times :: Vector PresentTimeGOOGLE
swapchainCount :: Word32
$sel:times:PresentTimesInfoGOOGLE :: PresentTimesInfoGOOGLE -> Vector PresentTimeGOOGLE
$sel:swapchainCount:PresentTimesInfoGOOGLE :: PresentTimesInfoGOOGLE -> Word32
..} IO b
f = ContT b IO b -> IO b
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT b IO b -> IO b) -> ContT b IO b -> IO b
forall a b. (a -> b) -> a -> b
$ do
IO () -> ContT b IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PresentTimesInfoGOOGLE
p Ptr PresentTimesInfoGOOGLE -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE)
IO () -> ContT b IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PresentTimesInfoGOOGLE
p Ptr PresentTimesInfoGOOGLE -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
let pTimesLength :: Int
pTimesLength = Vector PresentTimeGOOGLE -> Int
forall a. Vector a -> Int
Data.Vector.length (Vector PresentTimeGOOGLE -> Int)
-> Vector PresentTimeGOOGLE -> Int
forall a b. (a -> b) -> a -> b
$ (Vector PresentTimeGOOGLE
times)
Word32
swapchainCount'' <- IO Word32 -> ContT b IO Word32
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO Word32 -> ContT b IO Word32) -> IO Word32 -> ContT b IO Word32
forall a b. (a -> b) -> a -> b
$ if (Word32
swapchainCount) Word32 -> Word32 -> Bool
forall a. Eq a => a -> a -> Bool
== Word32
0
then Word32 -> IO Word32
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Word32 -> IO Word32) -> Word32 -> IO Word32
forall a b. (a -> b) -> a -> b
$ Int -> Word32
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
pTimesLength
else do
Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (Int -> Word32
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
pTimesLength Word32 -> Word32 -> Bool
forall a. Eq a => a -> a -> Bool
== (Word32
swapchainCount) Bool -> Bool -> Bool
|| Int
pTimesLength Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
0) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
IOException -> IO ()
forall e a. 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
"pTimes must be empty or have 'swapchainCount' elements" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
Word32 -> IO Word32
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Word32
swapchainCount)
IO () -> ContT b IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ ("pPresentationTimingCount" ::: Ptr Word32) -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PresentTimesInfoGOOGLE
p Ptr PresentTimesInfoGOOGLE
-> Int -> "pPresentationTimingCount" ::: Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Word32)) (Word32
swapchainCount'')
Ptr PresentTimeGOOGLE
pTimes'' <- if Vector PresentTimeGOOGLE -> Bool
forall a. Vector a -> Bool
Data.Vector.null (Vector PresentTimeGOOGLE
times)
then Ptr PresentTimeGOOGLE -> ContT b IO (Ptr PresentTimeGOOGLE)
forall (f :: * -> *) a. Applicative f => a -> f a
pure Ptr PresentTimeGOOGLE
forall a. Ptr a
nullPtr
else do
Ptr PresentTimeGOOGLE
pPTimes <- ((Ptr PresentTimeGOOGLE -> IO b) -> IO b)
-> ContT b IO (Ptr PresentTimeGOOGLE)
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr PresentTimeGOOGLE -> IO b) -> IO b)
-> ContT b IO (Ptr PresentTimeGOOGLE))
-> ((Ptr PresentTimeGOOGLE -> IO b) -> IO b)
-> ContT b IO (Ptr PresentTimeGOOGLE)
forall a b. (a -> b) -> a -> b
$ forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes @PresentTimeGOOGLE (((Vector PresentTimeGOOGLE -> Int
forall a. Vector a -> Int
Data.Vector.length (Vector PresentTimeGOOGLE
times))) Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
16)
IO () -> ContT b IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ (Int -> PresentTimeGOOGLE -> IO ())
-> Vector PresentTimeGOOGLE -> IO ()
forall (m :: * -> *) a b.
Monad m =>
(Int -> a -> m b) -> Vector a -> m ()
Data.Vector.imapM_ (\Int
i PresentTimeGOOGLE
e -> Ptr PresentTimeGOOGLE -> PresentTimeGOOGLE -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr PresentTimeGOOGLE
pPTimes Ptr PresentTimeGOOGLE -> Int -> Ptr PresentTimeGOOGLE
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
16 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr PresentTimeGOOGLE) (PresentTimeGOOGLE
e)) ((Vector PresentTimeGOOGLE
times))
Ptr PresentTimeGOOGLE -> ContT b IO (Ptr PresentTimeGOOGLE)
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Ptr PresentTimeGOOGLE -> ContT b IO (Ptr PresentTimeGOOGLE))
-> Ptr PresentTimeGOOGLE -> ContT b IO (Ptr PresentTimeGOOGLE)
forall a b. (a -> b) -> a -> b
$ Ptr PresentTimeGOOGLE
pPTimes
IO () -> ContT b IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr (Ptr PresentTimeGOOGLE) -> Ptr PresentTimeGOOGLE -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PresentTimesInfoGOOGLE
p Ptr PresentTimesInfoGOOGLE -> Int -> Ptr (Ptr PresentTimeGOOGLE)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr (Ptr PresentTimeGOOGLE))) Ptr PresentTimeGOOGLE
pTimes''
IO b -> ContT b IO b
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO b -> ContT b IO b) -> IO b -> ContT b IO b
forall a b. (a -> b) -> a -> b
$ IO b
f
cStructSize :: Int
cStructSize = Int
32
cStructAlignment :: Int
cStructAlignment = Int
8
pokeZeroCStruct :: forall b. Ptr PresentTimesInfoGOOGLE -> IO b -> IO b
pokeZeroCStruct Ptr PresentTimesInfoGOOGLE
p IO b
f = do
Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PresentTimesInfoGOOGLE
p Ptr PresentTimesInfoGOOGLE -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE)
Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PresentTimesInfoGOOGLE
p Ptr PresentTimesInfoGOOGLE -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
IO b
f
instance FromCStruct PresentTimesInfoGOOGLE where
peekCStruct :: Ptr PresentTimesInfoGOOGLE -> IO PresentTimesInfoGOOGLE
peekCStruct Ptr PresentTimesInfoGOOGLE
p = do
Word32
swapchainCount <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr PresentTimesInfoGOOGLE
p Ptr PresentTimesInfoGOOGLE
-> Int -> "pPresentationTimingCount" ::: Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Word32))
Ptr PresentTimeGOOGLE
pTimes <- forall a. Storable a => Ptr a -> IO a
peek @(Ptr PresentTimeGOOGLE) ((Ptr PresentTimesInfoGOOGLE
p Ptr PresentTimesInfoGOOGLE -> Int -> Ptr (Ptr PresentTimeGOOGLE)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr (Ptr PresentTimeGOOGLE)))
let pTimesLength :: Int
pTimesLength = if Ptr PresentTimeGOOGLE
pTimes Ptr PresentTimeGOOGLE -> Ptr PresentTimeGOOGLE -> Bool
forall a. Eq a => a -> a -> Bool
== Ptr PresentTimeGOOGLE
forall a. Ptr a
nullPtr then Int
0 else (Word32 -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral Word32
swapchainCount)
Vector PresentTimeGOOGLE
pTimes' <- Int
-> (Int -> IO PresentTimeGOOGLE) -> IO (Vector PresentTimeGOOGLE)
forall (m :: * -> *) a.
Monad m =>
Int -> (Int -> m a) -> m (Vector a)
generateM Int
pTimesLength (\Int
i -> forall a. FromCStruct a => Ptr a -> IO a
peekCStruct @PresentTimeGOOGLE ((Ptr PresentTimeGOOGLE
pTimes Ptr PresentTimeGOOGLE -> Int -> Ptr PresentTimeGOOGLE
forall a. Ptr a -> Int -> Ptr a
`advancePtrBytes` (Int
16 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr PresentTimeGOOGLE)))
PresentTimesInfoGOOGLE -> IO PresentTimesInfoGOOGLE
forall (f :: * -> *) a. Applicative f => a -> f a
pure (PresentTimesInfoGOOGLE -> IO PresentTimesInfoGOOGLE)
-> PresentTimesInfoGOOGLE -> IO PresentTimesInfoGOOGLE
forall a b. (a -> b) -> a -> b
$ Word32 -> Vector PresentTimeGOOGLE -> PresentTimesInfoGOOGLE
PresentTimesInfoGOOGLE
Word32
swapchainCount Vector PresentTimeGOOGLE
pTimes'
instance Zero PresentTimesInfoGOOGLE where
zero :: PresentTimesInfoGOOGLE
zero = Word32 -> Vector PresentTimeGOOGLE -> PresentTimesInfoGOOGLE
PresentTimesInfoGOOGLE
Word32
forall a. Zero a => a
zero
Vector PresentTimeGOOGLE
forall a. Monoid a => a
mempty
data PresentTimeGOOGLE = PresentTimeGOOGLE
{
PresentTimeGOOGLE -> Word32
presentID :: Word32
,
PresentTimeGOOGLE -> Word64
desiredPresentTime :: Word64
}
deriving (Typeable, PresentTimeGOOGLE -> PresentTimeGOOGLE -> Bool
(PresentTimeGOOGLE -> PresentTimeGOOGLE -> Bool)
-> (PresentTimeGOOGLE -> PresentTimeGOOGLE -> Bool)
-> Eq PresentTimeGOOGLE
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PresentTimeGOOGLE -> PresentTimeGOOGLE -> Bool
$c/= :: PresentTimeGOOGLE -> PresentTimeGOOGLE -> Bool
== :: PresentTimeGOOGLE -> PresentTimeGOOGLE -> Bool
$c== :: PresentTimeGOOGLE -> PresentTimeGOOGLE -> Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (PresentTimeGOOGLE)
#endif
deriving instance Show PresentTimeGOOGLE
instance ToCStruct PresentTimeGOOGLE where
withCStruct :: forall b.
PresentTimeGOOGLE -> (Ptr PresentTimeGOOGLE -> IO b) -> IO b
withCStruct PresentTimeGOOGLE
x Ptr PresentTimeGOOGLE -> IO b
f = Int -> (Ptr PresentTimeGOOGLE -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
16 ((Ptr PresentTimeGOOGLE -> IO b) -> IO b)
-> (Ptr PresentTimeGOOGLE -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr PresentTimeGOOGLE
p -> Ptr PresentTimeGOOGLE -> PresentTimeGOOGLE -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr PresentTimeGOOGLE
p PresentTimeGOOGLE
x (Ptr PresentTimeGOOGLE -> IO b
f Ptr PresentTimeGOOGLE
p)
pokeCStruct :: forall b.
Ptr PresentTimeGOOGLE -> PresentTimeGOOGLE -> IO b -> IO b
pokeCStruct Ptr PresentTimeGOOGLE
p PresentTimeGOOGLE{Word32
Word64
desiredPresentTime :: Word64
presentID :: Word32
$sel:desiredPresentTime:PresentTimeGOOGLE :: PresentTimeGOOGLE -> Word64
$sel:presentID:PresentTimeGOOGLE :: PresentTimeGOOGLE -> Word32
..} IO b
f = do
("pPresentationTimingCount" ::: Ptr Word32) -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PresentTimeGOOGLE
p Ptr PresentTimeGOOGLE
-> Int -> "pPresentationTimingCount" ::: Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr Word32)) (Word32
presentID)
Ptr Word64 -> Word64 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PresentTimeGOOGLE
p Ptr PresentTimeGOOGLE -> Int -> Ptr Word64
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr Word64)) (Word64
desiredPresentTime)
IO b
f
cStructSize :: Int
cStructSize = Int
16
cStructAlignment :: Int
cStructAlignment = Int
8
pokeZeroCStruct :: forall b. Ptr PresentTimeGOOGLE -> IO b -> IO b
pokeZeroCStruct Ptr PresentTimeGOOGLE
p IO b
f = do
("pPresentationTimingCount" ::: Ptr Word32) -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PresentTimeGOOGLE
p Ptr PresentTimeGOOGLE
-> Int -> "pPresentationTimingCount" ::: Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr Word32)) (Word32
forall a. Zero a => a
zero)
Ptr Word64 -> Word64 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PresentTimeGOOGLE
p Ptr PresentTimeGOOGLE -> Int -> Ptr Word64
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr Word64)) (Word64
forall a. Zero a => a
zero)
IO b
f
instance FromCStruct PresentTimeGOOGLE where
peekCStruct :: Ptr PresentTimeGOOGLE -> IO PresentTimeGOOGLE
peekCStruct Ptr PresentTimeGOOGLE
p = do
Word32
presentID <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr PresentTimeGOOGLE
p Ptr PresentTimeGOOGLE
-> Int -> "pPresentationTimingCount" ::: Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr Word32))
Word64
desiredPresentTime <- forall a. Storable a => Ptr a -> IO a
peek @Word64 ((Ptr PresentTimeGOOGLE
p Ptr PresentTimeGOOGLE -> Int -> Ptr Word64
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr Word64))
PresentTimeGOOGLE -> IO PresentTimeGOOGLE
forall (f :: * -> *) a. Applicative f => a -> f a
pure (PresentTimeGOOGLE -> IO PresentTimeGOOGLE)
-> PresentTimeGOOGLE -> IO PresentTimeGOOGLE
forall a b. (a -> b) -> a -> b
$ Word32 -> Word64 -> PresentTimeGOOGLE
PresentTimeGOOGLE
Word32
presentID Word64
desiredPresentTime
instance Storable PresentTimeGOOGLE where
sizeOf :: PresentTimeGOOGLE -> Int
sizeOf ~PresentTimeGOOGLE
_ = Int
16
alignment :: PresentTimeGOOGLE -> Int
alignment ~PresentTimeGOOGLE
_ = Int
8
peek :: Ptr PresentTimeGOOGLE -> IO PresentTimeGOOGLE
peek = Ptr PresentTimeGOOGLE -> IO PresentTimeGOOGLE
forall a. FromCStruct a => Ptr a -> IO a
peekCStruct
poke :: Ptr PresentTimeGOOGLE -> PresentTimeGOOGLE -> IO ()
poke Ptr PresentTimeGOOGLE
ptr PresentTimeGOOGLE
poked = Ptr PresentTimeGOOGLE -> PresentTimeGOOGLE -> IO () -> IO ()
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr PresentTimeGOOGLE
ptr PresentTimeGOOGLE
poked (() -> IO ()
forall (f :: * -> *) a. Applicative f => a -> f a
pure ())
instance Zero PresentTimeGOOGLE where
zero :: PresentTimeGOOGLE
zero = Word32 -> Word64 -> PresentTimeGOOGLE
PresentTimeGOOGLE
Word32
forall a. Zero a => a
zero
Word64
forall a. Zero a => a
zero
type GOOGLE_DISPLAY_TIMING_SPEC_VERSION = 1
pattern GOOGLE_DISPLAY_TIMING_SPEC_VERSION :: forall a . Integral a => a
pattern $bGOOGLE_DISPLAY_TIMING_SPEC_VERSION :: forall a. Integral a => a
$mGOOGLE_DISPLAY_TIMING_SPEC_VERSION :: forall {r} {a}.
Integral a =>
a -> (Void# -> r) -> (Void# -> r) -> r
GOOGLE_DISPLAY_TIMING_SPEC_VERSION = 1
type GOOGLE_DISPLAY_TIMING_EXTENSION_NAME = "VK_GOOGLE_display_timing"
pattern GOOGLE_DISPLAY_TIMING_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
pattern $bGOOGLE_DISPLAY_TIMING_EXTENSION_NAME :: forall a. (Eq a, IsString a) => a
$mGOOGLE_DISPLAY_TIMING_EXTENSION_NAME :: forall {r} {a}.
(Eq a, IsString a) =>
a -> (Void# -> r) -> (Void# -> r) -> r
GOOGLE_DISPLAY_TIMING_EXTENSION_NAME = "VK_GOOGLE_display_timing"