{-# LANGUAGE DuplicateRecordFields #-} {-# LANGUAGE Strict #-} {-# LANGUAGE PatternSynonyms #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} module Graphics.Vulkan.KHR.Display where import Graphics.Vulkan.Device( VkPhysicalDevice(..) ) import Text.Read.Lex( Lexeme(Ident) ) import GHC.Read( expectP , choose ) import Data.Word( Word64 , Word32 ) import Foreign.Ptr( Ptr , plusPtr ) import Graphics.Vulkan.KHR.Surface( VkSurfaceTransformFlagBitsKHR(..) , VkSurfaceTransformFlagsKHR(..) , VkSurfaceKHR(..) ) import Data.Int( Int32 ) import Data.Bits( Bits , FiniteBits ) import Foreign.Storable( Storable(..) ) import Data.Void( Void ) import Graphics.Vulkan.Memory( VkInternalAllocationType(..) , PFN_vkAllocationFunction , PFN_vkReallocationFunction , PFN_vkInternalAllocationNotification , VkAllocationCallbacks(..) , VkSystemAllocationScope(..) , PFN_vkFreeFunction , PFN_vkInternalFreeNotification ) import Text.Read( Read(..) , parens ) import Text.ParserCombinators.ReadPrec( prec , (+++) , step ) import Graphics.Vulkan.DeviceInitialization( VkInstance(..) ) import Graphics.Vulkan.Core( VkResult(..) , VkBool32(..) , VkExtent2D(..) , VkFlags(..) , VkOffset2D(..) , VkStructureType(..) ) import Foreign.C.Types( CFloat , CFloat(..) , CChar , CSize(..) ) data VkDisplaySurfaceCreateInfoKHR = VkDisplaySurfaceCreateInfoKHR{ vkSType :: VkStructureType , vkPNext :: Ptr Void , vkFlags :: VkDisplaySurfaceCreateFlagsKHR , vkDisplayMode :: VkDisplayModeKHR , vkPlaneIndex :: Word32 , vkPlaneStackIndex :: Word32 , vkTransform :: VkSurfaceTransformFlagBitsKHR , vkGlobalAlpha :: CFloat , vkAlphaMode :: VkDisplayPlaneAlphaFlagBitsKHR , vkImageExtent :: VkExtent2D } deriving (Eq) instance Storable VkDisplaySurfaceCreateInfoKHR where sizeOf ~_ = 64 alignment ~_ = 8 peek ptr = VkDisplaySurfaceCreateInfoKHR <$> peek (ptr `plusPtr` 0) <*> peek (ptr `plusPtr` 8) <*> peek (ptr `plusPtr` 16) <*> peek (ptr `plusPtr` 24) <*> peek (ptr `plusPtr` 32) <*> peek (ptr `plusPtr` 36) <*> peek (ptr `plusPtr` 40) <*> peek (ptr `plusPtr` 44) <*> peek (ptr `plusPtr` 48) <*> peek (ptr `plusPtr` 52) poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkDisplaySurfaceCreateInfoKHR)) *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkDisplaySurfaceCreateInfoKHR)) *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkDisplaySurfaceCreateInfoKHR)) *> poke (ptr `plusPtr` 24) (vkDisplayMode (poked :: VkDisplaySurfaceCreateInfoKHR)) *> poke (ptr `plusPtr` 32) (vkPlaneIndex (poked :: VkDisplaySurfaceCreateInfoKHR)) *> poke (ptr `plusPtr` 36) (vkPlaneStackIndex (poked :: VkDisplaySurfaceCreateInfoKHR)) *> poke (ptr `plusPtr` 40) (vkTransform (poked :: VkDisplaySurfaceCreateInfoKHR)) *> poke (ptr `plusPtr` 44) (vkGlobalAlpha (poked :: VkDisplaySurfaceCreateInfoKHR)) *> poke (ptr `plusPtr` 48) (vkAlphaMode (poked :: VkDisplaySurfaceCreateInfoKHR)) *> poke (ptr `plusPtr` 52) (vkImageExtent (poked :: VkDisplaySurfaceCreateInfoKHR)) data VkDisplayPlaneCapabilitiesKHR = VkDisplayPlaneCapabilitiesKHR{ vkSupportedAlpha :: VkDisplayPlaneAlphaFlagsKHR , vkMinSrcPosition :: VkOffset2D , vkMaxSrcPosition :: VkOffset2D , vkMinSrcExtent :: VkExtent2D , vkMaxSrcExtent :: VkExtent2D , vkMinDstPosition :: VkOffset2D , vkMaxDstPosition :: VkOffset2D , vkMinDstExtent :: VkExtent2D , vkMaxDstExtent :: VkExtent2D } deriving (Eq) instance Storable VkDisplayPlaneCapabilitiesKHR where sizeOf ~_ = 68 alignment ~_ = 4 peek ptr = VkDisplayPlaneCapabilitiesKHR <$> peek (ptr `plusPtr` 0) <*> peek (ptr `plusPtr` 4) <*> peek (ptr `plusPtr` 12) <*> peek (ptr `plusPtr` 20) <*> peek (ptr `plusPtr` 28) <*> peek (ptr `plusPtr` 36) <*> peek (ptr `plusPtr` 44) <*> peek (ptr `plusPtr` 52) <*> peek (ptr `plusPtr` 60) poke ptr poked = poke (ptr `plusPtr` 0) (vkSupportedAlpha (poked :: VkDisplayPlaneCapabilitiesKHR)) *> poke (ptr `plusPtr` 4) (vkMinSrcPosition (poked :: VkDisplayPlaneCapabilitiesKHR)) *> poke (ptr `plusPtr` 12) (vkMaxSrcPosition (poked :: VkDisplayPlaneCapabilitiesKHR)) *> poke (ptr `plusPtr` 20) (vkMinSrcExtent (poked :: VkDisplayPlaneCapabilitiesKHR)) *> poke (ptr `plusPtr` 28) (vkMaxSrcExtent (poked :: VkDisplayPlaneCapabilitiesKHR)) *> poke (ptr `plusPtr` 36) (vkMinDstPosition (poked :: VkDisplayPlaneCapabilitiesKHR)) *> poke (ptr `plusPtr` 44) (vkMaxDstPosition (poked :: VkDisplayPlaneCapabilitiesKHR)) *> poke (ptr `plusPtr` 52) (vkMinDstExtent (poked :: VkDisplayPlaneCapabilitiesKHR)) *> poke (ptr `plusPtr` 60) (vkMaxDstExtent (poked :: VkDisplayPlaneCapabilitiesKHR)) -- ** vkGetDisplayModePropertiesKHR foreign import ccall "vkGetDisplayModePropertiesKHR" vkGetDisplayModePropertiesKHR :: VkPhysicalDevice -> VkDisplayKHR -> Ptr Word32 -> Ptr VkDisplayModePropertiesKHR -> IO VkResult data VkDisplayPropertiesKHR = VkDisplayPropertiesKHR{ vkDisplay :: VkDisplayKHR , vkDisplayName :: Ptr CChar , vkPhysicalDimensions :: VkExtent2D , vkPhysicalResolution :: VkExtent2D , vkSupportedTransforms :: VkSurfaceTransformFlagsKHR , vkPlaneReorderPossible :: VkBool32 , vkPersistentContent :: VkBool32 } deriving (Eq) instance Storable VkDisplayPropertiesKHR where sizeOf ~_ = 48 alignment ~_ = 8 peek ptr = VkDisplayPropertiesKHR <$> peek (ptr `plusPtr` 0) <*> peek (ptr `plusPtr` 8) <*> peek (ptr `plusPtr` 16) <*> peek (ptr `plusPtr` 24) <*> peek (ptr `plusPtr` 32) <*> peek (ptr `plusPtr` 36) <*> peek (ptr `plusPtr` 40) poke ptr poked = poke (ptr `plusPtr` 0) (vkDisplay (poked :: VkDisplayPropertiesKHR)) *> poke (ptr `plusPtr` 8) (vkDisplayName (poked :: VkDisplayPropertiesKHR)) *> poke (ptr `plusPtr` 16) (vkPhysicalDimensions (poked :: VkDisplayPropertiesKHR)) *> poke (ptr `plusPtr` 24) (vkPhysicalResolution (poked :: VkDisplayPropertiesKHR)) *> poke (ptr `plusPtr` 32) (vkSupportedTransforms (poked :: VkDisplayPropertiesKHR)) *> poke (ptr `plusPtr` 36) (vkPlaneReorderPossible (poked :: VkDisplayPropertiesKHR)) *> poke (ptr `plusPtr` 40) (vkPersistentContent (poked :: VkDisplayPropertiesKHR)) -- ** vkGetDisplayPlaneSupportedDisplaysKHR foreign import ccall "vkGetDisplayPlaneSupportedDisplaysKHR" vkGetDisplayPlaneSupportedDisplaysKHR :: VkPhysicalDevice -> Word32 -> Ptr Word32 -> Ptr VkDisplayKHR -> IO VkResult -- ** vkCreateDisplayModeKHR foreign import ccall "vkCreateDisplayModeKHR" vkCreateDisplayModeKHR :: VkPhysicalDevice -> VkDisplayKHR -> Ptr VkDisplayModeCreateInfoKHR -> Ptr VkAllocationCallbacks -> Ptr VkDisplayModeKHR -> IO VkResult data VkDisplayPlanePropertiesKHR = VkDisplayPlanePropertiesKHR{ vkCurrentDisplay :: VkDisplayKHR , vkCurrentStackIndex :: Word32 } deriving (Eq) instance Storable VkDisplayPlanePropertiesKHR where sizeOf ~_ = 16 alignment ~_ = 8 peek ptr = VkDisplayPlanePropertiesKHR <$> peek (ptr `plusPtr` 0) <*> peek (ptr `plusPtr` 8) poke ptr poked = poke (ptr `plusPtr` 0) (vkCurrentDisplay (poked :: VkDisplayPlanePropertiesKHR)) *> poke (ptr `plusPtr` 8) (vkCurrentStackIndex (poked :: VkDisplayPlanePropertiesKHR)) -- ** vkGetDisplayPlaneCapabilitiesKHR foreign import ccall "vkGetDisplayPlaneCapabilitiesKHR" vkGetDisplayPlaneCapabilitiesKHR :: VkPhysicalDevice -> VkDisplayModeKHR -> Word32 -> Ptr VkDisplayPlaneCapabilitiesKHR -> IO VkResult data VkDisplayModePropertiesKHR = VkDisplayModePropertiesKHR{ vkDisplayMode :: VkDisplayModeKHR , vkParameters :: VkDisplayModeParametersKHR } deriving (Eq) instance Storable VkDisplayModePropertiesKHR where sizeOf ~_ = 24 alignment ~_ = 8 peek ptr = VkDisplayModePropertiesKHR <$> peek (ptr `plusPtr` 0) <*> peek (ptr `plusPtr` 8) poke ptr poked = poke (ptr `plusPtr` 0) (vkDisplayMode (poked :: VkDisplayModePropertiesKHR)) *> poke (ptr `plusPtr` 8) (vkParameters (poked :: VkDisplayModePropertiesKHR)) -- ** VkDisplayPlaneAlphaFlagsKHR newtype VkDisplayPlaneAlphaFlagBitsKHR = VkDisplayPlaneAlphaFlagBitsKHR VkFlags deriving (Eq, Storable, Bits, FiniteBits) -- | Alias for VkDisplayPlaneAlphaFlagBitsKHR type VkDisplayPlaneAlphaFlagsKHR = VkDisplayPlaneAlphaFlagBitsKHR instance Show VkDisplayPlaneAlphaFlagBitsKHR where showsPrec _ VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR = showString "VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR" showsPrec _ VK_DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR = showString "VK_DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR" showsPrec _ VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_BIT_KHR = showString "VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_BIT_KHR" showsPrec _ VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_PREMULTIPLIED_BIT_KHR = showString "VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_PREMULTIPLIED_BIT_KHR" showsPrec p (VkDisplayPlaneAlphaFlagBitsKHR x) = showParen (p >= 11) (showString "VkDisplayPlaneAlphaFlagBitsKHR " . showsPrec 11 x) instance Read VkDisplayPlaneAlphaFlagBitsKHR where readPrec = parens ( choose [ ("VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR", pure VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR) , ("VK_DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR", pure VK_DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR) , ("VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_BIT_KHR", pure VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_BIT_KHR) , ("VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_PREMULTIPLIED_BIT_KHR", pure VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_PREMULTIPLIED_BIT_KHR) ] +++ prec 10 (do expectP (Ident "VkDisplayPlaneAlphaFlagBitsKHR") v <- step readPrec pure (VkDisplayPlaneAlphaFlagBitsKHR v) ) ) pattern VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR = VkDisplayPlaneAlphaFlagBitsKHR 0x1 pattern VK_DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR = VkDisplayPlaneAlphaFlagBitsKHR 0x2 pattern VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_BIT_KHR = VkDisplayPlaneAlphaFlagBitsKHR 0x4 pattern VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_PREMULTIPLIED_BIT_KHR = VkDisplayPlaneAlphaFlagBitsKHR 0x8 -- ** VkDisplayModeCreateFlagsKHR -- | Opaque flag newtype VkDisplayModeCreateFlagsKHR = VkDisplayModeCreateFlagsKHR VkFlags deriving (Eq, Storable) data VkDisplayModeCreateInfoKHR = VkDisplayModeCreateInfoKHR{ vkSType :: VkStructureType , vkPNext :: Ptr Void , vkFlags :: VkDisplayModeCreateFlagsKHR , vkParameters :: VkDisplayModeParametersKHR } deriving (Eq) instance Storable VkDisplayModeCreateInfoKHR where sizeOf ~_ = 32 alignment ~_ = 8 peek ptr = VkDisplayModeCreateInfoKHR <$> peek (ptr `plusPtr` 0) <*> peek (ptr `plusPtr` 8) <*> peek (ptr `plusPtr` 16) <*> peek (ptr `plusPtr` 20) poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkDisplayModeCreateInfoKHR)) *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkDisplayModeCreateInfoKHR)) *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkDisplayModeCreateInfoKHR)) *> poke (ptr `plusPtr` 20) (vkParameters (poked :: VkDisplayModeCreateInfoKHR)) -- ** vkGetPhysicalDeviceDisplayPlanePropertiesKHR foreign import ccall "vkGetPhysicalDeviceDisplayPlanePropertiesKHR" vkGetPhysicalDeviceDisplayPlanePropertiesKHR :: VkPhysicalDevice -> Ptr Word32 -> Ptr VkDisplayPlanePropertiesKHR -> IO VkResult newtype VkDisplayModeKHR = VkDisplayModeKHR Word64 deriving (Eq, Storable) data VkDisplayModeParametersKHR = VkDisplayModeParametersKHR{ vkVisibleRegion :: VkExtent2D , vkRefreshRate :: Word32 } deriving (Eq) instance Storable VkDisplayModeParametersKHR where sizeOf ~_ = 12 alignment ~_ = 4 peek ptr = VkDisplayModeParametersKHR <$> peek (ptr `plusPtr` 0) <*> peek (ptr `plusPtr` 8) poke ptr poked = poke (ptr `plusPtr` 0) (vkVisibleRegion (poked :: VkDisplayModeParametersKHR)) *> poke (ptr `plusPtr` 8) (vkRefreshRate (poked :: VkDisplayModeParametersKHR)) -- ** VkDisplaySurfaceCreateFlagsKHR -- | Opaque flag newtype VkDisplaySurfaceCreateFlagsKHR = VkDisplaySurfaceCreateFlagsKHR VkFlags deriving (Eq, Storable) newtype VkDisplayKHR = VkDisplayKHR Word64 deriving (Eq, Storable) -- ** vkGetPhysicalDeviceDisplayPropertiesKHR foreign import ccall "vkGetPhysicalDeviceDisplayPropertiesKHR" vkGetPhysicalDeviceDisplayPropertiesKHR :: VkPhysicalDevice -> Ptr Word32 -> Ptr VkDisplayPropertiesKHR -> IO VkResult -- ** vkCreateDisplayPlaneSurfaceKHR foreign import ccall "vkCreateDisplayPlaneSurfaceKHR" vkCreateDisplayPlaneSurfaceKHR :: VkInstance -> Ptr VkDisplaySurfaceCreateInfoKHR -> Ptr VkAllocationCallbacks -> Ptr VkSurfaceKHR -> IO VkResult