{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE Strict #-}
{-# LANGUAGE PatternSynonyms #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
module Graphics.Vulkan.DeviceInitialization where
import Data.Vector.Storable.Sized( Vector
)
import Graphics.Vulkan.Device( VkPhysicalDeviceFeatures(..)
, VkPhysicalDevice(..)
, VkDevice(..)
)
import Text.Read.Lex( Lexeme(Ident)
)
import GHC.Read( expectP
, choose
)
import Data.Word( Word8
, Word64
, Word32
)
import Foreign.Ptr( Ptr
, FunPtr
, plusPtr
)
import Data.Int( Int32
)
import Data.Bits( Bits
, FiniteBits
)
import Foreign.Storable( Storable(..)
)
import Graphics.Vulkan.Constants( VK_MAX_PHYSICAL_DEVICE_NAME_SIZE
, VK_MAX_MEMORY_HEAPS
, VK_UUID_SIZE
, VK_MAX_MEMORY_TYPES
)
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.Sampler( VkSampleCountFlagBits(..)
, VkSampleCountFlags(..)
)
import Graphics.Vulkan.Image( VkImageUsageFlags(..)
, VkImageType(..)
, VkImageUsageFlagBits(..)
, VkImageCreateFlags(..)
, VkImageTiling(..)
, VkImageCreateFlagBits(..)
)
import Graphics.Vulkan.Core( VkExtent3D(..)
, VkResult(..)
, VkDeviceSize(..)
, VkBool32(..)
, VkFlags(..)
, VkFormat(..)
, VkStructureType(..)
)
import Foreign.C.Types( CSize
, CFloat
, CFloat(..)
, CChar
, CSize(..)
)
newtype VkPhysicalDeviceType = VkPhysicalDeviceType Int32
deriving (Eq, Storable)
instance Show VkPhysicalDeviceType where
showsPrec _ VK_PHYSICAL_DEVICE_TYPE_OTHER = showString "VK_PHYSICAL_DEVICE_TYPE_OTHER"
showsPrec _ VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU = showString "VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU"
showsPrec _ VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU = showString "VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU"
showsPrec _ VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU = showString "VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU"
showsPrec _ VK_PHYSICAL_DEVICE_TYPE_CPU = showString "VK_PHYSICAL_DEVICE_TYPE_CPU"
showsPrec p (VkPhysicalDeviceType x) = showParen (p >= 11) (showString "VkPhysicalDeviceType " . showsPrec 11 x)
instance Read VkPhysicalDeviceType where
readPrec = parens ( choose [ ("VK_PHYSICAL_DEVICE_TYPE_OTHER", pure VK_PHYSICAL_DEVICE_TYPE_OTHER)
, ("VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU", pure VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU)
, ("VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU", pure VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU)
, ("VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU", pure VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU)
, ("VK_PHYSICAL_DEVICE_TYPE_CPU", pure VK_PHYSICAL_DEVICE_TYPE_CPU)
] +++
prec 10 (do
expectP (Ident "VkPhysicalDeviceType")
v <- step readPrec
pure (VkPhysicalDeviceType v)
)
)
pattern VK_PHYSICAL_DEVICE_TYPE_OTHER = VkPhysicalDeviceType 0
pattern VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU = VkPhysicalDeviceType 1
pattern VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU = VkPhysicalDeviceType 2
pattern VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU = VkPhysicalDeviceType 3
pattern VK_PHYSICAL_DEVICE_TYPE_CPU = VkPhysicalDeviceType 4
data VkInstanceCreateInfo =
VkInstanceCreateInfo{ vkSType :: VkStructureType
, vkPNext :: Ptr Void
, vkFlags :: VkInstanceCreateFlags
, vkPApplicationInfo :: Ptr VkApplicationInfo
, vkEnabledLayerCount :: Word32
, vkPpEnabledLayerNames :: Ptr (Ptr CChar)
, vkEnabledExtensionCount :: Word32
, vkPpEnabledExtensionNames :: Ptr (Ptr CChar)
}
deriving (Eq)
instance Storable VkInstanceCreateInfo where
sizeOf ~_ = 64
alignment ~_ = 8
peek ptr = VkInstanceCreateInfo <$> peek (ptr `plusPtr` 0)
<*> peek (ptr `plusPtr` 8)
<*> peek (ptr `plusPtr` 16)
<*> peek (ptr `plusPtr` 24)
<*> peek (ptr `plusPtr` 32)
<*> peek (ptr `plusPtr` 40)
<*> peek (ptr `plusPtr` 48)
<*> peek (ptr `plusPtr` 56)
poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkInstanceCreateInfo))
*> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkInstanceCreateInfo))
*> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkInstanceCreateInfo))
*> poke (ptr `plusPtr` 24) (vkPApplicationInfo (poked :: VkInstanceCreateInfo))
*> poke (ptr `plusPtr` 32) (vkEnabledLayerCount (poked :: VkInstanceCreateInfo))
*> poke (ptr `plusPtr` 40) (vkPpEnabledLayerNames (poked :: VkInstanceCreateInfo))
*> poke (ptr `plusPtr` 48) (vkEnabledExtensionCount (poked :: VkInstanceCreateInfo))
*> poke (ptr `plusPtr` 56) (vkPpEnabledExtensionNames (poked :: VkInstanceCreateInfo))
foreign import ccall "vkGetPhysicalDeviceImageFormatProperties" vkGetPhysicalDeviceImageFormatProperties ::
VkPhysicalDevice ->
VkFormat ->
VkImageType ->
VkImageTiling ->
VkImageUsageFlags ->
VkImageCreateFlags -> Ptr VkImageFormatProperties -> IO VkResult
type PFN_vkVoidFunction = FunPtr (IO ())
data VkApplicationInfo =
VkApplicationInfo{ vkSType :: VkStructureType
, vkPNext :: Ptr Void
, vkPApplicationName :: Ptr CChar
, vkApplicationVersion :: Word32
, vkPEngineName :: Ptr CChar
, vkEngineVersion :: Word32
, vkApiVersion :: Word32
}
deriving (Eq)
instance Storable VkApplicationInfo where
sizeOf ~_ = 48
alignment ~_ = 8
peek ptr = VkApplicationInfo <$> peek (ptr `plusPtr` 0)
<*> peek (ptr `plusPtr` 8)
<*> peek (ptr `plusPtr` 16)
<*> peek (ptr `plusPtr` 24)
<*> peek (ptr `plusPtr` 32)
<*> peek (ptr `plusPtr` 40)
<*> peek (ptr `plusPtr` 44)
poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkApplicationInfo))
*> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkApplicationInfo))
*> poke (ptr `plusPtr` 16) (vkPApplicationName (poked :: VkApplicationInfo))
*> poke (ptr `plusPtr` 24) (vkApplicationVersion (poked :: VkApplicationInfo))
*> poke (ptr `plusPtr` 32) (vkPEngineName (poked :: VkApplicationInfo))
*> poke (ptr `plusPtr` 40) (vkEngineVersion (poked :: VkApplicationInfo))
*> poke (ptr `plusPtr` 44) (vkApiVersion (poked :: VkApplicationInfo))
data VkPhysicalDeviceLimits =
VkPhysicalDeviceLimits{ vkMaxImageDimension :: Word32
, vkMaxImageDimension :: Word32
, vkMaxImageDimension :: Word32
, vkMaxImageDimensionCube :: Word32
, vkMaxImageArrayLayers :: Word32
, vkMaxTexelBufferElements :: Word32
, vkMaxUniformBufferRange :: Word32
, vkMaxStorageBufferRange :: Word32
, vkMaxPushConstantsSize :: Word32
, vkMaxMemoryAllocationCount :: Word32
, vkMaxSamplerAllocationCount :: Word32
, vkBufferImageGranularity :: VkDeviceSize
, vkSparseAddressSpaceSize :: VkDeviceSize
, vkMaxBoundDescriptorSets :: Word32
, vkMaxPerStageDescriptorSamplers :: Word32
, vkMaxPerStageDescriptorUniformBuffers :: Word32
, vkMaxPerStageDescriptorStorageBuffers :: Word32
, vkMaxPerStageDescriptorSampledImages :: Word32
, vkMaxPerStageDescriptorStorageImages :: Word32
, vkMaxPerStageDescriptorInputAttachments :: Word32
, vkMaxPerStageResources :: Word32
, vkMaxDescriptorSetSamplers :: Word32
, vkMaxDescriptorSetUniformBuffers :: Word32
, vkMaxDescriptorSetUniformBuffersDynamic :: Word32
, vkMaxDescriptorSetStorageBuffers :: Word32
, vkMaxDescriptorSetStorageBuffersDynamic :: Word32
, vkMaxDescriptorSetSampledImages :: Word32
, vkMaxDescriptorSetStorageImages :: Word32
, vkMaxDescriptorSetInputAttachments :: Word32
, vkMaxVertexInputAttributes :: Word32
, vkMaxVertexInputBindings :: Word32
, vkMaxVertexInputAttributeOffset :: Word32
, vkMaxVertexInputBindingStride :: Word32
, vkMaxVertexOutputComponents :: Word32
, vkMaxTessellationGenerationLevel :: Word32
, vkMaxTessellationPatchSize :: Word32
, vkMaxTessellationControlPerVertexInputComponents :: Word32
, vkMaxTessellationControlPerVertexOutputComponents :: Word32
, vkMaxTessellationControlPerPatchOutputComponents :: Word32
, vkMaxTessellationControlTotalOutputComponents :: Word32
, vkMaxTessellationEvaluationInputComponents :: Word32
, vkMaxTessellationEvaluationOutputComponents :: Word32
, vkMaxGeometryShaderInvocations :: Word32
, vkMaxGeometryInputComponents :: Word32
, vkMaxGeometryOutputComponents :: Word32
, vkMaxGeometryOutputVertices :: Word32
, vkMaxGeometryTotalOutputComponents :: Word32
, vkMaxFragmentInputComponents :: Word32
, vkMaxFragmentOutputAttachments :: Word32
, vkMaxFragmentDualSrcAttachments :: Word32
, vkMaxFragmentCombinedOutputResources :: Word32
, vkMaxComputeSharedMemorySize :: Word32
, vkMaxComputeWorkGroupCount :: Vector 3 Word32
, vkMaxComputeWorkGroupInvocations :: Word32
, vkMaxComputeWorkGroupSize :: Vector 3 Word32
, vkSubPixelPrecisionBits :: Word32
, vkSubTexelPrecisionBits :: Word32
, vkMipmapPrecisionBits :: Word32
, vkMaxDrawIndexedIndexValue :: Word32
, vkMaxDrawIndirectCount :: Word32
, vkMaxSamplerLodBias :: CFloat
, vkMaxSamplerAnisotropy :: CFloat
, vkMaxViewports :: Word32
, vkMaxViewportDimensions :: Vector 2 Word32
, vkViewportBoundsRange :: Vector 2 CFloat
, vkViewportSubPixelBits :: Word32
, vkMinMemoryMapAlignment :: CSize
, vkMinTexelBufferOffsetAlignment :: VkDeviceSize
, vkMinUniformBufferOffsetAlignment :: VkDeviceSize
, vkMinStorageBufferOffsetAlignment :: VkDeviceSize
, vkMinTexelOffset :: Int32
, vkMaxTexelOffset :: Word32
, vkMinTexelGatherOffset :: Int32
, vkMaxTexelGatherOffset :: Word32
, vkMinInterpolationOffset :: CFloat
, vkMaxInterpolationOffset :: CFloat
, vkSubPixelInterpolationOffsetBits :: Word32
, vkMaxFramebufferWidth :: Word32
, vkMaxFramebufferHeight :: Word32
, vkMaxFramebufferLayers :: Word32
, vkFramebufferColorSampleCounts :: VkSampleCountFlags
, vkFramebufferDepthSampleCounts :: VkSampleCountFlags
, vkFramebufferStencilSampleCounts :: VkSampleCountFlags
, vkFramebufferNoAttachmentsSampleCounts :: VkSampleCountFlags
, vkMaxColorAttachments :: Word32
, vkSampledImageColorSampleCounts :: VkSampleCountFlags
, vkSampledImageIntegerSampleCounts :: VkSampleCountFlags
, vkSampledImageDepthSampleCounts :: VkSampleCountFlags
, vkSampledImageStencilSampleCounts :: VkSampleCountFlags
, vkStorageImageSampleCounts :: VkSampleCountFlags
, vkMaxSampleMaskWords :: Word32
, vkTimestampComputeAndGraphics :: VkBool32
, vkTimestampPeriod :: CFloat
, vkMaxClipDistances :: Word32
, vkMaxCullDistances :: Word32
, vkMaxCombinedClipAndCullDistances :: Word32
, vkDiscreteQueuePriorities :: Word32
, vkPointSizeRange :: Vector 2 CFloat
, vkLineWidthRange :: Vector 2 CFloat
, vkPointSizeGranularity :: CFloat
, vkLineWidthGranularity :: CFloat
, vkStrictLines :: VkBool32
, vkStandardSampleLocations :: VkBool32
, vkOptimalBufferCopyOffsetAlignment :: VkDeviceSize
, vkOptimalBufferCopyRowPitchAlignment :: VkDeviceSize
, vkNonCoherentAtomSize :: VkDeviceSize
}
deriving (Eq)
instance Storable VkPhysicalDeviceLimits where
sizeOf ~_ = 504
alignment ~_ = 8
peek ptr = VkPhysicalDeviceLimits <$> peek (ptr `plusPtr` 0)
<*> peek (ptr `plusPtr` 4)
<*> peek (ptr `plusPtr` 8)
<*> peek (ptr `plusPtr` 12)
<*> peek (ptr `plusPtr` 16)
<*> peek (ptr `plusPtr` 20)
<*> peek (ptr `plusPtr` 24)
<*> peek (ptr `plusPtr` 28)
<*> peek (ptr `plusPtr` 32)
<*> peek (ptr `plusPtr` 36)
<*> peek (ptr `plusPtr` 40)
<*> peek (ptr `plusPtr` 48)
<*> peek (ptr `plusPtr` 56)
<*> peek (ptr `plusPtr` 64)
<*> peek (ptr `plusPtr` 68)
<*> peek (ptr `plusPtr` 72)
<*> peek (ptr `plusPtr` 76)
<*> peek (ptr `plusPtr` 80)
<*> peek (ptr `plusPtr` 84)
<*> peek (ptr `plusPtr` 88)
<*> peek (ptr `plusPtr` 92)
<*> peek (ptr `plusPtr` 96)
<*> peek (ptr `plusPtr` 100)
<*> peek (ptr `plusPtr` 104)
<*> peek (ptr `plusPtr` 108)
<*> peek (ptr `plusPtr` 112)
<*> peek (ptr `plusPtr` 116)
<*> peek (ptr `plusPtr` 120)
<*> peek (ptr `plusPtr` 124)
<*> peek (ptr `plusPtr` 128)
<*> peek (ptr `plusPtr` 132)
<*> peek (ptr `plusPtr` 136)
<*> peek (ptr `plusPtr` 140)
<*> peek (ptr `plusPtr` 144)
<*> peek (ptr `plusPtr` 148)
<*> peek (ptr `plusPtr` 152)
<*> peek (ptr `plusPtr` 156)
<*> peek (ptr `plusPtr` 160)
<*> peek (ptr `plusPtr` 164)
<*> peek (ptr `plusPtr` 168)
<*> peek (ptr `plusPtr` 172)
<*> peek (ptr `plusPtr` 176)
<*> peek (ptr `plusPtr` 180)
<*> peek (ptr `plusPtr` 184)
<*> peek (ptr `plusPtr` 188)
<*> peek (ptr `plusPtr` 192)
<*> peek (ptr `plusPtr` 196)
<*> peek (ptr `plusPtr` 200)
<*> peek (ptr `plusPtr` 204)
<*> peek (ptr `plusPtr` 208)
<*> peek (ptr `plusPtr` 212)
<*> peek (ptr `plusPtr` 216)
<*> peek (ptr `plusPtr` 220)
<*> peek (ptr `plusPtr` 232)
<*> peek (ptr `plusPtr` 236)
<*> peek (ptr `plusPtr` 248)
<*> peek (ptr `plusPtr` 252)
<*> peek (ptr `plusPtr` 256)
<*> peek (ptr `plusPtr` 260)
<*> peek (ptr `plusPtr` 264)
<*> peek (ptr `plusPtr` 268)
<*> peek (ptr `plusPtr` 272)
<*> peek (ptr `plusPtr` 276)
<*> peek (ptr `plusPtr` 280)
<*> peek (ptr `plusPtr` 288)
<*> peek (ptr `plusPtr` 296)
<*> peek (ptr `plusPtr` 304)
<*> peek (ptr `plusPtr` 312)
<*> peek (ptr `plusPtr` 320)
<*> peek (ptr `plusPtr` 328)
<*> peek (ptr `plusPtr` 336)
<*> peek (ptr `plusPtr` 340)
<*> peek (ptr `plusPtr` 344)
<*> peek (ptr `plusPtr` 348)
<*> peek (ptr `plusPtr` 352)
<*> peek (ptr `plusPtr` 356)
<*> peek (ptr `plusPtr` 360)
<*> peek (ptr `plusPtr` 364)
<*> peek (ptr `plusPtr` 368)
<*> peek (ptr `plusPtr` 372)
<*> peek (ptr `plusPtr` 376)
<*> peek (ptr `plusPtr` 380)
<*> peek (ptr `plusPtr` 384)
<*> peek (ptr `plusPtr` 388)
<*> peek (ptr `plusPtr` 392)
<*> peek (ptr `plusPtr` 396)
<*> peek (ptr `plusPtr` 400)
<*> peek (ptr `plusPtr` 404)
<*> peek (ptr `plusPtr` 408)
<*> peek (ptr `plusPtr` 412)
<*> peek (ptr `plusPtr` 416)
<*> peek (ptr `plusPtr` 420)
<*> peek (ptr `plusPtr` 424)
<*> peek (ptr `plusPtr` 428)
<*> peek (ptr `plusPtr` 432)
<*> peek (ptr `plusPtr` 436)
<*> peek (ptr `plusPtr` 440)
<*> peek (ptr `plusPtr` 444)
<*> peek (ptr `plusPtr` 452)
<*> peek (ptr `plusPtr` 460)
<*> peek (ptr `plusPtr` 464)
<*> peek (ptr `plusPtr` 468)
<*> peek (ptr `plusPtr` 472)
<*> peek (ptr `plusPtr` 480)
<*> peek (ptr `plusPtr` 488)
<*> peek (ptr `plusPtr` 496)
poke ptr poked = poke (ptr `plusPtr` 0) (vkMaxImageDimension (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 4) (vkMaxImageDimension (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 8) (vkMaxImageDimension (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 12) (vkMaxImageDimensionCube (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 16) (vkMaxImageArrayLayers (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 20) (vkMaxTexelBufferElements (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 24) (vkMaxUniformBufferRange (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 28) (vkMaxStorageBufferRange (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 32) (vkMaxPushConstantsSize (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 36) (vkMaxMemoryAllocationCount (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 40) (vkMaxSamplerAllocationCount (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 48) (vkBufferImageGranularity (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 56) (vkSparseAddressSpaceSize (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 64) (vkMaxBoundDescriptorSets (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 68) (vkMaxPerStageDescriptorSamplers (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 72) (vkMaxPerStageDescriptorUniformBuffers (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 76) (vkMaxPerStageDescriptorStorageBuffers (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 80) (vkMaxPerStageDescriptorSampledImages (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 84) (vkMaxPerStageDescriptorStorageImages (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 88) (vkMaxPerStageDescriptorInputAttachments (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 92) (vkMaxPerStageResources (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 96) (vkMaxDescriptorSetSamplers (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 100) (vkMaxDescriptorSetUniformBuffers (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 104) (vkMaxDescriptorSetUniformBuffersDynamic (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 108) (vkMaxDescriptorSetStorageBuffers (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 112) (vkMaxDescriptorSetStorageBuffersDynamic (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 116) (vkMaxDescriptorSetSampledImages (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 120) (vkMaxDescriptorSetStorageImages (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 124) (vkMaxDescriptorSetInputAttachments (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 128) (vkMaxVertexInputAttributes (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 132) (vkMaxVertexInputBindings (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 136) (vkMaxVertexInputAttributeOffset (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 140) (vkMaxVertexInputBindingStride (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 144) (vkMaxVertexOutputComponents (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 148) (vkMaxTessellationGenerationLevel (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 152) (vkMaxTessellationPatchSize (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 156) (vkMaxTessellationControlPerVertexInputComponents (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 160) (vkMaxTessellationControlPerVertexOutputComponents (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 164) (vkMaxTessellationControlPerPatchOutputComponents (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 168) (vkMaxTessellationControlTotalOutputComponents (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 172) (vkMaxTessellationEvaluationInputComponents (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 176) (vkMaxTessellationEvaluationOutputComponents (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 180) (vkMaxGeometryShaderInvocations (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 184) (vkMaxGeometryInputComponents (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 188) (vkMaxGeometryOutputComponents (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 192) (vkMaxGeometryOutputVertices (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 196) (vkMaxGeometryTotalOutputComponents (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 200) (vkMaxFragmentInputComponents (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 204) (vkMaxFragmentOutputAttachments (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 208) (vkMaxFragmentDualSrcAttachments (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 212) (vkMaxFragmentCombinedOutputResources (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 216) (vkMaxComputeSharedMemorySize (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 220) (vkMaxComputeWorkGroupCount (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 232) (vkMaxComputeWorkGroupInvocations (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 236) (vkMaxComputeWorkGroupSize (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 248) (vkSubPixelPrecisionBits (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 252) (vkSubTexelPrecisionBits (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 256) (vkMipmapPrecisionBits (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 260) (vkMaxDrawIndexedIndexValue (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 264) (vkMaxDrawIndirectCount (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 268) (vkMaxSamplerLodBias (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 272) (vkMaxSamplerAnisotropy (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 276) (vkMaxViewports (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 280) (vkMaxViewportDimensions (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 288) (vkViewportBoundsRange (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 296) (vkViewportSubPixelBits (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 304) (vkMinMemoryMapAlignment (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 312) (vkMinTexelBufferOffsetAlignment (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 320) (vkMinUniformBufferOffsetAlignment (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 328) (vkMinStorageBufferOffsetAlignment (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 336) (vkMinTexelOffset (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 340) (vkMaxTexelOffset (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 344) (vkMinTexelGatherOffset (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 348) (vkMaxTexelGatherOffset (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 352) (vkMinInterpolationOffset (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 356) (vkMaxInterpolationOffset (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 360) (vkSubPixelInterpolationOffsetBits (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 364) (vkMaxFramebufferWidth (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 368) (vkMaxFramebufferHeight (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 372) (vkMaxFramebufferLayers (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 376) (vkFramebufferColorSampleCounts (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 380) (vkFramebufferDepthSampleCounts (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 384) (vkFramebufferStencilSampleCounts (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 388) (vkFramebufferNoAttachmentsSampleCounts (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 392) (vkMaxColorAttachments (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 396) (vkSampledImageColorSampleCounts (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 400) (vkSampledImageIntegerSampleCounts (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 404) (vkSampledImageDepthSampleCounts (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 408) (vkSampledImageStencilSampleCounts (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 412) (vkStorageImageSampleCounts (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 416) (vkMaxSampleMaskWords (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 420) (vkTimestampComputeAndGraphics (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 424) (vkTimestampPeriod (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 428) (vkMaxClipDistances (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 432) (vkMaxCullDistances (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 436) (vkMaxCombinedClipAndCullDistances (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 440) (vkDiscreteQueuePriorities (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 444) (vkPointSizeRange (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 452) (vkLineWidthRange (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 460) (vkPointSizeGranularity (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 464) (vkLineWidthGranularity (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 468) (vkStrictLines (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 472) (vkStandardSampleLocations (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 480) (vkOptimalBufferCopyOffsetAlignment (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 488) (vkOptimalBufferCopyRowPitchAlignment (poked :: VkPhysicalDeviceLimits))
*> poke (ptr `plusPtr` 496) (vkNonCoherentAtomSize (poked :: VkPhysicalDeviceLimits))
data VkMemoryHeap =
VkMemoryHeap{ vkSize :: VkDeviceSize
, vkFlags :: VkMemoryHeapFlags
}
deriving (Eq)
instance Storable VkMemoryHeap where
sizeOf ~_ = 16
alignment ~_ = 8
peek ptr = VkMemoryHeap <$> peek (ptr `plusPtr` 0)
<*> peek (ptr `plusPtr` 8)
poke ptr poked = poke (ptr `plusPtr` 0) (vkSize (poked :: VkMemoryHeap))
*> poke (ptr `plusPtr` 8) (vkFlags (poked :: VkMemoryHeap))
foreign import ccall "vkEnumeratePhysicalDevices" vkEnumeratePhysicalDevices ::
VkInstance -> Ptr Word32 -> Ptr VkPhysicalDevice -> IO VkResult
foreign import ccall "vkGetDeviceProcAddr" vkGetDeviceProcAddr ::
VkDevice -> Ptr CChar -> IO PFN_vkVoidFunction
foreign import ccall "vkCreateInstance" vkCreateInstance ::
Ptr VkInstanceCreateInfo ->
Ptr VkAllocationCallbacks -> Ptr VkInstance -> IO VkResult
newtype VkFormatFeatureFlagBits = VkFormatFeatureFlagBits VkFlags
deriving (Eq, Storable, Bits, FiniteBits)
type VkFormatFeatureFlags = VkFormatFeatureFlagBits
instance Show VkFormatFeatureFlagBits where
showsPrec _ VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT = showString "VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT"
showsPrec _ VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT = showString "VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT"
showsPrec _ VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT = showString "VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT"
showsPrec _ VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT = showString "VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT"
showsPrec _ VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT = showString "VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT"
showsPrec _ VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT = showString "VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT"
showsPrec _ VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT = showString "VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT"
showsPrec _ VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT = showString "VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT"
showsPrec _ VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT = showString "VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT"
showsPrec _ VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT = showString "VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT"
showsPrec _ VK_FORMAT_FEATURE_BLIT_SRC_BIT = showString "VK_FORMAT_FEATURE_BLIT_SRC_BIT"
showsPrec _ VK_FORMAT_FEATURE_BLIT_DST_BIT = showString "VK_FORMAT_FEATURE_BLIT_DST_BIT"
showsPrec _ VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT = showString "VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT"
showsPrec p (VkFormatFeatureFlagBits x) = showParen (p >= 11) (showString "VkFormatFeatureFlagBits " . showsPrec 11 x)
instance Read VkFormatFeatureFlagBits where
readPrec = parens ( choose [ ("VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT", pure VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT)
, ("VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT", pure VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT)
, ("VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT", pure VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT)
, ("VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT", pure VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT)
, ("VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT", pure VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT)
, ("VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT", pure VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT)
, ("VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT", pure VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)
, ("VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT", pure VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT)
, ("VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT", pure VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT)
, ("VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT", pure VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT)
, ("VK_FORMAT_FEATURE_BLIT_SRC_BIT", pure VK_FORMAT_FEATURE_BLIT_SRC_BIT)
, ("VK_FORMAT_FEATURE_BLIT_DST_BIT", pure VK_FORMAT_FEATURE_BLIT_DST_BIT)
, ("VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT", pure VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT)
] +++
prec 10 (do
expectP (Ident "VkFormatFeatureFlagBits")
v <- step readPrec
pure (VkFormatFeatureFlagBits v)
)
)
pattern VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT = VkFormatFeatureFlagBits 0x1
pattern VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT = VkFormatFeatureFlagBits 0x2
pattern VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT = VkFormatFeatureFlagBits 0x4
pattern VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT = VkFormatFeatureFlagBits 0x8
pattern VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT = VkFormatFeatureFlagBits 0x10
pattern VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT = VkFormatFeatureFlagBits 0x20
pattern VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT = VkFormatFeatureFlagBits 0x40
pattern VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT = VkFormatFeatureFlagBits 0x80
pattern VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT = VkFormatFeatureFlagBits 0x100
pattern VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT = VkFormatFeatureFlagBits 0x200
pattern VK_FORMAT_FEATURE_BLIT_SRC_BIT = VkFormatFeatureFlagBits 0x400
pattern VK_FORMAT_FEATURE_BLIT_DST_BIT = VkFormatFeatureFlagBits 0x800
pattern VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT = VkFormatFeatureFlagBits 0x1000
data VkPhysicalDeviceMemoryProperties =
VkPhysicalDeviceMemoryProperties{ vkMemoryTypeCount :: Word32
, vkMemoryTypes :: Vector VK_MAX_MEMORY_TYPES VkMemoryType
, vkMemoryHeapCount :: Word32
, vkMemoryHeaps :: Vector VK_MAX_MEMORY_HEAPS VkMemoryHeap
}
deriving (Eq)
instance Storable VkPhysicalDeviceMemoryProperties where
sizeOf ~_ = 520
alignment ~_ = 8
peek ptr = VkPhysicalDeviceMemoryProperties <$> peek (ptr `plusPtr` 0)
<*> peek (ptr `plusPtr` 4)
<*> peek (ptr `plusPtr` 260)
<*> peek (ptr `plusPtr` 264)
poke ptr poked = poke (ptr `plusPtr` 0) (vkMemoryTypeCount (poked :: VkPhysicalDeviceMemoryProperties))
*> poke (ptr `plusPtr` 4) (vkMemoryTypes (poked :: VkPhysicalDeviceMemoryProperties))
*> poke (ptr `plusPtr` 260) (vkMemoryHeapCount (poked :: VkPhysicalDeviceMemoryProperties))
*> poke (ptr `plusPtr` 264) (vkMemoryHeaps (poked :: VkPhysicalDeviceMemoryProperties))
data VkInstance_T
type VkInstance = Ptr VkInstance_T
newtype VkMemoryHeapFlagBits = VkMemoryHeapFlagBits VkFlags
deriving (Eq, Storable, Bits, FiniteBits)
type VkMemoryHeapFlags = VkMemoryHeapFlagBits
instance Show VkMemoryHeapFlagBits where
showsPrec _ VK_MEMORY_HEAP_DEVICE_LOCAL_BIT = showString "VK_MEMORY_HEAP_DEVICE_LOCAL_BIT"
showsPrec p (VkMemoryHeapFlagBits x) = showParen (p >= 11) (showString "VkMemoryHeapFlagBits " . showsPrec 11 x)
instance Read VkMemoryHeapFlagBits where
readPrec = parens ( choose [ ("VK_MEMORY_HEAP_DEVICE_LOCAL_BIT", pure VK_MEMORY_HEAP_DEVICE_LOCAL_BIT)
] +++
prec 10 (do
expectP (Ident "VkMemoryHeapFlagBits")
v <- step readPrec
pure (VkMemoryHeapFlagBits v)
)
)
pattern VK_MEMORY_HEAP_DEVICE_LOCAL_BIT = VkMemoryHeapFlagBits 0x1
data VkQueueFamilyProperties =
VkQueueFamilyProperties{ vkQueueFlags :: VkQueueFlags
, vkQueueCount :: Word32
, vkTimestampValidBits :: Word32
, vkMinImageTransferGranularity :: VkExtent3D
}
deriving (Eq)
instance Storable VkQueueFamilyProperties where
sizeOf ~_ = 24
alignment ~_ = 4
peek ptr = VkQueueFamilyProperties <$> peek (ptr `plusPtr` 0)
<*> peek (ptr `plusPtr` 4)
<*> peek (ptr `plusPtr` 8)
<*> peek (ptr `plusPtr` 12)
poke ptr poked = poke (ptr `plusPtr` 0) (vkQueueFlags (poked :: VkQueueFamilyProperties))
*> poke (ptr `plusPtr` 4) (vkQueueCount (poked :: VkQueueFamilyProperties))
*> poke (ptr `plusPtr` 8) (vkTimestampValidBits (poked :: VkQueueFamilyProperties))
*> poke (ptr `plusPtr` 12) (vkMinImageTransferGranularity (poked :: VkQueueFamilyProperties))
data VkImageFormatProperties =
VkImageFormatProperties{ vkMaxExtent :: VkExtent3D
, vkMaxMipLevels :: Word32
, vkMaxArrayLayers :: Word32
, vkSampleCounts :: VkSampleCountFlags
, vkMaxResourceSize :: VkDeviceSize
}
deriving (Eq)
instance Storable VkImageFormatProperties where
sizeOf ~_ = 32
alignment ~_ = 8
peek ptr = VkImageFormatProperties <$> peek (ptr `plusPtr` 0)
<*> peek (ptr `plusPtr` 12)
<*> peek (ptr `plusPtr` 16)
<*> peek (ptr `plusPtr` 20)
<*> peek (ptr `plusPtr` 24)
poke ptr poked = poke (ptr `plusPtr` 0) (vkMaxExtent (poked :: VkImageFormatProperties))
*> poke (ptr `plusPtr` 12) (vkMaxMipLevels (poked :: VkImageFormatProperties))
*> poke (ptr `plusPtr` 16) (vkMaxArrayLayers (poked :: VkImageFormatProperties))
*> poke (ptr `plusPtr` 20) (vkSampleCounts (poked :: VkImageFormatProperties))
*> poke (ptr `plusPtr` 24) (vkMaxResourceSize (poked :: VkImageFormatProperties))
data VkPhysicalDeviceSparseProperties =
VkPhysicalDeviceSparseProperties{ vkResidencyStandard :: VkBool32
, vkResidencyStandard :: VkBool32
, vkResidencyStandard :: VkBool32
, vkResidencyAlignedMipSize :: VkBool32
, vkResidencyNonResidentStrict :: VkBool32
}
deriving (Eq)
instance Storable VkPhysicalDeviceSparseProperties where
sizeOf ~_ = 20
alignment ~_ = 4
peek ptr = VkPhysicalDeviceSparseProperties <$> peek (ptr `plusPtr` 0)
<*> peek (ptr `plusPtr` 4)
<*> peek (ptr `plusPtr` 8)
<*> peek (ptr `plusPtr` 12)
<*> peek (ptr `plusPtr` 16)
poke ptr poked = poke (ptr `plusPtr` 0) (vkResidencyStandard (poked :: VkPhysicalDeviceSparseProperties))
*> poke (ptr `plusPtr` 4) (vkResidencyStandard (poked :: VkPhysicalDeviceSparseProperties))
*> poke (ptr `plusPtr` 8) (vkResidencyStandard (poked :: VkPhysicalDeviceSparseProperties))
*> poke (ptr `plusPtr` 12) (vkResidencyAlignedMipSize (poked :: VkPhysicalDeviceSparseProperties))
*> poke (ptr `plusPtr` 16) (vkResidencyNonResidentStrict (poked :: VkPhysicalDeviceSparseProperties))
foreign import ccall "vkGetPhysicalDeviceFeatures" vkGetPhysicalDeviceFeatures ::
VkPhysicalDevice -> Ptr VkPhysicalDeviceFeatures -> IO ()
foreign import ccall "vkGetPhysicalDeviceMemoryProperties" vkGetPhysicalDeviceMemoryProperties ::
VkPhysicalDevice -> Ptr VkPhysicalDeviceMemoryProperties -> IO ()
data VkPhysicalDeviceProperties =
VkPhysicalDeviceProperties{ vkApiVersion :: Word32
, vkDriverVersion :: Word32
, vkVendorID :: Word32
, vkDeviceID :: Word32
, vkDeviceType :: VkPhysicalDeviceType
, vkDeviceName :: Vector VK_MAX_PHYSICAL_DEVICE_NAME_SIZE CChar
, vkPipelineCacheUUID :: Vector VK_UUID_SIZE Word8
, vkLimits :: VkPhysicalDeviceLimits
, vkSparseProperties :: VkPhysicalDeviceSparseProperties
}
deriving (Eq)
instance Storable VkPhysicalDeviceProperties where
sizeOf ~_ = 824
alignment ~_ = 8
peek ptr = VkPhysicalDeviceProperties <$> peek (ptr `plusPtr` 0)
<*> peek (ptr `plusPtr` 4)
<*> peek (ptr `plusPtr` 8)
<*> peek (ptr `plusPtr` 12)
<*> peek (ptr `plusPtr` 16)
<*> peek (ptr `plusPtr` 20)
<*> peek (ptr `plusPtr` 276)
<*> peek (ptr `plusPtr` 296)
<*> peek (ptr `plusPtr` 800)
poke ptr poked = poke (ptr `plusPtr` 0) (vkApiVersion (poked :: VkPhysicalDeviceProperties))
*> poke (ptr `plusPtr` 4) (vkDriverVersion (poked :: VkPhysicalDeviceProperties))
*> poke (ptr `plusPtr` 8) (vkVendorID (poked :: VkPhysicalDeviceProperties))
*> poke (ptr `plusPtr` 12) (vkDeviceID (poked :: VkPhysicalDeviceProperties))
*> poke (ptr `plusPtr` 16) (vkDeviceType (poked :: VkPhysicalDeviceProperties))
*> poke (ptr `plusPtr` 20) (vkDeviceName (poked :: VkPhysicalDeviceProperties))
*> poke (ptr `plusPtr` 276) (vkPipelineCacheUUID (poked :: VkPhysicalDeviceProperties))
*> poke (ptr `plusPtr` 296) (vkLimits (poked :: VkPhysicalDeviceProperties))
*> poke (ptr `plusPtr` 800) (vkSparseProperties (poked :: VkPhysicalDeviceProperties))
foreign import ccall "vkGetPhysicalDeviceQueueFamilyProperties" vkGetPhysicalDeviceQueueFamilyProperties ::
VkPhysicalDevice ->
Ptr Word32 -> Ptr VkQueueFamilyProperties -> IO ()
data VkMemoryType =
VkMemoryType{ vkPropertyFlags :: VkMemoryPropertyFlags
, vkHeapIndex :: Word32
}
deriving (Eq)
instance Storable VkMemoryType where
sizeOf ~_ = 8
alignment ~_ = 4
peek ptr = VkMemoryType <$> peek (ptr `plusPtr` 0)
<*> peek (ptr `plusPtr` 4)
poke ptr poked = poke (ptr `plusPtr` 0) (vkPropertyFlags (poked :: VkMemoryType))
*> poke (ptr `plusPtr` 4) (vkHeapIndex (poked :: VkMemoryType))
foreign import ccall "vkGetInstanceProcAddr" vkGetInstanceProcAddr ::
VkInstance -> Ptr CChar -> IO PFN_vkVoidFunction
newtype VkMemoryPropertyFlagBits = VkMemoryPropertyFlagBits VkFlags
deriving (Eq, Storable, Bits, FiniteBits)
type VkMemoryPropertyFlags = VkMemoryPropertyFlagBits
instance Show VkMemoryPropertyFlagBits where
showsPrec _ VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT = showString "VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT"
showsPrec _ VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT = showString "VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT"
showsPrec _ VK_MEMORY_PROPERTY_HOST_COHERENT_BIT = showString "VK_MEMORY_PROPERTY_HOST_COHERENT_BIT"
showsPrec _ VK_MEMORY_PROPERTY_HOST_CACHED_BIT = showString "VK_MEMORY_PROPERTY_HOST_CACHED_BIT"
showsPrec _ VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT = showString "VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT"
showsPrec p (VkMemoryPropertyFlagBits x) = showParen (p >= 11) (showString "VkMemoryPropertyFlagBits " . showsPrec 11 x)
instance Read VkMemoryPropertyFlagBits where
readPrec = parens ( choose [ ("VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT", pure VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT)
, ("VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT", pure VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT)
, ("VK_MEMORY_PROPERTY_HOST_COHERENT_BIT", pure VK_MEMORY_PROPERTY_HOST_COHERENT_BIT)
, ("VK_MEMORY_PROPERTY_HOST_CACHED_BIT", pure VK_MEMORY_PROPERTY_HOST_CACHED_BIT)
, ("VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT", pure VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT)
] +++
prec 10 (do
expectP (Ident "VkMemoryPropertyFlagBits")
v <- step readPrec
pure (VkMemoryPropertyFlagBits v)
)
)
pattern VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT = VkMemoryPropertyFlagBits 0x1
pattern VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT = VkMemoryPropertyFlagBits 0x2
pattern VK_MEMORY_PROPERTY_HOST_COHERENT_BIT = VkMemoryPropertyFlagBits 0x4
pattern VK_MEMORY_PROPERTY_HOST_CACHED_BIT = VkMemoryPropertyFlagBits 0x8
pattern VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT = VkMemoryPropertyFlagBits 0x10
foreign import ccall "vkDestroyInstance" vkDestroyInstance ::
VkInstance -> Ptr VkAllocationCallbacks -> IO ()
newtype VkQueueFlagBits = VkQueueFlagBits VkFlags
deriving (Eq, Storable, Bits, FiniteBits)
type VkQueueFlags = VkQueueFlagBits
instance Show VkQueueFlagBits where
showsPrec _ VK_QUEUE_GRAPHICS_BIT = showString "VK_QUEUE_GRAPHICS_BIT"
showsPrec _ VK_QUEUE_COMPUTE_BIT = showString "VK_QUEUE_COMPUTE_BIT"
showsPrec _ VK_QUEUE_TRANSFER_BIT = showString "VK_QUEUE_TRANSFER_BIT"
showsPrec _ VK_QUEUE_SPARSE_BINDING_BIT = showString "VK_QUEUE_SPARSE_BINDING_BIT"
showsPrec p (VkQueueFlagBits x) = showParen (p >= 11) (showString "VkQueueFlagBits " . showsPrec 11 x)
instance Read VkQueueFlagBits where
readPrec = parens ( choose [ ("VK_QUEUE_GRAPHICS_BIT", pure VK_QUEUE_GRAPHICS_BIT)
, ("VK_QUEUE_COMPUTE_BIT", pure VK_QUEUE_COMPUTE_BIT)
, ("VK_QUEUE_TRANSFER_BIT", pure VK_QUEUE_TRANSFER_BIT)
, ("VK_QUEUE_SPARSE_BINDING_BIT", pure VK_QUEUE_SPARSE_BINDING_BIT)
] +++
prec 10 (do
expectP (Ident "VkQueueFlagBits")
v <- step readPrec
pure (VkQueueFlagBits v)
)
)
pattern VK_QUEUE_GRAPHICS_BIT = VkQueueFlagBits 0x1
pattern VK_QUEUE_COMPUTE_BIT = VkQueueFlagBits 0x2
pattern VK_QUEUE_TRANSFER_BIT = VkQueueFlagBits 0x4
pattern VK_QUEUE_SPARSE_BINDING_BIT = VkQueueFlagBits 0x8
foreign import ccall "vkGetPhysicalDeviceProperties" vkGetPhysicalDeviceProperties ::
VkPhysicalDevice -> Ptr VkPhysicalDeviceProperties -> IO ()
newtype VkInstanceCreateFlags = VkInstanceCreateFlags VkFlags
deriving (Eq, Storable)
foreign import ccall "vkGetPhysicalDeviceFormatProperties" vkGetPhysicalDeviceFormatProperties ::
VkPhysicalDevice -> VkFormat -> Ptr VkFormatProperties -> IO ()
data VkFormatProperties =
VkFormatProperties{ vkLinearTilingFeatures :: VkFormatFeatureFlags
, vkOptimalTilingFeatures :: VkFormatFeatureFlags
, vkBufferFeatures :: VkFormatFeatureFlags
}
deriving (Eq)
instance Storable VkFormatProperties where
sizeOf ~_ = 12
alignment ~_ = 4
peek ptr = VkFormatProperties <$> peek (ptr `plusPtr` 0)
<*> peek (ptr `plusPtr` 4)
<*> peek (ptr `plusPtr` 8)
poke ptr poked = poke (ptr `plusPtr` 0) (vkLinearTilingFeatures (poked :: VkFormatProperties))
*> poke (ptr `plusPtr` 4) (vkOptimalTilingFeatures (poked :: VkFormatProperties))
*> poke (ptr `plusPtr` 8) (vkBufferFeatures (poked :: VkFormatProperties))