{-# language CPP #-}
module Vulkan.Extensions.VK_KHR_surface  ( destroySurfaceKHR
                                         , getPhysicalDeviceSurfaceSupportKHR
                                         , getPhysicalDeviceSurfaceCapabilitiesKHR
                                         , getPhysicalDeviceSurfaceFormatsKHR
                                         , getPhysicalDeviceSurfacePresentModesKHR
                                         , SurfaceCapabilitiesKHR(..)
                                         , SurfaceFormatKHR(..)
                                         , PresentModeKHR( PRESENT_MODE_IMMEDIATE_KHR
                                                         , PRESENT_MODE_MAILBOX_KHR
                                                         , PRESENT_MODE_FIFO_KHR
                                                         , PRESENT_MODE_FIFO_RELAXED_KHR
                                                         , PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR
                                                         , PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR
                                                         , ..
                                                         )
                                         , ColorSpaceKHR( COLOR_SPACE_SRGB_NONLINEAR_KHR
                                                        , COLOR_SPACE_DISPLAY_NATIVE_AMD
                                                        , COLOR_SPACE_EXTENDED_SRGB_NONLINEAR_EXT
                                                        , COLOR_SPACE_PASS_THROUGH_EXT
                                                        , COLOR_SPACE_ADOBERGB_NONLINEAR_EXT
                                                        , COLOR_SPACE_ADOBERGB_LINEAR_EXT
                                                        , COLOR_SPACE_HDR10_HLG_EXT
                                                        , COLOR_SPACE_DOLBYVISION_EXT
                                                        , COLOR_SPACE_HDR10_ST2084_EXT
                                                        , COLOR_SPACE_BT2020_LINEAR_EXT
                                                        , COLOR_SPACE_BT709_NONLINEAR_EXT
                                                        , COLOR_SPACE_BT709_LINEAR_EXT
                                                        , COLOR_SPACE_DCI_P3_NONLINEAR_EXT
                                                        , COLOR_SPACE_DISPLAY_P3_LINEAR_EXT
                                                        , COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT
                                                        , COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT
                                                        , ..
                                                        )
                                         , CompositeAlphaFlagBitsKHR( COMPOSITE_ALPHA_OPAQUE_BIT_KHR
                                                                    , COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR
                                                                    , COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR
                                                                    , COMPOSITE_ALPHA_INHERIT_BIT_KHR
                                                                    , ..
                                                                    )
                                         , CompositeAlphaFlagsKHR
                                         , SurfaceTransformFlagBitsKHR( SURFACE_TRANSFORM_IDENTITY_BIT_KHR
                                                                      , SURFACE_TRANSFORM_ROTATE_90_BIT_KHR
                                                                      , SURFACE_TRANSFORM_ROTATE_180_BIT_KHR
                                                                      , SURFACE_TRANSFORM_ROTATE_270_BIT_KHR
                                                                      , SURFACE_TRANSFORM_HORIZONTAL_MIRROR_BIT_KHR
                                                                      , SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_90_BIT_KHR
                                                                      , SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_180_BIT_KHR
                                                                      , SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_270_BIT_KHR
                                                                      , SURFACE_TRANSFORM_INHERIT_BIT_KHR
                                                                      , ..
                                                                      )
                                         , SurfaceTransformFlagsKHR
                                         , KHR_SURFACE_SPEC_VERSION
                                         , pattern KHR_SURFACE_SPEC_VERSION
                                         , KHR_SURFACE_EXTENSION_NAME
                                         , pattern KHR_SURFACE_EXTENSION_NAME
                                         , SurfaceKHR(..)
                                         ) where

import Control.Exception.Base (bracket)
import Control.Monad (unless)
import Control.Monad.IO.Class (liftIO)
import Foreign.Marshal.Alloc (allocaBytesAligned)
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.Read (choose)
import GHC.Read (expectP)
import GHC.Read (parens)
import GHC.Show (showParen)
import GHC.Show (showString)
import GHC.Show (showsPrec)
import Numeric (showHex)
import Text.ParserCombinators.ReadPrec ((+++))
import Text.ParserCombinators.ReadPrec (prec)
import Text.ParserCombinators.ReadPrec (step)
import Control.Monad.Trans.Class (lift)
import Control.Monad.Trans.Cont (evalContT)
import Data.Vector (generateM)
import Control.Monad.IO.Class (MonadIO)
import Data.Bits (Bits)
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.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 Data.Word (Word32)
import Text.Read.Lex (Lexeme(Ident))
import Data.Kind (Type)
import Control.Monad.Trans.Cont (ContT(..))
import Data.Vector (Vector)
import Vulkan.CStruct.Utils (advancePtrBytes)
import Vulkan.Core10.BaseType (bool32ToBool)
import Vulkan.NamedType ((:::))
import Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
import Vulkan.Core10.BaseType (Bool32)
import Vulkan.Core10.BaseType (Bool32(..))
import Vulkan.Core10.SharedTypes (Extent2D)
import Vulkan.Core10.BaseType (Flags)
import Vulkan.Core10.Enums.Format (Format)
import Vulkan.CStruct (FromCStruct)
import Vulkan.CStruct (FromCStruct(..))
import Vulkan.Core10.Enums.ImageUsageFlagBits (ImageUsageFlags)
import Vulkan.Core10.Handles (Instance)
import Vulkan.Core10.Handles (Instance(..))
import Vulkan.Dynamic (InstanceCmds(pVkDestroySurfaceKHR))
import Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDeviceSurfaceCapabilitiesKHR))
import Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDeviceSurfaceFormatsKHR))
import Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDeviceSurfacePresentModesKHR))
import Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDeviceSurfaceSupportKHR))
import Vulkan.Core10.Handles (Instance_T)
import Vulkan.Core10.Handles (PhysicalDevice)
import Vulkan.Core10.Handles (PhysicalDevice(..))
import Vulkan.Core10.Handles (PhysicalDevice_T)
import Vulkan.Core10.Enums.Result (Result)
import Vulkan.Core10.Enums.Result (Result(..))
import Vulkan.Extensions.Handles (SurfaceKHR)
import Vulkan.Extensions.Handles (SurfaceKHR(..))
import Vulkan.CStruct (ToCStruct)
import Vulkan.CStruct (ToCStruct(..))
import Vulkan.Exception (VulkanException(..))
import Vulkan.Zero (Zero)
import Vulkan.Zero (Zero(..))
import Vulkan.Core10.Enums.Result (Result(SUCCESS))
import Vulkan.Extensions.Handles (SurfaceKHR(..))
foreign import ccall
#if !defined(SAFE_FOREIGN_CALLS)
  unsafe
#endif
  "dynamic" mkVkDestroySurfaceKHR
  :: FunPtr (Ptr Instance_T -> SurfaceKHR -> Ptr AllocationCallbacks -> IO ()) -> Ptr Instance_T -> SurfaceKHR -> Ptr AllocationCallbacks -> IO ()

-- | vkDestroySurfaceKHR - Destroy a VkSurfaceKHR object
--
-- = Parameters
--
-- -   @instance@ is the instance used to create the surface.
--
-- -   @surface@ is the surface to destroy.
--
-- -   @pAllocator@ is the allocator used for host memory allocated for the
--     surface object when there is no more specific allocator available
--     (see
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>).
--
-- = Description
--
-- Destroying a 'Vulkan.Extensions.Handles.SurfaceKHR' merely severs the
-- connection between Vulkan and the native surface, and does not imply
-- destroying the native surface, closing a window, or similar behavior.
--
-- == Valid Usage
--
-- -   All 'Vulkan.Extensions.Handles.SwapchainKHR' objects created for
--     @surface@ /must/ have been destroyed prior to destroying @surface@
--
-- -   If 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were
--     provided when @surface@ was created, a compatible set of callbacks
--     /must/ be provided here
--
-- -   If no 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were
--     provided when @surface@ was created, @pAllocator@ /must/ be @NULL@
--
-- == Valid Usage (Implicit)
--
-- -   @instance@ /must/ be a valid 'Vulkan.Core10.Handles.Instance' handle
--
-- -   If @surface@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',
--     @surface@ /must/ be a valid 'Vulkan.Extensions.Handles.SurfaceKHR'
--     handle
--
-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
--     pointer to a valid
--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure
--
-- -   If @surface@ is a valid handle, it /must/ have been created,
--     allocated, or retrieved from @instance@
--
-- == Host Synchronization
--
-- -   Host access to @surface@ /must/ be externally synchronized
--
-- = See Also
--
-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
-- 'Vulkan.Core10.Handles.Instance', 'Vulkan.Extensions.Handles.SurfaceKHR'
destroySurfaceKHR :: forall io . MonadIO io => Instance -> SurfaceKHR -> ("allocator" ::: Maybe AllocationCallbacks) -> io ()
destroySurfaceKHR :: Instance
-> SurfaceKHR
-> ("allocator" ::: Maybe AllocationCallbacks)
-> io ()
destroySurfaceKHR instance' :: Instance
instance' surface :: SurfaceKHR
surface allocator :: "allocator" ::: Maybe AllocationCallbacks
allocator = IO () -> io ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> io ())
-> (ContT () IO () -> IO ()) -> ContT () IO () -> io ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ContT () IO () -> IO ()
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT () IO () -> io ()) -> ContT () IO () -> io ()
forall a b. (a -> b) -> a -> b
$ do
  let vkDestroySurfaceKHRPtr :: FunPtr
  (Ptr Instance_T
   -> SurfaceKHR
   -> ("pAllocator" ::: Ptr AllocationCallbacks)
   -> IO ())
vkDestroySurfaceKHRPtr = InstanceCmds
-> FunPtr
     (Ptr Instance_T
      -> SurfaceKHR
      -> ("pAllocator" ::: Ptr AllocationCallbacks)
      -> IO ())
pVkDestroySurfaceKHR (Instance -> InstanceCmds
instanceCmds (Instance
instance' :: Instance))
  IO () -> ContT () IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (FunPtr
  (Ptr Instance_T
   -> SurfaceKHR
   -> ("pAllocator" ::: Ptr AllocationCallbacks)
   -> IO ())
vkDestroySurfaceKHRPtr FunPtr
  (Ptr Instance_T
   -> SurfaceKHR
   -> ("pAllocator" ::: Ptr AllocationCallbacks)
   -> IO ())
-> FunPtr
     (Ptr Instance_T
      -> SurfaceKHR
      -> ("pAllocator" ::: Ptr AllocationCallbacks)
      -> IO ())
-> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr
  (Ptr Instance_T
   -> SurfaceKHR
   -> ("pAllocator" ::: Ptr AllocationCallbacks)
   -> IO ())
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 "" "The function pointer for vkDestroySurfaceKHR is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkDestroySurfaceKHR' :: Ptr Instance_T
-> SurfaceKHR
-> ("pAllocator" ::: Ptr AllocationCallbacks)
-> IO ()
vkDestroySurfaceKHR' = FunPtr
  (Ptr Instance_T
   -> SurfaceKHR
   -> ("pAllocator" ::: Ptr AllocationCallbacks)
   -> IO ())
-> Ptr Instance_T
-> SurfaceKHR
-> ("pAllocator" ::: Ptr AllocationCallbacks)
-> IO ()
mkVkDestroySurfaceKHR FunPtr
  (Ptr Instance_T
   -> SurfaceKHR
   -> ("pAllocator" ::: Ptr AllocationCallbacks)
   -> IO ())
vkDestroySurfaceKHRPtr
  "pAllocator" ::: Ptr AllocationCallbacks
pAllocator <- case ("allocator" ::: Maybe AllocationCallbacks
allocator) of
    Nothing -> ("pAllocator" ::: Ptr AllocationCallbacks)
-> ContT () IO ("pAllocator" ::: Ptr AllocationCallbacks)
forall (f :: * -> *) a. Applicative f => a -> f a
pure "pAllocator" ::: Ptr AllocationCallbacks
forall a. Ptr a
nullPtr
    Just j :: AllocationCallbacks
j -> ((("pAllocator" ::: Ptr AllocationCallbacks) -> IO ()) -> IO ())
-> ContT () IO ("pAllocator" ::: Ptr AllocationCallbacks)
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((("pAllocator" ::: Ptr AllocationCallbacks) -> IO ()) -> IO ())
 -> ContT () IO ("pAllocator" ::: Ptr AllocationCallbacks))
-> ((("pAllocator" ::: Ptr AllocationCallbacks) -> IO ()) -> IO ())
-> ContT () IO ("pAllocator" ::: Ptr AllocationCallbacks)
forall a b. (a -> b) -> a -> b
$ AllocationCallbacks
-> (("pAllocator" ::: Ptr AllocationCallbacks) -> IO ()) -> IO ()
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
withCStruct (AllocationCallbacks
j)
  IO () -> ContT () IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Instance_T
-> SurfaceKHR
-> ("pAllocator" ::: Ptr AllocationCallbacks)
-> IO ()
vkDestroySurfaceKHR' (Instance -> Ptr Instance_T
instanceHandle (Instance
instance')) (SurfaceKHR
surface) "pAllocator" ::: Ptr AllocationCallbacks
pAllocator
  () -> ContT () IO ()
forall (f :: * -> *) a. Applicative f => a -> f a
pure (() -> ContT () IO ()) -> () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ ()


foreign import ccall
#if !defined(SAFE_FOREIGN_CALLS)
  unsafe
#endif
  "dynamic" mkVkGetPhysicalDeviceSurfaceSupportKHR
  :: FunPtr (Ptr PhysicalDevice_T -> Word32 -> SurfaceKHR -> Ptr Bool32 -> IO Result) -> Ptr PhysicalDevice_T -> Word32 -> SurfaceKHR -> Ptr Bool32 -> IO Result

-- | vkGetPhysicalDeviceSurfaceSupportKHR - Query if presentation is
-- supported
--
-- = Parameters
--
-- -   @physicalDevice@ is the physical device.
--
-- -   @queueFamilyIndex@ is the queue family.
--
-- -   @surface@ is the surface.
--
-- -   @pSupported@ is a pointer to a 'Vulkan.Core10.BaseType.Bool32',
--     which is set to 'Vulkan.Core10.BaseType.TRUE' to indicate support,
--     and 'Vulkan.Core10.BaseType.FALSE' otherwise.
--
-- == Valid Usage
--
-- -   @queueFamilyIndex@ /must/ be less than @pQueueFamilyPropertyCount@
--     returned by
--     'Vulkan.Core10.DeviceInitialization.getPhysicalDeviceQueueFamilyProperties'
--     for the given @physicalDevice@
--
-- == Valid Usage (Implicit)
--
-- -   @physicalDevice@ /must/ be a valid
--     'Vulkan.Core10.Handles.PhysicalDevice' handle
--
-- -   @surface@ /must/ be a valid 'Vulkan.Extensions.Handles.SurfaceKHR'
--     handle
--
-- -   @pSupported@ /must/ be a valid pointer to a
--     'Vulkan.Core10.BaseType.Bool32' value
--
-- -   Both of @physicalDevice@, and @surface@ /must/ have been created,
--     allocated, or retrieved from the same
--     'Vulkan.Core10.Handles.Instance'
--
-- == Return Codes
--
-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
--
--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
--
-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
--
--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
--
--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
--
--     -   'Vulkan.Core10.Enums.Result.ERROR_SURFACE_LOST_KHR'
--
-- = See Also
--
-- 'Vulkan.Core10.BaseType.Bool32', 'Vulkan.Core10.Handles.PhysicalDevice',
-- 'Vulkan.Extensions.Handles.SurfaceKHR'
getPhysicalDeviceSurfaceSupportKHR :: forall io . MonadIO io => PhysicalDevice -> ("queueFamilyIndex" ::: Word32) -> SurfaceKHR -> io (("supported" ::: Bool))
getPhysicalDeviceSurfaceSupportKHR :: PhysicalDevice
-> ("queueFamilyIndex" ::: Word32) -> SurfaceKHR -> io Bool
getPhysicalDeviceSurfaceSupportKHR physicalDevice :: PhysicalDevice
physicalDevice queueFamilyIndex :: "queueFamilyIndex" ::: Word32
queueFamilyIndex surface :: SurfaceKHR
surface = IO Bool -> io Bool
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Bool -> io Bool)
-> (ContT Bool IO Bool -> IO Bool) -> ContT Bool IO Bool -> io Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ContT Bool IO Bool -> IO Bool
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Bool IO Bool -> io Bool) -> ContT Bool IO Bool -> io Bool
forall a b. (a -> b) -> a -> b
$ do
  let vkGetPhysicalDeviceSurfaceSupportKHRPtr :: FunPtr
  (Ptr PhysicalDevice_T
   -> ("queueFamilyIndex" ::: Word32)
   -> SurfaceKHR
   -> ("pSupported" ::: Ptr Bool32)
   -> IO Result)
vkGetPhysicalDeviceSurfaceSupportKHRPtr = InstanceCmds
-> FunPtr
     (Ptr PhysicalDevice_T
      -> ("queueFamilyIndex" ::: Word32)
      -> SurfaceKHR
      -> ("pSupported" ::: Ptr Bool32)
      -> IO Result)
pVkGetPhysicalDeviceSurfaceSupportKHR (PhysicalDevice -> InstanceCmds
instanceCmds (PhysicalDevice
physicalDevice :: PhysicalDevice))
  IO () -> ContT Bool IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT Bool IO ()) -> IO () -> ContT Bool IO ()
forall a b. (a -> b) -> a -> b
$ Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (FunPtr
  (Ptr PhysicalDevice_T
   -> ("queueFamilyIndex" ::: Word32)
   -> SurfaceKHR
   -> ("pSupported" ::: Ptr Bool32)
   -> IO Result)
vkGetPhysicalDeviceSurfaceSupportKHRPtr FunPtr
  (Ptr PhysicalDevice_T
   -> ("queueFamilyIndex" ::: Word32)
   -> SurfaceKHR
   -> ("pSupported" ::: Ptr Bool32)
   -> IO Result)
-> FunPtr
     (Ptr PhysicalDevice_T
      -> ("queueFamilyIndex" ::: Word32)
      -> SurfaceKHR
      -> ("pSupported" ::: Ptr Bool32)
      -> IO Result)
-> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr
  (Ptr PhysicalDevice_T
   -> ("queueFamilyIndex" ::: Word32)
   -> SurfaceKHR
   -> ("pSupported" ::: Ptr Bool32)
   -> 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 "" "The function pointer for vkGetPhysicalDeviceSurfaceSupportKHR is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkGetPhysicalDeviceSurfaceSupportKHR' :: Ptr PhysicalDevice_T
-> ("queueFamilyIndex" ::: Word32)
-> SurfaceKHR
-> ("pSupported" ::: Ptr Bool32)
-> IO Result
vkGetPhysicalDeviceSurfaceSupportKHR' = FunPtr
  (Ptr PhysicalDevice_T
   -> ("queueFamilyIndex" ::: Word32)
   -> SurfaceKHR
   -> ("pSupported" ::: Ptr Bool32)
   -> IO Result)
-> Ptr PhysicalDevice_T
-> ("queueFamilyIndex" ::: Word32)
-> SurfaceKHR
-> ("pSupported" ::: Ptr Bool32)
-> IO Result
mkVkGetPhysicalDeviceSurfaceSupportKHR FunPtr
  (Ptr PhysicalDevice_T
   -> ("queueFamilyIndex" ::: Word32)
   -> SurfaceKHR
   -> ("pSupported" ::: Ptr Bool32)
   -> IO Result)
vkGetPhysicalDeviceSurfaceSupportKHRPtr
  "pSupported" ::: Ptr Bool32
pPSupported <- ((("pSupported" ::: Ptr Bool32) -> IO Bool) -> IO Bool)
-> ContT Bool IO ("pSupported" ::: Ptr Bool32)
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((("pSupported" ::: Ptr Bool32) -> IO Bool) -> IO Bool)
 -> ContT Bool IO ("pSupported" ::: Ptr Bool32))
-> ((("pSupported" ::: Ptr Bool32) -> IO Bool) -> IO Bool)
-> ContT Bool IO ("pSupported" ::: Ptr Bool32)
forall a b. (a -> b) -> a -> b
$ IO ("pSupported" ::: Ptr Bool32)
-> (("pSupported" ::: Ptr Bool32) -> IO ())
-> (("pSupported" ::: Ptr Bool32) -> IO Bool)
-> IO Bool
forall a b c. IO a -> (a -> IO b) -> (a -> IO c) -> IO c
bracket (Int -> IO ("pSupported" ::: Ptr Bool32)
forall a. Int -> IO (Ptr a)
callocBytes @Bool32 4) ("pSupported" ::: Ptr Bool32) -> IO ()
forall a. Ptr a -> IO ()
free
  Result
r <- IO Result -> ContT Bool IO Result
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO Result -> ContT Bool IO Result)
-> IO Result -> ContT Bool IO Result
forall a b. (a -> b) -> a -> b
$ Ptr PhysicalDevice_T
-> ("queueFamilyIndex" ::: Word32)
-> SurfaceKHR
-> ("pSupported" ::: Ptr Bool32)
-> IO Result
vkGetPhysicalDeviceSurfaceSupportKHR' (PhysicalDevice -> Ptr PhysicalDevice_T
physicalDeviceHandle (PhysicalDevice
physicalDevice)) ("queueFamilyIndex" ::: Word32
queueFamilyIndex) (SurfaceKHR
surface) ("pSupported" ::: Ptr Bool32
pPSupported)
  IO () -> ContT Bool IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT Bool IO ()) -> IO () -> ContT Bool 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))
  Bool32
pSupported <- IO Bool32 -> ContT Bool IO Bool32
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO Bool32 -> ContT Bool IO Bool32)
-> IO Bool32 -> ContT Bool IO Bool32
forall a b. (a -> b) -> a -> b
$ ("pSupported" ::: Ptr Bool32) -> IO Bool32
forall a. Storable a => Ptr a -> IO a
peek @Bool32 "pSupported" ::: Ptr Bool32
pPSupported
  Bool -> ContT Bool IO Bool
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Bool -> ContT Bool IO Bool) -> Bool -> ContT Bool IO Bool
forall a b. (a -> b) -> a -> b
$ ((Bool32 -> Bool
bool32ToBool Bool32
pSupported))


foreign import ccall
#if !defined(SAFE_FOREIGN_CALLS)
  unsafe
#endif
  "dynamic" mkVkGetPhysicalDeviceSurfaceCapabilitiesKHR
  :: FunPtr (Ptr PhysicalDevice_T -> SurfaceKHR -> Ptr SurfaceCapabilitiesKHR -> IO Result) -> Ptr PhysicalDevice_T -> SurfaceKHR -> Ptr SurfaceCapabilitiesKHR -> IO Result

-- | vkGetPhysicalDeviceSurfaceCapabilitiesKHR - Query surface capabilities
--
-- = Parameters
--
-- -   @physicalDevice@ is the physical device that will be associated with
--     the swapchain to be created, as described for
--     'Vulkan.Extensions.VK_KHR_swapchain.createSwapchainKHR'.
--
-- -   @surface@ is the surface that will be associated with the swapchain.
--
-- -   @pSurfaceCapabilities@ is a pointer to a 'SurfaceCapabilitiesKHR'
--     structure in which the capabilities are returned.
--
-- == Valid Usage (Implicit)
--
-- -   @physicalDevice@ /must/ be a valid
--     'Vulkan.Core10.Handles.PhysicalDevice' handle
--
-- -   @surface@ /must/ be a valid 'Vulkan.Extensions.Handles.SurfaceKHR'
--     handle
--
-- -   @pSurfaceCapabilities@ /must/ be a valid pointer to a
--     'SurfaceCapabilitiesKHR' structure
--
-- -   Both of @physicalDevice@, and @surface@ /must/ have been created,
--     allocated, or retrieved from the same
--     'Vulkan.Core10.Handles.Instance'
--
-- == Return Codes
--
-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
--
--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
--
-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
--
--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
--
--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
--
--     -   'Vulkan.Core10.Enums.Result.ERROR_SURFACE_LOST_KHR'
--
-- = See Also
--
-- 'Vulkan.Core10.Handles.PhysicalDevice', 'SurfaceCapabilitiesKHR',
-- 'Vulkan.Extensions.Handles.SurfaceKHR'
getPhysicalDeviceSurfaceCapabilitiesKHR :: forall io . MonadIO io => PhysicalDevice -> SurfaceKHR -> io (SurfaceCapabilitiesKHR)
getPhysicalDeviceSurfaceCapabilitiesKHR :: PhysicalDevice -> SurfaceKHR -> io SurfaceCapabilitiesKHR
getPhysicalDeviceSurfaceCapabilitiesKHR physicalDevice :: PhysicalDevice
physicalDevice surface :: SurfaceKHR
surface = IO SurfaceCapabilitiesKHR -> io SurfaceCapabilitiesKHR
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO SurfaceCapabilitiesKHR -> io SurfaceCapabilitiesKHR)
-> (ContT SurfaceCapabilitiesKHR IO SurfaceCapabilitiesKHR
    -> IO SurfaceCapabilitiesKHR)
-> ContT SurfaceCapabilitiesKHR IO SurfaceCapabilitiesKHR
-> io SurfaceCapabilitiesKHR
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ContT SurfaceCapabilitiesKHR IO SurfaceCapabilitiesKHR
-> IO SurfaceCapabilitiesKHR
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT SurfaceCapabilitiesKHR IO SurfaceCapabilitiesKHR
 -> io SurfaceCapabilitiesKHR)
-> ContT SurfaceCapabilitiesKHR IO SurfaceCapabilitiesKHR
-> io SurfaceCapabilitiesKHR
forall a b. (a -> b) -> a -> b
$ do
  let vkGetPhysicalDeviceSurfaceCapabilitiesKHRPtr :: FunPtr
  (Ptr PhysicalDevice_T
   -> SurfaceKHR
   -> ("pSurfaceCapabilities" ::: Ptr SurfaceCapabilitiesKHR)
   -> IO Result)
vkGetPhysicalDeviceSurfaceCapabilitiesKHRPtr = InstanceCmds
-> FunPtr
     (Ptr PhysicalDevice_T
      -> SurfaceKHR
      -> ("pSurfaceCapabilities" ::: Ptr SurfaceCapabilitiesKHR)
      -> IO Result)
pVkGetPhysicalDeviceSurfaceCapabilitiesKHR (PhysicalDevice -> InstanceCmds
instanceCmds (PhysicalDevice
physicalDevice :: PhysicalDevice))
  IO () -> ContT SurfaceCapabilitiesKHR IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT SurfaceCapabilitiesKHR IO ())
-> IO () -> ContT SurfaceCapabilitiesKHR IO ()
forall a b. (a -> b) -> a -> b
$ Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (FunPtr
  (Ptr PhysicalDevice_T
   -> SurfaceKHR
   -> ("pSurfaceCapabilities" ::: Ptr SurfaceCapabilitiesKHR)
   -> IO Result)
vkGetPhysicalDeviceSurfaceCapabilitiesKHRPtr FunPtr
  (Ptr PhysicalDevice_T
   -> SurfaceKHR
   -> ("pSurfaceCapabilities" ::: Ptr SurfaceCapabilitiesKHR)
   -> IO Result)
-> FunPtr
     (Ptr PhysicalDevice_T
      -> SurfaceKHR
      -> ("pSurfaceCapabilities" ::: Ptr SurfaceCapabilitiesKHR)
      -> IO Result)
-> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr
  (Ptr PhysicalDevice_T
   -> SurfaceKHR
   -> ("pSurfaceCapabilities" ::: Ptr SurfaceCapabilitiesKHR)
   -> 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 "" "The function pointer for vkGetPhysicalDeviceSurfaceCapabilitiesKHR is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkGetPhysicalDeviceSurfaceCapabilitiesKHR' :: Ptr PhysicalDevice_T
-> SurfaceKHR
-> ("pSurfaceCapabilities" ::: Ptr SurfaceCapabilitiesKHR)
-> IO Result
vkGetPhysicalDeviceSurfaceCapabilitiesKHR' = FunPtr
  (Ptr PhysicalDevice_T
   -> SurfaceKHR
   -> ("pSurfaceCapabilities" ::: Ptr SurfaceCapabilitiesKHR)
   -> IO Result)
-> Ptr PhysicalDevice_T
-> SurfaceKHR
-> ("pSurfaceCapabilities" ::: Ptr SurfaceCapabilitiesKHR)
-> IO Result
mkVkGetPhysicalDeviceSurfaceCapabilitiesKHR FunPtr
  (Ptr PhysicalDevice_T
   -> SurfaceKHR
   -> ("pSurfaceCapabilities" ::: Ptr SurfaceCapabilitiesKHR)
   -> IO Result)
vkGetPhysicalDeviceSurfaceCapabilitiesKHRPtr
  "pSurfaceCapabilities" ::: Ptr SurfaceCapabilitiesKHR
pPSurfaceCapabilities <- ((("pSurfaceCapabilities" ::: Ptr SurfaceCapabilitiesKHR)
  -> IO SurfaceCapabilitiesKHR)
 -> IO SurfaceCapabilitiesKHR)
-> ContT
     SurfaceCapabilitiesKHR
     IO
     ("pSurfaceCapabilities" ::: Ptr SurfaceCapabilitiesKHR)
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (forall b.
ToCStruct SurfaceCapabilitiesKHR =>
(("pSurfaceCapabilities" ::: Ptr SurfaceCapabilitiesKHR) -> IO b)
-> IO b
forall a b. ToCStruct a => (Ptr a -> IO b) -> IO b
withZeroCStruct @SurfaceCapabilitiesKHR)
  Result
r <- IO Result -> ContT SurfaceCapabilitiesKHR IO Result
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO Result -> ContT SurfaceCapabilitiesKHR IO Result)
-> IO Result -> ContT SurfaceCapabilitiesKHR IO Result
forall a b. (a -> b) -> a -> b
$ Ptr PhysicalDevice_T
-> SurfaceKHR
-> ("pSurfaceCapabilities" ::: Ptr SurfaceCapabilitiesKHR)
-> IO Result
vkGetPhysicalDeviceSurfaceCapabilitiesKHR' (PhysicalDevice -> Ptr PhysicalDevice_T
physicalDeviceHandle (PhysicalDevice
physicalDevice)) (SurfaceKHR
surface) ("pSurfaceCapabilities" ::: Ptr SurfaceCapabilitiesKHR
pPSurfaceCapabilities)
  IO () -> ContT SurfaceCapabilitiesKHR IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT SurfaceCapabilitiesKHR IO ())
-> IO () -> ContT SurfaceCapabilitiesKHR 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))
  SurfaceCapabilitiesKHR
pSurfaceCapabilities <- IO SurfaceCapabilitiesKHR
-> ContT SurfaceCapabilitiesKHR IO SurfaceCapabilitiesKHR
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO SurfaceCapabilitiesKHR
 -> ContT SurfaceCapabilitiesKHR IO SurfaceCapabilitiesKHR)
-> IO SurfaceCapabilitiesKHR
-> ContT SurfaceCapabilitiesKHR IO SurfaceCapabilitiesKHR
forall a b. (a -> b) -> a -> b
$ ("pSurfaceCapabilities" ::: Ptr SurfaceCapabilitiesKHR)
-> IO SurfaceCapabilitiesKHR
forall a. FromCStruct a => Ptr a -> IO a
peekCStruct @SurfaceCapabilitiesKHR "pSurfaceCapabilities" ::: Ptr SurfaceCapabilitiesKHR
pPSurfaceCapabilities
  SurfaceCapabilitiesKHR
-> ContT SurfaceCapabilitiesKHR IO SurfaceCapabilitiesKHR
forall (f :: * -> *) a. Applicative f => a -> f a
pure (SurfaceCapabilitiesKHR
 -> ContT SurfaceCapabilitiesKHR IO SurfaceCapabilitiesKHR)
-> SurfaceCapabilitiesKHR
-> ContT SurfaceCapabilitiesKHR IO SurfaceCapabilitiesKHR
forall a b. (a -> b) -> a -> b
$ (SurfaceCapabilitiesKHR
pSurfaceCapabilities)


foreign import ccall
#if !defined(SAFE_FOREIGN_CALLS)
  unsafe
#endif
  "dynamic" mkVkGetPhysicalDeviceSurfaceFormatsKHR
  :: FunPtr (Ptr PhysicalDevice_T -> SurfaceKHR -> Ptr Word32 -> Ptr SurfaceFormatKHR -> IO Result) -> Ptr PhysicalDevice_T -> SurfaceKHR -> Ptr Word32 -> Ptr SurfaceFormatKHR -> IO Result

-- | vkGetPhysicalDeviceSurfaceFormatsKHR - Query color formats supported by
-- surface
--
-- = Parameters
--
-- -   @physicalDevice@ is the physical device that will be associated with
--     the swapchain to be created, as described for
--     'Vulkan.Extensions.VK_KHR_swapchain.createSwapchainKHR'.
--
-- -   @surface@ is the surface that will be associated with the swapchain.
--
-- -   @pSurfaceFormatCount@ is a pointer to an integer related to the
--     number of format pairs available or queried, as described below.
--
-- -   @pSurfaceFormats@ is either @NULL@ or a pointer to an array of
--     'SurfaceFormatKHR' structures.
--
-- = Description
--
-- If @pSurfaceFormats@ is @NULL@, then the number of format pairs
-- supported for the given @surface@ is returned in @pSurfaceFormatCount@.
-- Otherwise, @pSurfaceFormatCount@ /must/ point to a variable set by the
-- user to the number of elements in the @pSurfaceFormats@ array, and on
-- return the variable is overwritten with the number of structures
-- actually written to @pSurfaceFormats@. If the value of
-- @pSurfaceFormatCount@ is less than the number of format pairs supported,
-- at most @pSurfaceFormatCount@ structures will be written. If
-- @pSurfaceFormatCount@ is smaller than the number of format pairs
-- supported for the given @surface@,
-- 'Vulkan.Core10.Enums.Result.INCOMPLETE' will be returned instead of
-- 'Vulkan.Core10.Enums.Result.SUCCESS' to indicate that not all the
-- available values were returned.
--
-- The number of format pairs supported /must/ be greater than or equal to
-- 1. @pSurfaceFormats@ /must/ not contain an entry whose value for
-- @format@ is 'Vulkan.Core10.Enums.Format.FORMAT_UNDEFINED'.
--
-- If @pSurfaceFormats@ includes an entry whose value for @colorSpace@ is
-- 'COLOR_SPACE_SRGB_NONLINEAR_KHR' and whose value for @format@ is a UNORM
-- (or SRGB) format and the corresponding SRGB (or UNORM) format is a color
-- renderable format for
-- 'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_OPTIMAL', then
-- @pSurfaceFormats@ /must/ also contain an entry with the same value for
-- @colorSpace@ and @format@ equal to the corresponding SRGB (or UNORM)
-- format.
--
-- == Valid Usage
--
-- -   @surface@ /must/ be supported by @physicalDevice@, as reported by
--     'getPhysicalDeviceSurfaceSupportKHR' or an equivalent
--     platform-specific mechanism
--
-- == Valid Usage (Implicit)
--
-- -   @physicalDevice@ /must/ be a valid
--     'Vulkan.Core10.Handles.PhysicalDevice' handle
--
-- -   @surface@ /must/ be a valid 'Vulkan.Extensions.Handles.SurfaceKHR'
--     handle
--
-- -   @pSurfaceFormatCount@ /must/ be a valid pointer to a @uint32_t@
--     value
--
-- -   If the value referenced by @pSurfaceFormatCount@ is not @0@, and
--     @pSurfaceFormats@ is not @NULL@, @pSurfaceFormats@ /must/ be a valid
--     pointer to an array of @pSurfaceFormatCount@ 'SurfaceFormatKHR'
--     structures
--
-- -   Both of @physicalDevice@, and @surface@ /must/ have been created,
--     allocated, or retrieved from the same
--     'Vulkan.Core10.Handles.Instance'
--
-- == Return Codes
--
-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
--
--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
--
--     -   'Vulkan.Core10.Enums.Result.INCOMPLETE'
--
-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
--
--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
--
--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
--
--     -   'Vulkan.Core10.Enums.Result.ERROR_SURFACE_LOST_KHR'
--
-- = See Also
--
-- 'Vulkan.Core10.Handles.PhysicalDevice', 'SurfaceFormatKHR',
-- 'Vulkan.Extensions.Handles.SurfaceKHR'
getPhysicalDeviceSurfaceFormatsKHR :: forall io . MonadIO io => PhysicalDevice -> SurfaceKHR -> io (Result, ("surfaceFormats" ::: Vector SurfaceFormatKHR))
getPhysicalDeviceSurfaceFormatsKHR :: PhysicalDevice
-> SurfaceKHR
-> io (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR)
getPhysicalDeviceSurfaceFormatsKHR physicalDevice :: PhysicalDevice
physicalDevice surface :: SurfaceKHR
surface = IO (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR)
-> io (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR)
 -> io (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR))
-> (ContT
      (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR)
      IO
      (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR)
    -> IO (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR))
-> ContT
     (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR)
     IO
     (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR)
-> io (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ContT
  (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR)
  IO
  (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR)
-> IO (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR)
   IO
   (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR)
 -> io (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR))
-> ContT
     (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR)
     IO
     (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR)
-> io (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR)
forall a b. (a -> b) -> a -> b
$ do
  let vkGetPhysicalDeviceSurfaceFormatsKHRPtr :: FunPtr
  (Ptr PhysicalDevice_T
   -> SurfaceKHR
   -> ("pSurfaceFormatCount" ::: Ptr ("queueFamilyIndex" ::: Word32))
   -> ("pSurfaceFormats" ::: Ptr SurfaceFormatKHR)
   -> IO Result)
vkGetPhysicalDeviceSurfaceFormatsKHRPtr = InstanceCmds
-> FunPtr
     (Ptr PhysicalDevice_T
      -> SurfaceKHR
      -> ("pSurfaceFormatCount" ::: Ptr ("queueFamilyIndex" ::: Word32))
      -> ("pSurfaceFormats" ::: Ptr SurfaceFormatKHR)
      -> IO Result)
pVkGetPhysicalDeviceSurfaceFormatsKHR (PhysicalDevice -> InstanceCmds
instanceCmds (PhysicalDevice
physicalDevice :: PhysicalDevice))
  IO ()
-> ContT
     (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR) IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO ()
 -> ContT
      (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR) IO ())
-> IO ()
-> ContT
     (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR) IO ()
forall a b. (a -> b) -> a -> b
$ Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (FunPtr
  (Ptr PhysicalDevice_T
   -> SurfaceKHR
   -> ("pSurfaceFormatCount" ::: Ptr ("queueFamilyIndex" ::: Word32))
   -> ("pSurfaceFormats" ::: Ptr SurfaceFormatKHR)
   -> IO Result)
vkGetPhysicalDeviceSurfaceFormatsKHRPtr FunPtr
  (Ptr PhysicalDevice_T
   -> SurfaceKHR
   -> ("pSurfaceFormatCount" ::: Ptr ("queueFamilyIndex" ::: Word32))
   -> ("pSurfaceFormats" ::: Ptr SurfaceFormatKHR)
   -> IO Result)
-> FunPtr
     (Ptr PhysicalDevice_T
      -> SurfaceKHR
      -> ("pSurfaceFormatCount" ::: Ptr ("queueFamilyIndex" ::: Word32))
      -> ("pSurfaceFormats" ::: Ptr SurfaceFormatKHR)
      -> IO Result)
-> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr
  (Ptr PhysicalDevice_T
   -> SurfaceKHR
   -> ("pSurfaceFormatCount" ::: Ptr ("queueFamilyIndex" ::: Word32))
   -> ("pSurfaceFormats" ::: Ptr SurfaceFormatKHR)
   -> 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 "" "The function pointer for vkGetPhysicalDeviceSurfaceFormatsKHR is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkGetPhysicalDeviceSurfaceFormatsKHR' :: Ptr PhysicalDevice_T
-> SurfaceKHR
-> ("pSurfaceFormatCount" ::: Ptr ("queueFamilyIndex" ::: Word32))
-> ("pSurfaceFormats" ::: Ptr SurfaceFormatKHR)
-> IO Result
vkGetPhysicalDeviceSurfaceFormatsKHR' = FunPtr
  (Ptr PhysicalDevice_T
   -> SurfaceKHR
   -> ("pSurfaceFormatCount" ::: Ptr ("queueFamilyIndex" ::: Word32))
   -> ("pSurfaceFormats" ::: Ptr SurfaceFormatKHR)
   -> IO Result)
-> Ptr PhysicalDevice_T
-> SurfaceKHR
-> ("pSurfaceFormatCount" ::: Ptr ("queueFamilyIndex" ::: Word32))
-> ("pSurfaceFormats" ::: Ptr SurfaceFormatKHR)
-> IO Result
mkVkGetPhysicalDeviceSurfaceFormatsKHR FunPtr
  (Ptr PhysicalDevice_T
   -> SurfaceKHR
   -> ("pSurfaceFormatCount" ::: Ptr ("queueFamilyIndex" ::: Word32))
   -> ("pSurfaceFormats" ::: Ptr SurfaceFormatKHR)
   -> IO Result)
vkGetPhysicalDeviceSurfaceFormatsKHRPtr
  let physicalDevice' :: Ptr PhysicalDevice_T
physicalDevice' = PhysicalDevice -> Ptr PhysicalDevice_T
physicalDeviceHandle (PhysicalDevice
physicalDevice)
  "pSurfaceFormatCount" ::: Ptr ("queueFamilyIndex" ::: Word32)
pPSurfaceFormatCount <- ((("pSurfaceFormatCount" ::: Ptr ("queueFamilyIndex" ::: Word32))
  -> IO (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR))
 -> IO (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR))
-> ContT
     (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR)
     IO
     ("pSurfaceFormatCount" ::: Ptr ("queueFamilyIndex" ::: Word32))
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((("pSurfaceFormatCount" ::: Ptr ("queueFamilyIndex" ::: Word32))
   -> IO (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR))
  -> IO (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR))
 -> ContT
      (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR)
      IO
      ("pSurfaceFormatCount" ::: Ptr ("queueFamilyIndex" ::: Word32)))
-> ((("pSurfaceFormatCount"
      ::: Ptr ("queueFamilyIndex" ::: Word32))
     -> IO (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR))
    -> IO (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR))
-> ContT
     (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR)
     IO
     ("pSurfaceFormatCount" ::: Ptr ("queueFamilyIndex" ::: Word32))
forall a b. (a -> b) -> a -> b
$ IO ("pSurfaceFormatCount" ::: Ptr ("queueFamilyIndex" ::: Word32))
-> (("pSurfaceFormatCount" ::: Ptr ("queueFamilyIndex" ::: Word32))
    -> IO ())
-> (("pSurfaceFormatCount" ::: Ptr ("queueFamilyIndex" ::: Word32))
    -> IO (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR))
-> IO (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR)
forall a b c. IO a -> (a -> IO b) -> (a -> IO c) -> IO c
bracket (Int
-> IO
     ("pSurfaceFormatCount" ::: Ptr ("queueFamilyIndex" ::: Word32))
forall a. Int -> IO (Ptr a)
callocBytes @Word32 4) ("pSurfaceFormatCount" ::: Ptr ("queueFamilyIndex" ::: Word32))
-> IO ()
forall a. Ptr a -> IO ()
free
  Result
r <- IO Result
-> ContT
     (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR) IO Result
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO Result
 -> ContT
      (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR) IO Result)
-> IO Result
-> ContT
     (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR) IO Result
forall a b. (a -> b) -> a -> b
$ Ptr PhysicalDevice_T
-> SurfaceKHR
-> ("pSurfaceFormatCount" ::: Ptr ("queueFamilyIndex" ::: Word32))
-> ("pSurfaceFormats" ::: Ptr SurfaceFormatKHR)
-> IO Result
vkGetPhysicalDeviceSurfaceFormatsKHR' Ptr PhysicalDevice_T
physicalDevice' (SurfaceKHR
surface) ("pSurfaceFormatCount" ::: Ptr ("queueFamilyIndex" ::: Word32)
pPSurfaceFormatCount) ("pSurfaceFormats" ::: Ptr SurfaceFormatKHR
forall a. Ptr a
nullPtr)
  IO ()
-> ContT
     (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR) IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO ()
 -> ContT
      (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR) IO ())
-> IO ()
-> ContT
     (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR) 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))
  "queueFamilyIndex" ::: Word32
pSurfaceFormatCount <- IO ("queueFamilyIndex" ::: Word32)
-> ContT
     (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR)
     IO
     ("queueFamilyIndex" ::: Word32)
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO ("queueFamilyIndex" ::: Word32)
 -> ContT
      (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR)
      IO
      ("queueFamilyIndex" ::: Word32))
-> IO ("queueFamilyIndex" ::: Word32)
-> ContT
     (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR)
     IO
     ("queueFamilyIndex" ::: Word32)
forall a b. (a -> b) -> a -> b
$ ("pSurfaceFormatCount" ::: Ptr ("queueFamilyIndex" ::: Word32))
-> IO ("queueFamilyIndex" ::: Word32)
forall a. Storable a => Ptr a -> IO a
peek @Word32 "pSurfaceFormatCount" ::: Ptr ("queueFamilyIndex" ::: Word32)
pPSurfaceFormatCount
  "pSurfaceFormats" ::: Ptr SurfaceFormatKHR
pPSurfaceFormats <- ((("pSurfaceFormats" ::: Ptr SurfaceFormatKHR)
  -> IO (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR))
 -> IO (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR))
-> ContT
     (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR)
     IO
     ("pSurfaceFormats" ::: Ptr SurfaceFormatKHR)
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((("pSurfaceFormats" ::: Ptr SurfaceFormatKHR)
   -> IO (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR))
  -> IO (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR))
 -> ContT
      (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR)
      IO
      ("pSurfaceFormats" ::: Ptr SurfaceFormatKHR))
-> ((("pSurfaceFormats" ::: Ptr SurfaceFormatKHR)
     -> IO (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR))
    -> IO (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR))
-> ContT
     (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR)
     IO
     ("pSurfaceFormats" ::: Ptr SurfaceFormatKHR)
forall a b. (a -> b) -> a -> b
$ IO ("pSurfaceFormats" ::: Ptr SurfaceFormatKHR)
-> (("pSurfaceFormats" ::: Ptr SurfaceFormatKHR) -> IO ())
-> (("pSurfaceFormats" ::: Ptr SurfaceFormatKHR)
    -> IO (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR))
-> IO (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR)
forall a b c. IO a -> (a -> IO b) -> (a -> IO c) -> IO c
bracket (Int -> IO ("pSurfaceFormats" ::: Ptr SurfaceFormatKHR)
forall a. Int -> IO (Ptr a)
callocBytes @SurfaceFormatKHR ((("queueFamilyIndex" ::: Word32) -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral ("queueFamilyIndex" ::: Word32
pSurfaceFormatCount)) Int -> Int -> Int
forall a. Num a => a -> a -> a
* 8)) ("pSurfaceFormats" ::: Ptr SurfaceFormatKHR) -> IO ()
forall a. Ptr a -> IO ()
free
  [()]
_ <- (Int
 -> ContT
      (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR) IO ())
-> [Int]
-> ContT
     (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR) IO [()]
forall (t :: * -> *) (f :: * -> *) a b.
(Traversable t, Applicative f) =>
(a -> f b) -> t a -> f (t b)
traverse (\i :: Int
i -> ((() -> IO (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR))
 -> IO (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR))
-> ContT
     (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR) IO ()
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((() -> IO (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR))
  -> IO (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR))
 -> ContT
      (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR) IO ())
-> ((()
     -> IO (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR))
    -> IO (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR))
-> ContT
     (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR) IO ()
forall a b. (a -> b) -> a -> b
$ ("pSurfaceFormats" ::: Ptr SurfaceFormatKHR)
-> IO (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR)
-> IO (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR)
forall a b. ToCStruct a => Ptr a -> IO b -> IO b
pokeZeroCStruct ("pSurfaceFormats" ::: Ptr SurfaceFormatKHR
pPSurfaceFormats ("pSurfaceFormats" ::: Ptr SurfaceFormatKHR)
-> Int -> "pSurfaceFormats" ::: Ptr SurfaceFormatKHR
forall a. Ptr a -> Int -> Ptr a
`advancePtrBytes` (Int
i Int -> Int -> Int
forall a. Num a => a -> a -> a
* 8) :: Ptr SurfaceFormatKHR) (IO (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR)
 -> IO (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR))
-> ((()
     -> IO (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR))
    -> IO (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR))
-> (()
    -> IO (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR))
-> IO (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((() -> IO (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR))
-> () -> IO (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR)
forall a b. (a -> b) -> a -> b
$ ())) [0..(("queueFamilyIndex" ::: Word32) -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral ("queueFamilyIndex" ::: Word32
pSurfaceFormatCount)) Int -> Int -> Int
forall a. Num a => a -> a -> a
- 1]
  Result
r' <- IO Result
-> ContT
     (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR) IO Result
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO Result
 -> ContT
      (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR) IO Result)
-> IO Result
-> ContT
     (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR) IO Result
forall a b. (a -> b) -> a -> b
$ Ptr PhysicalDevice_T
-> SurfaceKHR
-> ("pSurfaceFormatCount" ::: Ptr ("queueFamilyIndex" ::: Word32))
-> ("pSurfaceFormats" ::: Ptr SurfaceFormatKHR)
-> IO Result
vkGetPhysicalDeviceSurfaceFormatsKHR' Ptr PhysicalDevice_T
physicalDevice' (SurfaceKHR
surface) ("pSurfaceFormatCount" ::: Ptr ("queueFamilyIndex" ::: Word32)
pPSurfaceFormatCount) (("pSurfaceFormats" ::: Ptr SurfaceFormatKHR
pPSurfaceFormats))
  IO ()
-> ContT
     (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR) IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO ()
 -> ContT
      (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR) IO ())
-> IO ()
-> ContT
     (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR) 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'))
  "queueFamilyIndex" ::: Word32
pSurfaceFormatCount' <- IO ("queueFamilyIndex" ::: Word32)
-> ContT
     (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR)
     IO
     ("queueFamilyIndex" ::: Word32)
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO ("queueFamilyIndex" ::: Word32)
 -> ContT
      (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR)
      IO
      ("queueFamilyIndex" ::: Word32))
-> IO ("queueFamilyIndex" ::: Word32)
-> ContT
     (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR)
     IO
     ("queueFamilyIndex" ::: Word32)
forall a b. (a -> b) -> a -> b
$ ("pSurfaceFormatCount" ::: Ptr ("queueFamilyIndex" ::: Word32))
-> IO ("queueFamilyIndex" ::: Word32)
forall a. Storable a => Ptr a -> IO a
peek @Word32 "pSurfaceFormatCount" ::: Ptr ("queueFamilyIndex" ::: Word32)
pPSurfaceFormatCount
  "surfaceFormats" ::: Vector SurfaceFormatKHR
pSurfaceFormats' <- IO ("surfaceFormats" ::: Vector SurfaceFormatKHR)
-> ContT
     (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR)
     IO
     ("surfaceFormats" ::: Vector SurfaceFormatKHR)
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO ("surfaceFormats" ::: Vector SurfaceFormatKHR)
 -> ContT
      (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR)
      IO
      ("surfaceFormats" ::: Vector SurfaceFormatKHR))
-> IO ("surfaceFormats" ::: Vector SurfaceFormatKHR)
-> ContT
     (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR)
     IO
     ("surfaceFormats" ::: Vector SurfaceFormatKHR)
forall a b. (a -> b) -> a -> b
$ Int
-> (Int -> IO SurfaceFormatKHR)
-> IO ("surfaceFormats" ::: Vector SurfaceFormatKHR)
forall (m :: * -> *) a.
Monad m =>
Int -> (Int -> m a) -> m (Vector a)
generateM (("queueFamilyIndex" ::: Word32) -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral ("queueFamilyIndex" ::: Word32
pSurfaceFormatCount')) (\i :: Int
i -> ("pSurfaceFormats" ::: Ptr SurfaceFormatKHR) -> IO SurfaceFormatKHR
forall a. FromCStruct a => Ptr a -> IO a
peekCStruct @SurfaceFormatKHR ((("pSurfaceFormats" ::: Ptr SurfaceFormatKHR
pPSurfaceFormats) ("pSurfaceFormats" ::: Ptr SurfaceFormatKHR)
-> Int -> "pSurfaceFormats" ::: Ptr SurfaceFormatKHR
forall a. Ptr a -> Int -> Ptr a
`advancePtrBytes` (8 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr SurfaceFormatKHR)))
  (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR)
-> ContT
     (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR)
     IO
     (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR)
forall (f :: * -> *) a. Applicative f => a -> f a
pure ((Result, "surfaceFormats" ::: Vector SurfaceFormatKHR)
 -> ContT
      (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR)
      IO
      (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR))
-> (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR)
-> ContT
     (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR)
     IO
     (Result, "surfaceFormats" ::: Vector SurfaceFormatKHR)
forall a b. (a -> b) -> a -> b
$ ((Result
r'), "surfaceFormats" ::: Vector SurfaceFormatKHR
pSurfaceFormats')


foreign import ccall
#if !defined(SAFE_FOREIGN_CALLS)
  unsafe
#endif
  "dynamic" mkVkGetPhysicalDeviceSurfacePresentModesKHR
  :: FunPtr (Ptr PhysicalDevice_T -> SurfaceKHR -> Ptr Word32 -> Ptr PresentModeKHR -> IO Result) -> Ptr PhysicalDevice_T -> SurfaceKHR -> Ptr Word32 -> Ptr PresentModeKHR -> IO Result

-- | vkGetPhysicalDeviceSurfacePresentModesKHR - Query supported presentation
-- modes
--
-- = Parameters
--
-- -   @physicalDevice@ is the physical device that will be associated with
--     the swapchain to be created, as described for
--     'Vulkan.Extensions.VK_KHR_swapchain.createSwapchainKHR'.
--
-- -   @surface@ is the surface that will be associated with the swapchain.
--
-- -   @pPresentModeCount@ is a pointer to an integer related to the number
--     of presentation modes available or queried, as described below.
--
-- -   @pPresentModes@ is either @NULL@ or a pointer to an array of
--     'PresentModeKHR' values, indicating the supported presentation
--     modes.
--
-- = Description
--
-- If @pPresentModes@ is @NULL@, then the number of presentation modes
-- supported for the given @surface@ is returned in @pPresentModeCount@.
-- Otherwise, @pPresentModeCount@ /must/ point to a variable set by the
-- user to the number of elements in the @pPresentModes@ array, and on
-- return the variable is overwritten with the number of values actually
-- written to @pPresentModes@. If the value of @pPresentModeCount@ is less
-- than the number of presentation modes supported, at most
-- @pPresentModeCount@ values will be written. If @pPresentModeCount@ is
-- smaller than the number of presentation modes supported for the given
-- @surface@, 'Vulkan.Core10.Enums.Result.INCOMPLETE' will be returned
-- instead of 'Vulkan.Core10.Enums.Result.SUCCESS' to indicate that not all
-- the available values were returned.
--
-- == Valid Usage (Implicit)
--
-- -   @physicalDevice@ /must/ be a valid
--     'Vulkan.Core10.Handles.PhysicalDevice' handle
--
-- -   @surface@ /must/ be a valid 'Vulkan.Extensions.Handles.SurfaceKHR'
--     handle
--
-- -   @pPresentModeCount@ /must/ be a valid pointer to a @uint32_t@ value
--
-- -   If the value referenced by @pPresentModeCount@ is not @0@, and
--     @pPresentModes@ is not @NULL@, @pPresentModes@ /must/ be a valid
--     pointer to an array of @pPresentModeCount@ 'PresentModeKHR' values
--
-- -   Both of @physicalDevice@, and @surface@ /must/ have been created,
--     allocated, or retrieved from the same
--     'Vulkan.Core10.Handles.Instance'
--
-- == Return Codes
--
-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
--
--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
--
--     -   'Vulkan.Core10.Enums.Result.INCOMPLETE'
--
-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
--
--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
--
--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
--
--     -   'Vulkan.Core10.Enums.Result.ERROR_SURFACE_LOST_KHR'
--
-- = See Also
--
-- 'Vulkan.Core10.Handles.PhysicalDevice', 'PresentModeKHR',
-- 'Vulkan.Extensions.Handles.SurfaceKHR'
getPhysicalDeviceSurfacePresentModesKHR :: forall io . MonadIO io => PhysicalDevice -> SurfaceKHR -> io (Result, ("presentModes" ::: Vector PresentModeKHR))
getPhysicalDeviceSurfacePresentModesKHR :: PhysicalDevice
-> SurfaceKHR
-> io (Result, "presentModes" ::: Vector PresentModeKHR)
getPhysicalDeviceSurfacePresentModesKHR physicalDevice :: PhysicalDevice
physicalDevice surface :: SurfaceKHR
surface = IO (Result, "presentModes" ::: Vector PresentModeKHR)
-> io (Result, "presentModes" ::: Vector PresentModeKHR)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Result, "presentModes" ::: Vector PresentModeKHR)
 -> io (Result, "presentModes" ::: Vector PresentModeKHR))
-> (ContT
      (Result, "presentModes" ::: Vector PresentModeKHR)
      IO
      (Result, "presentModes" ::: Vector PresentModeKHR)
    -> IO (Result, "presentModes" ::: Vector PresentModeKHR))
-> ContT
     (Result, "presentModes" ::: Vector PresentModeKHR)
     IO
     (Result, "presentModes" ::: Vector PresentModeKHR)
-> io (Result, "presentModes" ::: Vector PresentModeKHR)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ContT
  (Result, "presentModes" ::: Vector PresentModeKHR)
  IO
  (Result, "presentModes" ::: Vector PresentModeKHR)
-> IO (Result, "presentModes" ::: Vector PresentModeKHR)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Result, "presentModes" ::: Vector PresentModeKHR)
   IO
   (Result, "presentModes" ::: Vector PresentModeKHR)
 -> io (Result, "presentModes" ::: Vector PresentModeKHR))
-> ContT
     (Result, "presentModes" ::: Vector PresentModeKHR)
     IO
     (Result, "presentModes" ::: Vector PresentModeKHR)
-> io (Result, "presentModes" ::: Vector PresentModeKHR)
forall a b. (a -> b) -> a -> b
$ do
  let vkGetPhysicalDeviceSurfacePresentModesKHRPtr :: FunPtr
  (Ptr PhysicalDevice_T
   -> SurfaceKHR
   -> ("pSurfaceFormatCount" ::: Ptr ("queueFamilyIndex" ::: Word32))
   -> ("pPresentModes" ::: Ptr PresentModeKHR)
   -> IO Result)
vkGetPhysicalDeviceSurfacePresentModesKHRPtr = InstanceCmds
-> FunPtr
     (Ptr PhysicalDevice_T
      -> SurfaceKHR
      -> ("pSurfaceFormatCount" ::: Ptr ("queueFamilyIndex" ::: Word32))
      -> ("pPresentModes" ::: Ptr PresentModeKHR)
      -> IO Result)
pVkGetPhysicalDeviceSurfacePresentModesKHR (PhysicalDevice -> InstanceCmds
instanceCmds (PhysicalDevice
physicalDevice :: PhysicalDevice))
  IO ()
-> ContT (Result, "presentModes" ::: Vector PresentModeKHR) IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO ()
 -> ContT (Result, "presentModes" ::: Vector PresentModeKHR) IO ())
-> IO ()
-> ContT (Result, "presentModes" ::: Vector PresentModeKHR) IO ()
forall a b. (a -> b) -> a -> b
$ Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (FunPtr
  (Ptr PhysicalDevice_T
   -> SurfaceKHR
   -> ("pSurfaceFormatCount" ::: Ptr ("queueFamilyIndex" ::: Word32))
   -> ("pPresentModes" ::: Ptr PresentModeKHR)
   -> IO Result)
vkGetPhysicalDeviceSurfacePresentModesKHRPtr FunPtr
  (Ptr PhysicalDevice_T
   -> SurfaceKHR
   -> ("pSurfaceFormatCount" ::: Ptr ("queueFamilyIndex" ::: Word32))
   -> ("pPresentModes" ::: Ptr PresentModeKHR)
   -> IO Result)
-> FunPtr
     (Ptr PhysicalDevice_T
      -> SurfaceKHR
      -> ("pSurfaceFormatCount" ::: Ptr ("queueFamilyIndex" ::: Word32))
      -> ("pPresentModes" ::: Ptr PresentModeKHR)
      -> IO Result)
-> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr
  (Ptr PhysicalDevice_T
   -> SurfaceKHR
   -> ("pSurfaceFormatCount" ::: Ptr ("queueFamilyIndex" ::: Word32))
   -> ("pPresentModes" ::: Ptr PresentModeKHR)
   -> 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 "" "The function pointer for vkGetPhysicalDeviceSurfacePresentModesKHR is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkGetPhysicalDeviceSurfacePresentModesKHR' :: Ptr PhysicalDevice_T
-> SurfaceKHR
-> ("pSurfaceFormatCount" ::: Ptr ("queueFamilyIndex" ::: Word32))
-> ("pPresentModes" ::: Ptr PresentModeKHR)
-> IO Result
vkGetPhysicalDeviceSurfacePresentModesKHR' = FunPtr
  (Ptr PhysicalDevice_T
   -> SurfaceKHR
   -> ("pSurfaceFormatCount" ::: Ptr ("queueFamilyIndex" ::: Word32))
   -> ("pPresentModes" ::: Ptr PresentModeKHR)
   -> IO Result)
-> Ptr PhysicalDevice_T
-> SurfaceKHR
-> ("pSurfaceFormatCount" ::: Ptr ("queueFamilyIndex" ::: Word32))
-> ("pPresentModes" ::: Ptr PresentModeKHR)
-> IO Result
mkVkGetPhysicalDeviceSurfacePresentModesKHR FunPtr
  (Ptr PhysicalDevice_T
   -> SurfaceKHR
   -> ("pSurfaceFormatCount" ::: Ptr ("queueFamilyIndex" ::: Word32))
   -> ("pPresentModes" ::: Ptr PresentModeKHR)
   -> IO Result)
vkGetPhysicalDeviceSurfacePresentModesKHRPtr
  let physicalDevice' :: Ptr PhysicalDevice_T
physicalDevice' = PhysicalDevice -> Ptr PhysicalDevice_T
physicalDeviceHandle (PhysicalDevice
physicalDevice)
  "pSurfaceFormatCount" ::: Ptr ("queueFamilyIndex" ::: Word32)
pPPresentModeCount <- ((("pSurfaceFormatCount" ::: Ptr ("queueFamilyIndex" ::: Word32))
  -> IO (Result, "presentModes" ::: Vector PresentModeKHR))
 -> IO (Result, "presentModes" ::: Vector PresentModeKHR))
-> ContT
     (Result, "presentModes" ::: Vector PresentModeKHR)
     IO
     ("pSurfaceFormatCount" ::: Ptr ("queueFamilyIndex" ::: Word32))
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((("pSurfaceFormatCount" ::: Ptr ("queueFamilyIndex" ::: Word32))
   -> IO (Result, "presentModes" ::: Vector PresentModeKHR))
  -> IO (Result, "presentModes" ::: Vector PresentModeKHR))
 -> ContT
      (Result, "presentModes" ::: Vector PresentModeKHR)
      IO
      ("pSurfaceFormatCount" ::: Ptr ("queueFamilyIndex" ::: Word32)))
-> ((("pSurfaceFormatCount"
      ::: Ptr ("queueFamilyIndex" ::: Word32))
     -> IO (Result, "presentModes" ::: Vector PresentModeKHR))
    -> IO (Result, "presentModes" ::: Vector PresentModeKHR))
-> ContT
     (Result, "presentModes" ::: Vector PresentModeKHR)
     IO
     ("pSurfaceFormatCount" ::: Ptr ("queueFamilyIndex" ::: Word32))
forall a b. (a -> b) -> a -> b
$ IO ("pSurfaceFormatCount" ::: Ptr ("queueFamilyIndex" ::: Word32))
-> (("pSurfaceFormatCount" ::: Ptr ("queueFamilyIndex" ::: Word32))
    -> IO ())
-> (("pSurfaceFormatCount" ::: Ptr ("queueFamilyIndex" ::: Word32))
    -> IO (Result, "presentModes" ::: Vector PresentModeKHR))
-> IO (Result, "presentModes" ::: Vector PresentModeKHR)
forall a b c. IO a -> (a -> IO b) -> (a -> IO c) -> IO c
bracket (Int
-> IO
     ("pSurfaceFormatCount" ::: Ptr ("queueFamilyIndex" ::: Word32))
forall a. Int -> IO (Ptr a)
callocBytes @Word32 4) ("pSurfaceFormatCount" ::: Ptr ("queueFamilyIndex" ::: Word32))
-> IO ()
forall a. Ptr a -> IO ()
free
  Result
r <- IO Result
-> ContT
     (Result, "presentModes" ::: Vector PresentModeKHR) IO Result
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO Result
 -> ContT
      (Result, "presentModes" ::: Vector PresentModeKHR) IO Result)
-> IO Result
-> ContT
     (Result, "presentModes" ::: Vector PresentModeKHR) IO Result
forall a b. (a -> b) -> a -> b
$ Ptr PhysicalDevice_T
-> SurfaceKHR
-> ("pSurfaceFormatCount" ::: Ptr ("queueFamilyIndex" ::: Word32))
-> ("pPresentModes" ::: Ptr PresentModeKHR)
-> IO Result
vkGetPhysicalDeviceSurfacePresentModesKHR' Ptr PhysicalDevice_T
physicalDevice' (SurfaceKHR
surface) ("pSurfaceFormatCount" ::: Ptr ("queueFamilyIndex" ::: Word32)
pPPresentModeCount) ("pPresentModes" ::: Ptr PresentModeKHR
forall a. Ptr a
nullPtr)
  IO ()
-> ContT (Result, "presentModes" ::: Vector PresentModeKHR) IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO ()
 -> ContT (Result, "presentModes" ::: Vector PresentModeKHR) IO ())
-> IO ()
-> ContT (Result, "presentModes" ::: Vector PresentModeKHR) 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))
  "queueFamilyIndex" ::: Word32
pPresentModeCount <- IO ("queueFamilyIndex" ::: Word32)
-> ContT
     (Result, "presentModes" ::: Vector PresentModeKHR)
     IO
     ("queueFamilyIndex" ::: Word32)
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO ("queueFamilyIndex" ::: Word32)
 -> ContT
      (Result, "presentModes" ::: Vector PresentModeKHR)
      IO
      ("queueFamilyIndex" ::: Word32))
-> IO ("queueFamilyIndex" ::: Word32)
-> ContT
     (Result, "presentModes" ::: Vector PresentModeKHR)
     IO
     ("queueFamilyIndex" ::: Word32)
forall a b. (a -> b) -> a -> b
$ ("pSurfaceFormatCount" ::: Ptr ("queueFamilyIndex" ::: Word32))
-> IO ("queueFamilyIndex" ::: Word32)
forall a. Storable a => Ptr a -> IO a
peek @Word32 "pSurfaceFormatCount" ::: Ptr ("queueFamilyIndex" ::: Word32)
pPPresentModeCount
  "pPresentModes" ::: Ptr PresentModeKHR
pPPresentModes <- ((("pPresentModes" ::: Ptr PresentModeKHR)
  -> IO (Result, "presentModes" ::: Vector PresentModeKHR))
 -> IO (Result, "presentModes" ::: Vector PresentModeKHR))
-> ContT
     (Result, "presentModes" ::: Vector PresentModeKHR)
     IO
     ("pPresentModes" ::: Ptr PresentModeKHR)
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((("pPresentModes" ::: Ptr PresentModeKHR)
   -> IO (Result, "presentModes" ::: Vector PresentModeKHR))
  -> IO (Result, "presentModes" ::: Vector PresentModeKHR))
 -> ContT
      (Result, "presentModes" ::: Vector PresentModeKHR)
      IO
      ("pPresentModes" ::: Ptr PresentModeKHR))
-> ((("pPresentModes" ::: Ptr PresentModeKHR)
     -> IO (Result, "presentModes" ::: Vector PresentModeKHR))
    -> IO (Result, "presentModes" ::: Vector PresentModeKHR))
-> ContT
     (Result, "presentModes" ::: Vector PresentModeKHR)
     IO
     ("pPresentModes" ::: Ptr PresentModeKHR)
forall a b. (a -> b) -> a -> b
$ IO ("pPresentModes" ::: Ptr PresentModeKHR)
-> (("pPresentModes" ::: Ptr PresentModeKHR) -> IO ())
-> (("pPresentModes" ::: Ptr PresentModeKHR)
    -> IO (Result, "presentModes" ::: Vector PresentModeKHR))
-> IO (Result, "presentModes" ::: Vector PresentModeKHR)
forall a b c. IO a -> (a -> IO b) -> (a -> IO c) -> IO c
bracket (Int -> IO ("pPresentModes" ::: Ptr PresentModeKHR)
forall a. Int -> IO (Ptr a)
callocBytes @PresentModeKHR ((("queueFamilyIndex" ::: Word32) -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral ("queueFamilyIndex" ::: Word32
pPresentModeCount)) Int -> Int -> Int
forall a. Num a => a -> a -> a
* 4)) ("pPresentModes" ::: Ptr PresentModeKHR) -> IO ()
forall a. Ptr a -> IO ()
free
  Result
r' <- IO Result
-> ContT
     (Result, "presentModes" ::: Vector PresentModeKHR) IO Result
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO Result
 -> ContT
      (Result, "presentModes" ::: Vector PresentModeKHR) IO Result)
-> IO Result
-> ContT
     (Result, "presentModes" ::: Vector PresentModeKHR) IO Result
forall a b. (a -> b) -> a -> b
$ Ptr PhysicalDevice_T
-> SurfaceKHR
-> ("pSurfaceFormatCount" ::: Ptr ("queueFamilyIndex" ::: Word32))
-> ("pPresentModes" ::: Ptr PresentModeKHR)
-> IO Result
vkGetPhysicalDeviceSurfacePresentModesKHR' Ptr PhysicalDevice_T
physicalDevice' (SurfaceKHR
surface) ("pSurfaceFormatCount" ::: Ptr ("queueFamilyIndex" ::: Word32)
pPPresentModeCount) ("pPresentModes" ::: Ptr PresentModeKHR
pPPresentModes)
  IO ()
-> ContT (Result, "presentModes" ::: Vector PresentModeKHR) IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO ()
 -> ContT (Result, "presentModes" ::: Vector PresentModeKHR) IO ())
-> IO ()
-> ContT (Result, "presentModes" ::: Vector PresentModeKHR) 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'))
  "queueFamilyIndex" ::: Word32
pPresentModeCount' <- IO ("queueFamilyIndex" ::: Word32)
-> ContT
     (Result, "presentModes" ::: Vector PresentModeKHR)
     IO
     ("queueFamilyIndex" ::: Word32)
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO ("queueFamilyIndex" ::: Word32)
 -> ContT
      (Result, "presentModes" ::: Vector PresentModeKHR)
      IO
      ("queueFamilyIndex" ::: Word32))
-> IO ("queueFamilyIndex" ::: Word32)
-> ContT
     (Result, "presentModes" ::: Vector PresentModeKHR)
     IO
     ("queueFamilyIndex" ::: Word32)
forall a b. (a -> b) -> a -> b
$ ("pSurfaceFormatCount" ::: Ptr ("queueFamilyIndex" ::: Word32))
-> IO ("queueFamilyIndex" ::: Word32)
forall a. Storable a => Ptr a -> IO a
peek @Word32 "pSurfaceFormatCount" ::: Ptr ("queueFamilyIndex" ::: Word32)
pPPresentModeCount
  "presentModes" ::: Vector PresentModeKHR
pPresentModes' <- IO ("presentModes" ::: Vector PresentModeKHR)
-> ContT
     (Result, "presentModes" ::: Vector PresentModeKHR)
     IO
     ("presentModes" ::: Vector PresentModeKHR)
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO ("presentModes" ::: Vector PresentModeKHR)
 -> ContT
      (Result, "presentModes" ::: Vector PresentModeKHR)
      IO
      ("presentModes" ::: Vector PresentModeKHR))
-> IO ("presentModes" ::: Vector PresentModeKHR)
-> ContT
     (Result, "presentModes" ::: Vector PresentModeKHR)
     IO
     ("presentModes" ::: Vector PresentModeKHR)
forall a b. (a -> b) -> a -> b
$ Int
-> (Int -> IO PresentModeKHR)
-> IO ("presentModes" ::: Vector PresentModeKHR)
forall (m :: * -> *) a.
Monad m =>
Int -> (Int -> m a) -> m (Vector a)
generateM (("queueFamilyIndex" ::: Word32) -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral ("queueFamilyIndex" ::: Word32
pPresentModeCount')) (\i :: Int
i -> ("pPresentModes" ::: Ptr PresentModeKHR) -> IO PresentModeKHR
forall a. Storable a => Ptr a -> IO a
peek @PresentModeKHR (("pPresentModes" ::: Ptr PresentModeKHR
pPPresentModes ("pPresentModes" ::: Ptr PresentModeKHR)
-> Int -> "pPresentModes" ::: Ptr PresentModeKHR
forall a. Ptr a -> Int -> Ptr a
`advancePtrBytes` (4 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr PresentModeKHR)))
  (Result, "presentModes" ::: Vector PresentModeKHR)
-> ContT
     (Result, "presentModes" ::: Vector PresentModeKHR)
     IO
     (Result, "presentModes" ::: Vector PresentModeKHR)
forall (f :: * -> *) a. Applicative f => a -> f a
pure ((Result, "presentModes" ::: Vector PresentModeKHR)
 -> ContT
      (Result, "presentModes" ::: Vector PresentModeKHR)
      IO
      (Result, "presentModes" ::: Vector PresentModeKHR))
-> (Result, "presentModes" ::: Vector PresentModeKHR)
-> ContT
     (Result, "presentModes" ::: Vector PresentModeKHR)
     IO
     (Result, "presentModes" ::: Vector PresentModeKHR)
forall a b. (a -> b) -> a -> b
$ ((Result
r'), "presentModes" ::: Vector PresentModeKHR
pPresentModes')


-- | VkSurfaceCapabilitiesKHR - Structure describing capabilities of a
-- surface
--
-- = Description
--
-- Note
--
-- Supported usage flags of a presentable image when using
-- 'PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR' or
-- 'PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR' presentation mode are
-- provided by
-- 'Vulkan.Extensions.VK_KHR_shared_presentable_image.SharedPresentSurfaceCapabilitiesKHR'::@sharedPresentSupportedUsageFlags@.
--
-- Note
--
-- Formulas such as min(N, @maxImageCount@) are not correct, since
-- @maxImageCount@ /may/ be zero.
--
-- = See Also
--
-- 'CompositeAlphaFlagsKHR', 'Vulkan.Core10.SharedTypes.Extent2D',
-- 'Vulkan.Core10.Enums.ImageUsageFlagBits.ImageUsageFlags',
-- 'Vulkan.Extensions.VK_KHR_get_surface_capabilities2.SurfaceCapabilities2KHR',
-- 'SurfaceTransformFlagBitsKHR', 'SurfaceTransformFlagsKHR',
-- 'getPhysicalDeviceSurfaceCapabilitiesKHR'
data SurfaceCapabilitiesKHR = SurfaceCapabilitiesKHR
  { -- | @minImageCount@ is the minimum number of images the specified device
    -- supports for a swapchain created for the surface, and will be at least
    -- one.
    SurfaceCapabilitiesKHR -> "queueFamilyIndex" ::: Word32
minImageCount :: Word32
  , -- | @maxImageCount@ is the maximum number of images the specified device
    -- supports for a swapchain created for the surface, and will be either 0,
    -- or greater than or equal to @minImageCount@. A value of 0 means that
    -- there is no limit on the number of images, though there /may/ be limits
    -- related to the total amount of memory used by presentable images.
    SurfaceCapabilitiesKHR -> "queueFamilyIndex" ::: Word32
maxImageCount :: Word32
  , -- | @currentExtent@ is the current width and height of the surface, or the
    -- special value (0xFFFFFFFF, 0xFFFFFFFF) indicating that the surface size
    -- will be determined by the extent of a swapchain targeting the surface.
    SurfaceCapabilitiesKHR -> Extent2D
currentExtent :: Extent2D
  , -- | @minImageExtent@ contains the smallest valid swapchain extent for the
    -- surface on the specified device. The @width@ and @height@ of the extent
    -- will each be less than or equal to the corresponding @width@ and
    -- @height@ of @currentExtent@, unless @currentExtent@ has the special
    -- value described above.
    SurfaceCapabilitiesKHR -> Extent2D
minImageExtent :: Extent2D
  , -- | @maxImageExtent@ contains the largest valid swapchain extent for the
    -- surface on the specified device. The @width@ and @height@ of the extent
    -- will each be greater than or equal to the corresponding @width@ and
    -- @height@ of @minImageExtent@. The @width@ and @height@ of the extent
    -- will each be greater than or equal to the corresponding @width@ and
    -- @height@ of @currentExtent@, unless @currentExtent@ has the special
    -- value described above.
    SurfaceCapabilitiesKHR -> Extent2D
maxImageExtent :: Extent2D
  , -- | @maxImageArrayLayers@ is the maximum number of layers presentable images
    -- /can/ have for a swapchain created for this device and surface, and will
    -- be at least one.
    SurfaceCapabilitiesKHR -> "queueFamilyIndex" ::: Word32
maxImageArrayLayers :: Word32
  , -- | @supportedTransforms@ is a bitmask of 'SurfaceTransformFlagBitsKHR'
    -- indicating the presentation transforms supported for the surface on the
    -- specified device. At least one bit will be set.
    SurfaceCapabilitiesKHR -> SurfaceTransformFlagsKHR
supportedTransforms :: SurfaceTransformFlagsKHR
  , -- | @currentTransform@ is 'SurfaceTransformFlagBitsKHR' value indicating the
    -- surface’s current transform relative to the presentation engine’s
    -- natural orientation.
    SurfaceCapabilitiesKHR -> SurfaceTransformFlagsKHR
currentTransform :: SurfaceTransformFlagBitsKHR
  , -- | @supportedCompositeAlpha@ is a bitmask of 'CompositeAlphaFlagBitsKHR',
    -- representing the alpha compositing modes supported by the presentation
    -- engine for the surface on the specified device, and at least one bit
    -- will be set. Opaque composition /can/ be achieved in any alpha
    -- compositing mode by either using an image format that has no alpha
    -- component, or by ensuring that all pixels in the presentable images have
    -- an alpha value of 1.0.
    SurfaceCapabilitiesKHR -> CompositeAlphaFlagsKHR
supportedCompositeAlpha :: CompositeAlphaFlagsKHR
  , -- | @supportedUsageFlags@ is a bitmask of
    -- 'Vulkan.Core10.Enums.ImageUsageFlagBits.ImageUsageFlagBits' representing
    -- the ways the application /can/ use the presentable images of a swapchain
    -- created with 'PresentModeKHR' set to 'PRESENT_MODE_IMMEDIATE_KHR',
    -- 'PRESENT_MODE_MAILBOX_KHR', 'PRESENT_MODE_FIFO_KHR' or
    -- 'PRESENT_MODE_FIFO_RELAXED_KHR' for the surface on the specified device.
    -- 'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_COLOR_ATTACHMENT_BIT'
    -- /must/ be included in the set but implementations /may/ support
    -- additional usages.
    SurfaceCapabilitiesKHR -> ImageUsageFlags
supportedUsageFlags :: ImageUsageFlags
  }
  deriving (Typeable)
deriving instance Show SurfaceCapabilitiesKHR

instance ToCStruct SurfaceCapabilitiesKHR where
  withCStruct :: SurfaceCapabilitiesKHR
-> (("pSurfaceCapabilities" ::: Ptr SurfaceCapabilitiesKHR)
    -> IO b)
-> IO b
withCStruct x :: SurfaceCapabilitiesKHR
x f :: ("pSurfaceCapabilities" ::: Ptr SurfaceCapabilitiesKHR) -> IO b
f = Int
-> Int
-> (("pSurfaceCapabilities" ::: Ptr SurfaceCapabilitiesKHR)
    -> IO b)
-> IO b
forall a b. Int -> Int -> (Ptr a -> IO b) -> IO b
allocaBytesAligned 52 4 ((("pSurfaceCapabilities" ::: Ptr SurfaceCapabilitiesKHR) -> IO b)
 -> IO b)
-> (("pSurfaceCapabilities" ::: Ptr SurfaceCapabilitiesKHR)
    -> IO b)
-> IO b
forall a b. (a -> b) -> a -> b
$ \p :: "pSurfaceCapabilities" ::: Ptr SurfaceCapabilitiesKHR
p -> ("pSurfaceCapabilities" ::: Ptr SurfaceCapabilitiesKHR)
-> SurfaceCapabilitiesKHR -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct "pSurfaceCapabilities" ::: Ptr SurfaceCapabilitiesKHR
p SurfaceCapabilitiesKHR
x (("pSurfaceCapabilities" ::: Ptr SurfaceCapabilitiesKHR) -> IO b
f "pSurfaceCapabilities" ::: Ptr SurfaceCapabilitiesKHR
p)
  pokeCStruct :: ("pSurfaceCapabilities" ::: Ptr SurfaceCapabilitiesKHR)
-> SurfaceCapabilitiesKHR -> IO b -> IO b
pokeCStruct p :: "pSurfaceCapabilities" ::: Ptr SurfaceCapabilitiesKHR
p SurfaceCapabilitiesKHR{..} f :: 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
$ ("pSurfaceFormatCount" ::: Ptr ("queueFamilyIndex" ::: Word32))
-> ("queueFamilyIndex" ::: Word32) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pSurfaceCapabilities" ::: Ptr SurfaceCapabilitiesKHR
p ("pSurfaceCapabilities" ::: Ptr SurfaceCapabilitiesKHR)
-> Int
-> "pSurfaceFormatCount" ::: Ptr ("queueFamilyIndex" ::: Word32)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 0 :: Ptr Word32)) ("queueFamilyIndex" ::: Word32
minImageCount)
    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
$ ("pSurfaceFormatCount" ::: Ptr ("queueFamilyIndex" ::: Word32))
-> ("queueFamilyIndex" ::: Word32) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pSurfaceCapabilities" ::: Ptr SurfaceCapabilitiesKHR
p ("pSurfaceCapabilities" ::: Ptr SurfaceCapabilitiesKHR)
-> Int
-> "pSurfaceFormatCount" ::: Ptr ("queueFamilyIndex" ::: Word32)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 4 :: Ptr Word32)) ("queueFamilyIndex" ::: Word32
maxImageCount)
    ((() -> IO b) -> IO b) -> ContT b IO ()
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((() -> IO b) -> IO b) -> ContT b IO ())
-> ((() -> IO b) -> IO b) -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Extent2D -> Extent2D -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct (("pSurfaceCapabilities" ::: Ptr SurfaceCapabilitiesKHR
p ("pSurfaceCapabilities" ::: Ptr SurfaceCapabilitiesKHR)
-> Int -> Ptr Extent2D
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 8 :: Ptr Extent2D)) (Extent2D
currentExtent) (IO b -> IO b) -> ((() -> IO b) -> IO b) -> (() -> IO b) -> IO b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((() -> IO b) -> () -> IO b
forall a b. (a -> b) -> a -> b
$ ())
    ((() -> IO b) -> IO b) -> ContT b IO ()
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((() -> IO b) -> IO b) -> ContT b IO ())
-> ((() -> IO b) -> IO b) -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Extent2D -> Extent2D -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct (("pSurfaceCapabilities" ::: Ptr SurfaceCapabilitiesKHR
p ("pSurfaceCapabilities" ::: Ptr SurfaceCapabilitiesKHR)
-> Int -> Ptr Extent2D
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 16 :: Ptr Extent2D)) (Extent2D
minImageExtent) (IO b -> IO b) -> ((() -> IO b) -> IO b) -> (() -> IO b) -> IO b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((() -> IO b) -> () -> IO b
forall a b. (a -> b) -> a -> b
$ ())
    ((() -> IO b) -> IO b) -> ContT b IO ()
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((() -> IO b) -> IO b) -> ContT b IO ())
-> ((() -> IO b) -> IO b) -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Extent2D -> Extent2D -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct (("pSurfaceCapabilities" ::: Ptr SurfaceCapabilitiesKHR
p ("pSurfaceCapabilities" ::: Ptr SurfaceCapabilitiesKHR)
-> Int -> Ptr Extent2D
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 24 :: Ptr Extent2D)) (Extent2D
maxImageExtent) (IO b -> IO b) -> ((() -> IO b) -> IO b) -> (() -> IO b) -> IO b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((() -> IO b) -> () -> IO b
forall a b. (a -> b) -> a -> b
$ ())
    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
$ ("pSurfaceFormatCount" ::: Ptr ("queueFamilyIndex" ::: Word32))
-> ("queueFamilyIndex" ::: Word32) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pSurfaceCapabilities" ::: Ptr SurfaceCapabilitiesKHR
p ("pSurfaceCapabilities" ::: Ptr SurfaceCapabilitiesKHR)
-> Int
-> "pSurfaceFormatCount" ::: Ptr ("queueFamilyIndex" ::: Word32)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 32 :: Ptr Word32)) ("queueFamilyIndex" ::: Word32
maxImageArrayLayers)
    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 SurfaceTransformFlagsKHR -> SurfaceTransformFlagsKHR -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pSurfaceCapabilities" ::: Ptr SurfaceCapabilitiesKHR
p ("pSurfaceCapabilities" ::: Ptr SurfaceCapabilitiesKHR)
-> Int -> Ptr SurfaceTransformFlagsKHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 36 :: Ptr SurfaceTransformFlagsKHR)) (SurfaceTransformFlagsKHR
supportedTransforms)
    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 SurfaceTransformFlagsKHR -> SurfaceTransformFlagsKHR -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pSurfaceCapabilities" ::: Ptr SurfaceCapabilitiesKHR
p ("pSurfaceCapabilities" ::: Ptr SurfaceCapabilitiesKHR)
-> Int -> Ptr SurfaceTransformFlagsKHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 40 :: Ptr SurfaceTransformFlagBitsKHR)) (SurfaceTransformFlagsKHR
currentTransform)
    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 CompositeAlphaFlagsKHR -> CompositeAlphaFlagsKHR -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pSurfaceCapabilities" ::: Ptr SurfaceCapabilitiesKHR
p ("pSurfaceCapabilities" ::: Ptr SurfaceCapabilitiesKHR)
-> Int -> Ptr CompositeAlphaFlagsKHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 44 :: Ptr CompositeAlphaFlagsKHR)) (CompositeAlphaFlagsKHR
supportedCompositeAlpha)
    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 ImageUsageFlags -> ImageUsageFlags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pSurfaceCapabilities" ::: Ptr SurfaceCapabilitiesKHR
p ("pSurfaceCapabilities" ::: Ptr SurfaceCapabilitiesKHR)
-> Int -> Ptr ImageUsageFlags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 48 :: Ptr ImageUsageFlags)) (ImageUsageFlags
supportedUsageFlags)
    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 = 52
  cStructAlignment :: Int
cStructAlignment = 4
  pokeZeroCStruct :: ("pSurfaceCapabilities" ::: Ptr SurfaceCapabilitiesKHR)
-> IO b -> IO b
pokeZeroCStruct p :: "pSurfaceCapabilities" ::: Ptr SurfaceCapabilitiesKHR
p f :: 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
$ ("pSurfaceFormatCount" ::: Ptr ("queueFamilyIndex" ::: Word32))
-> ("queueFamilyIndex" ::: Word32) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pSurfaceCapabilities" ::: Ptr SurfaceCapabilitiesKHR
p ("pSurfaceCapabilities" ::: Ptr SurfaceCapabilitiesKHR)
-> Int
-> "pSurfaceFormatCount" ::: Ptr ("queueFamilyIndex" ::: Word32)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 0 :: Ptr Word32)) ("queueFamilyIndex" ::: Word32
forall a. Zero a => a
zero)
    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
$ ("pSurfaceFormatCount" ::: Ptr ("queueFamilyIndex" ::: Word32))
-> ("queueFamilyIndex" ::: Word32) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pSurfaceCapabilities" ::: Ptr SurfaceCapabilitiesKHR
p ("pSurfaceCapabilities" ::: Ptr SurfaceCapabilitiesKHR)
-> Int
-> "pSurfaceFormatCount" ::: Ptr ("queueFamilyIndex" ::: Word32)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 4 :: Ptr Word32)) ("queueFamilyIndex" ::: Word32
forall a. Zero a => a
zero)
    ((() -> IO b) -> IO b) -> ContT b IO ()
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((() -> IO b) -> IO b) -> ContT b IO ())
-> ((() -> IO b) -> IO b) -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Extent2D -> Extent2D -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct (("pSurfaceCapabilities" ::: Ptr SurfaceCapabilitiesKHR
p ("pSurfaceCapabilities" ::: Ptr SurfaceCapabilitiesKHR)
-> Int -> Ptr Extent2D
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 8 :: Ptr Extent2D)) (Extent2D
forall a. Zero a => a
zero) (IO b -> IO b) -> ((() -> IO b) -> IO b) -> (() -> IO b) -> IO b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((() -> IO b) -> () -> IO b
forall a b. (a -> b) -> a -> b
$ ())
    ((() -> IO b) -> IO b) -> ContT b IO ()
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((() -> IO b) -> IO b) -> ContT b IO ())
-> ((() -> IO b) -> IO b) -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Extent2D -> Extent2D -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct (("pSurfaceCapabilities" ::: Ptr SurfaceCapabilitiesKHR
p ("pSurfaceCapabilities" ::: Ptr SurfaceCapabilitiesKHR)
-> Int -> Ptr Extent2D
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 16 :: Ptr Extent2D)) (Extent2D
forall a. Zero a => a
zero) (IO b -> IO b) -> ((() -> IO b) -> IO b) -> (() -> IO b) -> IO b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((() -> IO b) -> () -> IO b
forall a b. (a -> b) -> a -> b
$ ())
    ((() -> IO b) -> IO b) -> ContT b IO ()
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((() -> IO b) -> IO b) -> ContT b IO ())
-> ((() -> IO b) -> IO b) -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Extent2D -> Extent2D -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct (("pSurfaceCapabilities" ::: Ptr SurfaceCapabilitiesKHR
p ("pSurfaceCapabilities" ::: Ptr SurfaceCapabilitiesKHR)
-> Int -> Ptr Extent2D
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 24 :: Ptr Extent2D)) (Extent2D
forall a. Zero a => a
zero) (IO b -> IO b) -> ((() -> IO b) -> IO b) -> (() -> IO b) -> IO b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((() -> IO b) -> () -> IO b
forall a b. (a -> b) -> a -> b
$ ())
    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
$ ("pSurfaceFormatCount" ::: Ptr ("queueFamilyIndex" ::: Word32))
-> ("queueFamilyIndex" ::: Word32) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pSurfaceCapabilities" ::: Ptr SurfaceCapabilitiesKHR
p ("pSurfaceCapabilities" ::: Ptr SurfaceCapabilitiesKHR)
-> Int
-> "pSurfaceFormatCount" ::: Ptr ("queueFamilyIndex" ::: Word32)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 32 :: Ptr Word32)) ("queueFamilyIndex" ::: Word32
forall a. Zero a => a
zero)
    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 SurfaceTransformFlagsKHR -> SurfaceTransformFlagsKHR -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pSurfaceCapabilities" ::: Ptr SurfaceCapabilitiesKHR
p ("pSurfaceCapabilities" ::: Ptr SurfaceCapabilitiesKHR)
-> Int -> Ptr SurfaceTransformFlagsKHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 40 :: Ptr SurfaceTransformFlagBitsKHR)) (SurfaceTransformFlagsKHR
forall a. Zero a => a
zero)
    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

instance FromCStruct SurfaceCapabilitiesKHR where
  peekCStruct :: ("pSurfaceCapabilities" ::: Ptr SurfaceCapabilitiesKHR)
-> IO SurfaceCapabilitiesKHR
peekCStruct p :: "pSurfaceCapabilities" ::: Ptr SurfaceCapabilitiesKHR
p = do
    "queueFamilyIndex" ::: Word32
minImageCount <- ("pSurfaceFormatCount" ::: Ptr ("queueFamilyIndex" ::: Word32))
-> IO ("queueFamilyIndex" ::: Word32)
forall a. Storable a => Ptr a -> IO a
peek @Word32 (("pSurfaceCapabilities" ::: Ptr SurfaceCapabilitiesKHR
p ("pSurfaceCapabilities" ::: Ptr SurfaceCapabilitiesKHR)
-> Int
-> "pSurfaceFormatCount" ::: Ptr ("queueFamilyIndex" ::: Word32)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 0 :: Ptr Word32))
    "queueFamilyIndex" ::: Word32
maxImageCount <- ("pSurfaceFormatCount" ::: Ptr ("queueFamilyIndex" ::: Word32))
-> IO ("queueFamilyIndex" ::: Word32)
forall a. Storable a => Ptr a -> IO a
peek @Word32 (("pSurfaceCapabilities" ::: Ptr SurfaceCapabilitiesKHR
p ("pSurfaceCapabilities" ::: Ptr SurfaceCapabilitiesKHR)
-> Int
-> "pSurfaceFormatCount" ::: Ptr ("queueFamilyIndex" ::: Word32)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 4 :: Ptr Word32))
    Extent2D
currentExtent <- Ptr Extent2D -> IO Extent2D
forall a. FromCStruct a => Ptr a -> IO a
peekCStruct @Extent2D (("pSurfaceCapabilities" ::: Ptr SurfaceCapabilitiesKHR
p ("pSurfaceCapabilities" ::: Ptr SurfaceCapabilitiesKHR)
-> Int -> Ptr Extent2D
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 8 :: Ptr Extent2D))
    Extent2D
minImageExtent <- Ptr Extent2D -> IO Extent2D
forall a. FromCStruct a => Ptr a -> IO a
peekCStruct @Extent2D (("pSurfaceCapabilities" ::: Ptr SurfaceCapabilitiesKHR
p ("pSurfaceCapabilities" ::: Ptr SurfaceCapabilitiesKHR)
-> Int -> Ptr Extent2D
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 16 :: Ptr Extent2D))
    Extent2D
maxImageExtent <- Ptr Extent2D -> IO Extent2D
forall a. FromCStruct a => Ptr a -> IO a
peekCStruct @Extent2D (("pSurfaceCapabilities" ::: Ptr SurfaceCapabilitiesKHR
p ("pSurfaceCapabilities" ::: Ptr SurfaceCapabilitiesKHR)
-> Int -> Ptr Extent2D
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 24 :: Ptr Extent2D))
    "queueFamilyIndex" ::: Word32
maxImageArrayLayers <- ("pSurfaceFormatCount" ::: Ptr ("queueFamilyIndex" ::: Word32))
-> IO ("queueFamilyIndex" ::: Word32)
forall a. Storable a => Ptr a -> IO a
peek @Word32 (("pSurfaceCapabilities" ::: Ptr SurfaceCapabilitiesKHR
p ("pSurfaceCapabilities" ::: Ptr SurfaceCapabilitiesKHR)
-> Int
-> "pSurfaceFormatCount" ::: Ptr ("queueFamilyIndex" ::: Word32)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 32 :: Ptr Word32))
    SurfaceTransformFlagsKHR
supportedTransforms <- Ptr SurfaceTransformFlagsKHR -> IO SurfaceTransformFlagsKHR
forall a. Storable a => Ptr a -> IO a
peek @SurfaceTransformFlagsKHR (("pSurfaceCapabilities" ::: Ptr SurfaceCapabilitiesKHR
p ("pSurfaceCapabilities" ::: Ptr SurfaceCapabilitiesKHR)
-> Int -> Ptr SurfaceTransformFlagsKHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 36 :: Ptr SurfaceTransformFlagsKHR))
    SurfaceTransformFlagsKHR
currentTransform <- Ptr SurfaceTransformFlagsKHR -> IO SurfaceTransformFlagsKHR
forall a. Storable a => Ptr a -> IO a
peek @SurfaceTransformFlagBitsKHR (("pSurfaceCapabilities" ::: Ptr SurfaceCapabilitiesKHR
p ("pSurfaceCapabilities" ::: Ptr SurfaceCapabilitiesKHR)
-> Int -> Ptr SurfaceTransformFlagsKHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 40 :: Ptr SurfaceTransformFlagBitsKHR))
    CompositeAlphaFlagsKHR
supportedCompositeAlpha <- Ptr CompositeAlphaFlagsKHR -> IO CompositeAlphaFlagsKHR
forall a. Storable a => Ptr a -> IO a
peek @CompositeAlphaFlagsKHR (("pSurfaceCapabilities" ::: Ptr SurfaceCapabilitiesKHR
p ("pSurfaceCapabilities" ::: Ptr SurfaceCapabilitiesKHR)
-> Int -> Ptr CompositeAlphaFlagsKHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 44 :: Ptr CompositeAlphaFlagsKHR))
    ImageUsageFlags
supportedUsageFlags <- Ptr ImageUsageFlags -> IO ImageUsageFlags
forall a. Storable a => Ptr a -> IO a
peek @ImageUsageFlags (("pSurfaceCapabilities" ::: Ptr SurfaceCapabilitiesKHR
p ("pSurfaceCapabilities" ::: Ptr SurfaceCapabilitiesKHR)
-> Int -> Ptr ImageUsageFlags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 48 :: Ptr ImageUsageFlags))
    SurfaceCapabilitiesKHR -> IO SurfaceCapabilitiesKHR
forall (f :: * -> *) a. Applicative f => a -> f a
pure (SurfaceCapabilitiesKHR -> IO SurfaceCapabilitiesKHR)
-> SurfaceCapabilitiesKHR -> IO SurfaceCapabilitiesKHR
forall a b. (a -> b) -> a -> b
$ ("queueFamilyIndex" ::: Word32)
-> ("queueFamilyIndex" ::: Word32)
-> Extent2D
-> Extent2D
-> Extent2D
-> ("queueFamilyIndex" ::: Word32)
-> SurfaceTransformFlagsKHR
-> SurfaceTransformFlagsKHR
-> CompositeAlphaFlagsKHR
-> ImageUsageFlags
-> SurfaceCapabilitiesKHR
SurfaceCapabilitiesKHR
             "queueFamilyIndex" ::: Word32
minImageCount "queueFamilyIndex" ::: Word32
maxImageCount Extent2D
currentExtent Extent2D
minImageExtent Extent2D
maxImageExtent "queueFamilyIndex" ::: Word32
maxImageArrayLayers SurfaceTransformFlagsKHR
supportedTransforms SurfaceTransformFlagsKHR
currentTransform CompositeAlphaFlagsKHR
supportedCompositeAlpha ImageUsageFlags
supportedUsageFlags

instance Zero SurfaceCapabilitiesKHR where
  zero :: SurfaceCapabilitiesKHR
zero = ("queueFamilyIndex" ::: Word32)
-> ("queueFamilyIndex" ::: Word32)
-> Extent2D
-> Extent2D
-> Extent2D
-> ("queueFamilyIndex" ::: Word32)
-> SurfaceTransformFlagsKHR
-> SurfaceTransformFlagsKHR
-> CompositeAlphaFlagsKHR
-> ImageUsageFlags
-> SurfaceCapabilitiesKHR
SurfaceCapabilitiesKHR
           "queueFamilyIndex" ::: Word32
forall a. Zero a => a
zero
           "queueFamilyIndex" ::: Word32
forall a. Zero a => a
zero
           Extent2D
forall a. Zero a => a
zero
           Extent2D
forall a. Zero a => a
zero
           Extent2D
forall a. Zero a => a
zero
           "queueFamilyIndex" ::: Word32
forall a. Zero a => a
zero
           SurfaceTransformFlagsKHR
forall a. Zero a => a
zero
           SurfaceTransformFlagsKHR
forall a. Zero a => a
zero
           CompositeAlphaFlagsKHR
forall a. Zero a => a
zero
           ImageUsageFlags
forall a. Zero a => a
zero


-- | VkSurfaceFormatKHR - Structure describing a supported swapchain
-- format-color space pair
--
-- = See Also
--
-- 'ColorSpaceKHR', 'Vulkan.Core10.Enums.Format.Format',
-- 'Vulkan.Extensions.VK_KHR_get_surface_capabilities2.SurfaceFormat2KHR',
-- 'getPhysicalDeviceSurfaceFormatsKHR'
data SurfaceFormatKHR = SurfaceFormatKHR
  { -- | @format@ is a 'Vulkan.Core10.Enums.Format.Format' that is compatible
    -- with the specified surface.
    SurfaceFormatKHR -> Format
format :: Format
  , -- | @colorSpace@ is a presentation 'ColorSpaceKHR' that is compatible with
    -- the surface.
    SurfaceFormatKHR -> ColorSpaceKHR
colorSpace :: ColorSpaceKHR
  }
  deriving (Typeable)
deriving instance Show SurfaceFormatKHR

instance ToCStruct SurfaceFormatKHR where
  withCStruct :: SurfaceFormatKHR
-> (("pSurfaceFormats" ::: Ptr SurfaceFormatKHR) -> IO b) -> IO b
withCStruct x :: SurfaceFormatKHR
x f :: ("pSurfaceFormats" ::: Ptr SurfaceFormatKHR) -> IO b
f = Int
-> Int
-> (("pSurfaceFormats" ::: Ptr SurfaceFormatKHR) -> IO b)
-> IO b
forall a b. Int -> Int -> (Ptr a -> IO b) -> IO b
allocaBytesAligned 8 4 ((("pSurfaceFormats" ::: Ptr SurfaceFormatKHR) -> IO b) -> IO b)
-> (("pSurfaceFormats" ::: Ptr SurfaceFormatKHR) -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \p :: "pSurfaceFormats" ::: Ptr SurfaceFormatKHR
p -> ("pSurfaceFormats" ::: Ptr SurfaceFormatKHR)
-> SurfaceFormatKHR -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct "pSurfaceFormats" ::: Ptr SurfaceFormatKHR
p SurfaceFormatKHR
x (("pSurfaceFormats" ::: Ptr SurfaceFormatKHR) -> IO b
f "pSurfaceFormats" ::: Ptr SurfaceFormatKHR
p)
  pokeCStruct :: ("pSurfaceFormats" ::: Ptr SurfaceFormatKHR)
-> SurfaceFormatKHR -> IO b -> IO b
pokeCStruct p :: "pSurfaceFormats" ::: Ptr SurfaceFormatKHR
p SurfaceFormatKHR{..} f :: IO b
f = do
    Ptr Format -> Format -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pSurfaceFormats" ::: Ptr SurfaceFormatKHR
p ("pSurfaceFormats" ::: Ptr SurfaceFormatKHR) -> Int -> Ptr Format
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 0 :: Ptr Format)) (Format
format)
    Ptr ColorSpaceKHR -> ColorSpaceKHR -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pSurfaceFormats" ::: Ptr SurfaceFormatKHR
p ("pSurfaceFormats" ::: Ptr SurfaceFormatKHR)
-> Int -> Ptr ColorSpaceKHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 4 :: Ptr ColorSpaceKHR)) (ColorSpaceKHR
colorSpace)
    IO b
f
  cStructSize :: Int
cStructSize = 8
  cStructAlignment :: Int
cStructAlignment = 4
  pokeZeroCStruct :: ("pSurfaceFormats" ::: Ptr SurfaceFormatKHR) -> IO b -> IO b
pokeZeroCStruct p :: "pSurfaceFormats" ::: Ptr SurfaceFormatKHR
p f :: IO b
f = do
    Ptr Format -> Format -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pSurfaceFormats" ::: Ptr SurfaceFormatKHR
p ("pSurfaceFormats" ::: Ptr SurfaceFormatKHR) -> Int -> Ptr Format
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 0 :: Ptr Format)) (Format
forall a. Zero a => a
zero)
    Ptr ColorSpaceKHR -> ColorSpaceKHR -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pSurfaceFormats" ::: Ptr SurfaceFormatKHR
p ("pSurfaceFormats" ::: Ptr SurfaceFormatKHR)
-> Int -> Ptr ColorSpaceKHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 4 :: Ptr ColorSpaceKHR)) (ColorSpaceKHR
forall a. Zero a => a
zero)
    IO b
f

instance FromCStruct SurfaceFormatKHR where
  peekCStruct :: ("pSurfaceFormats" ::: Ptr SurfaceFormatKHR) -> IO SurfaceFormatKHR
peekCStruct p :: "pSurfaceFormats" ::: Ptr SurfaceFormatKHR
p = do
    Format
format <- Ptr Format -> IO Format
forall a. Storable a => Ptr a -> IO a
peek @Format (("pSurfaceFormats" ::: Ptr SurfaceFormatKHR
p ("pSurfaceFormats" ::: Ptr SurfaceFormatKHR) -> Int -> Ptr Format
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 0 :: Ptr Format))
    ColorSpaceKHR
colorSpace <- Ptr ColorSpaceKHR -> IO ColorSpaceKHR
forall a. Storable a => Ptr a -> IO a
peek @ColorSpaceKHR (("pSurfaceFormats" ::: Ptr SurfaceFormatKHR
p ("pSurfaceFormats" ::: Ptr SurfaceFormatKHR)
-> Int -> Ptr ColorSpaceKHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 4 :: Ptr ColorSpaceKHR))
    SurfaceFormatKHR -> IO SurfaceFormatKHR
forall (f :: * -> *) a. Applicative f => a -> f a
pure (SurfaceFormatKHR -> IO SurfaceFormatKHR)
-> SurfaceFormatKHR -> IO SurfaceFormatKHR
forall a b. (a -> b) -> a -> b
$ Format -> ColorSpaceKHR -> SurfaceFormatKHR
SurfaceFormatKHR
             Format
format ColorSpaceKHR
colorSpace

instance Storable SurfaceFormatKHR where
  sizeOf :: SurfaceFormatKHR -> Int
sizeOf ~SurfaceFormatKHR
_ = 8
  alignment :: SurfaceFormatKHR -> Int
alignment ~SurfaceFormatKHR
_ = 4
  peek :: ("pSurfaceFormats" ::: Ptr SurfaceFormatKHR) -> IO SurfaceFormatKHR
peek = ("pSurfaceFormats" ::: Ptr SurfaceFormatKHR) -> IO SurfaceFormatKHR
forall a. FromCStruct a => Ptr a -> IO a
peekCStruct
  poke :: ("pSurfaceFormats" ::: Ptr SurfaceFormatKHR)
-> SurfaceFormatKHR -> IO ()
poke ptr :: "pSurfaceFormats" ::: Ptr SurfaceFormatKHR
ptr poked :: SurfaceFormatKHR
poked = ("pSurfaceFormats" ::: Ptr SurfaceFormatKHR)
-> SurfaceFormatKHR -> IO () -> IO ()
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct "pSurfaceFormats" ::: Ptr SurfaceFormatKHR
ptr SurfaceFormatKHR
poked (() -> IO ()
forall (f :: * -> *) a. Applicative f => a -> f a
pure ())

instance Zero SurfaceFormatKHR where
  zero :: SurfaceFormatKHR
zero = Format -> ColorSpaceKHR -> SurfaceFormatKHR
SurfaceFormatKHR
           Format
forall a. Zero a => a
zero
           ColorSpaceKHR
forall a. Zero a => a
zero


-- | VkPresentModeKHR - presentation mode supported for a surface
--
-- = Description
--
-- The supported
-- 'Vulkan.Core10.Enums.ImageUsageFlagBits.ImageUsageFlagBits' of the
-- presentable images of a swapchain created for a surface /may/ differ
-- depending on the presentation mode, and can be determined as per the
-- table below:
--
-- +----------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------+
-- | Presentation mode                            | Image usage flags                                                                                                           |
-- +==============================================+=============================================================================================================================+
-- | 'PRESENT_MODE_IMMEDIATE_KHR'                 | 'SurfaceCapabilitiesKHR'::@supportedUsageFlags@                                                                             |
-- +----------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------+
-- | 'PRESENT_MODE_MAILBOX_KHR'                   | 'SurfaceCapabilitiesKHR'::@supportedUsageFlags@                                                                             |
-- +----------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------+
-- | 'PRESENT_MODE_FIFO_KHR'                      | 'SurfaceCapabilitiesKHR'::@supportedUsageFlags@                                                                             |
-- +----------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------+
-- | 'PRESENT_MODE_FIFO_RELAXED_KHR'              | 'SurfaceCapabilitiesKHR'::@supportedUsageFlags@                                                                             |
-- +----------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------+
-- | 'PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR'     | 'Vulkan.Extensions.VK_KHR_shared_presentable_image.SharedPresentSurfaceCapabilitiesKHR'::@sharedPresentSupportedUsageFlags@ |
-- +----------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------+
-- | 'PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR' | 'Vulkan.Extensions.VK_KHR_shared_presentable_image.SharedPresentSurfaceCapabilitiesKHR'::@sharedPresentSupportedUsageFlags@ |
-- +----------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------+
--
-- Presentable image usage queries
--
-- Note
--
-- For reference, the mode indicated by 'PRESENT_MODE_FIFO_KHR' is
-- equivalent to the behavior of {wgl|glX|egl}SwapBuffers with a swap
-- interval of 1, while the mode indicated by
-- 'PRESENT_MODE_FIFO_RELAXED_KHR' is equivalent to the behavior of
-- {wgl|glX}SwapBuffers with a swap interval of -1 (from the
-- {WGL|GLX}_EXT_swap_control_tear extensions).
--
-- = See Also
--
-- 'Vulkan.Extensions.VK_KHR_swapchain.SwapchainCreateInfoKHR',
-- 'Vulkan.Extensions.VK_EXT_full_screen_exclusive.getPhysicalDeviceSurfacePresentModes2EXT',
-- 'getPhysicalDeviceSurfacePresentModesKHR'
newtype PresentModeKHR = PresentModeKHR Int32
  deriving newtype (PresentModeKHR -> PresentModeKHR -> Bool
(PresentModeKHR -> PresentModeKHR -> Bool)
-> (PresentModeKHR -> PresentModeKHR -> Bool) -> Eq PresentModeKHR
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PresentModeKHR -> PresentModeKHR -> Bool
$c/= :: PresentModeKHR -> PresentModeKHR -> Bool
== :: PresentModeKHR -> PresentModeKHR -> Bool
$c== :: PresentModeKHR -> PresentModeKHR -> Bool
Eq, Eq PresentModeKHR
Eq PresentModeKHR =>
(PresentModeKHR -> PresentModeKHR -> Ordering)
-> (PresentModeKHR -> PresentModeKHR -> Bool)
-> (PresentModeKHR -> PresentModeKHR -> Bool)
-> (PresentModeKHR -> PresentModeKHR -> Bool)
-> (PresentModeKHR -> PresentModeKHR -> Bool)
-> (PresentModeKHR -> PresentModeKHR -> PresentModeKHR)
-> (PresentModeKHR -> PresentModeKHR -> PresentModeKHR)
-> Ord PresentModeKHR
PresentModeKHR -> PresentModeKHR -> Bool
PresentModeKHR -> PresentModeKHR -> Ordering
PresentModeKHR -> PresentModeKHR -> PresentModeKHR
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 :: PresentModeKHR -> PresentModeKHR -> PresentModeKHR
$cmin :: PresentModeKHR -> PresentModeKHR -> PresentModeKHR
max :: PresentModeKHR -> PresentModeKHR -> PresentModeKHR
$cmax :: PresentModeKHR -> PresentModeKHR -> PresentModeKHR
>= :: PresentModeKHR -> PresentModeKHR -> Bool
$c>= :: PresentModeKHR -> PresentModeKHR -> Bool
> :: PresentModeKHR -> PresentModeKHR -> Bool
$c> :: PresentModeKHR -> PresentModeKHR -> Bool
<= :: PresentModeKHR -> PresentModeKHR -> Bool
$c<= :: PresentModeKHR -> PresentModeKHR -> Bool
< :: PresentModeKHR -> PresentModeKHR -> Bool
$c< :: PresentModeKHR -> PresentModeKHR -> Bool
compare :: PresentModeKHR -> PresentModeKHR -> Ordering
$ccompare :: PresentModeKHR -> PresentModeKHR -> Ordering
$cp1Ord :: Eq PresentModeKHR
Ord, Ptr b -> Int -> IO PresentModeKHR
Ptr b -> Int -> PresentModeKHR -> IO ()
("pPresentModes" ::: Ptr PresentModeKHR) -> IO PresentModeKHR
("pPresentModes" ::: Ptr PresentModeKHR)
-> Int -> IO PresentModeKHR
("pPresentModes" ::: Ptr PresentModeKHR)
-> Int -> PresentModeKHR -> IO ()
("pPresentModes" ::: Ptr PresentModeKHR) -> PresentModeKHR -> IO ()
PresentModeKHR -> Int
(PresentModeKHR -> Int)
-> (PresentModeKHR -> Int)
-> (("pPresentModes" ::: Ptr PresentModeKHR)
    -> Int -> IO PresentModeKHR)
-> (("pPresentModes" ::: Ptr PresentModeKHR)
    -> Int -> PresentModeKHR -> IO ())
-> (forall b. Ptr b -> Int -> IO PresentModeKHR)
-> (forall b. Ptr b -> Int -> PresentModeKHR -> IO ())
-> (("pPresentModes" ::: Ptr PresentModeKHR) -> IO PresentModeKHR)
-> (("pPresentModes" ::: Ptr PresentModeKHR)
    -> PresentModeKHR -> IO ())
-> Storable PresentModeKHR
forall b. Ptr b -> Int -> IO PresentModeKHR
forall b. Ptr b -> Int -> PresentModeKHR -> 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 :: ("pPresentModes" ::: Ptr PresentModeKHR) -> PresentModeKHR -> IO ()
$cpoke :: ("pPresentModes" ::: Ptr PresentModeKHR) -> PresentModeKHR -> IO ()
peek :: ("pPresentModes" ::: Ptr PresentModeKHR) -> IO PresentModeKHR
$cpeek :: ("pPresentModes" ::: Ptr PresentModeKHR) -> IO PresentModeKHR
pokeByteOff :: Ptr b -> Int -> PresentModeKHR -> IO ()
$cpokeByteOff :: forall b. Ptr b -> Int -> PresentModeKHR -> IO ()
peekByteOff :: Ptr b -> Int -> IO PresentModeKHR
$cpeekByteOff :: forall b. Ptr b -> Int -> IO PresentModeKHR
pokeElemOff :: ("pPresentModes" ::: Ptr PresentModeKHR)
-> Int -> PresentModeKHR -> IO ()
$cpokeElemOff :: ("pPresentModes" ::: Ptr PresentModeKHR)
-> Int -> PresentModeKHR -> IO ()
peekElemOff :: ("pPresentModes" ::: Ptr PresentModeKHR)
-> Int -> IO PresentModeKHR
$cpeekElemOff :: ("pPresentModes" ::: Ptr PresentModeKHR)
-> Int -> IO PresentModeKHR
alignment :: PresentModeKHR -> Int
$calignment :: PresentModeKHR -> Int
sizeOf :: PresentModeKHR -> Int
$csizeOf :: PresentModeKHR -> Int
Storable, PresentModeKHR
PresentModeKHR -> Zero PresentModeKHR
forall a. a -> Zero a
zero :: PresentModeKHR
$czero :: PresentModeKHR
Zero)

-- | 'PRESENT_MODE_IMMEDIATE_KHR' specifies that the presentation engine does
-- not wait for a vertical blanking period to update the current image,
-- meaning this mode /may/ result in visible tearing. No internal queuing
-- of presentation requests is needed, as the requests are applied
-- immediately.
pattern $bPRESENT_MODE_IMMEDIATE_KHR :: PresentModeKHR
$mPRESENT_MODE_IMMEDIATE_KHR :: forall r. PresentModeKHR -> (Void# -> r) -> (Void# -> r) -> r
PRESENT_MODE_IMMEDIATE_KHR = PresentModeKHR 0
-- | 'PRESENT_MODE_MAILBOX_KHR' specifies that the presentation engine waits
-- for the next vertical blanking period to update the current image.
-- Tearing /cannot/ be observed. An internal single-entry queue is used to
-- hold pending presentation requests. If the queue is full when a new
-- presentation request is received, the new request replaces the existing
-- entry, and any images associated with the prior entry become available
-- for re-use by the application. One request is removed from the queue and
-- processed during each vertical blanking period in which the queue is
-- non-empty.
pattern $bPRESENT_MODE_MAILBOX_KHR :: PresentModeKHR
$mPRESENT_MODE_MAILBOX_KHR :: forall r. PresentModeKHR -> (Void# -> r) -> (Void# -> r) -> r
PRESENT_MODE_MAILBOX_KHR = PresentModeKHR 1
-- | 'PRESENT_MODE_FIFO_KHR' specifies that the presentation engine waits for
-- the next vertical blanking period to update the current image. Tearing
-- /cannot/ be observed. An internal queue is used to hold pending
-- presentation requests. New requests are appended to the end of the
-- queue, and one request is removed from the beginning of the queue and
-- processed during each vertical blanking period in which the queue is
-- non-empty. This is the only value of @presentMode@ that is /required/ to
-- be supported.
pattern $bPRESENT_MODE_FIFO_KHR :: PresentModeKHR
$mPRESENT_MODE_FIFO_KHR :: forall r. PresentModeKHR -> (Void# -> r) -> (Void# -> r) -> r
PRESENT_MODE_FIFO_KHR = PresentModeKHR 2
-- | 'PRESENT_MODE_FIFO_RELAXED_KHR' specifies that the presentation engine
-- generally waits for the next vertical blanking period to update the
-- current image. If a vertical blanking period has already passed since
-- the last update of the current image then the presentation engine does
-- not wait for another vertical blanking period for the update, meaning
-- this mode /may/ result in visible tearing in this case. This mode is
-- useful for reducing visual stutter with an application that will mostly
-- present a new image before the next vertical blanking period, but may
-- occasionally be late, and present a new image just after the next
-- vertical blanking period. An internal queue is used to hold pending
-- presentation requests. New requests are appended to the end of the
-- queue, and one request is removed from the beginning of the queue and
-- processed during or after each vertical blanking period in which the
-- queue is non-empty.
pattern $bPRESENT_MODE_FIFO_RELAXED_KHR :: PresentModeKHR
$mPRESENT_MODE_FIFO_RELAXED_KHR :: forall r. PresentModeKHR -> (Void# -> r) -> (Void# -> r) -> r
PRESENT_MODE_FIFO_RELAXED_KHR = PresentModeKHR 3
-- | 'PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR' specifies that the
-- presentation engine and application have concurrent access to a single
-- image, which is referred to as a /shared presentable image/. The
-- presentation engine periodically updates the current image on its
-- regular refresh cycle. The application is only required to make one
-- initial presentation request, after which the presentation engine /must/
-- update the current image without any need for further presentation
-- requests. The application /can/ indicate the image contents have been
-- updated by making a presentation request, but this does not guarantee
-- the timing of when it will be updated. This mode /may/ result in visible
-- tearing if rendering to the image is not timed correctly.
pattern $bPRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR :: PresentModeKHR
$mPRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR :: forall r. PresentModeKHR -> (Void# -> r) -> (Void# -> r) -> r
PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR = PresentModeKHR 1000111001
-- | 'PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR' specifies that the presentation
-- engine and application have concurrent access to a single image, which
-- is referred to as a /shared presentable image/. The presentation engine
-- is only required to update the current image after a new presentation
-- request is received. Therefore the application /must/ make a
-- presentation request whenever an update is required. However, the
-- presentation engine /may/ update the current image at any point, meaning
-- this mode /may/ result in visible tearing.
pattern $bPRESENT_MODE_SHARED_DEMAND_REFRESH_KHR :: PresentModeKHR
$mPRESENT_MODE_SHARED_DEMAND_REFRESH_KHR :: forall r. PresentModeKHR -> (Void# -> r) -> (Void# -> r) -> r
PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR = PresentModeKHR 1000111000
{-# complete PRESENT_MODE_IMMEDIATE_KHR,
             PRESENT_MODE_MAILBOX_KHR,
             PRESENT_MODE_FIFO_KHR,
             PRESENT_MODE_FIFO_RELAXED_KHR,
             PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR,
             PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR :: PresentModeKHR #-}

instance Show PresentModeKHR where
  showsPrec :: Int -> PresentModeKHR -> ShowS
showsPrec p :: Int
p = \case
    PRESENT_MODE_IMMEDIATE_KHR -> String -> ShowS
showString "PRESENT_MODE_IMMEDIATE_KHR"
    PRESENT_MODE_MAILBOX_KHR -> String -> ShowS
showString "PRESENT_MODE_MAILBOX_KHR"
    PRESENT_MODE_FIFO_KHR -> String -> ShowS
showString "PRESENT_MODE_FIFO_KHR"
    PRESENT_MODE_FIFO_RELAXED_KHR -> String -> ShowS
showString "PRESENT_MODE_FIFO_RELAXED_KHR"
    PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR -> String -> ShowS
showString "PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR"
    PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR -> String -> ShowS
showString "PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR"
    PresentModeKHR x :: Int32
x -> Bool -> ShowS -> ShowS
showParen (Int
p Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
>= 11) (String -> ShowS
showString "PresentModeKHR " ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> Int32 -> ShowS
forall a. Show a => Int -> a -> ShowS
showsPrec 11 Int32
x)

instance Read PresentModeKHR where
  readPrec :: ReadPrec PresentModeKHR
readPrec = ReadPrec PresentModeKHR -> ReadPrec PresentModeKHR
forall a. ReadPrec a -> ReadPrec a
parens ([(String, ReadPrec PresentModeKHR)] -> ReadPrec PresentModeKHR
forall a. [(String, ReadPrec a)] -> ReadPrec a
choose [("PRESENT_MODE_IMMEDIATE_KHR", PresentModeKHR -> ReadPrec PresentModeKHR
forall (f :: * -> *) a. Applicative f => a -> f a
pure PresentModeKHR
PRESENT_MODE_IMMEDIATE_KHR)
                            , ("PRESENT_MODE_MAILBOX_KHR", PresentModeKHR -> ReadPrec PresentModeKHR
forall (f :: * -> *) a. Applicative f => a -> f a
pure PresentModeKHR
PRESENT_MODE_MAILBOX_KHR)
                            , ("PRESENT_MODE_FIFO_KHR", PresentModeKHR -> ReadPrec PresentModeKHR
forall (f :: * -> *) a. Applicative f => a -> f a
pure PresentModeKHR
PRESENT_MODE_FIFO_KHR)
                            , ("PRESENT_MODE_FIFO_RELAXED_KHR", PresentModeKHR -> ReadPrec PresentModeKHR
forall (f :: * -> *) a. Applicative f => a -> f a
pure PresentModeKHR
PRESENT_MODE_FIFO_RELAXED_KHR)
                            , ("PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR", PresentModeKHR -> ReadPrec PresentModeKHR
forall (f :: * -> *) a. Applicative f => a -> f a
pure PresentModeKHR
PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR)
                            , ("PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR", PresentModeKHR -> ReadPrec PresentModeKHR
forall (f :: * -> *) a. Applicative f => a -> f a
pure PresentModeKHR
PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR)]
                     ReadPrec PresentModeKHR
-> ReadPrec PresentModeKHR -> ReadPrec PresentModeKHR
forall a. ReadPrec a -> ReadPrec a -> ReadPrec a
+++
                     Int -> ReadPrec PresentModeKHR -> ReadPrec PresentModeKHR
forall a. Int -> ReadPrec a -> ReadPrec a
prec 10 (do
                       Lexeme -> ReadPrec ()
expectP (String -> Lexeme
Ident "PresentModeKHR")
                       Int32
v <- ReadPrec Int32 -> ReadPrec Int32
forall a. ReadPrec a -> ReadPrec a
step ReadPrec Int32
forall a. Read a => ReadPrec a
readPrec
                       PresentModeKHR -> ReadPrec PresentModeKHR
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Int32 -> PresentModeKHR
PresentModeKHR Int32
v)))


-- | VkColorSpaceKHR - supported color space of the presentation engine
--
-- = Description
--
-- Note
--
-- In the initial release of the @VK_KHR_surface@ and @VK_KHR_swapchain@
-- extensions, the token @VK_COLORSPACE_SRGB_NONLINEAR_KHR@ was used.
-- Starting in the 2016-05-13 updates to the extension branches, matching
-- release 1.0.13 of the core API specification,
-- 'COLOR_SPACE_SRGB_NONLINEAR_KHR' is used instead for consistency with
-- Vulkan naming rules. The older enum is still available for backwards
-- compatibility.
--
-- Note
--
-- In older versions of this extension 'COLOR_SPACE_DISPLAY_P3_LINEAR_EXT'
-- was misnamed
-- 'Vulkan.Extensions.VK_EXT_swapchain_colorspace.COLOR_SPACE_DCI_P3_LINEAR_EXT'.
-- This has been updated to indicate that it uses RGB color encoding, not
-- XYZ. The old name is deprecated but is maintained for backwards
-- compatibility.
--
-- The color components of non-linear color space swap chain images /must/
-- have had the appropriate transfer function applied. The color space
-- selected for the swap chain image will not affect the processing of data
-- written into the image by the implementation. Vulkan requires that all
-- implementations support the sRGB transfer function by use of an SRGB
-- pixel format. Other transfer functions, such as SMPTE 170M or SMPTE2084,
-- /can/ be performed by the application shader. This extension defines
-- enums for 'ColorSpaceKHR' that correspond to the following color spaces:
--
-- +--------------+----------+----------+----------+-------------+------------+
-- | Name         | Red      | Green    | Blue     | White-point | Transfer   |
-- |              | Primary  | Primary  | Primary  |             | function   |
-- +==============+==========+==========+==========+=============+============+
-- | DCI-P3       | 1.000,   | 0.000,   | 0.000,   | 0.3333,     | DCI P3     |
-- |              | 0.000    | 1.000    | 0.000    | 0.3333      |            |
-- +--------------+----------+----------+----------+-------------+------------+
-- | Display-P3   | 0.680,   | 0.265,   | 0.150,   | 0.3127,     | Display-P3 |
-- |              | 0.320    | 0.690    | 0.060    | 0.3290      |            |
-- |              |          |          |          | (D65)       |            |
-- +--------------+----------+----------+----------+-------------+------------+
-- | BT709        | 0.640,   | 0.300,   | 0.150,   | 0.3127,     | ITU (SMPTE |
-- |              | 0.330    | 0.600    | 0.060    | 0.3290      | 170M)      |
-- |              |          |          |          | (D65)       |            |
-- +--------------+----------+----------+----------+-------------+------------+
-- | sRGB         | 0.640,   | 0.300,   | 0.150,   | 0.3127,     | sRGB       |
-- |              | 0.330    | 0.600    | 0.060    | 0.3290      |            |
-- |              |          |          |          | (D65)       |            |
-- +--------------+----------+----------+----------+-------------+------------+
-- | extended     | 0.640,   | 0.300,   | 0.150,   | 0.3127,     | extended   |
-- | sRGB         | 0.330    | 0.600    | 0.060    | 0.3290      | sRGB       |
-- |              |          |          |          | (D65)       |            |
-- +--------------+----------+----------+----------+-------------+------------+
-- | HDR10_ST2084 | 0.708,   | 0.170,   | 0.131,   | 0.3127,     | ST2084 PQ  |
-- |              | 0.292    | 0.797    | 0.046    | 0.3290      |            |
-- |              |          |          |          | (D65)       |            |
-- +--------------+----------+----------+----------+-------------+------------+
-- | DOLBYVISION  | 0.708,   | 0.170,   | 0.131,   | 0.3127,     | ST2084 PQ  |
-- |              | 0.292    | 0.797    | 0.046    | 0.3290      |            |
-- |              |          |          |          | (D65)       |            |
-- +--------------+----------+----------+----------+-------------+------------+
-- | HDR10_HLG    | 0.708,   | 0.170,   | 0.131,   | 0.3127,     | HLG        |
-- |              | 0.292    | 0.797    | 0.046    | 0.3290      |            |
-- |              |          |          |          | (D65)       |            |
-- +--------------+----------+----------+----------+-------------+------------+
-- | AdobeRGB     | 0.640,   | 0.210,   | 0.150,   | 0.3127,     | AdobeRGB   |
-- |              | 0.330    | 0.710    | 0.060    | 0.3290      |            |
-- |              |          |          |          | (D65)       |            |
-- +--------------+----------+----------+----------+-------------+------------+
--
-- Color Spaces and Attributes
--
-- The transfer functions are described in the “Transfer Functions” chapter
-- of the
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#data-format Khronos Data Format Specification>.
--
-- Except Display-P3 OETF, which is:
--
-- \[\begin{aligned}
-- E & =
--   \begin{cases}
--     1.055 \times L^{1 \over 2.4} - 0.055 & \text{for}\  0.0030186 \leq L \leq 1 \\
--     12.92 \times L                       & \text{for}\  0 \leq L < 0.0030186
--   \end{cases}
-- \end{aligned}\]
--
-- where L is the linear value of a color channel and E is the encoded
-- value (as stored in the image in memory).
--
-- Note
--
-- For most uses, the sRGB OETF is equivalent.
--
-- = See Also
--
-- 'SurfaceFormatKHR',
-- 'Vulkan.Extensions.VK_KHR_swapchain.SwapchainCreateInfoKHR'
newtype ColorSpaceKHR = ColorSpaceKHR Int32
  deriving newtype (ColorSpaceKHR -> ColorSpaceKHR -> Bool
(ColorSpaceKHR -> ColorSpaceKHR -> Bool)
-> (ColorSpaceKHR -> ColorSpaceKHR -> Bool) -> Eq ColorSpaceKHR
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ColorSpaceKHR -> ColorSpaceKHR -> Bool
$c/= :: ColorSpaceKHR -> ColorSpaceKHR -> Bool
== :: ColorSpaceKHR -> ColorSpaceKHR -> Bool
$c== :: ColorSpaceKHR -> ColorSpaceKHR -> Bool
Eq, Eq ColorSpaceKHR
Eq ColorSpaceKHR =>
(ColorSpaceKHR -> ColorSpaceKHR -> Ordering)
-> (ColorSpaceKHR -> ColorSpaceKHR -> Bool)
-> (ColorSpaceKHR -> ColorSpaceKHR -> Bool)
-> (ColorSpaceKHR -> ColorSpaceKHR -> Bool)
-> (ColorSpaceKHR -> ColorSpaceKHR -> Bool)
-> (ColorSpaceKHR -> ColorSpaceKHR -> ColorSpaceKHR)
-> (ColorSpaceKHR -> ColorSpaceKHR -> ColorSpaceKHR)
-> Ord ColorSpaceKHR
ColorSpaceKHR -> ColorSpaceKHR -> Bool
ColorSpaceKHR -> ColorSpaceKHR -> Ordering
ColorSpaceKHR -> ColorSpaceKHR -> ColorSpaceKHR
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 :: ColorSpaceKHR -> ColorSpaceKHR -> ColorSpaceKHR
$cmin :: ColorSpaceKHR -> ColorSpaceKHR -> ColorSpaceKHR
max :: ColorSpaceKHR -> ColorSpaceKHR -> ColorSpaceKHR
$cmax :: ColorSpaceKHR -> ColorSpaceKHR -> ColorSpaceKHR
>= :: ColorSpaceKHR -> ColorSpaceKHR -> Bool
$c>= :: ColorSpaceKHR -> ColorSpaceKHR -> Bool
> :: ColorSpaceKHR -> ColorSpaceKHR -> Bool
$c> :: ColorSpaceKHR -> ColorSpaceKHR -> Bool
<= :: ColorSpaceKHR -> ColorSpaceKHR -> Bool
$c<= :: ColorSpaceKHR -> ColorSpaceKHR -> Bool
< :: ColorSpaceKHR -> ColorSpaceKHR -> Bool
$c< :: ColorSpaceKHR -> ColorSpaceKHR -> Bool
compare :: ColorSpaceKHR -> ColorSpaceKHR -> Ordering
$ccompare :: ColorSpaceKHR -> ColorSpaceKHR -> Ordering
$cp1Ord :: Eq ColorSpaceKHR
Ord, Ptr b -> Int -> IO ColorSpaceKHR
Ptr b -> Int -> ColorSpaceKHR -> IO ()
Ptr ColorSpaceKHR -> IO ColorSpaceKHR
Ptr ColorSpaceKHR -> Int -> IO ColorSpaceKHR
Ptr ColorSpaceKHR -> Int -> ColorSpaceKHR -> IO ()
Ptr ColorSpaceKHR -> ColorSpaceKHR -> IO ()
ColorSpaceKHR -> Int
(ColorSpaceKHR -> Int)
-> (ColorSpaceKHR -> Int)
-> (Ptr ColorSpaceKHR -> Int -> IO ColorSpaceKHR)
-> (Ptr ColorSpaceKHR -> Int -> ColorSpaceKHR -> IO ())
-> (forall b. Ptr b -> Int -> IO ColorSpaceKHR)
-> (forall b. Ptr b -> Int -> ColorSpaceKHR -> IO ())
-> (Ptr ColorSpaceKHR -> IO ColorSpaceKHR)
-> (Ptr ColorSpaceKHR -> ColorSpaceKHR -> IO ())
-> Storable ColorSpaceKHR
forall b. Ptr b -> Int -> IO ColorSpaceKHR
forall b. Ptr b -> Int -> ColorSpaceKHR -> 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 :: Ptr ColorSpaceKHR -> ColorSpaceKHR -> IO ()
$cpoke :: Ptr ColorSpaceKHR -> ColorSpaceKHR -> IO ()
peek :: Ptr ColorSpaceKHR -> IO ColorSpaceKHR
$cpeek :: Ptr ColorSpaceKHR -> IO ColorSpaceKHR
pokeByteOff :: Ptr b -> Int -> ColorSpaceKHR -> IO ()
$cpokeByteOff :: forall b. Ptr b -> Int -> ColorSpaceKHR -> IO ()
peekByteOff :: Ptr b -> Int -> IO ColorSpaceKHR
$cpeekByteOff :: forall b. Ptr b -> Int -> IO ColorSpaceKHR
pokeElemOff :: Ptr ColorSpaceKHR -> Int -> ColorSpaceKHR -> IO ()
$cpokeElemOff :: Ptr ColorSpaceKHR -> Int -> ColorSpaceKHR -> IO ()
peekElemOff :: Ptr ColorSpaceKHR -> Int -> IO ColorSpaceKHR
$cpeekElemOff :: Ptr ColorSpaceKHR -> Int -> IO ColorSpaceKHR
alignment :: ColorSpaceKHR -> Int
$calignment :: ColorSpaceKHR -> Int
sizeOf :: ColorSpaceKHR -> Int
$csizeOf :: ColorSpaceKHR -> Int
Storable, ColorSpaceKHR
ColorSpaceKHR -> Zero ColorSpaceKHR
forall a. a -> Zero a
zero :: ColorSpaceKHR
$czero :: ColorSpaceKHR
Zero)

-- | 'COLOR_SPACE_SRGB_NONLINEAR_KHR' specifies support for the sRGB color
-- space.
pattern $bCOLOR_SPACE_SRGB_NONLINEAR_KHR :: ColorSpaceKHR
$mCOLOR_SPACE_SRGB_NONLINEAR_KHR :: forall r. ColorSpaceKHR -> (Void# -> r) -> (Void# -> r) -> r
COLOR_SPACE_SRGB_NONLINEAR_KHR = ColorSpaceKHR 0
-- | 'COLOR_SPACE_DISPLAY_NATIVE_AMD' specifies support for the display’s
-- native color space. This matches the color space expectations of AMD’s
-- FreeSync2 standard, for displays supporting it.
pattern $bCOLOR_SPACE_DISPLAY_NATIVE_AMD :: ColorSpaceKHR
$mCOLOR_SPACE_DISPLAY_NATIVE_AMD :: forall r. ColorSpaceKHR -> (Void# -> r) -> (Void# -> r) -> r
COLOR_SPACE_DISPLAY_NATIVE_AMD = ColorSpaceKHR 1000213000
-- | 'COLOR_SPACE_EXTENDED_SRGB_NONLINEAR_EXT' specifies support for the
-- extended sRGB color space to be displayed using an sRGB EOTF.
pattern $bCOLOR_SPACE_EXTENDED_SRGB_NONLINEAR_EXT :: ColorSpaceKHR
$mCOLOR_SPACE_EXTENDED_SRGB_NONLINEAR_EXT :: forall r. ColorSpaceKHR -> (Void# -> r) -> (Void# -> r) -> r
COLOR_SPACE_EXTENDED_SRGB_NONLINEAR_EXT = ColorSpaceKHR 1000104014
-- | 'COLOR_SPACE_PASS_THROUGH_EXT' specifies that color components are used
-- “as is”. This is intended to allow applications to supply data for color
-- spaces not described here.
pattern $bCOLOR_SPACE_PASS_THROUGH_EXT :: ColorSpaceKHR
$mCOLOR_SPACE_PASS_THROUGH_EXT :: forall r. ColorSpaceKHR -> (Void# -> r) -> (Void# -> r) -> r
COLOR_SPACE_PASS_THROUGH_EXT = ColorSpaceKHR 1000104013
-- | 'COLOR_SPACE_ADOBERGB_NONLINEAR_EXT' specifies support for the AdobeRGB
-- color space to be displayed using the Gamma 2.2 EOTF.
pattern $bCOLOR_SPACE_ADOBERGB_NONLINEAR_EXT :: ColorSpaceKHR
$mCOLOR_SPACE_ADOBERGB_NONLINEAR_EXT :: forall r. ColorSpaceKHR -> (Void# -> r) -> (Void# -> r) -> r
COLOR_SPACE_ADOBERGB_NONLINEAR_EXT = ColorSpaceKHR 1000104012
-- | 'COLOR_SPACE_ADOBERGB_LINEAR_EXT' specifies support for the AdobeRGB
-- color space to be displayed using a linear EOTF.
pattern $bCOLOR_SPACE_ADOBERGB_LINEAR_EXT :: ColorSpaceKHR
$mCOLOR_SPACE_ADOBERGB_LINEAR_EXT :: forall r. ColorSpaceKHR -> (Void# -> r) -> (Void# -> r) -> r
COLOR_SPACE_ADOBERGB_LINEAR_EXT = ColorSpaceKHR 1000104011
-- | 'COLOR_SPACE_HDR10_HLG_EXT' specifies support for the HDR10 (BT2020
-- color space) to be displayed using the Hybrid Log Gamma (HLG) EOTF.
pattern $bCOLOR_SPACE_HDR10_HLG_EXT :: ColorSpaceKHR
$mCOLOR_SPACE_HDR10_HLG_EXT :: forall r. ColorSpaceKHR -> (Void# -> r) -> (Void# -> r) -> r
COLOR_SPACE_HDR10_HLG_EXT = ColorSpaceKHR 1000104010
-- | 'COLOR_SPACE_DOLBYVISION_EXT' specifies support for the Dolby Vision
-- (BT2020 color space), proprietary encoding, to be displayed using the
-- SMPTE ST2084 EOTF.
pattern $bCOLOR_SPACE_DOLBYVISION_EXT :: ColorSpaceKHR
$mCOLOR_SPACE_DOLBYVISION_EXT :: forall r. ColorSpaceKHR -> (Void# -> r) -> (Void# -> r) -> r
COLOR_SPACE_DOLBYVISION_EXT = ColorSpaceKHR 1000104009
-- | 'COLOR_SPACE_HDR10_ST2084_EXT' specifies support for the HDR10 (BT2020
-- color) space to be displayed using the SMPTE ST2084 Perceptual Quantizer
-- (PQ) EOTF.
pattern $bCOLOR_SPACE_HDR10_ST2084_EXT :: ColorSpaceKHR
$mCOLOR_SPACE_HDR10_ST2084_EXT :: forall r. ColorSpaceKHR -> (Void# -> r) -> (Void# -> r) -> r
COLOR_SPACE_HDR10_ST2084_EXT = ColorSpaceKHR 1000104008
-- | 'COLOR_SPACE_BT2020_LINEAR_EXT' specifies support for the BT2020 color
-- space to be displayed using a linear EOTF.
pattern $bCOLOR_SPACE_BT2020_LINEAR_EXT :: ColorSpaceKHR
$mCOLOR_SPACE_BT2020_LINEAR_EXT :: forall r. ColorSpaceKHR -> (Void# -> r) -> (Void# -> r) -> r
COLOR_SPACE_BT2020_LINEAR_EXT = ColorSpaceKHR 1000104007
-- | 'COLOR_SPACE_BT709_NONLINEAR_EXT' specifies support for the BT709 color
-- space to be displayed using the SMPTE 170M EOTF.
pattern $bCOLOR_SPACE_BT709_NONLINEAR_EXT :: ColorSpaceKHR
$mCOLOR_SPACE_BT709_NONLINEAR_EXT :: forall r. ColorSpaceKHR -> (Void# -> r) -> (Void# -> r) -> r
COLOR_SPACE_BT709_NONLINEAR_EXT = ColorSpaceKHR 1000104006
-- | 'COLOR_SPACE_BT709_LINEAR_EXT' specifies support for the BT709 color
-- space to be displayed using a linear EOTF.
pattern $bCOLOR_SPACE_BT709_LINEAR_EXT :: ColorSpaceKHR
$mCOLOR_SPACE_BT709_LINEAR_EXT :: forall r. ColorSpaceKHR -> (Void# -> r) -> (Void# -> r) -> r
COLOR_SPACE_BT709_LINEAR_EXT = ColorSpaceKHR 1000104005
-- | 'COLOR_SPACE_DCI_P3_NONLINEAR_EXT' specifies support for the DCI-P3
-- color space to be displayed using the DCI-P3 EOTF. Note that values in
-- such an image are interpreted as XYZ encoded color data by the
-- presentation engine.
pattern $bCOLOR_SPACE_DCI_P3_NONLINEAR_EXT :: ColorSpaceKHR
$mCOLOR_SPACE_DCI_P3_NONLINEAR_EXT :: forall r. ColorSpaceKHR -> (Void# -> r) -> (Void# -> r) -> r
COLOR_SPACE_DCI_P3_NONLINEAR_EXT = ColorSpaceKHR 1000104004
-- | 'COLOR_SPACE_DISPLAY_P3_LINEAR_EXT' specifies support for the Display-P3
-- color space to be displayed using a linear EOTF.
pattern $bCOLOR_SPACE_DISPLAY_P3_LINEAR_EXT :: ColorSpaceKHR
$mCOLOR_SPACE_DISPLAY_P3_LINEAR_EXT :: forall r. ColorSpaceKHR -> (Void# -> r) -> (Void# -> r) -> r
COLOR_SPACE_DISPLAY_P3_LINEAR_EXT = ColorSpaceKHR 1000104003
-- | 'COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT' specifies support for the
-- extended sRGB color space to be displayed using a linear EOTF.
pattern $bCOLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT :: ColorSpaceKHR
$mCOLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT :: forall r. ColorSpaceKHR -> (Void# -> r) -> (Void# -> r) -> r
COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT = ColorSpaceKHR 1000104002
-- | 'COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT' specifies support for the
-- Display-P3 color space to be displayed using an sRGB-like EOTF (defined
-- below).
pattern $bCOLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT :: ColorSpaceKHR
$mCOLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT :: forall r. ColorSpaceKHR -> (Void# -> r) -> (Void# -> r) -> r
COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT = ColorSpaceKHR 1000104001
{-# complete COLOR_SPACE_SRGB_NONLINEAR_KHR,
             COLOR_SPACE_DISPLAY_NATIVE_AMD,
             COLOR_SPACE_EXTENDED_SRGB_NONLINEAR_EXT,
             COLOR_SPACE_PASS_THROUGH_EXT,
             COLOR_SPACE_ADOBERGB_NONLINEAR_EXT,
             COLOR_SPACE_ADOBERGB_LINEAR_EXT,
             COLOR_SPACE_HDR10_HLG_EXT,
             COLOR_SPACE_DOLBYVISION_EXT,
             COLOR_SPACE_HDR10_ST2084_EXT,
             COLOR_SPACE_BT2020_LINEAR_EXT,
             COLOR_SPACE_BT709_NONLINEAR_EXT,
             COLOR_SPACE_BT709_LINEAR_EXT,
             COLOR_SPACE_DCI_P3_NONLINEAR_EXT,
             COLOR_SPACE_DISPLAY_P3_LINEAR_EXT,
             COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT,
             COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT :: ColorSpaceKHR #-}

instance Show ColorSpaceKHR where
  showsPrec :: Int -> ColorSpaceKHR -> ShowS
showsPrec p :: Int
p = \case
    COLOR_SPACE_SRGB_NONLINEAR_KHR -> String -> ShowS
showString "COLOR_SPACE_SRGB_NONLINEAR_KHR"
    COLOR_SPACE_DISPLAY_NATIVE_AMD -> String -> ShowS
showString "COLOR_SPACE_DISPLAY_NATIVE_AMD"
    COLOR_SPACE_EXTENDED_SRGB_NONLINEAR_EXT -> String -> ShowS
showString "COLOR_SPACE_EXTENDED_SRGB_NONLINEAR_EXT"
    COLOR_SPACE_PASS_THROUGH_EXT -> String -> ShowS
showString "COLOR_SPACE_PASS_THROUGH_EXT"
    COLOR_SPACE_ADOBERGB_NONLINEAR_EXT -> String -> ShowS
showString "COLOR_SPACE_ADOBERGB_NONLINEAR_EXT"
    COLOR_SPACE_ADOBERGB_LINEAR_EXT -> String -> ShowS
showString "COLOR_SPACE_ADOBERGB_LINEAR_EXT"
    COLOR_SPACE_HDR10_HLG_EXT -> String -> ShowS
showString "COLOR_SPACE_HDR10_HLG_EXT"
    COLOR_SPACE_DOLBYVISION_EXT -> String -> ShowS
showString "COLOR_SPACE_DOLBYVISION_EXT"
    COLOR_SPACE_HDR10_ST2084_EXT -> String -> ShowS
showString "COLOR_SPACE_HDR10_ST2084_EXT"
    COLOR_SPACE_BT2020_LINEAR_EXT -> String -> ShowS
showString "COLOR_SPACE_BT2020_LINEAR_EXT"
    COLOR_SPACE_BT709_NONLINEAR_EXT -> String -> ShowS
showString "COLOR_SPACE_BT709_NONLINEAR_EXT"
    COLOR_SPACE_BT709_LINEAR_EXT -> String -> ShowS
showString "COLOR_SPACE_BT709_LINEAR_EXT"
    COLOR_SPACE_DCI_P3_NONLINEAR_EXT -> String -> ShowS
showString "COLOR_SPACE_DCI_P3_NONLINEAR_EXT"
    COLOR_SPACE_DISPLAY_P3_LINEAR_EXT -> String -> ShowS
showString "COLOR_SPACE_DISPLAY_P3_LINEAR_EXT"
    COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT -> String -> ShowS
showString "COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT"
    COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT -> String -> ShowS
showString "COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT"
    ColorSpaceKHR x :: Int32
x -> Bool -> ShowS -> ShowS
showParen (Int
p Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
>= 11) (String -> ShowS
showString "ColorSpaceKHR " ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> Int32 -> ShowS
forall a. Show a => Int -> a -> ShowS
showsPrec 11 Int32
x)

instance Read ColorSpaceKHR where
  readPrec :: ReadPrec ColorSpaceKHR
readPrec = ReadPrec ColorSpaceKHR -> ReadPrec ColorSpaceKHR
forall a. ReadPrec a -> ReadPrec a
parens ([(String, ReadPrec ColorSpaceKHR)] -> ReadPrec ColorSpaceKHR
forall a. [(String, ReadPrec a)] -> ReadPrec a
choose [("COLOR_SPACE_SRGB_NONLINEAR_KHR", ColorSpaceKHR -> ReadPrec ColorSpaceKHR
forall (f :: * -> *) a. Applicative f => a -> f a
pure ColorSpaceKHR
COLOR_SPACE_SRGB_NONLINEAR_KHR)
                            , ("COLOR_SPACE_DISPLAY_NATIVE_AMD", ColorSpaceKHR -> ReadPrec ColorSpaceKHR
forall (f :: * -> *) a. Applicative f => a -> f a
pure ColorSpaceKHR
COLOR_SPACE_DISPLAY_NATIVE_AMD)
                            , ("COLOR_SPACE_EXTENDED_SRGB_NONLINEAR_EXT", ColorSpaceKHR -> ReadPrec ColorSpaceKHR
forall (f :: * -> *) a. Applicative f => a -> f a
pure ColorSpaceKHR
COLOR_SPACE_EXTENDED_SRGB_NONLINEAR_EXT)
                            , ("COLOR_SPACE_PASS_THROUGH_EXT", ColorSpaceKHR -> ReadPrec ColorSpaceKHR
forall (f :: * -> *) a. Applicative f => a -> f a
pure ColorSpaceKHR
COLOR_SPACE_PASS_THROUGH_EXT)
                            , ("COLOR_SPACE_ADOBERGB_NONLINEAR_EXT", ColorSpaceKHR -> ReadPrec ColorSpaceKHR
forall (f :: * -> *) a. Applicative f => a -> f a
pure ColorSpaceKHR
COLOR_SPACE_ADOBERGB_NONLINEAR_EXT)
                            , ("COLOR_SPACE_ADOBERGB_LINEAR_EXT", ColorSpaceKHR -> ReadPrec ColorSpaceKHR
forall (f :: * -> *) a. Applicative f => a -> f a
pure ColorSpaceKHR
COLOR_SPACE_ADOBERGB_LINEAR_EXT)
                            , ("COLOR_SPACE_HDR10_HLG_EXT", ColorSpaceKHR -> ReadPrec ColorSpaceKHR
forall (f :: * -> *) a. Applicative f => a -> f a
pure ColorSpaceKHR
COLOR_SPACE_HDR10_HLG_EXT)
                            , ("COLOR_SPACE_DOLBYVISION_EXT", ColorSpaceKHR -> ReadPrec ColorSpaceKHR
forall (f :: * -> *) a. Applicative f => a -> f a
pure ColorSpaceKHR
COLOR_SPACE_DOLBYVISION_EXT)
                            , ("COLOR_SPACE_HDR10_ST2084_EXT", ColorSpaceKHR -> ReadPrec ColorSpaceKHR
forall (f :: * -> *) a. Applicative f => a -> f a
pure ColorSpaceKHR
COLOR_SPACE_HDR10_ST2084_EXT)
                            , ("COLOR_SPACE_BT2020_LINEAR_EXT", ColorSpaceKHR -> ReadPrec ColorSpaceKHR
forall (f :: * -> *) a. Applicative f => a -> f a
pure ColorSpaceKHR
COLOR_SPACE_BT2020_LINEAR_EXT)
                            , ("COLOR_SPACE_BT709_NONLINEAR_EXT", ColorSpaceKHR -> ReadPrec ColorSpaceKHR
forall (f :: * -> *) a. Applicative f => a -> f a
pure ColorSpaceKHR
COLOR_SPACE_BT709_NONLINEAR_EXT)
                            , ("COLOR_SPACE_BT709_LINEAR_EXT", ColorSpaceKHR -> ReadPrec ColorSpaceKHR
forall (f :: * -> *) a. Applicative f => a -> f a
pure ColorSpaceKHR
COLOR_SPACE_BT709_LINEAR_EXT)
                            , ("COLOR_SPACE_DCI_P3_NONLINEAR_EXT", ColorSpaceKHR -> ReadPrec ColorSpaceKHR
forall (f :: * -> *) a. Applicative f => a -> f a
pure ColorSpaceKHR
COLOR_SPACE_DCI_P3_NONLINEAR_EXT)
                            , ("COLOR_SPACE_DISPLAY_P3_LINEAR_EXT", ColorSpaceKHR -> ReadPrec ColorSpaceKHR
forall (f :: * -> *) a. Applicative f => a -> f a
pure ColorSpaceKHR
COLOR_SPACE_DISPLAY_P3_LINEAR_EXT)
                            , ("COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT", ColorSpaceKHR -> ReadPrec ColorSpaceKHR
forall (f :: * -> *) a. Applicative f => a -> f a
pure ColorSpaceKHR
COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT)
                            , ("COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT", ColorSpaceKHR -> ReadPrec ColorSpaceKHR
forall (f :: * -> *) a. Applicative f => a -> f a
pure ColorSpaceKHR
COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT)]
                     ReadPrec ColorSpaceKHR
-> ReadPrec ColorSpaceKHR -> ReadPrec ColorSpaceKHR
forall a. ReadPrec a -> ReadPrec a -> ReadPrec a
+++
                     Int -> ReadPrec ColorSpaceKHR -> ReadPrec ColorSpaceKHR
forall a. Int -> ReadPrec a -> ReadPrec a
prec 10 (do
                       Lexeme -> ReadPrec ()
expectP (String -> Lexeme
Ident "ColorSpaceKHR")
                       Int32
v <- ReadPrec Int32 -> ReadPrec Int32
forall a. ReadPrec a -> ReadPrec a
step ReadPrec Int32
forall a. Read a => ReadPrec a
readPrec
                       ColorSpaceKHR -> ReadPrec ColorSpaceKHR
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Int32 -> ColorSpaceKHR
ColorSpaceKHR Int32
v)))


-- | VkCompositeAlphaFlagBitsKHR - alpha compositing modes supported on a
-- device
--
-- = Description
--
-- These values are described as follows:
--
-- = See Also
--
-- 'CompositeAlphaFlagsKHR',
-- 'Vulkan.Extensions.VK_KHR_swapchain.SwapchainCreateInfoKHR'
newtype CompositeAlphaFlagBitsKHR = CompositeAlphaFlagBitsKHR Flags
  deriving newtype (CompositeAlphaFlagsKHR -> CompositeAlphaFlagsKHR -> Bool
(CompositeAlphaFlagsKHR -> CompositeAlphaFlagsKHR -> Bool)
-> (CompositeAlphaFlagsKHR -> CompositeAlphaFlagsKHR -> Bool)
-> Eq CompositeAlphaFlagsKHR
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CompositeAlphaFlagsKHR -> CompositeAlphaFlagsKHR -> Bool
$c/= :: CompositeAlphaFlagsKHR -> CompositeAlphaFlagsKHR -> Bool
== :: CompositeAlphaFlagsKHR -> CompositeAlphaFlagsKHR -> Bool
$c== :: CompositeAlphaFlagsKHR -> CompositeAlphaFlagsKHR -> Bool
Eq, Eq CompositeAlphaFlagsKHR
Eq CompositeAlphaFlagsKHR =>
(CompositeAlphaFlagsKHR -> CompositeAlphaFlagsKHR -> Ordering)
-> (CompositeAlphaFlagsKHR -> CompositeAlphaFlagsKHR -> Bool)
-> (CompositeAlphaFlagsKHR -> CompositeAlphaFlagsKHR -> Bool)
-> (CompositeAlphaFlagsKHR -> CompositeAlphaFlagsKHR -> Bool)
-> (CompositeAlphaFlagsKHR -> CompositeAlphaFlagsKHR -> Bool)
-> (CompositeAlphaFlagsKHR
    -> CompositeAlphaFlagsKHR -> CompositeAlphaFlagsKHR)
-> (CompositeAlphaFlagsKHR
    -> CompositeAlphaFlagsKHR -> CompositeAlphaFlagsKHR)
-> Ord CompositeAlphaFlagsKHR
CompositeAlphaFlagsKHR -> CompositeAlphaFlagsKHR -> Bool
CompositeAlphaFlagsKHR -> CompositeAlphaFlagsKHR -> Ordering
CompositeAlphaFlagsKHR
-> CompositeAlphaFlagsKHR -> CompositeAlphaFlagsKHR
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 :: CompositeAlphaFlagsKHR
-> CompositeAlphaFlagsKHR -> CompositeAlphaFlagsKHR
$cmin :: CompositeAlphaFlagsKHR
-> CompositeAlphaFlagsKHR -> CompositeAlphaFlagsKHR
max :: CompositeAlphaFlagsKHR
-> CompositeAlphaFlagsKHR -> CompositeAlphaFlagsKHR
$cmax :: CompositeAlphaFlagsKHR
-> CompositeAlphaFlagsKHR -> CompositeAlphaFlagsKHR
>= :: CompositeAlphaFlagsKHR -> CompositeAlphaFlagsKHR -> Bool
$c>= :: CompositeAlphaFlagsKHR -> CompositeAlphaFlagsKHR -> Bool
> :: CompositeAlphaFlagsKHR -> CompositeAlphaFlagsKHR -> Bool
$c> :: CompositeAlphaFlagsKHR -> CompositeAlphaFlagsKHR -> Bool
<= :: CompositeAlphaFlagsKHR -> CompositeAlphaFlagsKHR -> Bool
$c<= :: CompositeAlphaFlagsKHR -> CompositeAlphaFlagsKHR -> Bool
< :: CompositeAlphaFlagsKHR -> CompositeAlphaFlagsKHR -> Bool
$c< :: CompositeAlphaFlagsKHR -> CompositeAlphaFlagsKHR -> Bool
compare :: CompositeAlphaFlagsKHR -> CompositeAlphaFlagsKHR -> Ordering
$ccompare :: CompositeAlphaFlagsKHR -> CompositeAlphaFlagsKHR -> Ordering
$cp1Ord :: Eq CompositeAlphaFlagsKHR
Ord, Ptr b -> Int -> IO CompositeAlphaFlagsKHR
Ptr b -> Int -> CompositeAlphaFlagsKHR -> IO ()
Ptr CompositeAlphaFlagsKHR -> IO CompositeAlphaFlagsKHR
Ptr CompositeAlphaFlagsKHR -> Int -> IO CompositeAlphaFlagsKHR
Ptr CompositeAlphaFlagsKHR
-> Int -> CompositeAlphaFlagsKHR -> IO ()
Ptr CompositeAlphaFlagsKHR -> CompositeAlphaFlagsKHR -> IO ()
CompositeAlphaFlagsKHR -> Int
(CompositeAlphaFlagsKHR -> Int)
-> (CompositeAlphaFlagsKHR -> Int)
-> (Ptr CompositeAlphaFlagsKHR -> Int -> IO CompositeAlphaFlagsKHR)
-> (Ptr CompositeAlphaFlagsKHR
    -> Int -> CompositeAlphaFlagsKHR -> IO ())
-> (forall b. Ptr b -> Int -> IO CompositeAlphaFlagsKHR)
-> (forall b. Ptr b -> Int -> CompositeAlphaFlagsKHR -> IO ())
-> (Ptr CompositeAlphaFlagsKHR -> IO CompositeAlphaFlagsKHR)
-> (Ptr CompositeAlphaFlagsKHR -> CompositeAlphaFlagsKHR -> IO ())
-> Storable CompositeAlphaFlagsKHR
forall b. Ptr b -> Int -> IO CompositeAlphaFlagsKHR
forall b. Ptr b -> Int -> CompositeAlphaFlagsKHR -> 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 :: Ptr CompositeAlphaFlagsKHR -> CompositeAlphaFlagsKHR -> IO ()
$cpoke :: Ptr CompositeAlphaFlagsKHR -> CompositeAlphaFlagsKHR -> IO ()
peek :: Ptr CompositeAlphaFlagsKHR -> IO CompositeAlphaFlagsKHR
$cpeek :: Ptr CompositeAlphaFlagsKHR -> IO CompositeAlphaFlagsKHR
pokeByteOff :: Ptr b -> Int -> CompositeAlphaFlagsKHR -> IO ()
$cpokeByteOff :: forall b. Ptr b -> Int -> CompositeAlphaFlagsKHR -> IO ()
peekByteOff :: Ptr b -> Int -> IO CompositeAlphaFlagsKHR
$cpeekByteOff :: forall b. Ptr b -> Int -> IO CompositeAlphaFlagsKHR
pokeElemOff :: Ptr CompositeAlphaFlagsKHR
-> Int -> CompositeAlphaFlagsKHR -> IO ()
$cpokeElemOff :: Ptr CompositeAlphaFlagsKHR
-> Int -> CompositeAlphaFlagsKHR -> IO ()
peekElemOff :: Ptr CompositeAlphaFlagsKHR -> Int -> IO CompositeAlphaFlagsKHR
$cpeekElemOff :: Ptr CompositeAlphaFlagsKHR -> Int -> IO CompositeAlphaFlagsKHR
alignment :: CompositeAlphaFlagsKHR -> Int
$calignment :: CompositeAlphaFlagsKHR -> Int
sizeOf :: CompositeAlphaFlagsKHR -> Int
$csizeOf :: CompositeAlphaFlagsKHR -> Int
Storable, CompositeAlphaFlagsKHR
CompositeAlphaFlagsKHR -> Zero CompositeAlphaFlagsKHR
forall a. a -> Zero a
zero :: CompositeAlphaFlagsKHR
$czero :: CompositeAlphaFlagsKHR
Zero, Eq CompositeAlphaFlagsKHR
CompositeAlphaFlagsKHR
Eq CompositeAlphaFlagsKHR =>
(CompositeAlphaFlagsKHR
 -> CompositeAlphaFlagsKHR -> CompositeAlphaFlagsKHR)
-> (CompositeAlphaFlagsKHR
    -> CompositeAlphaFlagsKHR -> CompositeAlphaFlagsKHR)
-> (CompositeAlphaFlagsKHR
    -> CompositeAlphaFlagsKHR -> CompositeAlphaFlagsKHR)
-> (CompositeAlphaFlagsKHR -> CompositeAlphaFlagsKHR)
-> (CompositeAlphaFlagsKHR -> Int -> CompositeAlphaFlagsKHR)
-> (CompositeAlphaFlagsKHR -> Int -> CompositeAlphaFlagsKHR)
-> CompositeAlphaFlagsKHR
-> (Int -> CompositeAlphaFlagsKHR)
-> (CompositeAlphaFlagsKHR -> Int -> CompositeAlphaFlagsKHR)
-> (CompositeAlphaFlagsKHR -> Int -> CompositeAlphaFlagsKHR)
-> (CompositeAlphaFlagsKHR -> Int -> CompositeAlphaFlagsKHR)
-> (CompositeAlphaFlagsKHR -> Int -> Bool)
-> (CompositeAlphaFlagsKHR -> Maybe Int)
-> (CompositeAlphaFlagsKHR -> Int)
-> (CompositeAlphaFlagsKHR -> Bool)
-> (CompositeAlphaFlagsKHR -> Int -> CompositeAlphaFlagsKHR)
-> (CompositeAlphaFlagsKHR -> Int -> CompositeAlphaFlagsKHR)
-> (CompositeAlphaFlagsKHR -> Int -> CompositeAlphaFlagsKHR)
-> (CompositeAlphaFlagsKHR -> Int -> CompositeAlphaFlagsKHR)
-> (CompositeAlphaFlagsKHR -> Int -> CompositeAlphaFlagsKHR)
-> (CompositeAlphaFlagsKHR -> Int -> CompositeAlphaFlagsKHR)
-> (CompositeAlphaFlagsKHR -> Int)
-> Bits CompositeAlphaFlagsKHR
Int -> CompositeAlphaFlagsKHR
CompositeAlphaFlagsKHR -> Bool
CompositeAlphaFlagsKHR -> Int
CompositeAlphaFlagsKHR -> Maybe Int
CompositeAlphaFlagsKHR -> CompositeAlphaFlagsKHR
CompositeAlphaFlagsKHR -> Int -> Bool
CompositeAlphaFlagsKHR -> Int -> CompositeAlphaFlagsKHR
CompositeAlphaFlagsKHR
-> CompositeAlphaFlagsKHR -> CompositeAlphaFlagsKHR
forall a.
Eq a =>
(a -> a -> a)
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> a
-> (Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> Bool)
-> (a -> Maybe Int)
-> (a -> Int)
-> (a -> Bool)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int)
-> Bits a
popCount :: CompositeAlphaFlagsKHR -> Int
$cpopCount :: CompositeAlphaFlagsKHR -> Int
rotateR :: CompositeAlphaFlagsKHR -> Int -> CompositeAlphaFlagsKHR
$crotateR :: CompositeAlphaFlagsKHR -> Int -> CompositeAlphaFlagsKHR
rotateL :: CompositeAlphaFlagsKHR -> Int -> CompositeAlphaFlagsKHR
$crotateL :: CompositeAlphaFlagsKHR -> Int -> CompositeAlphaFlagsKHR
unsafeShiftR :: CompositeAlphaFlagsKHR -> Int -> CompositeAlphaFlagsKHR
$cunsafeShiftR :: CompositeAlphaFlagsKHR -> Int -> CompositeAlphaFlagsKHR
shiftR :: CompositeAlphaFlagsKHR -> Int -> CompositeAlphaFlagsKHR
$cshiftR :: CompositeAlphaFlagsKHR -> Int -> CompositeAlphaFlagsKHR
unsafeShiftL :: CompositeAlphaFlagsKHR -> Int -> CompositeAlphaFlagsKHR
$cunsafeShiftL :: CompositeAlphaFlagsKHR -> Int -> CompositeAlphaFlagsKHR
shiftL :: CompositeAlphaFlagsKHR -> Int -> CompositeAlphaFlagsKHR
$cshiftL :: CompositeAlphaFlagsKHR -> Int -> CompositeAlphaFlagsKHR
isSigned :: CompositeAlphaFlagsKHR -> Bool
$cisSigned :: CompositeAlphaFlagsKHR -> Bool
bitSize :: CompositeAlphaFlagsKHR -> Int
$cbitSize :: CompositeAlphaFlagsKHR -> Int
bitSizeMaybe :: CompositeAlphaFlagsKHR -> Maybe Int
$cbitSizeMaybe :: CompositeAlphaFlagsKHR -> Maybe Int
testBit :: CompositeAlphaFlagsKHR -> Int -> Bool
$ctestBit :: CompositeAlphaFlagsKHR -> Int -> Bool
complementBit :: CompositeAlphaFlagsKHR -> Int -> CompositeAlphaFlagsKHR
$ccomplementBit :: CompositeAlphaFlagsKHR -> Int -> CompositeAlphaFlagsKHR
clearBit :: CompositeAlphaFlagsKHR -> Int -> CompositeAlphaFlagsKHR
$cclearBit :: CompositeAlphaFlagsKHR -> Int -> CompositeAlphaFlagsKHR
setBit :: CompositeAlphaFlagsKHR -> Int -> CompositeAlphaFlagsKHR
$csetBit :: CompositeAlphaFlagsKHR -> Int -> CompositeAlphaFlagsKHR
bit :: Int -> CompositeAlphaFlagsKHR
$cbit :: Int -> CompositeAlphaFlagsKHR
zeroBits :: CompositeAlphaFlagsKHR
$czeroBits :: CompositeAlphaFlagsKHR
rotate :: CompositeAlphaFlagsKHR -> Int -> CompositeAlphaFlagsKHR
$crotate :: CompositeAlphaFlagsKHR -> Int -> CompositeAlphaFlagsKHR
shift :: CompositeAlphaFlagsKHR -> Int -> CompositeAlphaFlagsKHR
$cshift :: CompositeAlphaFlagsKHR -> Int -> CompositeAlphaFlagsKHR
complement :: CompositeAlphaFlagsKHR -> CompositeAlphaFlagsKHR
$ccomplement :: CompositeAlphaFlagsKHR -> CompositeAlphaFlagsKHR
xor :: CompositeAlphaFlagsKHR
-> CompositeAlphaFlagsKHR -> CompositeAlphaFlagsKHR
$cxor :: CompositeAlphaFlagsKHR
-> CompositeAlphaFlagsKHR -> CompositeAlphaFlagsKHR
.|. :: CompositeAlphaFlagsKHR
-> CompositeAlphaFlagsKHR -> CompositeAlphaFlagsKHR
$c.|. :: CompositeAlphaFlagsKHR
-> CompositeAlphaFlagsKHR -> CompositeAlphaFlagsKHR
.&. :: CompositeAlphaFlagsKHR
-> CompositeAlphaFlagsKHR -> CompositeAlphaFlagsKHR
$c.&. :: CompositeAlphaFlagsKHR
-> CompositeAlphaFlagsKHR -> CompositeAlphaFlagsKHR
$cp1Bits :: Eq CompositeAlphaFlagsKHR
Bits)

-- | 'COMPOSITE_ALPHA_OPAQUE_BIT_KHR': The alpha channel, if it exists, of
-- the images is ignored in the compositing process. Instead, the image is
-- treated as if it has a constant alpha of 1.0.
pattern $bCOMPOSITE_ALPHA_OPAQUE_BIT_KHR :: CompositeAlphaFlagsKHR
$mCOMPOSITE_ALPHA_OPAQUE_BIT_KHR :: forall r.
CompositeAlphaFlagsKHR -> (Void# -> r) -> (Void# -> r) -> r
COMPOSITE_ALPHA_OPAQUE_BIT_KHR = CompositeAlphaFlagBitsKHR 0x00000001
-- | 'COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR': The alpha channel, if it
-- exists, of the images is respected in the compositing process. The
-- non-alpha channels of the image are expected to already be multiplied by
-- the alpha channel by the application.
pattern $bCOMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR :: CompositeAlphaFlagsKHR
$mCOMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR :: forall r.
CompositeAlphaFlagsKHR -> (Void# -> r) -> (Void# -> r) -> r
COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR = CompositeAlphaFlagBitsKHR 0x00000002
-- | 'COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR': The alpha channel, if it
-- exists, of the images is respected in the compositing process. The
-- non-alpha channels of the image are not expected to already be
-- multiplied by the alpha channel by the application; instead, the
-- compositor will multiply the non-alpha channels of the image by the
-- alpha channel during compositing.
pattern $bCOMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR :: CompositeAlphaFlagsKHR
$mCOMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR :: forall r.
CompositeAlphaFlagsKHR -> (Void# -> r) -> (Void# -> r) -> r
COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR = CompositeAlphaFlagBitsKHR 0x00000004
-- | 'COMPOSITE_ALPHA_INHERIT_BIT_KHR': The way in which the presentation
-- engine treats the alpha channel in the images is unknown to the Vulkan
-- API. Instead, the application is responsible for setting the composite
-- alpha blending mode using native window system commands. If the
-- application does not set the blending mode using native window system
-- commands, then a platform-specific default will be used.
pattern $bCOMPOSITE_ALPHA_INHERIT_BIT_KHR :: CompositeAlphaFlagsKHR
$mCOMPOSITE_ALPHA_INHERIT_BIT_KHR :: forall r.
CompositeAlphaFlagsKHR -> (Void# -> r) -> (Void# -> r) -> r
COMPOSITE_ALPHA_INHERIT_BIT_KHR = CompositeAlphaFlagBitsKHR 0x00000008

type CompositeAlphaFlagsKHR = CompositeAlphaFlagBitsKHR

instance Show CompositeAlphaFlagBitsKHR where
  showsPrec :: Int -> CompositeAlphaFlagsKHR -> ShowS
showsPrec p :: Int
p = \case
    COMPOSITE_ALPHA_OPAQUE_BIT_KHR -> String -> ShowS
showString "COMPOSITE_ALPHA_OPAQUE_BIT_KHR"
    COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR -> String -> ShowS
showString "COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR"
    COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR -> String -> ShowS
showString "COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR"
    COMPOSITE_ALPHA_INHERIT_BIT_KHR -> String -> ShowS
showString "COMPOSITE_ALPHA_INHERIT_BIT_KHR"
    CompositeAlphaFlagBitsKHR x :: "queueFamilyIndex" ::: Word32
x -> Bool -> ShowS -> ShowS
showParen (Int
p Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
>= 11) (String -> ShowS
showString "CompositeAlphaFlagBitsKHR 0x" ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ("queueFamilyIndex" ::: Word32) -> ShowS
forall a. (Integral a, Show a) => a -> ShowS
showHex "queueFamilyIndex" ::: Word32
x)

instance Read CompositeAlphaFlagBitsKHR where
  readPrec :: ReadPrec CompositeAlphaFlagsKHR
readPrec = ReadPrec CompositeAlphaFlagsKHR -> ReadPrec CompositeAlphaFlagsKHR
forall a. ReadPrec a -> ReadPrec a
parens ([(String, ReadPrec CompositeAlphaFlagsKHR)]
-> ReadPrec CompositeAlphaFlagsKHR
forall a. [(String, ReadPrec a)] -> ReadPrec a
choose [("COMPOSITE_ALPHA_OPAQUE_BIT_KHR", CompositeAlphaFlagsKHR -> ReadPrec CompositeAlphaFlagsKHR
forall (f :: * -> *) a. Applicative f => a -> f a
pure CompositeAlphaFlagsKHR
COMPOSITE_ALPHA_OPAQUE_BIT_KHR)
                            , ("COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR", CompositeAlphaFlagsKHR -> ReadPrec CompositeAlphaFlagsKHR
forall (f :: * -> *) a. Applicative f => a -> f a
pure CompositeAlphaFlagsKHR
COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR)
                            , ("COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR", CompositeAlphaFlagsKHR -> ReadPrec CompositeAlphaFlagsKHR
forall (f :: * -> *) a. Applicative f => a -> f a
pure CompositeAlphaFlagsKHR
COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR)
                            , ("COMPOSITE_ALPHA_INHERIT_BIT_KHR", CompositeAlphaFlagsKHR -> ReadPrec CompositeAlphaFlagsKHR
forall (f :: * -> *) a. Applicative f => a -> f a
pure CompositeAlphaFlagsKHR
COMPOSITE_ALPHA_INHERIT_BIT_KHR)]
                     ReadPrec CompositeAlphaFlagsKHR
-> ReadPrec CompositeAlphaFlagsKHR
-> ReadPrec CompositeAlphaFlagsKHR
forall a. ReadPrec a -> ReadPrec a -> ReadPrec a
+++
                     Int
-> ReadPrec CompositeAlphaFlagsKHR
-> ReadPrec CompositeAlphaFlagsKHR
forall a. Int -> ReadPrec a -> ReadPrec a
prec 10 (do
                       Lexeme -> ReadPrec ()
expectP (String -> Lexeme
Ident "CompositeAlphaFlagBitsKHR")
                       "queueFamilyIndex" ::: Word32
v <- ReadPrec ("queueFamilyIndex" ::: Word32)
-> ReadPrec ("queueFamilyIndex" ::: Word32)
forall a. ReadPrec a -> ReadPrec a
step ReadPrec ("queueFamilyIndex" ::: Word32)
forall a. Read a => ReadPrec a
readPrec
                       CompositeAlphaFlagsKHR -> ReadPrec CompositeAlphaFlagsKHR
forall (f :: * -> *) a. Applicative f => a -> f a
pure (("queueFamilyIndex" ::: Word32) -> CompositeAlphaFlagsKHR
CompositeAlphaFlagBitsKHR "queueFamilyIndex" ::: Word32
v)))


-- | VkSurfaceTransformFlagBitsKHR - presentation transforms supported on a
-- device
--
-- = See Also
--
-- 'Vulkan.Extensions.VK_QCOM_render_pass_transform.CommandBufferInheritanceRenderPassTransformInfoQCOM',
-- 'Vulkan.Extensions.VK_KHR_display.DisplaySurfaceCreateInfoKHR',
-- 'Vulkan.Extensions.VK_QCOM_render_pass_transform.RenderPassTransformBeginInfoQCOM',
-- 'Vulkan.Extensions.VK_EXT_display_surface_counter.SurfaceCapabilities2EXT',
-- 'SurfaceCapabilitiesKHR', 'SurfaceTransformFlagsKHR',
-- 'Vulkan.Extensions.VK_KHR_swapchain.SwapchainCreateInfoKHR'
newtype SurfaceTransformFlagBitsKHR = SurfaceTransformFlagBitsKHR Flags
  deriving newtype (SurfaceTransformFlagsKHR -> SurfaceTransformFlagsKHR -> Bool
(SurfaceTransformFlagsKHR -> SurfaceTransformFlagsKHR -> Bool)
-> (SurfaceTransformFlagsKHR -> SurfaceTransformFlagsKHR -> Bool)
-> Eq SurfaceTransformFlagsKHR
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: SurfaceTransformFlagsKHR -> SurfaceTransformFlagsKHR -> Bool
$c/= :: SurfaceTransformFlagsKHR -> SurfaceTransformFlagsKHR -> Bool
== :: SurfaceTransformFlagsKHR -> SurfaceTransformFlagsKHR -> Bool
$c== :: SurfaceTransformFlagsKHR -> SurfaceTransformFlagsKHR -> Bool
Eq, Eq SurfaceTransformFlagsKHR
Eq SurfaceTransformFlagsKHR =>
(SurfaceTransformFlagsKHR -> SurfaceTransformFlagsKHR -> Ordering)
-> (SurfaceTransformFlagsKHR -> SurfaceTransformFlagsKHR -> Bool)
-> (SurfaceTransformFlagsKHR -> SurfaceTransformFlagsKHR -> Bool)
-> (SurfaceTransformFlagsKHR -> SurfaceTransformFlagsKHR -> Bool)
-> (SurfaceTransformFlagsKHR -> SurfaceTransformFlagsKHR -> Bool)
-> (SurfaceTransformFlagsKHR
    -> SurfaceTransformFlagsKHR -> SurfaceTransformFlagsKHR)
-> (SurfaceTransformFlagsKHR
    -> SurfaceTransformFlagsKHR -> SurfaceTransformFlagsKHR)
-> Ord SurfaceTransformFlagsKHR
SurfaceTransformFlagsKHR -> SurfaceTransformFlagsKHR -> Bool
SurfaceTransformFlagsKHR -> SurfaceTransformFlagsKHR -> Ordering
SurfaceTransformFlagsKHR
-> SurfaceTransformFlagsKHR -> SurfaceTransformFlagsKHR
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 :: SurfaceTransformFlagsKHR
-> SurfaceTransformFlagsKHR -> SurfaceTransformFlagsKHR
$cmin :: SurfaceTransformFlagsKHR
-> SurfaceTransformFlagsKHR -> SurfaceTransformFlagsKHR
max :: SurfaceTransformFlagsKHR
-> SurfaceTransformFlagsKHR -> SurfaceTransformFlagsKHR
$cmax :: SurfaceTransformFlagsKHR
-> SurfaceTransformFlagsKHR -> SurfaceTransformFlagsKHR
>= :: SurfaceTransformFlagsKHR -> SurfaceTransformFlagsKHR -> Bool
$c>= :: SurfaceTransformFlagsKHR -> SurfaceTransformFlagsKHR -> Bool
> :: SurfaceTransformFlagsKHR -> SurfaceTransformFlagsKHR -> Bool
$c> :: SurfaceTransformFlagsKHR -> SurfaceTransformFlagsKHR -> Bool
<= :: SurfaceTransformFlagsKHR -> SurfaceTransformFlagsKHR -> Bool
$c<= :: SurfaceTransformFlagsKHR -> SurfaceTransformFlagsKHR -> Bool
< :: SurfaceTransformFlagsKHR -> SurfaceTransformFlagsKHR -> Bool
$c< :: SurfaceTransformFlagsKHR -> SurfaceTransformFlagsKHR -> Bool
compare :: SurfaceTransformFlagsKHR -> SurfaceTransformFlagsKHR -> Ordering
$ccompare :: SurfaceTransformFlagsKHR -> SurfaceTransformFlagsKHR -> Ordering
$cp1Ord :: Eq SurfaceTransformFlagsKHR
Ord, Ptr b -> Int -> IO SurfaceTransformFlagsKHR
Ptr b -> Int -> SurfaceTransformFlagsKHR -> IO ()
Ptr SurfaceTransformFlagsKHR -> IO SurfaceTransformFlagsKHR
Ptr SurfaceTransformFlagsKHR -> Int -> IO SurfaceTransformFlagsKHR
Ptr SurfaceTransformFlagsKHR
-> Int -> SurfaceTransformFlagsKHR -> IO ()
Ptr SurfaceTransformFlagsKHR -> SurfaceTransformFlagsKHR -> IO ()
SurfaceTransformFlagsKHR -> Int
(SurfaceTransformFlagsKHR -> Int)
-> (SurfaceTransformFlagsKHR -> Int)
-> (Ptr SurfaceTransformFlagsKHR
    -> Int -> IO SurfaceTransformFlagsKHR)
-> (Ptr SurfaceTransformFlagsKHR
    -> Int -> SurfaceTransformFlagsKHR -> IO ())
-> (forall b. Ptr b -> Int -> IO SurfaceTransformFlagsKHR)
-> (forall b. Ptr b -> Int -> SurfaceTransformFlagsKHR -> IO ())
-> (Ptr SurfaceTransformFlagsKHR -> IO SurfaceTransformFlagsKHR)
-> (Ptr SurfaceTransformFlagsKHR
    -> SurfaceTransformFlagsKHR -> IO ())
-> Storable SurfaceTransformFlagsKHR
forall b. Ptr b -> Int -> IO SurfaceTransformFlagsKHR
forall b. Ptr b -> Int -> SurfaceTransformFlagsKHR -> 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 :: Ptr SurfaceTransformFlagsKHR -> SurfaceTransformFlagsKHR -> IO ()
$cpoke :: Ptr SurfaceTransformFlagsKHR -> SurfaceTransformFlagsKHR -> IO ()
peek :: Ptr SurfaceTransformFlagsKHR -> IO SurfaceTransformFlagsKHR
$cpeek :: Ptr SurfaceTransformFlagsKHR -> IO SurfaceTransformFlagsKHR
pokeByteOff :: Ptr b -> Int -> SurfaceTransformFlagsKHR -> IO ()
$cpokeByteOff :: forall b. Ptr b -> Int -> SurfaceTransformFlagsKHR -> IO ()
peekByteOff :: Ptr b -> Int -> IO SurfaceTransformFlagsKHR
$cpeekByteOff :: forall b. Ptr b -> Int -> IO SurfaceTransformFlagsKHR
pokeElemOff :: Ptr SurfaceTransformFlagsKHR
-> Int -> SurfaceTransformFlagsKHR -> IO ()
$cpokeElemOff :: Ptr SurfaceTransformFlagsKHR
-> Int -> SurfaceTransformFlagsKHR -> IO ()
peekElemOff :: Ptr SurfaceTransformFlagsKHR -> Int -> IO SurfaceTransformFlagsKHR
$cpeekElemOff :: Ptr SurfaceTransformFlagsKHR -> Int -> IO SurfaceTransformFlagsKHR
alignment :: SurfaceTransformFlagsKHR -> Int
$calignment :: SurfaceTransformFlagsKHR -> Int
sizeOf :: SurfaceTransformFlagsKHR -> Int
$csizeOf :: SurfaceTransformFlagsKHR -> Int
Storable, SurfaceTransformFlagsKHR
SurfaceTransformFlagsKHR -> Zero SurfaceTransformFlagsKHR
forall a. a -> Zero a
zero :: SurfaceTransformFlagsKHR
$czero :: SurfaceTransformFlagsKHR
Zero, Eq SurfaceTransformFlagsKHR
SurfaceTransformFlagsKHR
Eq SurfaceTransformFlagsKHR =>
(SurfaceTransformFlagsKHR
 -> SurfaceTransformFlagsKHR -> SurfaceTransformFlagsKHR)
-> (SurfaceTransformFlagsKHR
    -> SurfaceTransformFlagsKHR -> SurfaceTransformFlagsKHR)
-> (SurfaceTransformFlagsKHR
    -> SurfaceTransformFlagsKHR -> SurfaceTransformFlagsKHR)
-> (SurfaceTransformFlagsKHR -> SurfaceTransformFlagsKHR)
-> (SurfaceTransformFlagsKHR -> Int -> SurfaceTransformFlagsKHR)
-> (SurfaceTransformFlagsKHR -> Int -> SurfaceTransformFlagsKHR)
-> SurfaceTransformFlagsKHR
-> (Int -> SurfaceTransformFlagsKHR)
-> (SurfaceTransformFlagsKHR -> Int -> SurfaceTransformFlagsKHR)
-> (SurfaceTransformFlagsKHR -> Int -> SurfaceTransformFlagsKHR)
-> (SurfaceTransformFlagsKHR -> Int -> SurfaceTransformFlagsKHR)
-> (SurfaceTransformFlagsKHR -> Int -> Bool)
-> (SurfaceTransformFlagsKHR -> Maybe Int)
-> (SurfaceTransformFlagsKHR -> Int)
-> (SurfaceTransformFlagsKHR -> Bool)
-> (SurfaceTransformFlagsKHR -> Int -> SurfaceTransformFlagsKHR)
-> (SurfaceTransformFlagsKHR -> Int -> SurfaceTransformFlagsKHR)
-> (SurfaceTransformFlagsKHR -> Int -> SurfaceTransformFlagsKHR)
-> (SurfaceTransformFlagsKHR -> Int -> SurfaceTransformFlagsKHR)
-> (SurfaceTransformFlagsKHR -> Int -> SurfaceTransformFlagsKHR)
-> (SurfaceTransformFlagsKHR -> Int -> SurfaceTransformFlagsKHR)
-> (SurfaceTransformFlagsKHR -> Int)
-> Bits SurfaceTransformFlagsKHR
Int -> SurfaceTransformFlagsKHR
SurfaceTransformFlagsKHR -> Bool
SurfaceTransformFlagsKHR -> Int
SurfaceTransformFlagsKHR -> Maybe Int
SurfaceTransformFlagsKHR -> SurfaceTransformFlagsKHR
SurfaceTransformFlagsKHR -> Int -> Bool
SurfaceTransformFlagsKHR -> Int -> SurfaceTransformFlagsKHR
SurfaceTransformFlagsKHR
-> SurfaceTransformFlagsKHR -> SurfaceTransformFlagsKHR
forall a.
Eq a =>
(a -> a -> a)
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> a
-> (Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> Bool)
-> (a -> Maybe Int)
-> (a -> Int)
-> (a -> Bool)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int)
-> Bits a
popCount :: SurfaceTransformFlagsKHR -> Int
$cpopCount :: SurfaceTransformFlagsKHR -> Int
rotateR :: SurfaceTransformFlagsKHR -> Int -> SurfaceTransformFlagsKHR
$crotateR :: SurfaceTransformFlagsKHR -> Int -> SurfaceTransformFlagsKHR
rotateL :: SurfaceTransformFlagsKHR -> Int -> SurfaceTransformFlagsKHR
$crotateL :: SurfaceTransformFlagsKHR -> Int -> SurfaceTransformFlagsKHR
unsafeShiftR :: SurfaceTransformFlagsKHR -> Int -> SurfaceTransformFlagsKHR
$cunsafeShiftR :: SurfaceTransformFlagsKHR -> Int -> SurfaceTransformFlagsKHR
shiftR :: SurfaceTransformFlagsKHR -> Int -> SurfaceTransformFlagsKHR
$cshiftR :: SurfaceTransformFlagsKHR -> Int -> SurfaceTransformFlagsKHR
unsafeShiftL :: SurfaceTransformFlagsKHR -> Int -> SurfaceTransformFlagsKHR
$cunsafeShiftL :: SurfaceTransformFlagsKHR -> Int -> SurfaceTransformFlagsKHR
shiftL :: SurfaceTransformFlagsKHR -> Int -> SurfaceTransformFlagsKHR
$cshiftL :: SurfaceTransformFlagsKHR -> Int -> SurfaceTransformFlagsKHR
isSigned :: SurfaceTransformFlagsKHR -> Bool
$cisSigned :: SurfaceTransformFlagsKHR -> Bool
bitSize :: SurfaceTransformFlagsKHR -> Int
$cbitSize :: SurfaceTransformFlagsKHR -> Int
bitSizeMaybe :: SurfaceTransformFlagsKHR -> Maybe Int
$cbitSizeMaybe :: SurfaceTransformFlagsKHR -> Maybe Int
testBit :: SurfaceTransformFlagsKHR -> Int -> Bool
$ctestBit :: SurfaceTransformFlagsKHR -> Int -> Bool
complementBit :: SurfaceTransformFlagsKHR -> Int -> SurfaceTransformFlagsKHR
$ccomplementBit :: SurfaceTransformFlagsKHR -> Int -> SurfaceTransformFlagsKHR
clearBit :: SurfaceTransformFlagsKHR -> Int -> SurfaceTransformFlagsKHR
$cclearBit :: SurfaceTransformFlagsKHR -> Int -> SurfaceTransformFlagsKHR
setBit :: SurfaceTransformFlagsKHR -> Int -> SurfaceTransformFlagsKHR
$csetBit :: SurfaceTransformFlagsKHR -> Int -> SurfaceTransformFlagsKHR
bit :: Int -> SurfaceTransformFlagsKHR
$cbit :: Int -> SurfaceTransformFlagsKHR
zeroBits :: SurfaceTransformFlagsKHR
$czeroBits :: SurfaceTransformFlagsKHR
rotate :: SurfaceTransformFlagsKHR -> Int -> SurfaceTransformFlagsKHR
$crotate :: SurfaceTransformFlagsKHR -> Int -> SurfaceTransformFlagsKHR
shift :: SurfaceTransformFlagsKHR -> Int -> SurfaceTransformFlagsKHR
$cshift :: SurfaceTransformFlagsKHR -> Int -> SurfaceTransformFlagsKHR
complement :: SurfaceTransformFlagsKHR -> SurfaceTransformFlagsKHR
$ccomplement :: SurfaceTransformFlagsKHR -> SurfaceTransformFlagsKHR
xor :: SurfaceTransformFlagsKHR
-> SurfaceTransformFlagsKHR -> SurfaceTransformFlagsKHR
$cxor :: SurfaceTransformFlagsKHR
-> SurfaceTransformFlagsKHR -> SurfaceTransformFlagsKHR
.|. :: SurfaceTransformFlagsKHR
-> SurfaceTransformFlagsKHR -> SurfaceTransformFlagsKHR
$c.|. :: SurfaceTransformFlagsKHR
-> SurfaceTransformFlagsKHR -> SurfaceTransformFlagsKHR
.&. :: SurfaceTransformFlagsKHR
-> SurfaceTransformFlagsKHR -> SurfaceTransformFlagsKHR
$c.&. :: SurfaceTransformFlagsKHR
-> SurfaceTransformFlagsKHR -> SurfaceTransformFlagsKHR
$cp1Bits :: Eq SurfaceTransformFlagsKHR
Bits)

-- | 'SURFACE_TRANSFORM_IDENTITY_BIT_KHR' specifies that image content is
-- presented without being transformed.
pattern $bSURFACE_TRANSFORM_IDENTITY_BIT_KHR :: SurfaceTransformFlagsKHR
$mSURFACE_TRANSFORM_IDENTITY_BIT_KHR :: forall r.
SurfaceTransformFlagsKHR -> (Void# -> r) -> (Void# -> r) -> r
SURFACE_TRANSFORM_IDENTITY_BIT_KHR = SurfaceTransformFlagBitsKHR 0x00000001
-- | 'SURFACE_TRANSFORM_ROTATE_90_BIT_KHR' specifies that image content is
-- rotated 90 degrees clockwise.
pattern $bSURFACE_TRANSFORM_ROTATE_90_BIT_KHR :: SurfaceTransformFlagsKHR
$mSURFACE_TRANSFORM_ROTATE_90_BIT_KHR :: forall r.
SurfaceTransformFlagsKHR -> (Void# -> r) -> (Void# -> r) -> r
SURFACE_TRANSFORM_ROTATE_90_BIT_KHR = SurfaceTransformFlagBitsKHR 0x00000002
-- | 'SURFACE_TRANSFORM_ROTATE_180_BIT_KHR' specifies that image content is
-- rotated 180 degrees clockwise.
pattern $bSURFACE_TRANSFORM_ROTATE_180_BIT_KHR :: SurfaceTransformFlagsKHR
$mSURFACE_TRANSFORM_ROTATE_180_BIT_KHR :: forall r.
SurfaceTransformFlagsKHR -> (Void# -> r) -> (Void# -> r) -> r
SURFACE_TRANSFORM_ROTATE_180_BIT_KHR = SurfaceTransformFlagBitsKHR 0x00000004
-- | 'SURFACE_TRANSFORM_ROTATE_270_BIT_KHR' specifies that image content is
-- rotated 270 degrees clockwise.
pattern $bSURFACE_TRANSFORM_ROTATE_270_BIT_KHR :: SurfaceTransformFlagsKHR
$mSURFACE_TRANSFORM_ROTATE_270_BIT_KHR :: forall r.
SurfaceTransformFlagsKHR -> (Void# -> r) -> (Void# -> r) -> r
SURFACE_TRANSFORM_ROTATE_270_BIT_KHR = SurfaceTransformFlagBitsKHR 0x00000008
-- | 'SURFACE_TRANSFORM_HORIZONTAL_MIRROR_BIT_KHR' specifies that image
-- content is mirrored horizontally.
pattern $bSURFACE_TRANSFORM_HORIZONTAL_MIRROR_BIT_KHR :: SurfaceTransformFlagsKHR
$mSURFACE_TRANSFORM_HORIZONTAL_MIRROR_BIT_KHR :: forall r.
SurfaceTransformFlagsKHR -> (Void# -> r) -> (Void# -> r) -> r
SURFACE_TRANSFORM_HORIZONTAL_MIRROR_BIT_KHR = SurfaceTransformFlagBitsKHR 0x00000010
-- | 'SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_90_BIT_KHR' specifies that
-- image content is mirrored horizontally, then rotated 90 degrees
-- clockwise.
pattern $bSURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_90_BIT_KHR :: SurfaceTransformFlagsKHR
$mSURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_90_BIT_KHR :: forall r.
SurfaceTransformFlagsKHR -> (Void# -> r) -> (Void# -> r) -> r
SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_90_BIT_KHR = SurfaceTransformFlagBitsKHR 0x00000020
-- | 'SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_180_BIT_KHR' specifies that
-- image content is mirrored horizontally, then rotated 180 degrees
-- clockwise.
pattern $bSURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_180_BIT_KHR :: SurfaceTransformFlagsKHR
$mSURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_180_BIT_KHR :: forall r.
SurfaceTransformFlagsKHR -> (Void# -> r) -> (Void# -> r) -> r
SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_180_BIT_KHR = SurfaceTransformFlagBitsKHR 0x00000040
-- | 'SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_270_BIT_KHR' specifies that
-- image content is mirrored horizontally, then rotated 270 degrees
-- clockwise.
pattern $bSURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_270_BIT_KHR :: SurfaceTransformFlagsKHR
$mSURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_270_BIT_KHR :: forall r.
SurfaceTransformFlagsKHR -> (Void# -> r) -> (Void# -> r) -> r
SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_270_BIT_KHR = SurfaceTransformFlagBitsKHR 0x00000080
-- | 'SURFACE_TRANSFORM_INHERIT_BIT_KHR' specifies that the presentation
-- transform is not specified, and is instead determined by
-- platform-specific considerations and mechanisms outside Vulkan.
pattern $bSURFACE_TRANSFORM_INHERIT_BIT_KHR :: SurfaceTransformFlagsKHR
$mSURFACE_TRANSFORM_INHERIT_BIT_KHR :: forall r.
SurfaceTransformFlagsKHR -> (Void# -> r) -> (Void# -> r) -> r
SURFACE_TRANSFORM_INHERIT_BIT_KHR = SurfaceTransformFlagBitsKHR 0x00000100

type SurfaceTransformFlagsKHR = SurfaceTransformFlagBitsKHR

instance Show SurfaceTransformFlagBitsKHR where
  showsPrec :: Int -> SurfaceTransformFlagsKHR -> ShowS
showsPrec p :: Int
p = \case
    SURFACE_TRANSFORM_IDENTITY_BIT_KHR -> String -> ShowS
showString "SURFACE_TRANSFORM_IDENTITY_BIT_KHR"
    SURFACE_TRANSFORM_ROTATE_90_BIT_KHR -> String -> ShowS
showString "SURFACE_TRANSFORM_ROTATE_90_BIT_KHR"
    SURFACE_TRANSFORM_ROTATE_180_BIT_KHR -> String -> ShowS
showString "SURFACE_TRANSFORM_ROTATE_180_BIT_KHR"
    SURFACE_TRANSFORM_ROTATE_270_BIT_KHR -> String -> ShowS
showString "SURFACE_TRANSFORM_ROTATE_270_BIT_KHR"
    SURFACE_TRANSFORM_HORIZONTAL_MIRROR_BIT_KHR -> String -> ShowS
showString "SURFACE_TRANSFORM_HORIZONTAL_MIRROR_BIT_KHR"
    SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_90_BIT_KHR -> String -> ShowS
showString "SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_90_BIT_KHR"
    SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_180_BIT_KHR -> String -> ShowS
showString "SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_180_BIT_KHR"
    SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_270_BIT_KHR -> String -> ShowS
showString "SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_270_BIT_KHR"
    SURFACE_TRANSFORM_INHERIT_BIT_KHR -> String -> ShowS
showString "SURFACE_TRANSFORM_INHERIT_BIT_KHR"
    SurfaceTransformFlagBitsKHR x :: "queueFamilyIndex" ::: Word32
x -> Bool -> ShowS -> ShowS
showParen (Int
p Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
>= 11) (String -> ShowS
showString "SurfaceTransformFlagBitsKHR 0x" ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ("queueFamilyIndex" ::: Word32) -> ShowS
forall a. (Integral a, Show a) => a -> ShowS
showHex "queueFamilyIndex" ::: Word32
x)

instance Read SurfaceTransformFlagBitsKHR where
  readPrec :: ReadPrec SurfaceTransformFlagsKHR
readPrec = ReadPrec SurfaceTransformFlagsKHR
-> ReadPrec SurfaceTransformFlagsKHR
forall a. ReadPrec a -> ReadPrec a
parens ([(String, ReadPrec SurfaceTransformFlagsKHR)]
-> ReadPrec SurfaceTransformFlagsKHR
forall a. [(String, ReadPrec a)] -> ReadPrec a
choose [("SURFACE_TRANSFORM_IDENTITY_BIT_KHR", SurfaceTransformFlagsKHR -> ReadPrec SurfaceTransformFlagsKHR
forall (f :: * -> *) a. Applicative f => a -> f a
pure SurfaceTransformFlagsKHR
SURFACE_TRANSFORM_IDENTITY_BIT_KHR)
                            , ("SURFACE_TRANSFORM_ROTATE_90_BIT_KHR", SurfaceTransformFlagsKHR -> ReadPrec SurfaceTransformFlagsKHR
forall (f :: * -> *) a. Applicative f => a -> f a
pure SurfaceTransformFlagsKHR
SURFACE_TRANSFORM_ROTATE_90_BIT_KHR)
                            , ("SURFACE_TRANSFORM_ROTATE_180_BIT_KHR", SurfaceTransformFlagsKHR -> ReadPrec SurfaceTransformFlagsKHR
forall (f :: * -> *) a. Applicative f => a -> f a
pure SurfaceTransformFlagsKHR
SURFACE_TRANSFORM_ROTATE_180_BIT_KHR)
                            , ("SURFACE_TRANSFORM_ROTATE_270_BIT_KHR", SurfaceTransformFlagsKHR -> ReadPrec SurfaceTransformFlagsKHR
forall (f :: * -> *) a. Applicative f => a -> f a
pure SurfaceTransformFlagsKHR
SURFACE_TRANSFORM_ROTATE_270_BIT_KHR)
                            , ("SURFACE_TRANSFORM_HORIZONTAL_MIRROR_BIT_KHR", SurfaceTransformFlagsKHR -> ReadPrec SurfaceTransformFlagsKHR
forall (f :: * -> *) a. Applicative f => a -> f a
pure SurfaceTransformFlagsKHR
SURFACE_TRANSFORM_HORIZONTAL_MIRROR_BIT_KHR)
                            , ("SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_90_BIT_KHR", SurfaceTransformFlagsKHR -> ReadPrec SurfaceTransformFlagsKHR
forall (f :: * -> *) a. Applicative f => a -> f a
pure SurfaceTransformFlagsKHR
SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_90_BIT_KHR)
                            , ("SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_180_BIT_KHR", SurfaceTransformFlagsKHR -> ReadPrec SurfaceTransformFlagsKHR
forall (f :: * -> *) a. Applicative f => a -> f a
pure SurfaceTransformFlagsKHR
SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_180_BIT_KHR)
                            , ("SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_270_BIT_KHR", SurfaceTransformFlagsKHR -> ReadPrec SurfaceTransformFlagsKHR
forall (f :: * -> *) a. Applicative f => a -> f a
pure SurfaceTransformFlagsKHR
SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_270_BIT_KHR)
                            , ("SURFACE_TRANSFORM_INHERIT_BIT_KHR", SurfaceTransformFlagsKHR -> ReadPrec SurfaceTransformFlagsKHR
forall (f :: * -> *) a. Applicative f => a -> f a
pure SurfaceTransformFlagsKHR
SURFACE_TRANSFORM_INHERIT_BIT_KHR)]
                     ReadPrec SurfaceTransformFlagsKHR
-> ReadPrec SurfaceTransformFlagsKHR
-> ReadPrec SurfaceTransformFlagsKHR
forall a. ReadPrec a -> ReadPrec a -> ReadPrec a
+++
                     Int
-> ReadPrec SurfaceTransformFlagsKHR
-> ReadPrec SurfaceTransformFlagsKHR
forall a. Int -> ReadPrec a -> ReadPrec a
prec 10 (do
                       Lexeme -> ReadPrec ()
expectP (String -> Lexeme
Ident "SurfaceTransformFlagBitsKHR")
                       "queueFamilyIndex" ::: Word32
v <- ReadPrec ("queueFamilyIndex" ::: Word32)
-> ReadPrec ("queueFamilyIndex" ::: Word32)
forall a. ReadPrec a -> ReadPrec a
step ReadPrec ("queueFamilyIndex" ::: Word32)
forall a. Read a => ReadPrec a
readPrec
                       SurfaceTransformFlagsKHR -> ReadPrec SurfaceTransformFlagsKHR
forall (f :: * -> *) a. Applicative f => a -> f a
pure (("queueFamilyIndex" ::: Word32) -> SurfaceTransformFlagsKHR
SurfaceTransformFlagBitsKHR "queueFamilyIndex" ::: Word32
v)))


type KHR_SURFACE_SPEC_VERSION = 25

-- No documentation found for TopLevel "VK_KHR_SURFACE_SPEC_VERSION"
pattern KHR_SURFACE_SPEC_VERSION :: forall a . Integral a => a
pattern $bKHR_SURFACE_SPEC_VERSION :: a
$mKHR_SURFACE_SPEC_VERSION :: forall r a. Integral a => a -> (Void# -> r) -> (Void# -> r) -> r
KHR_SURFACE_SPEC_VERSION = 25


type KHR_SURFACE_EXTENSION_NAME = "VK_KHR_surface"

-- No documentation found for TopLevel "VK_KHR_SURFACE_EXTENSION_NAME"
pattern KHR_SURFACE_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
pattern $bKHR_SURFACE_EXTENSION_NAME :: a
$mKHR_SURFACE_EXTENSION_NAME :: forall r a.
(Eq a, IsString a) =>
a -> (Void# -> r) -> (Void# -> r) -> r
KHR_SURFACE_EXTENSION_NAME = "VK_KHR_surface"