{-# 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,
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,
Vulkan13Features, pattern Vulkan13Features,
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
foreign import ccall "vkEnumeratePhysicalDevices" enumerate ::
Instance.I -> Ptr Word32 -> Ptr P ->
{-# LINE 99 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
IO Int32
{-# LINE 100 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
struct "SparseProperties" (20)
{-# LINE 102 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
4 [
{-# LINE 103 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
("residencyStandard2DBlockShape", ''Word32,
{-# LINE 104 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> peekByteOff hsc_ptr 0) |],
{-# LINE 106 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> pokeByteOff hsc_ptr 0) |]),
{-# LINE 108 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
("residencyStandard2DMultisampleBlockShape", ''Word32,
{-# LINE 109 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> peekByteOff hsc_ptr 4) |],
{-# LINE 111 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> pokeByteOff hsc_ptr 4) |]),
{-# LINE 113 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
("residencyStandard3DBlockShape", ''Word32,
{-# LINE 114 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> peekByteOff hsc_ptr 8) |],
{-# LINE 116 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> pokeByteOff hsc_ptr 8) |]),
{-# LINE 118 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
("residencyAlignedMipSize", ''Word32,
{-# LINE 119 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> peekByteOff hsc_ptr 12) |],
{-# LINE 121 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> pokeByteOff hsc_ptr 12) |]),
{-# LINE 123 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
("residencyNonResidentStrict", ''Word32,
{-# LINE 124 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> peekByteOff hsc_ptr 16) |],
{-# LINE 126 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> pokeByteOff hsc_ptr 16) |]) ]
{-# LINE 128 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[''Show, ''Storable]
struct "Properties" (824)
{-# LINE 131 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
8 [
{-# LINE 132 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
("apiVersion", ''Word32,
{-# LINE 133 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> peekByteOff hsc_ptr 0) |],
{-# LINE 134 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> pokeByteOff hsc_ptr 0) |]),
{-# LINE 135 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
("driverVersion", ''Word32,
{-# LINE 136 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> peekByteOff hsc_ptr 4) |],
{-# LINE 137 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> pokeByteOff hsc_ptr 4) |]),
{-# LINE 138 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
("vendorId", ''Word32,
{-# LINE 139 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> peekByteOff hsc_ptr 8) |],
{-# LINE 140 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> pokeByteOff hsc_ptr 8) |]),
{-# LINE 141 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
("deviceId", ''Word32,
{-# LINE 142 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> peekByteOff hsc_ptr 12) |],
{-# LINE 143 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> pokeByteOff hsc_ptr 12) |]),
{-# LINE 144 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
("deviceType", ''Word32,
{-# LINE 145 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> peekByteOff hsc_ptr 16) |],
{-# LINE 146 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> pokeByteOff hsc_ptr 16) |]),
{-# LINE 147 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
("deviceName", ''T.Text,
[| cstringToText
. (\hsc_ptr -> hsc_ptr `plusPtr` 20) |],
{-# LINE 150 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| \p -> pokeText maxNameSize
((\hsc_ptr -> hsc_ptr `plusPtr` 20) p) |]),
{-# LINE 152 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
("pipelineCacheUuid", ''ListUint8T,
[| peekArray 16
{-# LINE 154 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
. (\hsc_ptr -> hsc_ptr `plusPtr` 276)
{-# LINE 155 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
|],
[| \p -> pokeArray
((\hsc_ptr -> hsc_ptr `plusPtr` 276) p)
{-# LINE 158 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
. take 16 |]),
{-# LINE 159 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
("limits", ''Limits,
[| (\hsc_ptr -> peekByteOff hsc_ptr 296) |],
{-# LINE 161 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> pokeByteOff hsc_ptr 296) |]),
{-# LINE 162 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
("sparseProperties", ''SparseProperties,
[| (\hsc_ptr -> peekByteOff hsc_ptr 800) |],
{-# LINE 164 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> pokeByteOff hsc_ptr 800) |]) ]
{-# LINE 165 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[''Show, ''Storable]
maxNameSize :: Integral n => n
maxNameSize :: forall n. Integral n => n
maxNameSize = n
256
{-# LINE 169 "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 182 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
sTypeFeatures2 = 1000059000
{-# LINE 183 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
struct "Features2"
(240)
{-# LINE 186 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
8 [
{-# LINE 187 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
("sType", ''(), [| const $ pure () |],
[| \p _ -> (\hsc_ptr -> pokeByteOff hsc_ptr 0)
{-# LINE 189 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
p sTypeFeatures2 |]),
("pNext", ''PtrVoid,
[| (\hsc_ptr -> peekByteOff hsc_ptr 8) |],
{-# LINE 192 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> pokeByteOff hsc_ptr 8) |]),
{-# LINE 193 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
("features", ''Features,
[| peek . (\hsc_ptr -> hsc_ptr `plusPtr` 16) |],
{-# LINE 195 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| poke . (\hsc_ptr -> hsc_ptr `plusPtr` 16) |]) ]
{-# LINE 196 "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 204 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
IO ()
foreign import ccall "vkEnumerateDeviceExtensionProperties"
enumerateExtensionProperties ::
P -> CString -> Ptr Word32 ->
{-# LINE 209 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
Ptr ExtensionProperties -> IO Int32
{-# LINE 210 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
struct "MemoryProperties" (520)
{-# LINE 212 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
8 [
{-# LINE 213 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
("memoryTypeCount", ''Word32,
{-# LINE 214 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> peekByteOff hsc_ptr 0) |],
{-# LINE 215 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> pokeByteOff hsc_ptr 0) |]),
{-# LINE 217 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
("memoryTypes", ''Memory.ListMType,
[| \p -> peekArray Memory.maxTypes
$ (\hsc_ptr -> hsc_ptr `plusPtr` 4) p
{-# LINE 220 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
|],
[| \p -> pokeArray
((\hsc_ptr -> hsc_ptr `plusPtr` 4) p)
{-# LINE 224 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
. take Memory.maxTypes |]),
("memoryHeapCount", ''Word32,
{-# LINE 226 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> peekByteOff hsc_ptr 260) |],
{-# LINE 227 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> pokeByteOff hsc_ptr 260) |]),
{-# LINE 229 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
("memoryHeaps", ''Memory.ListHeap,
[| \p -> peekArray Memory.maxHeaps
$ (\hsc_ptr -> hsc_ptr `plusPtr` 264) p
{-# LINE 232 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
|],
[| \p -> pokeArray
((\hsc_ptr -> hsc_ptr `plusPtr` 264) p) .
{-# LINE 236 "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 245 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
shaderDrawParametersFeaturesType :: Word32
{-# LINE 247 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
shaderDrawParametersFeaturesType =
1000063000
{-# LINE 249 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
struct "ShaderDrawParametersFeatures"
(24)
{-# LINE 252 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
8 [
{-# LINE 253 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
("sType", ''(), [| const $ pure () |],
[| \p _ ->
(\hsc_ptr -> pokeByteOff hsc_ptr 0) p shaderDrawParametersFeaturesType |]),
{-# LINE 257 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
("pNext", ''PtrVoid,
[| (\hsc_ptr -> peekByteOff hsc_ptr 8) |],
{-# LINE 259 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> pokeByteOff hsc_ptr 8) |]),
{-# LINE 260 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
("shaderDrawParameters", ''Word32,
{-# LINE 261 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> peekByteOff hsc_ptr 16) |],
{-# LINE 263 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> pokeByteOff hsc_ptr 16) |]) ]
{-# LINE 265 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[''Show, ''Storable]