{-# language CPP #-}
module Vulkan.Extensions.VK_EXT_acquire_xlib_display ( acquireXlibDisplayEXT
, getRandROutputDisplayEXT
, EXT_ACQUIRE_XLIB_DISPLAY_SPEC_VERSION
, pattern EXT_ACQUIRE_XLIB_DISPLAY_SPEC_VERSION
, EXT_ACQUIRE_XLIB_DISPLAY_EXTENSION_NAME
, pattern EXT_ACQUIRE_XLIB_DISPLAY_EXTENSION_NAME
, RROutput
, DisplayKHR(..)
, Display
) 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 (callocBytes)
import Foreign.Marshal.Alloc (free)
import GHC.Base (when)
import GHC.IO (throwIO)
import GHC.Ptr (nullFunPtr)
import Control.Monad.Trans.Class (lift)
import Control.Monad.Trans.Cont (evalContT)
import Control.Monad.IO.Class (MonadIO)
import Data.String (IsString)
import Foreign.Storable (Storable(peek))
import GHC.IO.Exception (IOErrorType(..))
import GHC.IO.Exception (IOException(..))
import Foreign.Ptr (FunPtr)
import Foreign.Ptr (Ptr)
import Data.Word (Word64)
import Control.Monad.Trans.Cont (ContT(..))
import Vulkan.NamedType ((:::))
import Vulkan.Extensions.VK_KHR_xlib_surface (Display)
import Vulkan.Extensions.Handles (DisplayKHR)
import Vulkan.Extensions.Handles (DisplayKHR(..))
import Vulkan.Dynamic (InstanceCmds(pVkAcquireXlibDisplayEXT))
import Vulkan.Dynamic (InstanceCmds(pVkGetRandROutputDisplayEXT))
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.Exception (VulkanException(..))
import Vulkan.Core10.Enums.Result (Result(SUCCESS))
import Vulkan.Extensions.VK_KHR_xlib_surface (Display)
import Vulkan.Extensions.Handles (DisplayKHR(..))
foreign import ccall
#if !defined(SAFE_FOREIGN_CALLS)
unsafe
#endif
"dynamic" mkVkAcquireXlibDisplayEXT
:: FunPtr (Ptr PhysicalDevice_T -> Ptr Display -> DisplayKHR -> IO Result) -> Ptr PhysicalDevice_T -> Ptr Display -> DisplayKHR -> IO Result
acquireXlibDisplayEXT :: forall io
. (MonadIO io)
=>
PhysicalDevice
->
("dpy" ::: Ptr Display)
->
DisplayKHR
-> io ()
acquireXlibDisplayEXT :: forall (io :: * -> *).
MonadIO io =>
PhysicalDevice -> ("dpy" ::: Ptr Display) -> DisplayKHR -> io ()
acquireXlibDisplayEXT PhysicalDevice
physicalDevice "dpy" ::: Ptr Display
dpy DisplayKHR
display = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall a b. (a -> b) -> a -> b
$ do
let vkAcquireXlibDisplayEXTPtr :: FunPtr
(Ptr PhysicalDevice_T
-> ("dpy" ::: Ptr Display) -> DisplayKHR -> IO Result)
vkAcquireXlibDisplayEXTPtr = InstanceCmds
-> FunPtr
(Ptr PhysicalDevice_T
-> ("dpy" ::: Ptr Display) -> DisplayKHR -> IO Result)
pVkAcquireXlibDisplayEXT (case PhysicalDevice
physicalDevice of PhysicalDevice{InstanceCmds
$sel:instanceCmds:PhysicalDevice :: PhysicalDevice -> InstanceCmds
instanceCmds :: InstanceCmds
instanceCmds} -> InstanceCmds
instanceCmds)
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (FunPtr
(Ptr PhysicalDevice_T
-> ("dpy" ::: Ptr Display) -> DisplayKHR -> IO Result)
vkAcquireXlibDisplayEXTPtr 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 vkAcquireXlibDisplayEXT is null" forall a. Maybe a
Nothing forall a. Maybe a
Nothing
let vkAcquireXlibDisplayEXT' :: Ptr PhysicalDevice_T
-> ("dpy" ::: Ptr Display) -> DisplayKHR -> IO Result
vkAcquireXlibDisplayEXT' = FunPtr
(Ptr PhysicalDevice_T
-> ("dpy" ::: Ptr Display) -> DisplayKHR -> IO Result)
-> Ptr PhysicalDevice_T
-> ("dpy" ::: Ptr Display)
-> DisplayKHR
-> IO Result
mkVkAcquireXlibDisplayEXT FunPtr
(Ptr PhysicalDevice_T
-> ("dpy" ::: Ptr Display) -> DisplayKHR -> IO Result)
vkAcquireXlibDisplayEXTPtr
Result
r <- forall a. String -> IO a -> IO a
traceAroundEvent String
"vkAcquireXlibDisplayEXT" (Ptr PhysicalDevice_T
-> ("dpy" ::: Ptr Display) -> DisplayKHR -> IO Result
vkAcquireXlibDisplayEXT'
(PhysicalDevice -> Ptr PhysicalDevice_T
physicalDeviceHandle (PhysicalDevice
physicalDevice))
("dpy" ::: Ptr Display
dpy)
(DisplayKHR
display))
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))
foreign import ccall
#if !defined(SAFE_FOREIGN_CALLS)
unsafe
#endif
"dynamic" mkVkGetRandROutputDisplayEXT
:: FunPtr (Ptr PhysicalDevice_T -> Ptr Display -> RROutput -> Ptr DisplayKHR -> IO Result) -> Ptr PhysicalDevice_T -> Ptr Display -> RROutput -> Ptr DisplayKHR -> IO Result
getRandROutputDisplayEXT :: forall io
. (MonadIO io)
=>
PhysicalDevice
->
("dpy" ::: Ptr Display)
->
RROutput
-> io (DisplayKHR)
getRandROutputDisplayEXT :: forall (io :: * -> *).
MonadIO io =>
PhysicalDevice
-> ("dpy" ::: Ptr Display) -> RROutput -> io DisplayKHR
getRandROutputDisplayEXT PhysicalDevice
physicalDevice "dpy" ::: Ptr Display
dpy RROutput
rrOutput = 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 vkGetRandROutputDisplayEXTPtr :: FunPtr
(Ptr PhysicalDevice_T
-> ("dpy" ::: Ptr Display)
-> RROutput
-> ("pDisplay" ::: Ptr DisplayKHR)
-> IO Result)
vkGetRandROutputDisplayEXTPtr = InstanceCmds
-> FunPtr
(Ptr PhysicalDevice_T
-> ("dpy" ::: Ptr Display)
-> RROutput
-> ("pDisplay" ::: Ptr DisplayKHR)
-> IO Result)
pVkGetRandROutputDisplayEXT (case PhysicalDevice
physicalDevice of PhysicalDevice{InstanceCmds
instanceCmds :: InstanceCmds
$sel:instanceCmds:PhysicalDevice :: PhysicalDevice -> 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
-> ("dpy" ::: Ptr Display)
-> RROutput
-> ("pDisplay" ::: Ptr DisplayKHR)
-> IO Result)
vkGetRandROutputDisplayEXTPtr 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 vkGetRandROutputDisplayEXT is null" forall a. Maybe a
Nothing forall a. Maybe a
Nothing
let vkGetRandROutputDisplayEXT' :: Ptr PhysicalDevice_T
-> ("dpy" ::: Ptr Display)
-> RROutput
-> ("pDisplay" ::: Ptr DisplayKHR)
-> IO Result
vkGetRandROutputDisplayEXT' = FunPtr
(Ptr PhysicalDevice_T
-> ("dpy" ::: Ptr Display)
-> RROutput
-> ("pDisplay" ::: Ptr DisplayKHR)
-> IO Result)
-> Ptr PhysicalDevice_T
-> ("dpy" ::: Ptr Display)
-> RROutput
-> ("pDisplay" ::: Ptr DisplayKHR)
-> IO Result
mkVkGetRandROutputDisplayEXT FunPtr
(Ptr PhysicalDevice_T
-> ("dpy" ::: Ptr Display)
-> RROutput
-> ("pDisplay" ::: Ptr DisplayKHR)
-> IO Result)
vkGetRandROutputDisplayEXTPtr
"pDisplay" ::: Ptr DisplayKHR
pPDisplay <- 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 @DisplayKHR 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
"vkGetRandROutputDisplayEXT" (Ptr PhysicalDevice_T
-> ("dpy" ::: Ptr Display)
-> RROutput
-> ("pDisplay" ::: Ptr DisplayKHR)
-> IO Result
vkGetRandROutputDisplayEXT'
(PhysicalDevice -> Ptr PhysicalDevice_T
physicalDeviceHandle (PhysicalDevice
physicalDevice))
("dpy" ::: Ptr Display
dpy)
(RROutput
rrOutput)
("pDisplay" ::: Ptr DisplayKHR
pPDisplay))
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))
DisplayKHR
pDisplay <- 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 @DisplayKHR "pDisplay" ::: Ptr DisplayKHR
pPDisplay
forall (f :: * -> *) a. Applicative f => a -> f a
pure forall a b. (a -> b) -> a -> b
$ (DisplayKHR
pDisplay)
type EXT_ACQUIRE_XLIB_DISPLAY_SPEC_VERSION = 1
pattern EXT_ACQUIRE_XLIB_DISPLAY_SPEC_VERSION :: forall a . Integral a => a
pattern $bEXT_ACQUIRE_XLIB_DISPLAY_SPEC_VERSION :: forall a. Integral a => a
$mEXT_ACQUIRE_XLIB_DISPLAY_SPEC_VERSION :: forall {r} {a}.
Integral a =>
a -> ((# #) -> r) -> ((# #) -> r) -> r
EXT_ACQUIRE_XLIB_DISPLAY_SPEC_VERSION = 1
type EXT_ACQUIRE_XLIB_DISPLAY_EXTENSION_NAME = "VK_EXT_acquire_xlib_display"
pattern EXT_ACQUIRE_XLIB_DISPLAY_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
pattern $bEXT_ACQUIRE_XLIB_DISPLAY_EXTENSION_NAME :: forall a. (Eq a, IsString a) => a
$mEXT_ACQUIRE_XLIB_DISPLAY_EXTENSION_NAME :: forall {r} {a}.
(Eq a, IsString a) =>
a -> ((# #) -> r) -> ((# #) -> r) -> r
EXT_ACQUIRE_XLIB_DISPLAY_EXTENSION_NAME = "VK_EXT_acquire_xlib_display"
type RROutput = Word64