{-# LINE 1 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE TupleSections #-}
{-# LANGUAGE PatternSynonyms, ViewPatterns #-}
{-# OPTIONS_GHC -Wall -fno-warn-tabs #-}
module Gpu.Vulkan.PhysicalDevice.Core (
enumerate, P, PtrP,
getProperties, Properties, pattern Properties,
propertiesApiVersion, propertiesDriverVersion,
propertiesVendorId, propertiesDeviceId,
propertiesDeviceType, propertiesDeviceName,
propertiesPipelineCacheUuid, propertiesLimits,
propertiesSparseProperties,
SparseProperties, pattern SparseProperties,
sparsePropertiesResidencyStandard2DBlockShape,
sparsePropertiesResidencyStandard2DMultisampleBlockShape,
sparsePropertiesResidencyStandard3DBlockShape,
sparsePropertiesResidencyAlignedMipSize,
sparsePropertiesResidencyNonResidentStrict,
enumerateExtensionProperties,
getQueueFamilyProperties,
getMemoryProperties, MemoryProperties, pattern MemoryProperties,
memoryPropertiesMemoryTypeCount, memoryPropertiesMemoryTypes,
memoryPropertiesMemoryHeapCount, memoryPropertiesMemoryHeaps,
getFormatProperties,
getFeatures, Features, pattern Features, getClearedFeatures,
getFeatures2, Features2,
pattern Features2, features2SType, features2PNext, features2Features,
Vulkan12Features, pattern Vulkan12Features, getClearedVulkan12Features,
Vulkan13Features, pattern Vulkan13Features, getClearedVulkan13Features,
DescriptorIndexingFeatures, pattern DescriptorIndexingFeatures,
getClearedDescriptorIndexingFeatures,
ShaderDrawParametersFeatures, pattern ShaderDrawParametersFeatures,
shaderDrawParametersFeaturesSType, shaderDrawParametersFeaturesPNext,
shaderDrawParametersFeaturesShaderDrawParameters
) where
import Foreign.Ptr
import Foreign.Concurrent
import Foreign.Marshal
import Foreign.Storable
import Foreign.C.String
import Foreign.C.Struct
import Foreign.C.Struct.TypeSynonyms
import Data.Word
import Data.Int
import Data.Text.Tools
import qualified Data.Text as T
import Gpu.Vulkan.Core (ExtensionProperties, FormatProperties)
import Gpu.Vulkan.TypeSynonyms.Core
import Gpu.Vulkan.PhysicalDevice.Struct.Core
import qualified Gpu.Vulkan.Instance.Core as Instance
import qualified Gpu.Vulkan.QueueFamily.Core as QueueFamily
import qualified Gpu.Vulkan.Memory.Core as Memory
data PTag
type P = Ptr PTag
type PtrP = Ptr P
foreign import ccall "vkEnumeratePhysicalDevices" enumerate ::
Instance.I -> Ptr Word32 -> Ptr P ->
{-# LINE 102 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
IO Int32
{-# LINE 103 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
struct "SparseProperties" (20)
{-# LINE 105 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
4 [
{-# LINE 106 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
("residencyStandard2DBlockShape", ''Word32,
{-# LINE 107 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> peekByteOff hsc_ptr 0) |],
{-# LINE 109 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> pokeByteOff hsc_ptr 0) |]),
{-# LINE 111 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
("residencyStandard2DMultisampleBlockShape", ''Word32,
{-# LINE 112 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> peekByteOff hsc_ptr 4) |],
{-# LINE 114 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> pokeByteOff hsc_ptr 4) |]),
{-# LINE 116 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
("residencyStandard3DBlockShape", ''Word32,
{-# LINE 117 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> peekByteOff hsc_ptr 8) |],
{-# LINE 119 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> pokeByteOff hsc_ptr 8) |]),
{-# LINE 121 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
("residencyAlignedMipSize", ''Word32,
{-# LINE 122 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> peekByteOff hsc_ptr 12) |],
{-# LINE 124 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> pokeByteOff hsc_ptr 12) |]),
{-# LINE 126 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
("residencyNonResidentStrict", ''Word32,
{-# LINE 127 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> peekByteOff hsc_ptr 16) |],
{-# LINE 129 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> pokeByteOff hsc_ptr 16) |]) ]
{-# LINE 131 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[''Show, ''Storable]
struct "Properties" (824)
{-# LINE 134 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
8 [
{-# LINE 135 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
("apiVersion", ''Word32,
{-# LINE 136 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> peekByteOff hsc_ptr 0) |],
{-# LINE 137 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> pokeByteOff hsc_ptr 0) |]),
{-# LINE 138 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
("driverVersion", ''Word32,
{-# LINE 139 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> peekByteOff hsc_ptr 4) |],
{-# LINE 140 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> pokeByteOff hsc_ptr 4) |]),
{-# LINE 141 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
("vendorId", ''Word32,
{-# LINE 142 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> peekByteOff hsc_ptr 8) |],
{-# LINE 143 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> pokeByteOff hsc_ptr 8) |]),
{-# LINE 144 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
("deviceId", ''Word32,
{-# LINE 145 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> peekByteOff hsc_ptr 12) |],
{-# LINE 146 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> pokeByteOff hsc_ptr 12) |]),
{-# LINE 147 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
("deviceType", ''Word32,
{-# LINE 148 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> peekByteOff hsc_ptr 16) |],
{-# LINE 149 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> pokeByteOff hsc_ptr 16) |]),
{-# LINE 150 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
("deviceName", ''T.Text,
[| cstringToText
. (\hsc_ptr -> hsc_ptr `plusPtr` 20) |],
{-# LINE 153 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| \p -> pokeText maxNameSize
((\hsc_ptr -> hsc_ptr `plusPtr` 20) p) |]),
{-# LINE 155 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
("pipelineCacheUuid", ''ListUint8T,
[| peekArray 16
{-# LINE 157 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
. (\hsc_ptr -> hsc_ptr `plusPtr` 276)
{-# LINE 158 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
|],
[| \p -> pokeArray
((\hsc_ptr -> hsc_ptr `plusPtr` 276) p)
{-# LINE 161 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
. take 16 |]),
{-# LINE 162 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
("limits", ''Limits,
[| (\hsc_ptr -> peekByteOff hsc_ptr 296) |],
{-# LINE 164 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> pokeByteOff hsc_ptr 296) |]),
{-# LINE 165 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
("sparseProperties", ''SparseProperties,
[| (\hsc_ptr -> peekByteOff hsc_ptr 800) |],
{-# LINE 167 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> pokeByteOff hsc_ptr 800) |]) ]
{-# LINE 168 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[''Show, ''Storable]
maxNameSize :: Integral n => n
maxNameSize :: forall n. Integral n => n
maxNameSize = n
256
{-# LINE 172 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
foreign import ccall "vkGetPhysicalDeviceProperties" getProperties ::
P -> Ptr Properties -> IO ()
getClearedFeatures :: IO Features
getClearedFeatures :: IO Features
getClearedFeatures = do
pf <- IO (Ptr Features)
forall a. Storable a => IO (Ptr a)
calloc
Features_ <$> newForeignPtr pf (free pf)
foreign import ccall "vkGetPhysicalDeviceFeatures" getFeatures ::
P -> Ptr Features -> IO ()
sTypeFeatures2 :: Word32
{-# LINE 185 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
sTypeFeatures2 = 1000059000
{-# LINE 186 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
struct "Features2"
(240)
{-# LINE 189 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
8 [
{-# LINE 190 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
("sType", ''(), [| const $ pure () |],
[| \p _ -> (\hsc_ptr -> pokeByteOff hsc_ptr 0)
{-# LINE 192 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
p sTypeFeatures2 |]),
("pNext", ''PtrVoid,
[| (\hsc_ptr -> peekByteOff hsc_ptr 8) |],
{-# LINE 195 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> pokeByteOff hsc_ptr 8) |]),
{-# LINE 196 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
("features", ''Features,
[| peek . (\hsc_ptr -> hsc_ptr `plusPtr` 16) |],
{-# LINE 198 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| poke . (\hsc_ptr -> hsc_ptr `plusPtr` 16) |]) ]
{-# LINE 199 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[''Show, ''Storable]
foreign import ccall "vkGetPhysicalDeviceFeatures2" getFeatures2 ::
P -> Ptr Features2 -> IO ()
foreign import ccall "vkGetPhysicalDeviceQueueFamilyProperties"
getQueueFamilyProperties ::
P -> Ptr Word32 -> Ptr QueueFamily.Properties ->
{-# LINE 207 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
IO ()
getClearedVulkan12Features :: IO Vulkan12Features
getClearedVulkan12Features :: IO Vulkan12Features
getClearedVulkan12Features = do
pf <- IO (Ptr Vulkan12Features)
forall a. Storable a => IO (Ptr a)
calloc
zero <- Vulkan12Features_ <$> newForeignPtr pf (free pf)
pure $ zero { vulkan12FeaturesSType = () }
getClearedVulkan13Features :: IO Vulkan13Features
getClearedVulkan13Features :: IO Vulkan13Features
getClearedVulkan13Features = do
pf <- IO (Ptr Vulkan13Features)
forall a. Storable a => IO (Ptr a)
calloc
zero <- Vulkan13Features_ <$> newForeignPtr pf (free pf)
pure $ zero { vulkan13FeaturesSType = () }
getClearedDescriptorIndexingFeatures :: IO DescriptorIndexingFeatures
getClearedDescriptorIndexingFeatures :: IO DescriptorIndexingFeatures
getClearedDescriptorIndexingFeatures = do
pf <- IO (Ptr DescriptorIndexingFeatures)
forall a. Storable a => IO (Ptr a)
calloc
zero <- DescriptorIndexingFeatures_ <$> newForeignPtr pf (free pf)
pure $ zero { descriptorIndexingFeaturesSType = () }
foreign import ccall "vkEnumerateDeviceExtensionProperties"
enumerateExtensionProperties ::
P -> CString -> Ptr Word32 ->
{-# LINE 230 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
Ptr ExtensionProperties -> IO Int32
{-# LINE 231 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
struct "MemoryProperties" (520)
{-# LINE 233 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
8 [
{-# LINE 234 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
("memoryTypeCount", ''Word32,
{-# LINE 235 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> peekByteOff hsc_ptr 0) |],
{-# LINE 236 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> pokeByteOff hsc_ptr 0) |]),
{-# LINE 238 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
("memoryTypes", ''Memory.ListMType,
[| \p -> peekArray Memory.maxTypes
$ (\hsc_ptr -> hsc_ptr `plusPtr` 4) p
{-# LINE 241 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
|],
[| \p -> pokeArray
((\hsc_ptr -> hsc_ptr `plusPtr` 4) p)
{-# LINE 245 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
. take Memory.maxTypes |]),
("memoryHeapCount", ''Word32,
{-# LINE 247 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> peekByteOff hsc_ptr 260) |],
{-# LINE 248 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> pokeByteOff hsc_ptr 260) |]),
{-# LINE 250 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
("memoryHeaps", ''Memory.ListHeap,
[| \p -> peekArray Memory.maxHeaps
$ (\hsc_ptr -> hsc_ptr `plusPtr` 264) p
{-# LINE 253 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
|],
[| \p -> pokeArray
((\hsc_ptr -> hsc_ptr `plusPtr` 264) p) .
{-# LINE 257 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
take Memory.maxHeaps |]) ]
[''Show, ''Storable]
foreign import ccall "vkGetPhysicalDeviceMemoryProperties"
getMemoryProperties :: P -> Ptr MemoryProperties -> IO ()
foreign import ccall "vkGetPhysicalDeviceFormatProperties"
getFormatProperties ::
P -> Word32 -> Ptr FormatProperties -> IO ()
{-# LINE 266 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
shaderDrawParametersFeaturesType :: Word32
{-# LINE 268 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
shaderDrawParametersFeaturesType =
1000063000
{-# LINE 270 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
struct "ShaderDrawParametersFeatures"
(24)
{-# LINE 273 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
8 [
{-# LINE 274 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
("sType", ''(), [| const $ pure () |],
[| \p _ ->
(\hsc_ptr -> pokeByteOff hsc_ptr 0) p shaderDrawParametersFeaturesType |]),
{-# LINE 278 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
("pNext", ''PtrVoid,
[| (\hsc_ptr -> peekByteOff hsc_ptr 8) |],
{-# LINE 280 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> pokeByteOff hsc_ptr 8) |]),
{-# LINE 281 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
("shaderDrawParameters", ''Word32,
{-# LINE 282 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> peekByteOff hsc_ptr 16) |],
{-# LINE 284 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> pokeByteOff hsc_ptr 16) |]) ]
{-# LINE 286 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[''Show, ''Storable]