{-# 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, 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
foreign import ccall "vkEnumeratePhysicalDevices" enumerate ::
Instance.I -> Ptr Word32 -> Ptr P ->
{-# LINE 101 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
IO Int32
{-# LINE 102 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
struct "SparseProperties" (20)
{-# LINE 104 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
4 [
{-# LINE 105 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
("residencyStandard2DBlockShape", ''Word32,
{-# LINE 106 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> peekByteOff hsc_ptr 0) |],
{-# LINE 108 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> pokeByteOff hsc_ptr 0) |]),
{-# LINE 110 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
("residencyStandard2DMultisampleBlockShape", ''Word32,
{-# LINE 111 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> peekByteOff hsc_ptr 4) |],
{-# LINE 113 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> pokeByteOff hsc_ptr 4) |]),
{-# LINE 115 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
("residencyStandard3DBlockShape", ''Word32,
{-# LINE 116 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> peekByteOff hsc_ptr 8) |],
{-# LINE 118 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> pokeByteOff hsc_ptr 8) |]),
{-# LINE 120 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
("residencyAlignedMipSize", ''Word32,
{-# LINE 121 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> peekByteOff hsc_ptr 12) |],
{-# LINE 123 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> pokeByteOff hsc_ptr 12) |]),
{-# LINE 125 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
("residencyNonResidentStrict", ''Word32,
{-# LINE 126 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> peekByteOff hsc_ptr 16) |],
{-# LINE 128 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> pokeByteOff hsc_ptr 16) |]) ]
{-# LINE 130 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[''Show, ''Storable]
struct "Properties" (824)
{-# LINE 133 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
8 [
{-# LINE 134 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
("apiVersion", ''Word32,
{-# LINE 135 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> peekByteOff hsc_ptr 0) |],
{-# LINE 136 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> pokeByteOff hsc_ptr 0) |]),
{-# LINE 137 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
("driverVersion", ''Word32,
{-# LINE 138 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> peekByteOff hsc_ptr 4) |],
{-# LINE 139 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> pokeByteOff hsc_ptr 4) |]),
{-# LINE 140 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
("vendorId", ''Word32,
{-# LINE 141 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> peekByteOff hsc_ptr 8) |],
{-# LINE 142 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> pokeByteOff hsc_ptr 8) |]),
{-# LINE 143 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
("deviceId", ''Word32,
{-# LINE 144 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> peekByteOff hsc_ptr 12) |],
{-# LINE 145 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> pokeByteOff hsc_ptr 12) |]),
{-# LINE 146 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
("deviceType", ''Word32,
{-# LINE 147 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> peekByteOff hsc_ptr 16) |],
{-# LINE 148 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> pokeByteOff hsc_ptr 16) |]),
{-# LINE 149 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
("deviceName", ''T.Text,
[| cstringToText
. (\hsc_ptr -> hsc_ptr `plusPtr` 20) |],
{-# LINE 152 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| \p -> pokeText maxNameSize
((\hsc_ptr -> hsc_ptr `plusPtr` 20) p) |]),
{-# LINE 154 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
("pipelineCacheUuid", ''ListUint8T,
[| peekArray 16
{-# LINE 156 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
. (\hsc_ptr -> hsc_ptr `plusPtr` 276)
{-# LINE 157 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
|],
[| \p -> pokeArray
((\hsc_ptr -> hsc_ptr `plusPtr` 276) p)
{-# LINE 160 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
. take 16 |]),
{-# LINE 161 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
("limits", ''Limits,
[| (\hsc_ptr -> peekByteOff hsc_ptr 296) |],
{-# LINE 163 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> pokeByteOff hsc_ptr 296) |]),
{-# LINE 164 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
("sparseProperties", ''SparseProperties,
[| (\hsc_ptr -> peekByteOff hsc_ptr 800) |],
{-# LINE 166 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> pokeByteOff hsc_ptr 800) |]) ]
{-# LINE 167 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[''Show, ''Storable]
maxNameSize :: Integral n => n
maxNameSize :: forall n. Integral n => n
maxNameSize = n
256
{-# LINE 171 "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 184 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
sTypeFeatures2 = 1000059000
{-# LINE 185 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
struct "Features2"
(240)
{-# LINE 188 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
8 [
{-# LINE 189 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
("sType", ''(), [| const $ pure () |],
[| \p _ -> (\hsc_ptr -> pokeByteOff hsc_ptr 0)
{-# LINE 191 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
p sTypeFeatures2 |]),
("pNext", ''PtrVoid,
[| (\hsc_ptr -> peekByteOff hsc_ptr 8) |],
{-# LINE 194 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> pokeByteOff hsc_ptr 8) |]),
{-# LINE 195 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
("features", ''Features,
[| peek . (\hsc_ptr -> hsc_ptr `plusPtr` 16) |],
{-# LINE 197 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| poke . (\hsc_ptr -> hsc_ptr `plusPtr` 16) |]) ]
{-# LINE 198 "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 206 "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 229 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
Ptr ExtensionProperties -> IO Int32
{-# LINE 230 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
struct "MemoryProperties" (520)
{-# LINE 232 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
8 [
{-# LINE 233 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
("memoryTypeCount", ''Word32,
{-# LINE 234 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> peekByteOff hsc_ptr 0) |],
{-# LINE 235 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> pokeByteOff hsc_ptr 0) |]),
{-# LINE 237 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
("memoryTypes", ''Memory.ListMType,
[| \p -> peekArray Memory.maxTypes
$ (\hsc_ptr -> hsc_ptr `plusPtr` 4) p
{-# LINE 240 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
|],
[| \p -> pokeArray
((\hsc_ptr -> hsc_ptr `plusPtr` 4) p)
{-# LINE 244 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
. take Memory.maxTypes |]),
("memoryHeapCount", ''Word32,
{-# LINE 246 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> peekByteOff hsc_ptr 260) |],
{-# LINE 247 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> pokeByteOff hsc_ptr 260) |]),
{-# LINE 249 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
("memoryHeaps", ''Memory.ListHeap,
[| \p -> peekArray Memory.maxHeaps
$ (\hsc_ptr -> hsc_ptr `plusPtr` 264) p
{-# LINE 252 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
|],
[| \p -> pokeArray
((\hsc_ptr -> hsc_ptr `plusPtr` 264) p) .
{-# LINE 256 "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 265 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
shaderDrawParametersFeaturesType :: Word32
{-# LINE 267 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
shaderDrawParametersFeaturesType =
1000063000
{-# LINE 269 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
struct "ShaderDrawParametersFeatures"
(24)
{-# LINE 272 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
8 [
{-# LINE 273 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
("sType", ''(), [| const $ pure () |],
[| \p _ ->
(\hsc_ptr -> pokeByteOff hsc_ptr 0) p shaderDrawParametersFeaturesType |]),
{-# LINE 277 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
("pNext", ''PtrVoid,
[| (\hsc_ptr -> peekByteOff hsc_ptr 8) |],
{-# LINE 279 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> pokeByteOff hsc_ptr 8) |]),
{-# LINE 280 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
("shaderDrawParameters", ''Word32,
{-# LINE 281 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> peekByteOff hsc_ptr 16) |],
{-# LINE 283 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[| (\hsc_ptr -> pokeByteOff hsc_ptr 16) |]) ]
{-# LINE 285 "src/Gpu/Vulkan/PhysicalDevice/Core.hsc" #-}
[''Show, ''Storable]