{-# 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,
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 97 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
IO Int32
{-# LINE 98 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
struct "SparseProperties" (20)
{-# LINE 100 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
4 [
{-# LINE 101 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
("residencyStandard2DBlockShape", ''Word32,
{-# LINE 102 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> peekByteOff hsc_ptr 0) |],
{-# LINE 104 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> pokeByteOff hsc_ptr 0) |]),
{-# LINE 106 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
("residencyStandard2DMultisampleBlockShape", ''Word32,
{-# LINE 107 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> peekByteOff hsc_ptr 4) |],
{-# LINE 109 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> pokeByteOff hsc_ptr 4) |]),
{-# LINE 111 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
("residencyStandard3DBlockShape", ''Word32,
{-# LINE 112 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> peekByteOff hsc_ptr 8) |],
{-# LINE 114 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> pokeByteOff hsc_ptr 8) |]),
{-# LINE 116 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
("residencyAlignedMipSize", ''Word32,
{-# LINE 117 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> peekByteOff hsc_ptr 12) |],
{-# LINE 119 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> pokeByteOff hsc_ptr 12) |]),
{-# LINE 121 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
("residencyNonResidentStrict", ''Word32,
{-# LINE 122 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> peekByteOff hsc_ptr 16) |],
{-# LINE 124 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> pokeByteOff hsc_ptr 16) |]) ]
{-# LINE 126 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[''Show, ''Storable]
struct "Properties" (824)
{-# LINE 129 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
8 [
{-# LINE 130 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
("apiVersion", ''Word32,
{-# LINE 131 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> peekByteOff hsc_ptr 0) |],
{-# LINE 132 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> pokeByteOff hsc_ptr 0) |]),
{-# LINE 133 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
("driverVersion", ''Word32,
{-# LINE 134 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> peekByteOff hsc_ptr 4) |],
{-# LINE 135 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> pokeByteOff hsc_ptr 4) |]),
{-# LINE 136 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
("vendorId", ''Word32,
{-# LINE 137 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> peekByteOff hsc_ptr 8) |],
{-# LINE 138 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> pokeByteOff hsc_ptr 8) |]),
{-# LINE 139 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
("deviceId", ''Word32,
{-# LINE 140 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> peekByteOff hsc_ptr 12) |],
{-# LINE 141 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> pokeByteOff hsc_ptr 12) |]),
{-# LINE 142 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
("deviceType", ''Word32,
{-# LINE 143 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> peekByteOff hsc_ptr 16) |],
{-# LINE 144 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> pokeByteOff hsc_ptr 16) |]),
{-# LINE 145 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
("deviceName", ''T.Text,
[| cstringToText
. (\hsc_ptr -> hsc_ptr `plusPtr` 20) |],
{-# LINE 148 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| \p -> pokeText maxNameSize
((\hsc_ptr -> hsc_ptr `plusPtr` 20) p) |]),
{-# LINE 150 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
("pipelineCacheUuid", ''ListUint8T,
[| peekArray 16
{-# LINE 152 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
. (\hsc_ptr -> hsc_ptr `plusPtr` 276)
{-# LINE 153 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
|],
[| \p -> pokeArray
((\hsc_ptr -> hsc_ptr `plusPtr` 276) p)
{-# LINE 156 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
. take 16 |]),
{-# LINE 157 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
("limits", ''Limits,
[| (\hsc_ptr -> peekByteOff hsc_ptr 296) |],
{-# LINE 159 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> pokeByteOff hsc_ptr 296) |]),
{-# LINE 160 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
("sparseProperties", ''SparseProperties,
[| (\hsc_ptr -> peekByteOff hsc_ptr 800) |],
{-# LINE 162 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> pokeByteOff hsc_ptr 800) |]) ]
{-# LINE 163 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[''Show, ''Storable]
maxNameSize :: Integral n => n
maxNameSize :: forall n. Integral n => n
maxNameSize = n
256
{-# LINE 167 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
foreign import ccall "vkGetPhysicalDeviceProperties" getProperties ::
P -> Ptr Properties -> IO ()
getClearedFeatures :: IO Features
getClearedFeatures :: IO Features
getClearedFeatures = do
Ptr Features
pf <- IO (Ptr Features)
forall a. Storable a => IO (Ptr a)
calloc
ForeignPtr Features -> Features
Features_ (ForeignPtr Features -> Features)
-> IO (ForeignPtr Features) -> IO Features
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr Features -> IO () -> IO (ForeignPtr Features)
forall a. Ptr a -> IO () -> IO (ForeignPtr a)
newForeignPtr Ptr Features
pf (Ptr Features -> IO ()
forall a. Ptr a -> IO ()
free Ptr Features
pf)
foreign import ccall "vkGetPhysicalDeviceFeatures" getFeatures ::
P -> Ptr Features -> IO ()
sTypeFeatures2 :: Word32
{-# LINE 180 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
sTypeFeatures2 = 1000059000
{-# LINE 181 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
struct "Features2"
(240)
{-# LINE 184 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
8 [
{-# LINE 185 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
("sType", ''(), [| const $ pure () |],
[| \p _ -> (\hsc_ptr -> pokeByteOff hsc_ptr 0)
{-# LINE 187 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
p sTypeFeatures2 |]),
("pNext", ''PtrVoid,
[| (\hsc_ptr -> peekByteOff hsc_ptr 8) |],
{-# LINE 190 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> pokeByteOff hsc_ptr 8) |]),
{-# LINE 191 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
("features", ''Features,
[| peek . (\hsc_ptr -> hsc_ptr `plusPtr` 16) |],
{-# LINE 193 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| poke . (\hsc_ptr -> hsc_ptr `plusPtr` 16) |]) ]
{-# LINE 194 "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 202 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
IO ()
foreign import ccall "vkEnumerateDeviceExtensionProperties"
enumerateExtensionProperties ::
P -> CString -> Ptr Word32 ->
{-# LINE 207 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
Ptr ExtensionProperties -> IO Int32
{-# LINE 208 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
struct "MemoryProperties" (520)
{-# LINE 210 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
8 [
{-# LINE 211 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
("memoryTypeCount", ''Word32,
{-# LINE 212 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> peekByteOff hsc_ptr 0) |],
{-# LINE 213 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> pokeByteOff hsc_ptr 0) |]),
{-# LINE 215 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
("memoryTypes", ''Memory.ListMType,
[| \p -> peekArray Memory.maxTypes
$ (\hsc_ptr -> hsc_ptr `plusPtr` 4) p
{-# LINE 218 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
|],
[| \p -> pokeArray
((\hsc_ptr -> hsc_ptr `plusPtr` 4) p)
{-# LINE 222 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
. take Memory.maxTypes |]),
("memoryHeapCount", ''Word32,
{-# LINE 224 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> peekByteOff hsc_ptr 260) |],
{-# LINE 225 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> pokeByteOff hsc_ptr 260) |]),
{-# LINE 227 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
("memoryHeaps", ''Memory.ListHeap,
[| \p -> peekArray Memory.maxHeaps
$ (\hsc_ptr -> hsc_ptr `plusPtr` 264) p
{-# LINE 230 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
|],
[| \p -> pokeArray
((\hsc_ptr -> hsc_ptr `plusPtr` 264) p) .
{-# LINE 234 "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 243 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
shaderDrawParametersFeaturesType :: Word32
{-# LINE 245 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
shaderDrawParametersFeaturesType =
1000063000
{-# LINE 247 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
struct "ShaderDrawParametersFeatures"
(24)
{-# LINE 250 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
8 [
{-# LINE 251 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
("sType", ''(), [| const $ pure () |],
[| \p _ ->
(\hsc_ptr -> pokeByteOff hsc_ptr 0) p shaderDrawParametersFeaturesType |]),
{-# LINE 255 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
("pNext", ''PtrVoid,
[| (\hsc_ptr -> peekByteOff hsc_ptr 8) |],
{-# LINE 257 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> pokeByteOff hsc_ptr 8) |]),
{-# LINE 258 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
("shaderDrawParameters", ''Word32,
{-# LINE 259 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> peekByteOff hsc_ptr 16) |],
{-# LINE 261 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> pokeByteOff hsc_ptr 16) |]) ]
{-# LINE 263 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[''Show, ''Storable]