{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE Strict #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
module Graphics.Vulkan.Device where
import Data.Word( Word32
)
import Foreign.Ptr( Ptr
, plusPtr
)
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 Graphics.Vulkan.Core( VkResult(..)
, VkBool32(..)
, VkFlags(..)
, VkStructureType(..)
)
import Foreign.C.Types( CFloat
, CFloat(..)
, CChar
, CSize(..)
)
foreign import ccall "vkCreateDevice" vkCreateDevice ::
VkPhysicalDevice ->
Ptr VkDeviceCreateInfo ->
Ptr VkAllocationCallbacks -> Ptr VkDevice -> IO VkResult
data VkPhysicalDeviceFeatures =
VkPhysicalDeviceFeatures{ vkRobustBufferAccess :: VkBool32
, vkFullDrawIndexUint :: VkBool32
, vkImageCubeArray :: VkBool32
, vkIndependentBlend :: VkBool32
, vkGeometryShader :: VkBool32
, vkTessellationShader :: VkBool32
, vkSampleRateShading :: VkBool32
, vkDualSrcBlend :: VkBool32
, vkLogicOp :: VkBool32
, vkMultiDrawIndirect :: VkBool32
, vkDrawIndirectFirstInstance :: VkBool32
, vkDepthClamp :: VkBool32
, vkDepthBiasClamp :: VkBool32
, vkFillModeNonSolid :: VkBool32
, vkDepthBounds :: VkBool32
, vkWideLines :: VkBool32
, vkLargePoints :: VkBool32
, vkAlphaToOne :: VkBool32
, vkMultiViewport :: VkBool32
, vkSamplerAnisotropy :: VkBool32
, vkTextureCompressionETC :: VkBool32
, vkTextureCompressionASTC_LDR :: VkBool32
, vkTextureCompressionBC :: VkBool32
, vkOcclusionQueryPrecise :: VkBool32
, vkPipelineStatisticsQuery :: VkBool32
, vkVertexPipelineStoresAndAtomics :: VkBool32
, vkFragmentStoresAndAtomics :: VkBool32
, vkShaderTessellationAndGeometryPointSize :: VkBool32
, vkShaderImageGatherExtended :: VkBool32
, vkShaderStorageImageExtendedFormats :: VkBool32
, vkShaderStorageImageMultisample :: VkBool32
, vkShaderStorageImageReadWithoutFormat :: VkBool32
, vkShaderStorageImageWriteWithoutFormat :: VkBool32
, vkShaderUniformBufferArrayDynamicIndexing :: VkBool32
, vkShaderSampledImageArrayDynamicIndexing :: VkBool32
, vkShaderStorageBufferArrayDynamicIndexing :: VkBool32
, vkShaderStorageImageArrayDynamicIndexing :: VkBool32
, vkShaderClipDistance :: VkBool32
, vkShaderCullDistance :: VkBool32
, vkShaderFloat :: VkBool32
, vkShaderInt :: VkBool32
, vkShaderInt :: VkBool32
, vkShaderResourceResidency :: VkBool32
, vkShaderResourceMinLod :: VkBool32
, vkSparseBinding :: VkBool32
, vkSparseResidencyBuffer :: VkBool32
, vkSparseResidencyImage :: VkBool32
, vkSparseResidencyImage :: VkBool32
, vkSparseResidency :: VkBool32
, vkSparseResidency :: VkBool32
, vkSparseResidency :: VkBool32
, vkSparseResidency :: VkBool32
, vkSparseResidencyAliased :: VkBool32
, vkVariableMultisampleRate :: VkBool32
, vkInheritedQueries :: VkBool32
}
deriving (Eq)
instance Storable VkPhysicalDeviceFeatures where
sizeOf ~_ = 220
alignment ~_ = 4
peek ptr = VkPhysicalDeviceFeatures <$> 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` 44)
<*> peek (ptr `plusPtr` 48)
<*> peek (ptr `plusPtr` 52)
<*> peek (ptr `plusPtr` 56)
<*> peek (ptr `plusPtr` 60)
<*> 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)
poke ptr poked = poke (ptr `plusPtr` 0) (vkRobustBufferAccess (poked :: VkPhysicalDeviceFeatures))
*> poke (ptr `plusPtr` 4) (vkFullDrawIndexUint (poked :: VkPhysicalDeviceFeatures))
*> poke (ptr `plusPtr` 8) (vkImageCubeArray (poked :: VkPhysicalDeviceFeatures))
*> poke (ptr `plusPtr` 12) (vkIndependentBlend (poked :: VkPhysicalDeviceFeatures))
*> poke (ptr `plusPtr` 16) (vkGeometryShader (poked :: VkPhysicalDeviceFeatures))
*> poke (ptr `plusPtr` 20) (vkTessellationShader (poked :: VkPhysicalDeviceFeatures))
*> poke (ptr `plusPtr` 24) (vkSampleRateShading (poked :: VkPhysicalDeviceFeatures))
*> poke (ptr `plusPtr` 28) (vkDualSrcBlend (poked :: VkPhysicalDeviceFeatures))
*> poke (ptr `plusPtr` 32) (vkLogicOp (poked :: VkPhysicalDeviceFeatures))
*> poke (ptr `plusPtr` 36) (vkMultiDrawIndirect (poked :: VkPhysicalDeviceFeatures))
*> poke (ptr `plusPtr` 40) (vkDrawIndirectFirstInstance (poked :: VkPhysicalDeviceFeatures))
*> poke (ptr `plusPtr` 44) (vkDepthClamp (poked :: VkPhysicalDeviceFeatures))
*> poke (ptr `plusPtr` 48) (vkDepthBiasClamp (poked :: VkPhysicalDeviceFeatures))
*> poke (ptr `plusPtr` 52) (vkFillModeNonSolid (poked :: VkPhysicalDeviceFeatures))
*> poke (ptr `plusPtr` 56) (vkDepthBounds (poked :: VkPhysicalDeviceFeatures))
*> poke (ptr `plusPtr` 60) (vkWideLines (poked :: VkPhysicalDeviceFeatures))
*> poke (ptr `plusPtr` 64) (vkLargePoints (poked :: VkPhysicalDeviceFeatures))
*> poke (ptr `plusPtr` 68) (vkAlphaToOne (poked :: VkPhysicalDeviceFeatures))
*> poke (ptr `plusPtr` 72) (vkMultiViewport (poked :: VkPhysicalDeviceFeatures))
*> poke (ptr `plusPtr` 76) (vkSamplerAnisotropy (poked :: VkPhysicalDeviceFeatures))
*> poke (ptr `plusPtr` 80) (vkTextureCompressionETC (poked :: VkPhysicalDeviceFeatures))
*> poke (ptr `plusPtr` 84) (vkTextureCompressionASTC_LDR (poked :: VkPhysicalDeviceFeatures))
*> poke (ptr `plusPtr` 88) (vkTextureCompressionBC (poked :: VkPhysicalDeviceFeatures))
*> poke (ptr `plusPtr` 92) (vkOcclusionQueryPrecise (poked :: VkPhysicalDeviceFeatures))
*> poke (ptr `plusPtr` 96) (vkPipelineStatisticsQuery (poked :: VkPhysicalDeviceFeatures))
*> poke (ptr `plusPtr` 100) (vkVertexPipelineStoresAndAtomics (poked :: VkPhysicalDeviceFeatures))
*> poke (ptr `plusPtr` 104) (vkFragmentStoresAndAtomics (poked :: VkPhysicalDeviceFeatures))
*> poke (ptr `plusPtr` 108) (vkShaderTessellationAndGeometryPointSize (poked :: VkPhysicalDeviceFeatures))
*> poke (ptr `plusPtr` 112) (vkShaderImageGatherExtended (poked :: VkPhysicalDeviceFeatures))
*> poke (ptr `plusPtr` 116) (vkShaderStorageImageExtendedFormats (poked :: VkPhysicalDeviceFeatures))
*> poke (ptr `plusPtr` 120) (vkShaderStorageImageMultisample (poked :: VkPhysicalDeviceFeatures))
*> poke (ptr `plusPtr` 124) (vkShaderStorageImageReadWithoutFormat (poked :: VkPhysicalDeviceFeatures))
*> poke (ptr `plusPtr` 128) (vkShaderStorageImageWriteWithoutFormat (poked :: VkPhysicalDeviceFeatures))
*> poke (ptr `plusPtr` 132) (vkShaderUniformBufferArrayDynamicIndexing (poked :: VkPhysicalDeviceFeatures))
*> poke (ptr `plusPtr` 136) (vkShaderSampledImageArrayDynamicIndexing (poked :: VkPhysicalDeviceFeatures))
*> poke (ptr `plusPtr` 140) (vkShaderStorageBufferArrayDynamicIndexing (poked :: VkPhysicalDeviceFeatures))
*> poke (ptr `plusPtr` 144) (vkShaderStorageImageArrayDynamicIndexing (poked :: VkPhysicalDeviceFeatures))
*> poke (ptr `plusPtr` 148) (vkShaderClipDistance (poked :: VkPhysicalDeviceFeatures))
*> poke (ptr `plusPtr` 152) (vkShaderCullDistance (poked :: VkPhysicalDeviceFeatures))
*> poke (ptr `plusPtr` 156) (vkShaderFloat (poked :: VkPhysicalDeviceFeatures))
*> poke (ptr `plusPtr` 160) (vkShaderInt (poked :: VkPhysicalDeviceFeatures))
*> poke (ptr `plusPtr` 164) (vkShaderInt (poked :: VkPhysicalDeviceFeatures))
*> poke (ptr `plusPtr` 168) (vkShaderResourceResidency (poked :: VkPhysicalDeviceFeatures))
*> poke (ptr `plusPtr` 172) (vkShaderResourceMinLod (poked :: VkPhysicalDeviceFeatures))
*> poke (ptr `plusPtr` 176) (vkSparseBinding (poked :: VkPhysicalDeviceFeatures))
*> poke (ptr `plusPtr` 180) (vkSparseResidencyBuffer (poked :: VkPhysicalDeviceFeatures))
*> poke (ptr `plusPtr` 184) (vkSparseResidencyImage (poked :: VkPhysicalDeviceFeatures))
*> poke (ptr `plusPtr` 188) (vkSparseResidencyImage (poked :: VkPhysicalDeviceFeatures))
*> poke (ptr `plusPtr` 192) (vkSparseResidency (poked :: VkPhysicalDeviceFeatures))
*> poke (ptr `plusPtr` 196) (vkSparseResidency (poked :: VkPhysicalDeviceFeatures))
*> poke (ptr `plusPtr` 200) (vkSparseResidency (poked :: VkPhysicalDeviceFeatures))
*> poke (ptr `plusPtr` 204) (vkSparseResidency (poked :: VkPhysicalDeviceFeatures))
*> poke (ptr `plusPtr` 208) (vkSparseResidencyAliased (poked :: VkPhysicalDeviceFeatures))
*> poke (ptr `plusPtr` 212) (vkVariableMultisampleRate (poked :: VkPhysicalDeviceFeatures))
*> poke (ptr `plusPtr` 216) (vkInheritedQueries (poked :: VkPhysicalDeviceFeatures))
newtype VkDeviceCreateFlags = VkDeviceCreateFlags VkFlags
deriving (Eq, Storable)
data VkDeviceQueueCreateInfo =
VkDeviceQueueCreateInfo{ vkSType :: VkStructureType
, vkPNext :: Ptr Void
, vkFlags :: VkDeviceQueueCreateFlags
, vkQueueFamilyIndex :: Word32
, vkQueueCount :: Word32
, vkPQueuePriorities :: Ptr CFloat
}
deriving (Eq)
instance Storable VkDeviceQueueCreateInfo where
sizeOf ~_ = 40
alignment ~_ = 8
peek ptr = VkDeviceQueueCreateInfo <$> peek (ptr `plusPtr` 0)
<*> peek (ptr `plusPtr` 8)
<*> peek (ptr `plusPtr` 16)
<*> peek (ptr `plusPtr` 20)
<*> peek (ptr `plusPtr` 24)
<*> peek (ptr `plusPtr` 32)
poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkDeviceQueueCreateInfo))
*> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkDeviceQueueCreateInfo))
*> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkDeviceQueueCreateInfo))
*> poke (ptr `plusPtr` 20) (vkQueueFamilyIndex (poked :: VkDeviceQueueCreateInfo))
*> poke (ptr `plusPtr` 24) (vkQueueCount (poked :: VkDeviceQueueCreateInfo))
*> poke (ptr `plusPtr` 32) (vkPQueuePriorities (poked :: VkDeviceQueueCreateInfo))
newtype VkDeviceQueueCreateFlags = VkDeviceQueueCreateFlags VkFlags
deriving (Eq, Storable)
foreign import ccall "vkDestroyDevice" vkDestroyDevice ::
VkDevice -> Ptr VkAllocationCallbacks -> IO ()
data VkPhysicalDevice_T
type VkPhysicalDevice = Ptr VkPhysicalDevice_T
data VkDevice_T
type VkDevice = Ptr VkDevice_T
data VkDeviceCreateInfo =
VkDeviceCreateInfo{ vkSType :: VkStructureType
, vkPNext :: Ptr Void
, vkFlags :: VkDeviceCreateFlags
, vkQueueCreateInfoCount :: Word32
, vkPQueueCreateInfos :: Ptr VkDeviceQueueCreateInfo
, vkEnabledLayerCount :: Word32
, vkPpEnabledLayerNames :: Ptr (Ptr CChar)
, vkEnabledExtensionCount :: Word32
, vkPpEnabledExtensionNames :: Ptr (Ptr CChar)
, vkPEnabledFeatures :: Ptr VkPhysicalDeviceFeatures
}
deriving (Eq)
instance Storable VkDeviceCreateInfo where
sizeOf ~_ = 72
alignment ~_ = 8
peek ptr = VkDeviceCreateInfo <$> peek (ptr `plusPtr` 0)
<*> peek (ptr `plusPtr` 8)
<*> peek (ptr `plusPtr` 16)
<*> peek (ptr `plusPtr` 20)
<*> peek (ptr `plusPtr` 24)
<*> peek (ptr `plusPtr` 32)
<*> peek (ptr `plusPtr` 40)
<*> peek (ptr `plusPtr` 48)
<*> peek (ptr `plusPtr` 56)
<*> peek (ptr `plusPtr` 64)
poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkDeviceCreateInfo))
*> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkDeviceCreateInfo))
*> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkDeviceCreateInfo))
*> poke (ptr `plusPtr` 20) (vkQueueCreateInfoCount (poked :: VkDeviceCreateInfo))
*> poke (ptr `plusPtr` 24) (vkPQueueCreateInfos (poked :: VkDeviceCreateInfo))
*> poke (ptr `plusPtr` 32) (vkEnabledLayerCount (poked :: VkDeviceCreateInfo))
*> poke (ptr `plusPtr` 40) (vkPpEnabledLayerNames (poked :: VkDeviceCreateInfo))
*> poke (ptr `plusPtr` 48) (vkEnabledExtensionCount (poked :: VkDeviceCreateInfo))
*> poke (ptr `plusPtr` 56) (vkPpEnabledExtensionNames (poked :: VkDeviceCreateInfo))
*> poke (ptr `plusPtr` 64) (vkPEnabledFeatures (poked :: VkDeviceCreateInfo))