{-# language Strict #-} {-# language CPP #-} {-# language GeneralizedNewtypeDeriving #-} {-# language PatternSynonyms #-} {-# language DataKinds #-} {-# language TypeOperators #-} {-# language DuplicateRecordFields #-} module Graphics.Vulkan.Core10.DeviceInitialization ( VkImageTiling(..) , pattern VK_IMAGE_TILING_OPTIMAL , pattern VK_IMAGE_TILING_LINEAR , VkImageType(..) , pattern VK_IMAGE_TYPE_1D , pattern VK_IMAGE_TYPE_2D , pattern VK_IMAGE_TYPE_3D , VkPhysicalDeviceType(..) , pattern VK_PHYSICAL_DEVICE_TYPE_OTHER , pattern VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU , pattern VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU , pattern VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU , pattern VK_PHYSICAL_DEVICE_TYPE_CPU , VkSystemAllocationScope(..) , pattern VK_SYSTEM_ALLOCATION_SCOPE_COMMAND , pattern VK_SYSTEM_ALLOCATION_SCOPE_OBJECT , pattern VK_SYSTEM_ALLOCATION_SCOPE_CACHE , pattern VK_SYSTEM_ALLOCATION_SCOPE_DEVICE , pattern VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE , VkInternalAllocationType(..) , pattern VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE , VkInstanceCreateFlags(..) , VkQueueFlagBits(..) , pattern VK_QUEUE_GRAPHICS_BIT , pattern VK_QUEUE_COMPUTE_BIT , pattern VK_QUEUE_TRANSFER_BIT , pattern VK_QUEUE_SPARSE_BINDING_BIT , VkMemoryPropertyFlagBits(..) , pattern VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT , pattern VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT , pattern VK_MEMORY_PROPERTY_HOST_COHERENT_BIT , pattern VK_MEMORY_PROPERTY_HOST_CACHED_BIT , pattern VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT , VkMemoryHeapFlagBits(..) , pattern VK_MEMORY_HEAP_DEVICE_LOCAL_BIT , VkImageUsageFlagBits(..) , pattern VK_IMAGE_USAGE_TRANSFER_SRC_BIT , pattern VK_IMAGE_USAGE_TRANSFER_DST_BIT , pattern VK_IMAGE_USAGE_SAMPLED_BIT , pattern VK_IMAGE_USAGE_STORAGE_BIT , pattern VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT , pattern VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT , pattern VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT , pattern VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT , VkImageCreateFlagBits(..) , pattern VK_IMAGE_CREATE_SPARSE_BINDING_BIT , pattern VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT , pattern VK_IMAGE_CREATE_SPARSE_ALIASED_BIT , pattern VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT , pattern VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT , VkFormatFeatureFlagBits(..) , pattern VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT , pattern VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT , pattern VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT , pattern VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT , pattern VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT , pattern VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT , pattern VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT , pattern VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT , pattern VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT , pattern VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT , pattern VK_FORMAT_FEATURE_BLIT_SRC_BIT , pattern VK_FORMAT_FEATURE_BLIT_DST_BIT , pattern VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT , VkSampleCountFlagBits(..) , pattern VK_SAMPLE_COUNT_1_BIT , pattern VK_SAMPLE_COUNT_2_BIT , pattern VK_SAMPLE_COUNT_4_BIT , pattern VK_SAMPLE_COUNT_8_BIT , pattern VK_SAMPLE_COUNT_16_BIT , pattern VK_SAMPLE_COUNT_32_BIT , pattern VK_SAMPLE_COUNT_64_BIT , VK_MAX_PHYSICAL_DEVICE_NAME_SIZE , pattern VK_MAX_PHYSICAL_DEVICE_NAME_SIZE , VK_UUID_SIZE , pattern VK_UUID_SIZE , VK_MAX_MEMORY_TYPES , pattern VK_MAX_MEMORY_TYPES , VK_MAX_MEMORY_HEAPS , pattern VK_MAX_MEMORY_HEAPS , PFN_vkInternalAllocationNotification , PFN_vkInternalFreeNotification , PFN_vkReallocationFunction , PFN_vkAllocationFunction , PFN_vkFreeFunction , PFN_vkVoidFunction , VkInstance , VkPhysicalDevice , VkDevice , vkCreateInstance , vkDestroyInstance , vkEnumeratePhysicalDevices , vkGetDeviceProcAddr , vkGetInstanceProcAddr , vkGetPhysicalDeviceProperties , vkGetPhysicalDeviceQueueFamilyProperties , vkGetPhysicalDeviceMemoryProperties , vkGetPhysicalDeviceFeatures , vkGetPhysicalDeviceFormatProperties , vkGetPhysicalDeviceImageFormatProperties , VkExtent3D(..) , VkPhysicalDeviceProperties(..) , VkApplicationInfo(..) , VkAllocationCallbacks(..) , VkInstanceCreateInfo(..) , VkQueueFamilyProperties(..) , VkPhysicalDeviceMemoryProperties(..) , VkMemoryType(..) , VkMemoryHeap(..) , VkFormatProperties(..) , VkImageFormatProperties(..) , VkPhysicalDeviceFeatures(..) , VkPhysicalDeviceSparseProperties(..) , VkPhysicalDeviceLimits(..) , VkQueueFlags , VkMemoryPropertyFlags , VkMemoryHeapFlags , VkImageUsageFlags , VkImageCreateFlags , VkFormatFeatureFlags , VkSampleCountFlags , VkDeviceSize ) where import Data.Bits ( Bits , FiniteBits ) import Data.Int ( Int32 ) import Data.Vector.Storable.Sized ( Vector ) import Data.Word ( Word64 , Word32 , Word8 ) import Foreign.C.Types ( CFloat(..) , CSize(..) , CChar(..) ) import Foreign.Ptr ( plusPtr , Ptr ) import Foreign.Storable ( Storable(..) , Storable ) import GHC.Read ( expectP , choose ) import Graphics.Vulkan.NamedType ( (:::) ) import Text.ParserCombinators.ReadPrec ( (+++) , prec , step ) import Text.Read ( Read(..) , parens ) import Text.Read.Lex ( Lexeme(Ident) ) import Graphics.Vulkan.Core10.Core ( VkBool32(..) , VkStructureType(..) , VkFormat(..) , VkResult(..) , VkFlags ) -- ** VkImageTiling -- | VkImageTiling - Specifies the tiling arrangement of data in an image -- -- = See Also -- -- 'Graphics.Vulkan.Core10.Image.VkImageCreateInfo', -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.VkPhysicalDeviceImageFormatInfo2', -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.VkPhysicalDeviceSparseImageFormatInfo2', -- 'Graphics.Vulkan.Extensions.VK_NV_external_memory_capabilities.vkGetPhysicalDeviceExternalImageFormatPropertiesNV', -- 'vkGetPhysicalDeviceImageFormatProperties', -- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.vkGetPhysicalDeviceSparseImageFormatProperties' newtype VkImageTiling = VkImageTiling Int32 deriving (Eq, Ord, Storable) instance Show VkImageTiling where showsPrec _ VK_IMAGE_TILING_OPTIMAL = showString "VK_IMAGE_TILING_OPTIMAL" showsPrec _ VK_IMAGE_TILING_LINEAR = showString "VK_IMAGE_TILING_LINEAR" showsPrec p (VkImageTiling x) = showParen (p >= 11) (showString "VkImageTiling " . showsPrec 11 x) instance Read VkImageTiling where readPrec = parens ( choose [ ("VK_IMAGE_TILING_OPTIMAL", pure VK_IMAGE_TILING_OPTIMAL) , ("VK_IMAGE_TILING_LINEAR", pure VK_IMAGE_TILING_LINEAR) ] +++ prec 10 (do expectP (Ident "VkImageTiling") v <- step readPrec pure (VkImageTiling v) ) ) -- | @VK_IMAGE_TILING_OPTIMAL@ specifies optimal tiling (texels are laid out -- in an implementation-dependent arrangement, for more optimal memory -- access). pattern VK_IMAGE_TILING_OPTIMAL :: VkImageTiling pattern VK_IMAGE_TILING_OPTIMAL = VkImageTiling 0 -- | @VK_IMAGE_TILING_LINEAR@ specifies linear tiling (texels are laid out in -- memory in row-major order, possibly with some padding on each row). pattern VK_IMAGE_TILING_LINEAR :: VkImageTiling pattern VK_IMAGE_TILING_LINEAR = VkImageTiling 1 -- ** VkImageType -- | VkImageType - Specifies the type of an image object -- -- = See Also -- -- 'Graphics.Vulkan.Core10.Image.VkImageCreateInfo', -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.VkPhysicalDeviceImageFormatInfo2', -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.VkPhysicalDeviceSparseImageFormatInfo2', -- 'Graphics.Vulkan.Extensions.VK_NV_external_memory_capabilities.vkGetPhysicalDeviceExternalImageFormatPropertiesNV', -- 'vkGetPhysicalDeviceImageFormatProperties', -- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.vkGetPhysicalDeviceSparseImageFormatProperties' newtype VkImageType = VkImageType Int32 deriving (Eq, Ord, Storable) instance Show VkImageType where showsPrec _ VK_IMAGE_TYPE_1D = showString "VK_IMAGE_TYPE_1D" showsPrec _ VK_IMAGE_TYPE_2D = showString "VK_IMAGE_TYPE_2D" showsPrec _ VK_IMAGE_TYPE_3D = showString "VK_IMAGE_TYPE_3D" showsPrec p (VkImageType x) = showParen (p >= 11) (showString "VkImageType " . showsPrec 11 x) instance Read VkImageType where readPrec = parens ( choose [ ("VK_IMAGE_TYPE_1D", pure VK_IMAGE_TYPE_1D) , ("VK_IMAGE_TYPE_2D", pure VK_IMAGE_TYPE_2D) , ("VK_IMAGE_TYPE_3D", pure VK_IMAGE_TYPE_3D) ] +++ prec 10 (do expectP (Ident "VkImageType") v <- step readPrec pure (VkImageType v) ) ) -- | @VK_IMAGE_TYPE_1D@ specifies a one-dimensional image. pattern VK_IMAGE_TYPE_1D :: VkImageType pattern VK_IMAGE_TYPE_1D = VkImageType 0 -- | @VK_IMAGE_TYPE_2D@ specifies a two-dimensional image. pattern VK_IMAGE_TYPE_2D :: VkImageType pattern VK_IMAGE_TYPE_2D = VkImageType 1 -- | @VK_IMAGE_TYPE_3D@ specifies a three-dimensional image. pattern VK_IMAGE_TYPE_3D :: VkImageType pattern VK_IMAGE_TYPE_3D = VkImageType 2 -- ** VkPhysicalDeviceType -- | VkPhysicalDeviceType - Supported physical device types -- -- = Description -- -- - @VK_PHYSICAL_DEVICE_TYPE_OTHER@ - the device does not match any -- other available types. -- -- - @VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU@ - the device is typically -- one embedded in or tightly coupled with the host. -- -- - @VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU@ - the device is typically a -- separate processor connected to the host via an interlink. -- -- - @VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU@ - the device is typically a -- virtual node in a virtualization environment. -- -- - @VK_PHYSICAL_DEVICE_TYPE_CPU@ - the device is typically running on -- the same processors as the host. -- -- The physical device type is advertised for informational purposes only, -- and does not directly affect the operation of the system. However, the -- device type /may/ correlate with other advertised properties or -- capabilities of the system, such as how many memory heaps there are. -- -- = See Also -- -- 'VkPhysicalDeviceProperties' newtype VkPhysicalDeviceType = VkPhysicalDeviceType Int32 deriving (Eq, Ord, Storable) instance Show VkPhysicalDeviceType where showsPrec _ VK_PHYSICAL_DEVICE_TYPE_OTHER = showString "VK_PHYSICAL_DEVICE_TYPE_OTHER" showsPrec _ VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU = showString "VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU" showsPrec _ VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU = showString "VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU" showsPrec _ VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU = showString "VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU" showsPrec _ VK_PHYSICAL_DEVICE_TYPE_CPU = showString "VK_PHYSICAL_DEVICE_TYPE_CPU" showsPrec p (VkPhysicalDeviceType x) = showParen (p >= 11) (showString "VkPhysicalDeviceType " . showsPrec 11 x) instance Read VkPhysicalDeviceType where readPrec = parens ( choose [ ("VK_PHYSICAL_DEVICE_TYPE_OTHER", pure VK_PHYSICAL_DEVICE_TYPE_OTHER) , ("VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU", pure VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU) , ("VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU", pure VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU) , ("VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU", pure VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU) , ("VK_PHYSICAL_DEVICE_TYPE_CPU", pure VK_PHYSICAL_DEVICE_TYPE_CPU) ] +++ prec 10 (do expectP (Ident "VkPhysicalDeviceType") v <- step readPrec pure (VkPhysicalDeviceType v) ) ) -- No documentation found for Nested "VkPhysicalDeviceType" "VK_PHYSICAL_DEVICE_TYPE_OTHER" pattern VK_PHYSICAL_DEVICE_TYPE_OTHER :: VkPhysicalDeviceType pattern VK_PHYSICAL_DEVICE_TYPE_OTHER = VkPhysicalDeviceType 0 -- No documentation found for Nested "VkPhysicalDeviceType" "VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU" pattern VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU :: VkPhysicalDeviceType pattern VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU = VkPhysicalDeviceType 1 -- No documentation found for Nested "VkPhysicalDeviceType" "VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU" pattern VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU :: VkPhysicalDeviceType pattern VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU = VkPhysicalDeviceType 2 -- No documentation found for Nested "VkPhysicalDeviceType" "VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU" pattern VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU :: VkPhysicalDeviceType pattern VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU = VkPhysicalDeviceType 3 -- No documentation found for Nested "VkPhysicalDeviceType" "VK_PHYSICAL_DEVICE_TYPE_CPU" pattern VK_PHYSICAL_DEVICE_TYPE_CPU :: VkPhysicalDeviceType pattern VK_PHYSICAL_DEVICE_TYPE_CPU = VkPhysicalDeviceType 4 -- ** VkSystemAllocationScope -- | VkSystemAllocationScope - Allocation scope -- -- = Description -- -- - @VK_SYSTEM_ALLOCATION_SCOPE_COMMAND@ specifies that the allocation -- is scoped to the duration of the Vulkan command. -- -- - @VK_SYSTEM_ALLOCATION_SCOPE_OBJECT@ specifies that the allocation is -- scoped to the lifetime of the Vulkan object that is being created or -- used. -- -- - @VK_SYSTEM_ALLOCATION_SCOPE_CACHE@ specifies that the allocation is -- scoped to the lifetime of a @VkPipelineCache@ or -- @VkValidationCacheEXT@ object. -- -- - @VK_SYSTEM_ALLOCATION_SCOPE_DEVICE@ specifies that the allocation is -- scoped to the lifetime of the Vulkan device. -- -- - @VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE@ specifies that the allocation -- is scoped to the lifetime of the Vulkan instance. -- -- Most Vulkan commands operate on a single object, or there is a sole -- object that is being created or manipulated. When an allocation uses an -- allocation scope of @VK_SYSTEM_ALLOCATION_SCOPE_OBJECT@ or -- @VK_SYSTEM_ALLOCATION_SCOPE_CACHE@, the allocation is scoped to the -- object being created or manipulated. -- -- When an implementation requires host memory, it will make callbacks to -- the application using the most specific allocator and allocation scope -- available: -- -- - If an allocation is scoped to the duration of a command, the -- allocator will use the @VK_SYSTEM_ALLOCATION_SCOPE_COMMAND@ -- allocation scope. The most specific allocator available is used: if -- the object being created or manipulated has an allocator, that -- object’s allocator will be used, else if the parent @VkDevice@ has -- an allocator it will be used, else if the parent @VkInstance@ has an -- allocator it will be used. Else, -- -- - If an allocation is associated with an object of type -- @VkValidationCacheEXT@ or @VkPipelineCache@, the allocator will use -- the @VK_SYSTEM_ALLOCATION_SCOPE_CACHE@ allocation scope. The most -- specific allocator available is used (cache, else device, else -- instance). Else, -- -- - If an allocation is scoped to the lifetime of an object, that object -- is being created or manipulated by the command, and that object’s -- type is not @VkDevice@ or @VkInstance@, the allocator will use an -- allocation scope of @VK_SYSTEM_ALLOCATION_SCOPE_OBJECT@. The most -- specific allocator available is used (object, else device, else -- instance). Else, -- -- - If an allocation is scoped to the lifetime of a device, the -- allocator will use an allocation scope of -- @VK_SYSTEM_ALLOCATION_SCOPE_DEVICE@. The most specific allocator -- available is used (device, else instance). Else, -- -- - If the allocation is scoped to the lifetime of an instance and the -- instance has an allocator, its allocator will be used with an -- allocation scope of @VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE@. -- -- - Otherwise an implementation will allocate memory through an -- alternative mechanism that is unspecified. -- -- = See Also -- -- 'VkAllocationCallbacks' newtype VkSystemAllocationScope = VkSystemAllocationScope Int32 deriving (Eq, Ord, Storable) instance Show VkSystemAllocationScope where showsPrec _ VK_SYSTEM_ALLOCATION_SCOPE_COMMAND = showString "VK_SYSTEM_ALLOCATION_SCOPE_COMMAND" showsPrec _ VK_SYSTEM_ALLOCATION_SCOPE_OBJECT = showString "VK_SYSTEM_ALLOCATION_SCOPE_OBJECT" showsPrec _ VK_SYSTEM_ALLOCATION_SCOPE_CACHE = showString "VK_SYSTEM_ALLOCATION_SCOPE_CACHE" showsPrec _ VK_SYSTEM_ALLOCATION_SCOPE_DEVICE = showString "VK_SYSTEM_ALLOCATION_SCOPE_DEVICE" showsPrec _ VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE = showString "VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE" showsPrec p (VkSystemAllocationScope x) = showParen (p >= 11) (showString "VkSystemAllocationScope " . showsPrec 11 x) instance Read VkSystemAllocationScope where readPrec = parens ( choose [ ("VK_SYSTEM_ALLOCATION_SCOPE_COMMAND", pure VK_SYSTEM_ALLOCATION_SCOPE_COMMAND) , ("VK_SYSTEM_ALLOCATION_SCOPE_OBJECT", pure VK_SYSTEM_ALLOCATION_SCOPE_OBJECT) , ("VK_SYSTEM_ALLOCATION_SCOPE_CACHE", pure VK_SYSTEM_ALLOCATION_SCOPE_CACHE) , ("VK_SYSTEM_ALLOCATION_SCOPE_DEVICE", pure VK_SYSTEM_ALLOCATION_SCOPE_DEVICE) , ("VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE", pure VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE) ] +++ prec 10 (do expectP (Ident "VkSystemAllocationScope") v <- step readPrec pure (VkSystemAllocationScope v) ) ) -- No documentation found for Nested "VkSystemAllocationScope" "VK_SYSTEM_ALLOCATION_SCOPE_COMMAND" pattern VK_SYSTEM_ALLOCATION_SCOPE_COMMAND :: VkSystemAllocationScope pattern VK_SYSTEM_ALLOCATION_SCOPE_COMMAND = VkSystemAllocationScope 0 -- No documentation found for Nested "VkSystemAllocationScope" "VK_SYSTEM_ALLOCATION_SCOPE_OBJECT" pattern VK_SYSTEM_ALLOCATION_SCOPE_OBJECT :: VkSystemAllocationScope pattern VK_SYSTEM_ALLOCATION_SCOPE_OBJECT = VkSystemAllocationScope 1 -- No documentation found for Nested "VkSystemAllocationScope" "VK_SYSTEM_ALLOCATION_SCOPE_CACHE" pattern VK_SYSTEM_ALLOCATION_SCOPE_CACHE :: VkSystemAllocationScope pattern VK_SYSTEM_ALLOCATION_SCOPE_CACHE = VkSystemAllocationScope 2 -- No documentation found for Nested "VkSystemAllocationScope" "VK_SYSTEM_ALLOCATION_SCOPE_DEVICE" pattern VK_SYSTEM_ALLOCATION_SCOPE_DEVICE :: VkSystemAllocationScope pattern VK_SYSTEM_ALLOCATION_SCOPE_DEVICE = VkSystemAllocationScope 3 -- No documentation found for Nested "VkSystemAllocationScope" "VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE" pattern VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE :: VkSystemAllocationScope pattern VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE = VkSystemAllocationScope 4 -- ** VkInternalAllocationType -- | VkInternalAllocationType - Allocation type -- -- = See Also -- -- 'PFN_vkInternalAllocationNotification', 'PFN_vkInternalFreeNotification' newtype VkInternalAllocationType = VkInternalAllocationType Int32 deriving (Eq, Ord, Storable) instance Show VkInternalAllocationType where showsPrec _ VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE = showString "VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE" showsPrec p (VkInternalAllocationType x) = showParen (p >= 11) (showString "VkInternalAllocationType " . showsPrec 11 x) instance Read VkInternalAllocationType where readPrec = parens ( choose [ ("VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE", pure VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE) ] +++ prec 10 (do expectP (Ident "VkInternalAllocationType") v <- step readPrec pure (VkInternalAllocationType v) ) ) -- | @VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE@ specifies that the allocation -- is intended for execution by the host. pattern VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE :: VkInternalAllocationType pattern VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE = VkInternalAllocationType 0 -- ** VkInstanceCreateFlags -- | VkInstanceCreateFlags - Reserved for future use -- -- = Description -- -- @VkInstanceCreateFlags@ is a bitmask type for setting a mask, but is -- currently reserved for future use. -- -- = See Also -- -- 'VkInstanceCreateInfo' newtype VkInstanceCreateFlags = VkInstanceCreateFlags VkFlags deriving (Eq, Ord, Storable, Bits, FiniteBits) instance Show VkInstanceCreateFlags where showsPrec p (VkInstanceCreateFlags x) = showParen (p >= 11) (showString "VkInstanceCreateFlags " . showsPrec 11 x) instance Read VkInstanceCreateFlags where readPrec = parens ( choose [ ] +++ prec 10 (do expectP (Ident "VkInstanceCreateFlags") v <- step readPrec pure (VkInstanceCreateFlags v) ) ) -- ** VkQueueFlagBits -- | VkQueueFlagBits - Bitmask specifying capabilities of queues in a queue -- family -- -- = Description -- -- - @VK_QUEUE_GRAPHICS_BIT@ specifies that queues in this queue family -- support graphics operations. -- -- - @VK_QUEUE_COMPUTE_BIT@ specifies that queues in this queue family -- support compute operations. -- -- - @VK_QUEUE_TRANSFER_BIT@ specifies that queues in this queue family -- support transfer operations. -- -- - @VK_QUEUE_SPARSE_BINDING_BIT@ specifies that queues in this queue -- family support sparse memory management operations (see [Sparse -- Resources](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#sparsememory)). -- If any of the sparse resource features are enabled, then at least -- one queue family /must/ support this bit. -- -- If an implementation exposes any queue family that supports graphics -- operations, at least one queue family of at least one physical device -- exposed by the implementation /must/ support both graphics and compute -- operations. -- -- __Note__ -- -- All commands that are allowed on a queue that supports transfer -- operations are also allowed on a queue that supports either graphics or -- compute operations. Thus, if the capabilities of a queue family include -- @VK_QUEUE_GRAPHICS_BIT@ or @VK_QUEUE_COMPUTE_BIT@, then reporting the -- @VK_QUEUE_TRANSFER_BIT@ capability separately for that queue family is -- /optional/. -- -- For further details see -- [Queues](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#devsandqueues-queues). -- -- = See Also -- -- 'VkQueueFlags' newtype VkQueueFlagBits = VkQueueFlagBits VkFlags deriving (Eq, Ord, Storable, Bits, FiniteBits) instance Show VkQueueFlagBits where showsPrec _ VK_QUEUE_GRAPHICS_BIT = showString "VK_QUEUE_GRAPHICS_BIT" showsPrec _ VK_QUEUE_COMPUTE_BIT = showString "VK_QUEUE_COMPUTE_BIT" showsPrec _ VK_QUEUE_TRANSFER_BIT = showString "VK_QUEUE_TRANSFER_BIT" showsPrec _ VK_QUEUE_SPARSE_BINDING_BIT = showString "VK_QUEUE_SPARSE_BINDING_BIT" -- The following values are from extensions, the patterns themselves are exported from the extension modules showsPrec _ (VkQueueFlagBits 0x00000010) = showString "VK_QUEUE_PROTECTED_BIT" showsPrec p (VkQueueFlagBits x) = showParen (p >= 11) (showString "VkQueueFlagBits " . showsPrec 11 x) instance Read VkQueueFlagBits where readPrec = parens ( choose [ ("VK_QUEUE_GRAPHICS_BIT", pure VK_QUEUE_GRAPHICS_BIT) , ("VK_QUEUE_COMPUTE_BIT", pure VK_QUEUE_COMPUTE_BIT) , ("VK_QUEUE_TRANSFER_BIT", pure VK_QUEUE_TRANSFER_BIT) , ("VK_QUEUE_SPARSE_BINDING_BIT", pure VK_QUEUE_SPARSE_BINDING_BIT) , -- The following values are from extensions, the patterns themselves are exported from the extension modules ("VK_QUEUE_PROTECTED_BIT", pure (VkQueueFlagBits 0x00000010)) ] +++ prec 10 (do expectP (Ident "VkQueueFlagBits") v <- step readPrec pure (VkQueueFlagBits v) ) ) -- No documentation found for Nested "VkQueueFlagBits" "VK_QUEUE_GRAPHICS_BIT" pattern VK_QUEUE_GRAPHICS_BIT :: VkQueueFlagBits pattern VK_QUEUE_GRAPHICS_BIT = VkQueueFlagBits 0x00000001 -- No documentation found for Nested "VkQueueFlagBits" "VK_QUEUE_COMPUTE_BIT" pattern VK_QUEUE_COMPUTE_BIT :: VkQueueFlagBits pattern VK_QUEUE_COMPUTE_BIT = VkQueueFlagBits 0x00000002 -- No documentation found for Nested "VkQueueFlagBits" "VK_QUEUE_TRANSFER_BIT" pattern VK_QUEUE_TRANSFER_BIT :: VkQueueFlagBits pattern VK_QUEUE_TRANSFER_BIT = VkQueueFlagBits 0x00000004 -- No documentation found for Nested "VkQueueFlagBits" "VK_QUEUE_SPARSE_BINDING_BIT" pattern VK_QUEUE_SPARSE_BINDING_BIT :: VkQueueFlagBits pattern VK_QUEUE_SPARSE_BINDING_BIT = VkQueueFlagBits 0x00000008 -- ** VkMemoryPropertyFlagBits -- | VkMemoryPropertyFlagBits - Bitmask specifying properties for a memory -- type -- -- = See Also -- -- 'VkMemoryPropertyFlags' newtype VkMemoryPropertyFlagBits = VkMemoryPropertyFlagBits VkFlags deriving (Eq, Ord, Storable, Bits, FiniteBits) instance Show VkMemoryPropertyFlagBits where showsPrec _ VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT = showString "VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT" showsPrec _ VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT = showString "VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT" showsPrec _ VK_MEMORY_PROPERTY_HOST_COHERENT_BIT = showString "VK_MEMORY_PROPERTY_HOST_COHERENT_BIT" showsPrec _ VK_MEMORY_PROPERTY_HOST_CACHED_BIT = showString "VK_MEMORY_PROPERTY_HOST_CACHED_BIT" showsPrec _ VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT = showString "VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT" -- The following values are from extensions, the patterns themselves are exported from the extension modules showsPrec _ (VkMemoryPropertyFlagBits 0x00000020) = showString "VK_MEMORY_PROPERTY_PROTECTED_BIT" showsPrec p (VkMemoryPropertyFlagBits x) = showParen (p >= 11) (showString "VkMemoryPropertyFlagBits " . showsPrec 11 x) instance Read VkMemoryPropertyFlagBits where readPrec = parens ( choose [ ("VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT", pure VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT) , ("VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT", pure VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) , ("VK_MEMORY_PROPERTY_HOST_COHERENT_BIT", pure VK_MEMORY_PROPERTY_HOST_COHERENT_BIT) , ("VK_MEMORY_PROPERTY_HOST_CACHED_BIT", pure VK_MEMORY_PROPERTY_HOST_CACHED_BIT) , ("VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT", pure VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT) , -- The following values are from extensions, the patterns themselves are exported from the extension modules ("VK_MEMORY_PROPERTY_PROTECTED_BIT", pure (VkMemoryPropertyFlagBits 0x00000020)) ] +++ prec 10 (do expectP (Ident "VkMemoryPropertyFlagBits") v <- step readPrec pure (VkMemoryPropertyFlagBits v) ) ) -- | @VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT@ bit specifies that memory -- allocated with this type is the most efficient for device access. This -- property will be set if and only if the memory type belongs to a heap -- with the @VK_MEMORY_HEAP_DEVICE_LOCAL_BIT@ set. pattern VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT :: VkMemoryPropertyFlagBits pattern VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT = VkMemoryPropertyFlagBits 0x00000001 -- | @VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT@ bit specifies that memory -- allocated with this type /can/ be mapped for host access using -- 'Graphics.Vulkan.Core10.Memory.vkMapMemory'. pattern VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT :: VkMemoryPropertyFlagBits pattern VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT = VkMemoryPropertyFlagBits 0x00000002 -- | @VK_MEMORY_PROPERTY_HOST_COHERENT_BIT@ bit specifies that the host cache -- management commands -- 'Graphics.Vulkan.Core10.Memory.vkFlushMappedMemoryRanges' and -- 'Graphics.Vulkan.Core10.Memory.vkInvalidateMappedMemoryRanges' are not -- needed to flush host writes to the device or make device writes visible -- to the host, respectively. pattern VK_MEMORY_PROPERTY_HOST_COHERENT_BIT :: VkMemoryPropertyFlagBits pattern VK_MEMORY_PROPERTY_HOST_COHERENT_BIT = VkMemoryPropertyFlagBits 0x00000004 -- | @VK_MEMORY_PROPERTY_HOST_CACHED_BIT@ bit specifies that memory allocated -- with this type is cached on the host. Host memory accesses to uncached -- memory are slower than to cached memory, however uncached memory is -- always host coherent. pattern VK_MEMORY_PROPERTY_HOST_CACHED_BIT :: VkMemoryPropertyFlagBits pattern VK_MEMORY_PROPERTY_HOST_CACHED_BIT = VkMemoryPropertyFlagBits 0x00000008 -- | @VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT@ bit specifies that the memory -- type only allows device access to the memory. Memory types /must/ not -- have both @VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT@ and -- @VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT@ set. Additionally, the object’s -- backing memory /may/ be provided by the implementation lazily as -- specified in [Lazily Allocated -- Memory](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-device-lazy_allocation). pattern VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT :: VkMemoryPropertyFlagBits pattern VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT = VkMemoryPropertyFlagBits 0x00000010 -- ** VkMemoryHeapFlagBits -- | VkMemoryHeapFlagBits - Bitmask specifying attribute flags for a heap -- -- = See Also -- -- 'VkMemoryHeapFlags' newtype VkMemoryHeapFlagBits = VkMemoryHeapFlagBits VkFlags deriving (Eq, Ord, Storable, Bits, FiniteBits) instance Show VkMemoryHeapFlagBits where showsPrec _ VK_MEMORY_HEAP_DEVICE_LOCAL_BIT = showString "VK_MEMORY_HEAP_DEVICE_LOCAL_BIT" -- The following values are from extensions, the patterns themselves are exported from the extension modules showsPrec _ (VkMemoryHeapFlagBits 0x00000002) = showString "VK_MEMORY_HEAP_MULTI_INSTANCE_BIT" showsPrec p (VkMemoryHeapFlagBits x) = showParen (p >= 11) (showString "VkMemoryHeapFlagBits " . showsPrec 11 x) instance Read VkMemoryHeapFlagBits where readPrec = parens ( choose [ ("VK_MEMORY_HEAP_DEVICE_LOCAL_BIT", pure VK_MEMORY_HEAP_DEVICE_LOCAL_BIT) , -- The following values are from extensions, the patterns themselves are exported from the extension modules ("VK_MEMORY_HEAP_MULTI_INSTANCE_BIT", pure (VkMemoryHeapFlagBits 0x00000002)) ] +++ prec 10 (do expectP (Ident "VkMemoryHeapFlagBits") v <- step readPrec pure (VkMemoryHeapFlagBits v) ) ) -- | @VK_MEMORY_HEAP_DEVICE_LOCAL_BIT@ specifies that the heap corresponds to -- device local memory. Device local memory /may/ have different -- performance characteristics than host local memory, and /may/ support -- different memory property flags. pattern VK_MEMORY_HEAP_DEVICE_LOCAL_BIT :: VkMemoryHeapFlagBits pattern VK_MEMORY_HEAP_DEVICE_LOCAL_BIT = VkMemoryHeapFlagBits 0x00000001 -- ** VkImageUsageFlagBits -- | VkImageUsageFlagBits - Bitmask specifying intended usage of an image -- -- = See Also -- -- 'VkImageUsageFlags' newtype VkImageUsageFlagBits = VkImageUsageFlagBits VkFlags deriving (Eq, Ord, Storable, Bits, FiniteBits) instance Show VkImageUsageFlagBits where showsPrec _ VK_IMAGE_USAGE_TRANSFER_SRC_BIT = showString "VK_IMAGE_USAGE_TRANSFER_SRC_BIT" showsPrec _ VK_IMAGE_USAGE_TRANSFER_DST_BIT = showString "VK_IMAGE_USAGE_TRANSFER_DST_BIT" showsPrec _ VK_IMAGE_USAGE_SAMPLED_BIT = showString "VK_IMAGE_USAGE_SAMPLED_BIT" showsPrec _ VK_IMAGE_USAGE_STORAGE_BIT = showString "VK_IMAGE_USAGE_STORAGE_BIT" showsPrec _ VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT = showString "VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT" showsPrec _ VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT = showString "VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT" showsPrec _ VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT = showString "VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT" showsPrec _ VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT = showString "VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT" showsPrec p (VkImageUsageFlagBits x) = showParen (p >= 11) (showString "VkImageUsageFlagBits " . showsPrec 11 x) instance Read VkImageUsageFlagBits where readPrec = parens ( choose [ ("VK_IMAGE_USAGE_TRANSFER_SRC_BIT", pure VK_IMAGE_USAGE_TRANSFER_SRC_BIT) , ("VK_IMAGE_USAGE_TRANSFER_DST_BIT", pure VK_IMAGE_USAGE_TRANSFER_DST_BIT) , ("VK_IMAGE_USAGE_SAMPLED_BIT", pure VK_IMAGE_USAGE_SAMPLED_BIT) , ("VK_IMAGE_USAGE_STORAGE_BIT", pure VK_IMAGE_USAGE_STORAGE_BIT) , ("VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT", pure VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT) , ("VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT", pure VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT) , ("VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT", pure VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT) , ("VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT", pure VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT) ] +++ prec 10 (do expectP (Ident "VkImageUsageFlagBits") v <- step readPrec pure (VkImageUsageFlagBits v) ) ) -- | @VK_IMAGE_USAGE_TRANSFER_SRC_BIT@ specifies that the image /can/ be used -- as the source of a transfer command. pattern VK_IMAGE_USAGE_TRANSFER_SRC_BIT :: VkImageUsageFlagBits pattern VK_IMAGE_USAGE_TRANSFER_SRC_BIT = VkImageUsageFlagBits 0x00000001 -- | @VK_IMAGE_USAGE_TRANSFER_DST_BIT@ specifies that the image /can/ be used -- as the destination of a transfer command. pattern VK_IMAGE_USAGE_TRANSFER_DST_BIT :: VkImageUsageFlagBits pattern VK_IMAGE_USAGE_TRANSFER_DST_BIT = VkImageUsageFlagBits 0x00000002 -- | @VK_IMAGE_USAGE_SAMPLED_BIT@ specifies that the image /can/ be used to -- create a @VkImageView@ suitable for occupying a @VkDescriptorSet@ slot -- either of type @VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE@ or -- @VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER@, and be sampled by a shader. pattern VK_IMAGE_USAGE_SAMPLED_BIT :: VkImageUsageFlagBits pattern VK_IMAGE_USAGE_SAMPLED_BIT = VkImageUsageFlagBits 0x00000004 -- | @VK_IMAGE_USAGE_STORAGE_BIT@ specifies that the image /can/ be used to -- create a @VkImageView@ suitable for occupying a @VkDescriptorSet@ slot -- of type @VK_DESCRIPTOR_TYPE_STORAGE_IMAGE@. pattern VK_IMAGE_USAGE_STORAGE_BIT :: VkImageUsageFlagBits pattern VK_IMAGE_USAGE_STORAGE_BIT = VkImageUsageFlagBits 0x00000008 -- | @VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT@ specifies that the image /can/ be -- used to create a @VkImageView@ suitable for use as a color or resolve -- attachment in a @VkFramebuffer@. pattern VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT :: VkImageUsageFlagBits pattern VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT = VkImageUsageFlagBits 0x00000010 -- | @VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT@ specifies that the image -- /can/ be used to create a @VkImageView@ suitable for use as a -- depth\/stencil attachment in a @VkFramebuffer@. pattern VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT :: VkImageUsageFlagBits pattern VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT = VkImageUsageFlagBits 0x00000020 -- | @VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT@ specifies that the memory -- bound to this image will have been allocated with the -- @VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT@ (see -- [{html_spec_relative}#memory](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory) -- for more detail). This bit /can/ be set for any image that /can/ be used -- to create a @VkImageView@ suitable for use as a color, resolve, -- depth\/stencil, or input attachment. pattern VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT :: VkImageUsageFlagBits pattern VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT = VkImageUsageFlagBits 0x00000040 -- | @VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT@ specifies that the image /can/ be -- used to create a @VkImageView@ suitable for occupying @VkDescriptorSet@ -- slot of type @VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT@; be read from a -- shader as an input attachment; and be used as an input attachment in a -- framebuffer. pattern VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT :: VkImageUsageFlagBits pattern VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT = VkImageUsageFlagBits 0x00000080 -- ** VkImageCreateFlagBits -- | VkImageCreateFlagBits - Bitmask specifying additional parameters of an -- image -- -- = Description -- -- - @VK_IMAGE_CREATE_SPARSE_BINDING_BIT@ specifies that the image will -- be backed using sparse memory binding. -- -- - @VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT@ specifies that the image -- /can/ be partially backed using sparse memory binding. Images -- created with this flag /must/ also be created with the -- @VK_IMAGE_CREATE_SPARSE_BINDING_BIT@ flag. -- -- - @VK_IMAGE_CREATE_SPARSE_ALIASED_BIT@ specifies that the image will -- be backed using sparse memory binding with memory ranges that might -- also simultaneously be backing another image (or another portion of -- the same image). Images created with this flag /must/ also be -- created with the @VK_IMAGE_CREATE_SPARSE_BINDING_BIT@ flag -- -- - @VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT@ specifies that the image /can/ -- be used to create a @VkImageView@ with a different format from the -- image. For -- [multi-planar](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-formats-requiring-sampler-ycbcr-conversion) -- formats, @VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT@ specifies that a -- @VkImageView@ can be created of a /plane/ of the image. -- -- - @VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT@ specifies that the image /can/ -- be used to create a @VkImageView@ of type @VK_IMAGE_VIEW_TYPE_CUBE@ -- or @VK_IMAGE_VIEW_TYPE_CUBE_ARRAY@. -- -- - @VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT@ specifies that the image -- /can/ be used to create a @VkImageView@ of type -- @VK_IMAGE_VIEW_TYPE_2D@ or @VK_IMAGE_VIEW_TYPE_2D_ARRAY@. -- -- - @VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT@ specifies that the -- image /can/ be used with a non-zero value of the -- @splitInstanceBindRegionCount@ member of a -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_device_group_and_VK_KHR_bind_memory2.VkBindImageMemoryDeviceGroupInfo' -- structure passed into -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_bind_memory2.vkBindImageMemory2'. -- This flag also has the effect of making the image use the standard -- sparse image block dimensions. -- -- - @VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT@ specifies that the -- image having a compressed format /can/ be used to create a -- @VkImageView@ with an uncompressed format where each texel in the -- image view corresponds to a compressed texel block of the image. -- -- - @VK_IMAGE_CREATE_EXTENDED_USAGE_BIT@ specifies that the image /can/ -- be created with usage flags that are not supported for the format -- the image is created with but are supported for at least one format -- a @VkImageView@ created from the image /can/ have. -- -- - @VK_IMAGE_CREATE_DISJOINT_BIT@ specifies that an image with a -- [multi-planar -- format](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-formats-requiring-sampler-ycbcr-conversion) -- /must/ have each plane separately bound to memory, rather than -- having a single memory binding for the whole image; the presence of -- this bit distinguishes a /disjoint image/ from an image without this -- bit set. -- -- - @VK_IMAGE_CREATE_ALIAS_BIT@ specifies that two images created with -- the same creation parameters and aliased to the same memory /can/ -- interpret the contents of the memory consistently with each other, -- subject to the rules described in the [Memory -- Aliasing](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#resources-memory-aliasing) -- section. This flag further specifies that each plane of a /disjoint/ -- image /can/ share an in-memory non-linear representation with -- single-plane images, and that a single-plane image /can/ share an -- in-memory non-linear representation with a plane of a multi-planar -- disjoint image, according to the rules in -- [{html_spec_relative}#features-formats-compatible-planes](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-formats-compatible-planes). -- If the @pNext@ chain includes a -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_memory.VkExternalMemoryImageCreateInfo' -- or -- 'Graphics.Vulkan.Extensions.VK_NV_external_memory.VkExternalMemoryImageCreateInfoNV' -- structure whose @handleTypes@ member is not @0@, it is as if -- @VK_IMAGE_CREATE_ALIAS_BIT@ is set. -- -- - @VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT@ -- specifies that an image with a depth or depth\/stencil format /can/ -- be used with custom sample locations when used as a depth\/stencil -- attachment. -- -- See [Sparse Resource -- Features](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#sparsememory-sparseresourcefeatures) -- and [Sparse Physical Device -- Features](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#sparsememory-physicalfeatures) -- for more details. -- -- = See Also -- -- 'VkImageCreateFlags' newtype VkImageCreateFlagBits = VkImageCreateFlagBits VkFlags deriving (Eq, Ord, Storable, Bits, FiniteBits) instance Show VkImageCreateFlagBits where showsPrec _ VK_IMAGE_CREATE_SPARSE_BINDING_BIT = showString "VK_IMAGE_CREATE_SPARSE_BINDING_BIT" showsPrec _ VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT = showString "VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT" showsPrec _ VK_IMAGE_CREATE_SPARSE_ALIASED_BIT = showString "VK_IMAGE_CREATE_SPARSE_ALIASED_BIT" showsPrec _ VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT = showString "VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT" showsPrec _ VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT = showString "VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT" -- The following values are from extensions, the patterns themselves are exported from the extension modules showsPrec _ (VkImageCreateFlagBits 0x00000400) = showString "VK_IMAGE_CREATE_ALIAS_BIT" showsPrec _ (VkImageCreateFlagBits 0x00000040) = showString "VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT" showsPrec _ (VkImageCreateFlagBits 0x00000020) = showString "VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT" showsPrec _ (VkImageCreateFlagBits 0x00000080) = showString "VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT" showsPrec _ (VkImageCreateFlagBits 0x00000100) = showString "VK_IMAGE_CREATE_EXTENDED_USAGE_BIT" showsPrec _ (VkImageCreateFlagBits 0x00000800) = showString "VK_IMAGE_CREATE_PROTECTED_BIT" showsPrec _ (VkImageCreateFlagBits 0x00000200) = showString "VK_IMAGE_CREATE_DISJOINT_BIT" showsPrec _ (VkImageCreateFlagBits 0x00001000) = showString "VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT" showsPrec p (VkImageCreateFlagBits x) = showParen (p >= 11) (showString "VkImageCreateFlagBits " . showsPrec 11 x) instance Read VkImageCreateFlagBits where readPrec = parens ( choose [ ("VK_IMAGE_CREATE_SPARSE_BINDING_BIT", pure VK_IMAGE_CREATE_SPARSE_BINDING_BIT) , ("VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT", pure VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT) , ("VK_IMAGE_CREATE_SPARSE_ALIASED_BIT", pure VK_IMAGE_CREATE_SPARSE_ALIASED_BIT) , ("VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT", pure VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT) , ("VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT", pure VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT) , -- The following values are from extensions, the patterns themselves are exported from the extension modules ("VK_IMAGE_CREATE_ALIAS_BIT", pure (VkImageCreateFlagBits 0x00000400)) , ("VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT", pure (VkImageCreateFlagBits 0x00000040)) , ("VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT", pure (VkImageCreateFlagBits 0x00000020)) , ("VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT", pure (VkImageCreateFlagBits 0x00000080)) , ("VK_IMAGE_CREATE_EXTENDED_USAGE_BIT", pure (VkImageCreateFlagBits 0x00000100)) , ("VK_IMAGE_CREATE_PROTECTED_BIT", pure (VkImageCreateFlagBits 0x00000800)) , ("VK_IMAGE_CREATE_DISJOINT_BIT", pure (VkImageCreateFlagBits 0x00000200)) , ("VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT", pure (VkImageCreateFlagBits 0x00001000)) ] +++ prec 10 (do expectP (Ident "VkImageCreateFlagBits") v <- step readPrec pure (VkImageCreateFlagBits v) ) ) -- No documentation found for Nested "VkImageCreateFlagBits" "VK_IMAGE_CREATE_SPARSE_BINDING_BIT" pattern VK_IMAGE_CREATE_SPARSE_BINDING_BIT :: VkImageCreateFlagBits pattern VK_IMAGE_CREATE_SPARSE_BINDING_BIT = VkImageCreateFlagBits 0x00000001 -- No documentation found for Nested "VkImageCreateFlagBits" "VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT" pattern VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT :: VkImageCreateFlagBits pattern VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT = VkImageCreateFlagBits 0x00000002 -- No documentation found for Nested "VkImageCreateFlagBits" "VK_IMAGE_CREATE_SPARSE_ALIASED_BIT" pattern VK_IMAGE_CREATE_SPARSE_ALIASED_BIT :: VkImageCreateFlagBits pattern VK_IMAGE_CREATE_SPARSE_ALIASED_BIT = VkImageCreateFlagBits 0x00000004 -- No documentation found for Nested "VkImageCreateFlagBits" "VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT" pattern VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT :: VkImageCreateFlagBits pattern VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT = VkImageCreateFlagBits 0x00000008 -- No documentation found for Nested "VkImageCreateFlagBits" "VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT" pattern VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT :: VkImageCreateFlagBits pattern VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT = VkImageCreateFlagBits 0x00000010 -- ** VkFormatFeatureFlagBits -- | VkFormatFeatureFlagBits - Bitmask specifying features supported by a -- buffer -- -- = Description -- -- The following bits /may/ be set in @linearTilingFeatures@ and -- @optimalTilingFeatures@, specifying that the features are supported by -- [images](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkImage) -- or [image -- views](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkImageView) -- created with the queried -- 'vkGetPhysicalDeviceFormatProperties'::@format@: -- -- - @VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT@ specifies that an image view -- /can/ be [sampled -- from](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-sampledimage). -- -- - @VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT@ specifies that an image view -- /can/ be used as a [storage -- images](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-storageimage). -- -- - @VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT@ specifies that an image -- view /can/ be used as storage image that supports atomic operations. -- -- - @VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT@ specifies that an image -- view /can/ be used as a framebuffer color attachment and as an input -- attachment. -- -- - @VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT@ specifies that an -- image view /can/ be used as a framebuffer color attachment that -- supports blending and as an input attachment. -- -- - @VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT@ specifies that an -- image view /can/ be used as a framebuffer depth\/stencil attachment -- and as an input attachment. -- -- - @VK_FORMAT_FEATURE_BLIT_SRC_BIT@ specifies that an image /can/ be -- used as @srcImage@ for the @vkCmdBlitImage@ command. -- -- - @VK_FORMAT_FEATURE_BLIT_DST_BIT@ specifies that an image /can/ be -- used as @dstImage@ for the @vkCmdBlitImage@ command. -- -- - @VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT@ specifies that -- if @VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT@ is also set, an image view -- /can/ be used with a sampler that has either of @magFilter@ or -- @minFilter@ set to @VK_FILTER_LINEAR@, or @mipmapMode@ set to -- @VK_SAMPLER_MIPMAP_MODE_LINEAR@. If @VK_FORMAT_FEATURE_BLIT_SRC_BIT@ -- is also set, an image can be used as the @srcImage@ to -- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdBlitImage' with a -- @filter@ of @VK_FILTER_LINEAR@. This bit /must/ only be exposed for -- formats that also support the @VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT@ -- or @VK_FORMAT_FEATURE_BLIT_SRC_BIT@. -- -- If the format being queried is a depth\/stencil format, this bit -- only specifies that the depth aspect (not the stencil aspect) of an -- image of this format supports linear filtering, and that linear -- filtering of the depth aspect is supported whether depth compare is -- enabled in the sampler or not. If this bit is not present, linear -- filtering with depth compare disabled is unsupported and linear -- filtering with depth compare enabled is supported, but /may/ compute -- the filtered value in an implementation-dependent manner which -- differs from the normal rules of linear filtering. The resulting -- value /must/ be in the range [0,1] and /should/ be proportional to, -- or a weighted average of, the number of comparison passes or -- failures. -- -- - @VK_FORMAT_FEATURE_TRANSFER_SRC_BIT@ specifies that an image /can/ -- be used as a source image for [copy -- commands](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#copies). -- -- - @VK_FORMAT_FEATURE_TRANSFER_DST_BIT@ specifies that an image /can/ -- be used as a destination image for [copy -- commands](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#copies) -- and [clear -- commands](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#clears). -- -- - @VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT_EXT@ specifies -- @VkImage@ /can/ be used as a sampled image with a min or max -- 'Graphics.Vulkan.Extensions.VK_EXT_sampler_filter_minmax.VkSamplerReductionModeEXT'. -- This bit /must/ only be exposed for formats that also support the -- @VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT@. -- -- - @VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG@ specifies -- that @VkImage@ /can/ be used with a sampler that has either of -- @magFilter@ or @minFilter@ set to @VK_FILTER_CUBIC_IMG@, or be the -- source image for a blit with @filter@ set to @VK_FILTER_CUBIC_IMG@. -- This bit /must/ only be exposed for formats that also support the -- @VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT@. If the format being queried -- is a depth\/stencil format, this only specifies that the depth -- aspect is cubic filterable. -- -- - @VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT@ specifies that an -- application /can/ define a [sampler Y’CBCR -- conversion](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#samplers-YCbCr-conversion) -- using this format as a source, and that an image of this format -- /can/ be used with a @VkSamplerYcbcrConversionCreateInfo@ -- @xChromaOffset@ and\/or @yChromaOffset@ of -- @VK_CHROMA_LOCATION_MIDPOINT@. Otherwise both @xChromaOffset@ and -- @yChromaOffset@ /must/ be @VK_CHROMA_LOCATION_COSITED_EVEN@. If a -- format does not incorporate chroma downsampling (it is not a “422” -- or “420” format) but the implementation supports sampler Y’CBCR -- conversion for this format, the implementation /must/ set -- @VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT@. -- -- - @VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT@ specifies that an -- application /can/ define a [sampler Y’CBCR -- conversion](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#samplers-YCbCr-conversion) -- using this format as a source, and that an image of this format -- /can/ be used with a @VkSamplerYcbcrConversionCreateInfo@ -- @xChromaOffset@ and\/or @yChromaOffset@ of -- @VK_CHROMA_LOCATION_COSITED_EVEN@. Otherwise both @xChromaOffset@ -- and @yChromaOffset@ /must/ be @VK_CHROMA_LOCATION_MIDPOINT@. If -- neither @VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT@ nor -- @VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT@ is set, the -- application /must/ not define a [sampler Y’CBCR -- conversion](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#samplers-YCbCr-conversion) -- using this format as a source. -- -- - @VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT@ -- specifies that the format can do linear sampler filtering -- (min\/magFilter) whilst sampler Y’CBCR conversion is enabled. -- -- - @VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT@ -- specifies that the format can have different chroma, min, and mag -- filters. -- -- - @VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT@ -- specifies that reconstruction is explicit, as described in -- [{html_spec_relative}#textures-chroma-reconstruction](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#textures-chroma-reconstruction). -- If this bit is not present, reconstruction is implicit by default. -- -- - @VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT@ -- specifies that reconstruction /can/ be forcibly made explicit by -- setting -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_sampler_ycbcr_conversion.VkSamplerYcbcrConversionCreateInfo'::@forceExplicitReconstruction@ -- to @VK_TRUE@. -- -- - @VK_FORMAT_FEATURE_DISJOINT_BIT@ specifies that a multi-planar image -- /can/ have the @VK_IMAGE_CREATE_DISJOINT_BIT@ set during image -- creation. An implementation /must/ not set -- @VK_FORMAT_FEATURE_DISJOINT_BIT@ for /single-plane formats/. -- -- The following bits /may/ be set in @bufferFeatures@, specifying that the -- features are supported by -- [buffers](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkBuffer) -- or [buffer -- views](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkBufferView) -- created with the queried 'vkGetPhysicalDeviceProperties'::@format@: -- -- - @VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT@ specifies that the -- format /can/ be used to create a buffer view that /can/ be bound to -- a @VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER@ descriptor. -- -- - @VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT@ specifies that the -- format /can/ be used to create a buffer view that /can/ be bound to -- a @VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER@ descriptor. -- -- - @VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT@ specifies that -- atomic operations are supported on -- @VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER@ with this format. -- -- - @VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT@ specifies that the format -- /can/ be used as a vertex attribute format -- (@VkVertexInputAttributeDescription@::@format@). -- -- = See Also -- -- 'VkFormatFeatureFlags' newtype VkFormatFeatureFlagBits = VkFormatFeatureFlagBits VkFlags deriving (Eq, Ord, Storable, Bits, FiniteBits) instance Show VkFormatFeatureFlagBits where showsPrec _ VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT = showString "VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT" showsPrec _ VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT = showString "VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT" showsPrec _ VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT = showString "VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT" showsPrec _ VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT = showString "VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT" showsPrec _ VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT = showString "VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT" showsPrec _ VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT = showString "VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT" showsPrec _ VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT = showString "VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT" showsPrec _ VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT = showString "VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT" showsPrec _ VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT = showString "VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT" showsPrec _ VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT = showString "VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT" showsPrec _ VK_FORMAT_FEATURE_BLIT_SRC_BIT = showString "VK_FORMAT_FEATURE_BLIT_SRC_BIT" showsPrec _ VK_FORMAT_FEATURE_BLIT_DST_BIT = showString "VK_FORMAT_FEATURE_BLIT_DST_BIT" showsPrec _ VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT = showString "VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT" -- The following values are from extensions, the patterns themselves are exported from the extension modules showsPrec _ (VkFormatFeatureFlagBits 0x00004000) = showString "VK_FORMAT_FEATURE_TRANSFER_SRC_BIT" showsPrec _ (VkFormatFeatureFlagBits 0x00008000) = showString "VK_FORMAT_FEATURE_TRANSFER_DST_BIT" showsPrec _ (VkFormatFeatureFlagBits 0x00020000) = showString "VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT" showsPrec _ (VkFormatFeatureFlagBits 0x00040000) = showString "VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT" showsPrec _ (VkFormatFeatureFlagBits 0x00080000) = showString "VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT" showsPrec _ (VkFormatFeatureFlagBits 0x00100000) = showString "VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT" showsPrec _ (VkFormatFeatureFlagBits 0x00200000) = showString "VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT" showsPrec _ (VkFormatFeatureFlagBits 0x00400000) = showString "VK_FORMAT_FEATURE_DISJOINT_BIT" showsPrec _ (VkFormatFeatureFlagBits 0x00800000) = showString "VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT" showsPrec _ (VkFormatFeatureFlagBits 0x00002000) = showString "VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG" showsPrec _ (VkFormatFeatureFlagBits 0x00010000) = showString "VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT_EXT" showsPrec p (VkFormatFeatureFlagBits x) = showParen (p >= 11) (showString "VkFormatFeatureFlagBits " . showsPrec 11 x) instance Read VkFormatFeatureFlagBits where readPrec = parens ( choose [ ("VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT", pure VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT) , ("VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT", pure VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT) , ("VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT", pure VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT) , ("VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT", pure VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT) , ("VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT", pure VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT) , ("VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT", pure VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT) , ("VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT", pure VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT) , ("VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT", pure VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT) , ("VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT", pure VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT) , ("VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT", pure VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT) , ("VK_FORMAT_FEATURE_BLIT_SRC_BIT", pure VK_FORMAT_FEATURE_BLIT_SRC_BIT) , ("VK_FORMAT_FEATURE_BLIT_DST_BIT", pure VK_FORMAT_FEATURE_BLIT_DST_BIT) , ("VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT", pure VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT) , -- The following values are from extensions, the patterns themselves are exported from the extension modules ("VK_FORMAT_FEATURE_TRANSFER_SRC_BIT", pure (VkFormatFeatureFlagBits 0x00004000)) , ("VK_FORMAT_FEATURE_TRANSFER_DST_BIT", pure (VkFormatFeatureFlagBits 0x00008000)) , ("VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT", pure (VkFormatFeatureFlagBits 0x00020000)) , ("VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT", pure (VkFormatFeatureFlagBits 0x00040000)) , ("VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT", pure (VkFormatFeatureFlagBits 0x00080000)) , ("VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT", pure (VkFormatFeatureFlagBits 0x00100000)) , ("VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT", pure (VkFormatFeatureFlagBits 0x00200000)) , ("VK_FORMAT_FEATURE_DISJOINT_BIT", pure (VkFormatFeatureFlagBits 0x00400000)) , ("VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT", pure (VkFormatFeatureFlagBits 0x00800000)) , ("VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG", pure (VkFormatFeatureFlagBits 0x00002000)) , ("VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT_EXT", pure (VkFormatFeatureFlagBits 0x00010000)) ] +++ prec 10 (do expectP (Ident "VkFormatFeatureFlagBits") v <- step readPrec pure (VkFormatFeatureFlagBits v) ) ) -- No documentation found for Nested "VkFormatFeatureFlagBits" "VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT" pattern VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT :: VkFormatFeatureFlagBits pattern VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT = VkFormatFeatureFlagBits 0x00000001 -- No documentation found for Nested "VkFormatFeatureFlagBits" "VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT" pattern VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT :: VkFormatFeatureFlagBits pattern VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT = VkFormatFeatureFlagBits 0x00000002 -- No documentation found for Nested "VkFormatFeatureFlagBits" "VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT" pattern VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT :: VkFormatFeatureFlagBits pattern VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT = VkFormatFeatureFlagBits 0x00000004 -- No documentation found for Nested "VkFormatFeatureFlagBits" "VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT" pattern VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT :: VkFormatFeatureFlagBits pattern VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT = VkFormatFeatureFlagBits 0x00000008 -- No documentation found for Nested "VkFormatFeatureFlagBits" "VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT" pattern VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT :: VkFormatFeatureFlagBits pattern VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT = VkFormatFeatureFlagBits 0x00000010 -- No documentation found for Nested "VkFormatFeatureFlagBits" "VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT" pattern VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT :: VkFormatFeatureFlagBits pattern VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT = VkFormatFeatureFlagBits 0x00000020 -- No documentation found for Nested "VkFormatFeatureFlagBits" "VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT" pattern VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT :: VkFormatFeatureFlagBits pattern VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT = VkFormatFeatureFlagBits 0x00000040 -- No documentation found for Nested "VkFormatFeatureFlagBits" "VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT" pattern VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT :: VkFormatFeatureFlagBits pattern VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT = VkFormatFeatureFlagBits 0x00000080 -- No documentation found for Nested "VkFormatFeatureFlagBits" "VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT" pattern VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT :: VkFormatFeatureFlagBits pattern VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT = VkFormatFeatureFlagBits 0x00000100 -- No documentation found for Nested "VkFormatFeatureFlagBits" "VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT" pattern VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT :: VkFormatFeatureFlagBits pattern VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT = VkFormatFeatureFlagBits 0x00000200 -- No documentation found for Nested "VkFormatFeatureFlagBits" "VK_FORMAT_FEATURE_BLIT_SRC_BIT" pattern VK_FORMAT_FEATURE_BLIT_SRC_BIT :: VkFormatFeatureFlagBits pattern VK_FORMAT_FEATURE_BLIT_SRC_BIT = VkFormatFeatureFlagBits 0x00000400 -- No documentation found for Nested "VkFormatFeatureFlagBits" "VK_FORMAT_FEATURE_BLIT_DST_BIT" pattern VK_FORMAT_FEATURE_BLIT_DST_BIT :: VkFormatFeatureFlagBits pattern VK_FORMAT_FEATURE_BLIT_DST_BIT = VkFormatFeatureFlagBits 0x00000800 -- No documentation found for Nested "VkFormatFeatureFlagBits" "VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT" pattern VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT :: VkFormatFeatureFlagBits pattern VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT = VkFormatFeatureFlagBits 0x00001000 -- ** VkSampleCountFlagBits -- | VkSampleCountFlagBits - Bitmask specifying sample counts supported for -- an image used for storage operations -- -- = See Also -- -- 'Graphics.Vulkan.Core10.Pass.VkAttachmentDescription', -- 'Graphics.Vulkan.Core10.Image.VkImageCreateInfo', -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.VkPhysicalDeviceSparseImageFormatInfo2', -- 'Graphics.Vulkan.Core10.Pipeline.VkPipelineMultisampleStateCreateInfo', -- 'VkSampleCountFlags', -- 'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.VkSampleLocationsInfoEXT', -- 'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.vkGetPhysicalDeviceMultisamplePropertiesEXT', -- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.vkGetPhysicalDeviceSparseImageFormatProperties' newtype VkSampleCountFlagBits = VkSampleCountFlagBits VkFlags deriving (Eq, Ord, Storable, Bits, FiniteBits) instance Show VkSampleCountFlagBits where showsPrec _ VK_SAMPLE_COUNT_1_BIT = showString "VK_SAMPLE_COUNT_1_BIT" showsPrec _ VK_SAMPLE_COUNT_2_BIT = showString "VK_SAMPLE_COUNT_2_BIT" showsPrec _ VK_SAMPLE_COUNT_4_BIT = showString "VK_SAMPLE_COUNT_4_BIT" showsPrec _ VK_SAMPLE_COUNT_8_BIT = showString "VK_SAMPLE_COUNT_8_BIT" showsPrec _ VK_SAMPLE_COUNT_16_BIT = showString "VK_SAMPLE_COUNT_16_BIT" showsPrec _ VK_SAMPLE_COUNT_32_BIT = showString "VK_SAMPLE_COUNT_32_BIT" showsPrec _ VK_SAMPLE_COUNT_64_BIT = showString "VK_SAMPLE_COUNT_64_BIT" showsPrec p (VkSampleCountFlagBits x) = showParen (p >= 11) (showString "VkSampleCountFlagBits " . showsPrec 11 x) instance Read VkSampleCountFlagBits where readPrec = parens ( choose [ ("VK_SAMPLE_COUNT_1_BIT", pure VK_SAMPLE_COUNT_1_BIT) , ("VK_SAMPLE_COUNT_2_BIT", pure VK_SAMPLE_COUNT_2_BIT) , ("VK_SAMPLE_COUNT_4_BIT", pure VK_SAMPLE_COUNT_4_BIT) , ("VK_SAMPLE_COUNT_8_BIT", pure VK_SAMPLE_COUNT_8_BIT) , ("VK_SAMPLE_COUNT_16_BIT", pure VK_SAMPLE_COUNT_16_BIT) , ("VK_SAMPLE_COUNT_32_BIT", pure VK_SAMPLE_COUNT_32_BIT) , ("VK_SAMPLE_COUNT_64_BIT", pure VK_SAMPLE_COUNT_64_BIT) ] +++ prec 10 (do expectP (Ident "VkSampleCountFlagBits") v <- step readPrec pure (VkSampleCountFlagBits v) ) ) -- | @VK_SAMPLE_COUNT_1_BIT@ specifies an image with one sample per pixel. pattern VK_SAMPLE_COUNT_1_BIT :: VkSampleCountFlagBits pattern VK_SAMPLE_COUNT_1_BIT = VkSampleCountFlagBits 0x00000001 -- | @VK_SAMPLE_COUNT_2_BIT@ specifies an image with 2 samples per pixel. pattern VK_SAMPLE_COUNT_2_BIT :: VkSampleCountFlagBits pattern VK_SAMPLE_COUNT_2_BIT = VkSampleCountFlagBits 0x00000002 -- | @VK_SAMPLE_COUNT_4_BIT@ specifies an image with 4 samples per pixel. pattern VK_SAMPLE_COUNT_4_BIT :: VkSampleCountFlagBits pattern VK_SAMPLE_COUNT_4_BIT = VkSampleCountFlagBits 0x00000004 -- | @VK_SAMPLE_COUNT_8_BIT@ specifies an image with 8 samples per pixel. pattern VK_SAMPLE_COUNT_8_BIT :: VkSampleCountFlagBits pattern VK_SAMPLE_COUNT_8_BIT = VkSampleCountFlagBits 0x00000008 -- | @VK_SAMPLE_COUNT_16_BIT@ specifies an image with 16 samples per pixel. pattern VK_SAMPLE_COUNT_16_BIT :: VkSampleCountFlagBits pattern VK_SAMPLE_COUNT_16_BIT = VkSampleCountFlagBits 0x00000010 -- | @VK_SAMPLE_COUNT_32_BIT@ specifies an image with 32 samples per pixel. pattern VK_SAMPLE_COUNT_32_BIT :: VkSampleCountFlagBits pattern VK_SAMPLE_COUNT_32_BIT = VkSampleCountFlagBits 0x00000020 -- | @VK_SAMPLE_COUNT_64_BIT@ specifies an image with 64 samples per pixel. pattern VK_SAMPLE_COUNT_64_BIT :: VkSampleCountFlagBits pattern VK_SAMPLE_COUNT_64_BIT = VkSampleCountFlagBits 0x00000040 -- No documentation found for TopLevel "VK_MAX_PHYSICAL_DEVICE_NAME_SIZE" type VK_MAX_PHYSICAL_DEVICE_NAME_SIZE = 256 -- No documentation found for Nested "Integral a => a" "VK_MAX_PHYSICAL_DEVICE_NAME_SIZE" pattern VK_MAX_PHYSICAL_DEVICE_NAME_SIZE :: Integral a => a pattern VK_MAX_PHYSICAL_DEVICE_NAME_SIZE = 256 -- No documentation found for TopLevel "VK_UUID_SIZE" type VK_UUID_SIZE = 16 -- No documentation found for Nested "Integral a => a" "VK_UUID_SIZE" pattern VK_UUID_SIZE :: Integral a => a pattern VK_UUID_SIZE = 16 -- No documentation found for TopLevel "VK_MAX_MEMORY_TYPES" type VK_MAX_MEMORY_TYPES = 32 -- No documentation found for Nested "Integral a => a" "VK_MAX_MEMORY_TYPES" pattern VK_MAX_MEMORY_TYPES :: Integral a => a pattern VK_MAX_MEMORY_TYPES = 32 -- No documentation found for TopLevel "VK_MAX_MEMORY_HEAPS" type VK_MAX_MEMORY_HEAPS = 16 -- No documentation found for Nested "Integral a => a" "VK_MAX_MEMORY_HEAPS" pattern VK_MAX_MEMORY_HEAPS :: Integral a => a pattern VK_MAX_MEMORY_HEAPS = 16 -- | PFN_vkInternalAllocationNotification - Application-defined memory -- allocation notification function -- -- = Parameters -- -- - @pUserData@ is the value specified for -- 'VkAllocationCallbacks'::@pUserData@ in the allocator specified by -- the application. -- -- - @size@ is the requested size of an allocation. -- -- - @allocationType@ is a 'VkInternalAllocationType' value specifying -- the requested type of an allocation. -- -- - @allocationScope@ is a 'VkSystemAllocationScope' value specifying -- the allocation scope of the lifetime of the allocation, as described -- [here](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-host-allocation-scope). -- -- = Description -- -- This is a purely informational callback. -- -- = See Also -- -- 'VkAllocationCallbacks' type PFN_vkInternalAllocationNotification = Ptr (("pUserData" ::: Ptr ()) -> ("size" ::: CSize) -> ("allocationType" ::: VkInternalAllocationType) -> ("allocationScope" ::: VkSystemAllocationScope) -> IO ()) -- | PFN_vkInternalFreeNotification - Application-defined memory free -- notification function -- -- = Parameters -- -- - @pUserData@ is the value specified for -- 'VkAllocationCallbacks'::@pUserData@ in the allocator specified by -- the application. -- -- - @size@ is the requested size of an allocation. -- -- - @allocationType@ is a 'VkInternalAllocationType' value specifying -- the requested type of an allocation. -- -- - @allocationScope@ is a 'VkSystemAllocationScope' value specifying -- the allocation scope of the lifetime of the allocation, as described -- [here](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-host-allocation-scope). -- -- = See Also -- -- 'VkAllocationCallbacks' type PFN_vkInternalFreeNotification = Ptr (("pUserData" ::: Ptr ()) -> ("size" ::: CSize) -> ("allocationType" ::: VkInternalAllocationType) -> ("allocationScope" ::: VkSystemAllocationScope) -> IO ()) -- | PFN_vkReallocationFunction - Application-defined memory reallocation -- function -- -- = Parameters -- -- - @pUserData@ is the value specified for -- 'VkAllocationCallbacks'::@pUserData@ in the allocator specified by -- the application. -- -- - @pOriginal@ /must/ be either @NULL@ or a pointer previously returned -- by @pfnReallocation@ or @pfnAllocation@ of the same allocator. -- -- - @size@ is the size in bytes of the requested allocation. -- -- - @alignment@ is the requested alignment of the allocation in bytes -- and /must/ be a power of two. -- -- - @allocationScope@ is a 'VkSystemAllocationScope' value specifying -- the allocation scope of the lifetime of the allocation, as described -- [here](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-host-allocation-scope). -- -- = Description -- -- @pfnReallocation@ /must/ return an allocation with enough space for -- @size@ bytes, and the contents of the original allocation from bytes -- zero to min(original size, new size) - 1 /must/ be preserved in the -- returned allocation. If @size@ is larger than the old size, the contents -- of the additional space are undefined. If satisfying these requirements -- involves creating a new allocation, then the old allocation /should/ be -- freed. -- -- If @pOriginal@ is @NULL@, then @pfnReallocation@ /must/ behave -- equivalently to a call to 'PFN_vkAllocationFunction' with the same -- parameter values (without @pOriginal@). -- -- If @size@ is zero, then @pfnReallocation@ /must/ behave equivalently to -- a call to 'PFN_vkFreeFunction' with the same @pUserData@ parameter -- value, and @pMemory@ equal to @pOriginal@. -- -- If @pOriginal@ is non-@NULL@, the implementation /must/ ensure that -- @alignment@ is equal to the @alignment@ used to originally allocate -- @pOriginal@. -- -- If this function fails and @pOriginal@ is non-@NULL@ the application -- /must/ not free the old allocation. -- -- @pfnReallocation@ /must/ follow the same [rules for return values as -- @PFN_vkAllocationFunction@](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vkAllocationFunction_return_rules). -- -- = See Also -- -- 'VkAllocationCallbacks' type PFN_vkReallocationFunction = Ptr (("pUserData" ::: Ptr ()) -> ("pOriginal" ::: Ptr ()) -> ("size" ::: CSize) -> ("alignment" ::: CSize) -> ("allocationScope" ::: VkSystemAllocationScope) -> IO (Ptr ())) -- | PFN_vkAllocationFunction - Application-defined memory allocation -- function -- -- = Parameters -- -- - @pUserData@ is the value specified for -- 'VkAllocationCallbacks'::@pUserData@ in the allocator specified by -- the application. -- -- - @size@ is the size in bytes of the requested allocation. -- -- - @alignment@ is the requested alignment of the allocation in bytes -- and /must/ be a power of two. -- -- - @allocationScope@ is a 'VkSystemAllocationScope' value specifying -- the allocation scope of the lifetime of the allocation, as described -- [here](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-host-allocation-scope). -- -- = Description -- -- If @pfnAllocation@ is unable to allocate the requested memory, it /must/ -- return @NULL@. If the allocation was successful, it /must/ return a -- valid pointer to memory allocation containing at least @size@ bytes, and -- with the pointer value being a multiple of @alignment@. -- -- __Note__ -- -- Correct Vulkan operation /cannot/ be assumed if the application does not -- follow these rules. -- -- For example, @pfnAllocation@ (or @pfnReallocation@) could cause -- termination of running Vulkan instance(s) on a failed allocation for -- debugging purposes, either directly or indirectly. In these -- circumstances, it /cannot/ be assumed that any part of any affected -- 'VkInstance' objects are going to operate correctly (even -- 'vkDestroyInstance'), and the application /must/ ensure it cleans up -- properly via other means (e.g. process termination). -- -- If @pfnAllocation@ returns @NULL@, and if the implementation is unable -- to continue correct processing of the current command without the -- requested allocation, it /must/ treat this as a run-time error, and -- generate @VK_ERROR_OUT_OF_HOST_MEMORY@ at the appropriate time for the -- command in which the condition was detected, as described in [Return -- Codes](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes). -- -- If the implementation is able to continue correct processing of the -- current command without the requested allocation, then it /may/ do so, -- and /must/ not generate @VK_ERROR_OUT_OF_HOST_MEMORY@ as a result of -- this failed allocation. -- -- = See Also -- -- 'VkAllocationCallbacks' type PFN_vkAllocationFunction = Ptr (("pUserData" ::: Ptr ()) -> ("size" ::: CSize) -> ("alignment" ::: CSize) -> ("allocationScope" ::: VkSystemAllocationScope) -> IO (Ptr ())) -- | PFN_vkFreeFunction - Application-defined memory free function -- -- = Parameters -- -- - @pUserData@ is the value specified for -- 'VkAllocationCallbacks'::@pUserData@ in the allocator specified by -- the application. -- -- - @pMemory@ is the allocation to be freed. -- -- = Description -- -- @pMemory@ /may/ be @NULL@, which the callback /must/ handle safely. If -- @pMemory@ is non-@NULL@, it /must/ be a pointer previously allocated by -- @pfnAllocation@ or @pfnReallocation@. The application /should/ free this -- memory. -- -- = See Also -- -- 'VkAllocationCallbacks' type PFN_vkFreeFunction = Ptr (("pUserData" ::: Ptr ()) -> ("pMemory" ::: Ptr ()) -> IO ()) -- | PFN_vkVoidFunction - Dummy function pointer type returned by queries -- -- = See Also -- -- 'vkGetDeviceProcAddr', 'vkGetInstanceProcAddr' type PFN_vkVoidFunction = Ptr (() -> IO ()) -- | Dummy data to tag the 'Ptr' with data VkInstance_T -- | VkInstance - Opaque handle to a instance object -- -- = See Also -- -- 'Graphics.Vulkan.Extensions.VK_KHR_android_surface.vkCreateAndroidSurfaceKHR', -- 'Graphics.Vulkan.Extensions.VK_EXT_debug_report.vkCreateDebugReportCallbackEXT', -- 'Graphics.Vulkan.Extensions.VK_EXT_debug_utils.vkCreateDebugUtilsMessengerEXT', -- 'Graphics.Vulkan.Extensions.VK_KHR_display.vkCreateDisplayPlaneSurfaceKHR', -- 'Graphics.Vulkan.Extensions.VK_MVK_ios_surface.vkCreateIOSSurfaceMVK', -- 'vkCreateInstance', -- 'Graphics.Vulkan.Extensions.VK_MVK_macos_surface.vkCreateMacOSSurfaceMVK', -- 'Graphics.Vulkan.Extensions.VK_KHR_mir_surface.vkCreateMirSurfaceKHR', -- 'Graphics.Vulkan.Extensions.VK_NN_vi_surface.vkCreateViSurfaceNN', -- 'Graphics.Vulkan.Extensions.VK_KHR_wayland_surface.vkCreateWaylandSurfaceKHR', -- 'Graphics.Vulkan.Extensions.VK_KHR_win32_surface.vkCreateWin32SurfaceKHR', -- 'Graphics.Vulkan.Extensions.VK_KHR_xcb_surface.vkCreateXcbSurfaceKHR', -- 'Graphics.Vulkan.Extensions.VK_KHR_xlib_surface.vkCreateXlibSurfaceKHR', -- 'Graphics.Vulkan.Extensions.VK_EXT_debug_report.vkDebugReportMessageEXT', -- 'Graphics.Vulkan.Extensions.VK_EXT_debug_report.vkDestroyDebugReportCallbackEXT', -- 'Graphics.Vulkan.Extensions.VK_EXT_debug_utils.vkDestroyDebugUtilsMessengerEXT', -- 'vkDestroyInstance', -- 'Graphics.Vulkan.Extensions.VK_KHR_surface.vkDestroySurfaceKHR', -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_device_group_creation.vkEnumeratePhysicalDeviceGroups', -- 'Graphics.Vulkan.Extensions.VK_KHR_device_group_creation.vkEnumeratePhysicalDeviceGroupsKHR', -- 'vkEnumeratePhysicalDevices', 'vkGetInstanceProcAddr', -- 'Graphics.Vulkan.Extensions.VK_EXT_debug_utils.vkSubmitDebugUtilsMessageEXT' type VkInstance = Ptr VkInstance_T -- | Dummy data to tag the 'Ptr' with data VkPhysicalDevice_T -- | VkPhysicalDevice - Opaque handle to a physical device object -- -- = See Also -- -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_device_group_creation.VkDeviceGroupDeviceCreateInfo', -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_device_group_creation.VkPhysicalDeviceGroupProperties', -- 'Graphics.Vulkan.Extensions.VK_EXT_acquire_xlib_display.vkAcquireXlibDisplayEXT', -- 'Graphics.Vulkan.Core10.Device.vkCreateDevice', -- 'Graphics.Vulkan.Extensions.VK_KHR_display.vkCreateDisplayModeKHR', -- 'Graphics.Vulkan.Core10.ExtensionDiscovery.vkEnumerateDeviceExtensionProperties', -- 'Graphics.Vulkan.Core10.LayerDiscovery.vkEnumerateDeviceLayerProperties', -- 'vkEnumeratePhysicalDevices', -- 'Graphics.Vulkan.Extensions.VK_KHR_display.vkGetDisplayModePropertiesKHR', -- 'Graphics.Vulkan.Extensions.VK_KHR_display.vkGetDisplayPlaneCapabilitiesKHR', -- 'Graphics.Vulkan.Extensions.VK_KHR_display.vkGetDisplayPlaneSupportedDisplaysKHR', -- 'Graphics.Vulkan.Extensions.VK_KHR_display.vkGetPhysicalDeviceDisplayPlanePropertiesKHR', -- 'Graphics.Vulkan.Extensions.VK_KHR_display.vkGetPhysicalDeviceDisplayPropertiesKHR', -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_memory_capabilities.vkGetPhysicalDeviceExternalBufferProperties', -- 'Graphics.Vulkan.Extensions.VK_KHR_external_memory_capabilities.vkGetPhysicalDeviceExternalBufferPropertiesKHR', -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_fence_capabilities.vkGetPhysicalDeviceExternalFenceProperties', -- 'Graphics.Vulkan.Extensions.VK_KHR_external_fence_capabilities.vkGetPhysicalDeviceExternalFencePropertiesKHR', -- 'Graphics.Vulkan.Extensions.VK_NV_external_memory_capabilities.vkGetPhysicalDeviceExternalImageFormatPropertiesNV', -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_semaphore_capabilities.vkGetPhysicalDeviceExternalSemaphoreProperties', -- 'Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_capabilities.vkGetPhysicalDeviceExternalSemaphorePropertiesKHR', -- 'vkGetPhysicalDeviceFeatures', -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.vkGetPhysicalDeviceFeatures2', -- 'Graphics.Vulkan.Extensions.VK_KHR_get_physical_device_properties2.vkGetPhysicalDeviceFeatures2KHR', -- 'vkGetPhysicalDeviceFormatProperties', -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.vkGetPhysicalDeviceFormatProperties2', -- 'Graphics.Vulkan.Extensions.VK_KHR_get_physical_device_properties2.vkGetPhysicalDeviceFormatProperties2KHR', -- 'Graphics.Vulkan.Extensions.VK_NVX_device_generated_commands.vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX', -- 'vkGetPhysicalDeviceImageFormatProperties', -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.vkGetPhysicalDeviceImageFormatProperties2', -- 'Graphics.Vulkan.Extensions.VK_KHR_get_physical_device_properties2.vkGetPhysicalDeviceImageFormatProperties2KHR', -- 'vkGetPhysicalDeviceMemoryProperties', -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.vkGetPhysicalDeviceMemoryProperties2', -- 'Graphics.Vulkan.Extensions.VK_KHR_get_physical_device_properties2.vkGetPhysicalDeviceMemoryProperties2KHR', -- 'Graphics.Vulkan.Extensions.VK_KHR_mir_surface.vkGetPhysicalDeviceMirPresentationSupportKHR', -- 'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.vkGetPhysicalDeviceMultisamplePropertiesEXT', -- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.vkGetPhysicalDevicePresentRectanglesKHR', -- 'vkGetPhysicalDeviceProperties', -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.vkGetPhysicalDeviceProperties2', -- 'Graphics.Vulkan.Extensions.VK_KHR_get_physical_device_properties2.vkGetPhysicalDeviceProperties2KHR', -- 'vkGetPhysicalDeviceQueueFamilyProperties', -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.vkGetPhysicalDeviceQueueFamilyProperties2', -- 'Graphics.Vulkan.Extensions.VK_KHR_get_physical_device_properties2.vkGetPhysicalDeviceQueueFamilyProperties2KHR', -- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.vkGetPhysicalDeviceSparseImageFormatProperties', -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.vkGetPhysicalDeviceSparseImageFormatProperties2', -- 'Graphics.Vulkan.Extensions.VK_KHR_get_physical_device_properties2.vkGetPhysicalDeviceSparseImageFormatProperties2KHR', -- 'Graphics.Vulkan.Extensions.VK_EXT_display_surface_counter.vkGetPhysicalDeviceSurfaceCapabilities2EXT', -- 'Graphics.Vulkan.Extensions.VK_KHR_get_surface_capabilities2.vkGetPhysicalDeviceSurfaceCapabilities2KHR', -- 'Graphics.Vulkan.Extensions.VK_KHR_surface.vkGetPhysicalDeviceSurfaceCapabilitiesKHR', -- 'Graphics.Vulkan.Extensions.VK_KHR_get_surface_capabilities2.vkGetPhysicalDeviceSurfaceFormats2KHR', -- 'Graphics.Vulkan.Extensions.VK_KHR_surface.vkGetPhysicalDeviceSurfaceFormatsKHR', -- 'Graphics.Vulkan.Extensions.VK_KHR_surface.vkGetPhysicalDeviceSurfacePresentModesKHR', -- 'Graphics.Vulkan.Extensions.VK_KHR_surface.vkGetPhysicalDeviceSurfaceSupportKHR', -- 'Graphics.Vulkan.Extensions.VK_KHR_wayland_surface.vkGetPhysicalDeviceWaylandPresentationSupportKHR', -- 'Graphics.Vulkan.Extensions.VK_KHR_win32_surface.vkGetPhysicalDeviceWin32PresentationSupportKHR', -- 'Graphics.Vulkan.Extensions.VK_KHR_xcb_surface.vkGetPhysicalDeviceXcbPresentationSupportKHR', -- 'Graphics.Vulkan.Extensions.VK_KHR_xlib_surface.vkGetPhysicalDeviceXlibPresentationSupportKHR', -- 'Graphics.Vulkan.Extensions.VK_EXT_acquire_xlib_display.vkGetRandROutputDisplayEXT', -- 'Graphics.Vulkan.Extensions.VK_EXT_direct_mode_display.vkReleaseDisplayEXT' type VkPhysicalDevice = Ptr VkPhysicalDevice_T -- | Dummy data to tag the 'Ptr' with data VkDevice_T -- | VkDevice - Opaque handle to a device object -- -- = See Also -- -- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.vkAcquireNextImage2KHR', -- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.vkAcquireNextImageKHR', -- 'Graphics.Vulkan.Core10.CommandBuffer.vkAllocateCommandBuffers', -- 'Graphics.Vulkan.Core10.DescriptorSet.vkAllocateDescriptorSets', -- 'Graphics.Vulkan.Core10.Memory.vkAllocateMemory', -- 'Graphics.Vulkan.Core10.MemoryManagement.vkBindBufferMemory', -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_bind_memory2.vkBindBufferMemory2', -- 'Graphics.Vulkan.Extensions.VK_KHR_bind_memory2.vkBindBufferMemory2KHR', -- 'Graphics.Vulkan.Core10.MemoryManagement.vkBindImageMemory', -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_bind_memory2.vkBindImageMemory2', -- 'Graphics.Vulkan.Extensions.VK_KHR_bind_memory2.vkBindImageMemory2KHR', -- 'Graphics.Vulkan.Core10.Buffer.vkCreateBuffer', -- 'Graphics.Vulkan.Core10.BufferView.vkCreateBufferView', -- 'Graphics.Vulkan.Core10.CommandPool.vkCreateCommandPool', -- 'Graphics.Vulkan.Core10.Pipeline.vkCreateComputePipelines', -- 'Graphics.Vulkan.Core10.DescriptorSet.vkCreateDescriptorPool', -- 'Graphics.Vulkan.Core10.DescriptorSet.vkCreateDescriptorSetLayout', -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_descriptor_update_template.vkCreateDescriptorUpdateTemplate', -- 'Graphics.Vulkan.Extensions.VK_KHR_descriptor_update_template.vkCreateDescriptorUpdateTemplateKHR', -- 'Graphics.Vulkan.Core10.Device.vkCreateDevice', -- 'Graphics.Vulkan.Core10.Event.vkCreateEvent', -- 'Graphics.Vulkan.Core10.Fence.vkCreateFence', -- 'Graphics.Vulkan.Core10.Pass.vkCreateFramebuffer', -- 'Graphics.Vulkan.Core10.Pipeline.vkCreateGraphicsPipelines', -- 'Graphics.Vulkan.Core10.Image.vkCreateImage', -- 'Graphics.Vulkan.Core10.ImageView.vkCreateImageView', -- 'Graphics.Vulkan.Extensions.VK_NVX_device_generated_commands.vkCreateIndirectCommandsLayoutNVX', -- 'Graphics.Vulkan.Extensions.VK_NVX_device_generated_commands.vkCreateObjectTableNVX', -- 'Graphics.Vulkan.Core10.PipelineCache.vkCreatePipelineCache', -- 'Graphics.Vulkan.Core10.PipelineLayout.vkCreatePipelineLayout', -- 'Graphics.Vulkan.Core10.Query.vkCreateQueryPool', -- 'Graphics.Vulkan.Core10.Pass.vkCreateRenderPass', -- 'Graphics.Vulkan.Core10.Sampler.vkCreateSampler', -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_sampler_ycbcr_conversion.vkCreateSamplerYcbcrConversion', -- 'Graphics.Vulkan.Extensions.VK_KHR_sampler_ycbcr_conversion.vkCreateSamplerYcbcrConversionKHR', -- 'Graphics.Vulkan.Core10.QueueSemaphore.vkCreateSemaphore', -- 'Graphics.Vulkan.Core10.Shader.vkCreateShaderModule', -- 'Graphics.Vulkan.Extensions.VK_KHR_display_swapchain.vkCreateSharedSwapchainsKHR', -- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.vkCreateSwapchainKHR', -- 'Graphics.Vulkan.Extensions.VK_EXT_validation_cache.vkCreateValidationCacheEXT', -- 'Graphics.Vulkan.Extensions.VK_EXT_debug_marker.vkDebugMarkerSetObjectNameEXT', -- 'Graphics.Vulkan.Extensions.VK_EXT_debug_marker.vkDebugMarkerSetObjectTagEXT', -- 'Graphics.Vulkan.Core10.Buffer.vkDestroyBuffer', -- 'Graphics.Vulkan.Core10.BufferView.vkDestroyBufferView', -- 'Graphics.Vulkan.Core10.CommandPool.vkDestroyCommandPool', -- 'Graphics.Vulkan.Core10.DescriptorSet.vkDestroyDescriptorPool', -- 'Graphics.Vulkan.Core10.DescriptorSet.vkDestroyDescriptorSetLayout', -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_descriptor_update_template.vkDestroyDescriptorUpdateTemplate', -- 'Graphics.Vulkan.Extensions.VK_KHR_descriptor_update_template.vkDestroyDescriptorUpdateTemplateKHR', -- 'Graphics.Vulkan.Core10.Device.vkDestroyDevice', -- 'Graphics.Vulkan.Core10.Event.vkDestroyEvent', -- 'Graphics.Vulkan.Core10.Fence.vkDestroyFence', -- 'Graphics.Vulkan.Core10.Pass.vkDestroyFramebuffer', -- 'Graphics.Vulkan.Core10.Image.vkDestroyImage', -- 'Graphics.Vulkan.Core10.ImageView.vkDestroyImageView', -- 'Graphics.Vulkan.Extensions.VK_NVX_device_generated_commands.vkDestroyIndirectCommandsLayoutNVX', -- 'Graphics.Vulkan.Extensions.VK_NVX_device_generated_commands.vkDestroyObjectTableNVX', -- 'Graphics.Vulkan.Core10.Pipeline.vkDestroyPipeline', -- 'Graphics.Vulkan.Core10.PipelineCache.vkDestroyPipelineCache', -- 'Graphics.Vulkan.Core10.PipelineLayout.vkDestroyPipelineLayout', -- 'Graphics.Vulkan.Core10.Query.vkDestroyQueryPool', -- 'Graphics.Vulkan.Core10.Pass.vkDestroyRenderPass', -- 'Graphics.Vulkan.Core10.Sampler.vkDestroySampler', -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_sampler_ycbcr_conversion.vkDestroySamplerYcbcrConversion', -- 'Graphics.Vulkan.Extensions.VK_KHR_sampler_ycbcr_conversion.vkDestroySamplerYcbcrConversionKHR', -- 'Graphics.Vulkan.Core10.QueueSemaphore.vkDestroySemaphore', -- 'Graphics.Vulkan.Core10.Shader.vkDestroyShaderModule', -- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.vkDestroySwapchainKHR', -- 'Graphics.Vulkan.Extensions.VK_EXT_validation_cache.vkDestroyValidationCacheEXT', -- 'Graphics.Vulkan.Core10.Queue.vkDeviceWaitIdle', -- 'Graphics.Vulkan.Extensions.VK_EXT_display_control.vkDisplayPowerControlEXT', -- 'Graphics.Vulkan.Core10.Memory.vkFlushMappedMemoryRanges', -- 'Graphics.Vulkan.Core10.CommandBuffer.vkFreeCommandBuffers', -- 'Graphics.Vulkan.Core10.DescriptorSet.vkFreeDescriptorSets', -- 'Graphics.Vulkan.Core10.Memory.vkFreeMemory', -- 'Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.vkGetAndroidHardwareBufferPropertiesANDROID', -- 'Graphics.Vulkan.Core10.MemoryManagement.vkGetBufferMemoryRequirements', -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_memory_requirements2.vkGetBufferMemoryRequirements2', -- 'Graphics.Vulkan.Extensions.VK_KHR_get_memory_requirements2.vkGetBufferMemoryRequirements2KHR', -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_maintenance3.vkGetDescriptorSetLayoutSupport', -- 'Graphics.Vulkan.Extensions.VK_KHR_maintenance3.vkGetDescriptorSetLayoutSupportKHR', -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_device_group.vkGetDeviceGroupPeerMemoryFeatures', -- 'Graphics.Vulkan.Extensions.VK_KHR_device_group.vkGetDeviceGroupPeerMemoryFeaturesKHR', -- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.vkGetDeviceGroupPresentCapabilitiesKHR', -- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.vkGetDeviceGroupSurfacePresentModesKHR', -- 'Graphics.Vulkan.Core10.Memory.vkGetDeviceMemoryCommitment', -- 'vkGetDeviceProcAddr', 'Graphics.Vulkan.Core10.Queue.vkGetDeviceQueue', -- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_protected_memory.vkGetDeviceQueue2', -- 'Graphics.Vulkan.Core10.Event.vkGetEventStatus', -- 'Graphics.Vulkan.Extensions.VK_KHR_external_fence_fd.vkGetFenceFdKHR', -- 'Graphics.Vulkan.Core10.Fence.vkGetFenceStatus', -- 'Graphics.Vulkan.Extensions.VK_KHR_external_fence_win32.vkGetFenceWin32HandleKHR', -- 'Graphics.Vulkan.Core10.MemoryManagement.vkGetImageMemoryRequirements', -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_memory_requirements2.vkGetImageMemoryRequirements2', -- 'Graphics.Vulkan.Extensions.VK_KHR_get_memory_requirements2.vkGetImageMemoryRequirements2KHR', -- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.vkGetImageSparseMemoryRequirements', -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_memory_requirements2.vkGetImageSparseMemoryRequirements2', -- 'Graphics.Vulkan.Extensions.VK_KHR_get_memory_requirements2.vkGetImageSparseMemoryRequirements2KHR', -- 'Graphics.Vulkan.Core10.Image.vkGetImageSubresourceLayout', -- 'Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.vkGetMemoryAndroidHardwareBufferANDROID', -- 'Graphics.Vulkan.Extensions.VK_KHR_external_memory_fd.vkGetMemoryFdKHR', -- 'Graphics.Vulkan.Extensions.VK_KHR_external_memory_fd.vkGetMemoryFdPropertiesKHR', -- 'Graphics.Vulkan.Extensions.VK_EXT_external_memory_host.vkGetMemoryHostPointerPropertiesEXT', -- 'Graphics.Vulkan.Extensions.VK_KHR_external_memory_win32.vkGetMemoryWin32HandleKHR', -- 'Graphics.Vulkan.Extensions.VK_NV_external_memory_win32.vkGetMemoryWin32HandleNV', -- 'Graphics.Vulkan.Extensions.VK_KHR_external_memory_win32.vkGetMemoryWin32HandlePropertiesKHR', -- 'Graphics.Vulkan.Extensions.VK_GOOGLE_display_timing.vkGetPastPresentationTimingGOOGLE', -- 'Graphics.Vulkan.Core10.PipelineCache.vkGetPipelineCacheData', -- 'Graphics.Vulkan.Core10.Query.vkGetQueryPoolResults', -- 'Graphics.Vulkan.Extensions.VK_GOOGLE_display_timing.vkGetRefreshCycleDurationGOOGLE', -- 'Graphics.Vulkan.Core10.Pass.vkGetRenderAreaGranularity', -- 'Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_fd.vkGetSemaphoreFdKHR', -- 'Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_win32.vkGetSemaphoreWin32HandleKHR', -- 'Graphics.Vulkan.Extensions.VK_AMD_shader_info.vkGetShaderInfoAMD', -- 'Graphics.Vulkan.Extensions.VK_EXT_display_control.vkGetSwapchainCounterEXT', -- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.vkGetSwapchainImagesKHR', -- 'Graphics.Vulkan.Extensions.VK_KHR_shared_presentable_image.vkGetSwapchainStatusKHR', -- 'Graphics.Vulkan.Extensions.VK_EXT_validation_cache.vkGetValidationCacheDataEXT', -- 'Graphics.Vulkan.Extensions.VK_KHR_external_fence_fd.vkImportFenceFdKHR', -- 'Graphics.Vulkan.Extensions.VK_KHR_external_fence_win32.vkImportFenceWin32HandleKHR', -- 'Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_fd.vkImportSemaphoreFdKHR', -- 'Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_win32.vkImportSemaphoreWin32HandleKHR', -- 'Graphics.Vulkan.Core10.Memory.vkInvalidateMappedMemoryRanges', -- 'Graphics.Vulkan.Core10.Memory.vkMapMemory', -- 'Graphics.Vulkan.Core10.PipelineCache.vkMergePipelineCaches', -- 'Graphics.Vulkan.Extensions.VK_EXT_validation_cache.vkMergeValidationCachesEXT', -- 'Graphics.Vulkan.Extensions.VK_EXT_display_control.vkRegisterDeviceEventEXT', -- 'Graphics.Vulkan.Extensions.VK_EXT_display_control.vkRegisterDisplayEventEXT', -- 'Graphics.Vulkan.Extensions.VK_NVX_device_generated_commands.vkRegisterObjectsNVX', -- 'Graphics.Vulkan.Core10.CommandPool.vkResetCommandPool', -- 'Graphics.Vulkan.Core10.DescriptorSet.vkResetDescriptorPool', -- 'Graphics.Vulkan.Core10.Event.vkResetEvent', -- 'Graphics.Vulkan.Core10.Fence.vkResetFences', -- 'Graphics.Vulkan.Extensions.VK_EXT_debug_utils.vkSetDebugUtilsObjectNameEXT', -- 'Graphics.Vulkan.Extensions.VK_EXT_debug_utils.vkSetDebugUtilsObjectTagEXT', -- 'Graphics.Vulkan.Core10.Event.vkSetEvent', -- 'Graphics.Vulkan.Extensions.VK_EXT_hdr_metadata.vkSetHdrMetadataEXT', -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_maintenance1.vkTrimCommandPool', -- 'Graphics.Vulkan.Extensions.VK_KHR_maintenance1.vkTrimCommandPoolKHR', -- 'Graphics.Vulkan.Core10.Memory.vkUnmapMemory', -- 'Graphics.Vulkan.Extensions.VK_NVX_device_generated_commands.vkUnregisterObjectsNVX', -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_descriptor_update_template.vkUpdateDescriptorSetWithTemplate', -- 'Graphics.Vulkan.Extensions.VK_KHR_descriptor_update_template.vkUpdateDescriptorSetWithTemplateKHR', -- 'Graphics.Vulkan.Core10.DescriptorSet.vkUpdateDescriptorSets', -- 'Graphics.Vulkan.Core10.Fence.vkWaitForFences' type VkDevice = Ptr VkDevice_T -- | vkCreateInstance - Create a new Vulkan instance -- -- = Parameters -- -- - @pCreateInfo@ points to an instance of 'VkInstanceCreateInfo' -- controlling creation of the instance. -- -- - @pAllocator@ controls host memory allocation as described in the -- [Memory -- Allocation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-allocation) -- chapter. -- -- - @pInstance@ points a @VkInstance@ handle in which the resulting -- instance is returned. -- -- = Description -- -- @vkCreateInstance@ verifies that the requested layers exist. If not, -- @vkCreateInstance@ will return @VK_ERROR_LAYER_NOT_PRESENT@. Next -- @vkCreateInstance@ verifies that the requested extensions are supported -- (e.g. in the implementation or in any enabled instance layer) and if any -- requested extension is not supported, @vkCreateInstance@ /must/ return -- @VK_ERROR_EXTENSION_NOT_PRESENT@. After verifying and enabling the -- instance layers and extensions the @VkInstance@ object is created and -- returned to the application. If a requested extension is only supported -- by a layer, both the layer and the extension need to be specified at -- @vkCreateInstance@ time for the creation to succeed. -- -- == Valid Usage -- -- - All [required -- extensions](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#extended-functionality-extensions-dependencies) -- for each extension in the -- 'VkInstanceCreateInfo'::@ppEnabledExtensionNames@ list /must/ also -- be present in that list. -- -- == Valid Usage (Implicit) -- -- - @pCreateInfo@ /must/ be a valid pointer to a valid -- @VkInstanceCreateInfo@ structure -- -- - If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid -- pointer to a valid @VkAllocationCallbacks@ structure -- -- - @pInstance@ /must/ be a valid pointer to a @VkInstance@ handle -- -- == Return Codes -- -- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)] -- - @VK_SUCCESS@ -- -- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)] -- - @VK_ERROR_OUT_OF_HOST_MEMORY@ -- -- - @VK_ERROR_OUT_OF_DEVICE_MEMORY@ -- -- - @VK_ERROR_INITIALIZATION_FAILED@ -- -- - @VK_ERROR_LAYER_NOT_PRESENT@ -- -- - @VK_ERROR_EXTENSION_NOT_PRESENT@ -- -- - @VK_ERROR_INCOMPATIBLE_DRIVER@ -- -- = See Also -- -- 'VkAllocationCallbacks', 'VkInstance', 'VkInstanceCreateInfo' foreign import ccall "vkCreateInstance" vkCreateInstance :: ("pCreateInfo" ::: Ptr VkInstanceCreateInfo) -> ("pAllocator" ::: Ptr VkAllocationCallbacks) -> ("pInstance" ::: Ptr VkInstance) -> IO VkResult -- | vkDestroyInstance - Destroy an instance of Vulkan -- -- = Parameters -- -- - @instance@ is the handle of the instance to destroy. -- -- - @pAllocator@ controls host memory allocation as described in the -- [Memory -- Allocation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-allocation) -- chapter. -- -- == Valid Usage -- -- - All child objects created using @instance@ /must/ have been -- destroyed prior to destroying @instance@ -- -- - If @VkAllocationCallbacks@ were provided when @instance@ was -- created, a compatible set of callbacks /must/ be provided here -- -- - If no @VkAllocationCallbacks@ were provided when @instance@ was -- created, @pAllocator@ /must/ be @NULL@ -- -- == Valid Usage (Implicit) -- -- - If @instance@ is not @NULL@, @instance@ /must/ be a valid -- @VkInstance@ handle -- -- - If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid -- pointer to a valid @VkAllocationCallbacks@ structure -- -- == Host Synchronization -- -- - Host access to @instance@ /must/ be externally synchronized -- -- = See Also -- -- 'VkAllocationCallbacks', 'VkInstance' foreign import ccall "vkDestroyInstance" vkDestroyInstance :: ("instance" ::: VkInstance) -> ("pAllocator" ::: Ptr VkAllocationCallbacks) -> IO () -- | vkEnumeratePhysicalDevices - Enumerates the physical devices accessible -- to a Vulkan instance -- -- = Parameters -- -- - @instance@ is a handle to a Vulkan instance previously created with -- 'vkCreateInstance'. -- -- - @pPhysicalDeviceCount@ is a pointer to an integer related to the -- number of physical devices available or queried, as described below. -- -- - @pPhysicalDevices@ is either @NULL@ or a pointer to an array of -- @VkPhysicalDevice@ handles. -- -- = Description -- -- If @pPhysicalDevices@ is @NULL@, then the number of physical devices -- available is returned in @pPhysicalDeviceCount@. Otherwise, -- @pPhysicalDeviceCount@ /must/ point to a variable set by the user to the -- number of elements in the @pPhysicalDevices@ array, and on return the -- variable is overwritten with the number of handles actually written to -- @pPhysicalDevices@. If @pPhysicalDeviceCount@ is less than the number of -- physical devices available, at most @pPhysicalDeviceCount@ structures -- will be written. If @pPhysicalDeviceCount@ is smaller than the number of -- physical devices available, @VK_INCOMPLETE@ will be returned instead of -- @VK_SUCCESS@, to indicate that not all the available physical devices -- were returned. -- -- == Valid Usage (Implicit) -- -- - @instance@ /must/ be a valid @VkInstance@ handle -- -- - @pPhysicalDeviceCount@ /must/ be a valid pointer to a @uint32_t@ -- value -- -- - If the value referenced by @pPhysicalDeviceCount@ is not @0@, and -- @pPhysicalDevices@ is not @NULL@, @pPhysicalDevices@ /must/ be a -- valid pointer to an array of @pPhysicalDeviceCount@ -- @VkPhysicalDevice@ handles -- -- == Return Codes -- -- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)] -- - @VK_SUCCESS@ -- -- - @VK_INCOMPLETE@ -- -- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)] -- - @VK_ERROR_OUT_OF_HOST_MEMORY@ -- -- - @VK_ERROR_OUT_OF_DEVICE_MEMORY@ -- -- - @VK_ERROR_INITIALIZATION_FAILED@ -- -- = See Also -- -- 'VkInstance', 'VkPhysicalDevice' foreign import ccall "vkEnumeratePhysicalDevices" vkEnumeratePhysicalDevices :: ("instance" ::: VkInstance) -> ("pPhysicalDeviceCount" ::: Ptr Word32) -> ("pPhysicalDevices" ::: Ptr VkPhysicalDevice) -> IO VkResult -- | vkGetDeviceProcAddr - Return a function pointer for a command -- -- = Parameters -- -- The table below defines the various use cases for @vkGetDeviceProcAddr@ -- and expected return value for each case. -- -- = Description -- -- The returned function pointer is of type 'PFN_vkVoidFunction', and must -- be cast to the type of the command being queried. The function pointer -- /must/ only be called with a dispatchable object (the first parameter) -- that is @device@ or a child of @device@. -- -- +-----------------------+-----------------------+-----------------------+ -- | @device@ | @pName@ | return value | -- +=======================+=======================+=======================+ -- | @NULL@ | * | undefined | -- +-----------------------+-----------------------+-----------------------+ -- | invalid device | * | undefined | -- +-----------------------+-----------------------+-----------------------+ -- | device | @NULL@ | undefined | -- +-----------------------+-----------------------+-----------------------+ -- | device | core device-level | fp | -- | | Vulkan command | | -- +-----------------------+-----------------------+-----------------------+ -- | device | enabled device | fp | -- | | extension commands | | -- +-----------------------+-----------------------+-----------------------+ -- | device | * (any @pName@ not | @NULL@ | -- | | covered above) | | -- +-----------------------+-----------------------+-----------------------+ -- -- vkGetDeviceProcAddr behavior -- -- == Valid Usage (Implicit) -- -- - @device@ /must/ be a valid @VkDevice@ handle -- -- - @pName@ /must/ be a null-terminated UTF-8 string -- -- = See Also -- -- 'PFN_vkVoidFunction', 'VkDevice' foreign import ccall "vkGetDeviceProcAddr" vkGetDeviceProcAddr :: ("device" ::: VkDevice) -> ("pName" ::: Ptr CChar) -> IO PFN_vkVoidFunction -- | vkGetInstanceProcAddr - Return a function pointer for a command -- -- = Parameters -- -- - @instance@ is the instance that the function pointer will be -- compatible with, or @NULL@ for commands not dependent on any -- instance. -- -- - @pName@ is the name of the command to obtain. -- -- = Description -- -- @vkGetInstanceProcAddr@ itself is obtained in a platform- and loader- -- specific manner. Typically, the loader library will export this command -- as a function symbol, so applications /can/ link against the loader -- library, or load it dynamically and look up the symbol using -- platform-specific APIs. -- -- The table below defines the various use cases for -- @vkGetInstanceProcAddr@ and expected return value (“fp” is “function -- pointer”) for each case. -- -- The returned function pointer is of type 'PFN_vkVoidFunction', and must -- be cast to the type of the command being queried. -- -- +-----------------------+------------------------------------------------------------------------------------+-----------------------+ -- | @instance@ | @pName@ | return value | -- +=======================+====================================================================================+=======================+ -- | * | @NULL@ | undefined | -- +-----------------------+------------------------------------------------------------------------------------+-----------------------+ -- | invalid instance | * | undefined | -- +-----------------------+------------------------------------------------------------------------------------+-----------------------+ -- | @NULL@ | 'Graphics.Vulkan.Core10.ExtensionDiscovery.vkEnumerateInstanceExtensionProperties' | fp | -- +-----------------------+------------------------------------------------------------------------------------+-----------------------+ -- | @NULL@ | 'Graphics.Vulkan.Core10.LayerDiscovery.vkEnumerateInstanceLayerProperties' | fp | -- +-----------------------+------------------------------------------------------------------------------------+-----------------------+ -- | @NULL@ | 'vkCreateInstance' | fp | -- +-----------------------+------------------------------------------------------------------------------------+-----------------------+ -- | @NULL@ | * (any @pName@ not covered above) | @NULL@ | -- +-----------------------+------------------------------------------------------------------------------------+-----------------------+ -- | instance | core Vulkan command | fp1 | -- +-----------------------+------------------------------------------------------------------------------------+-----------------------+ -- | instance | enabled instance extension commands for @instance@ | fp1 | -- +-----------------------+------------------------------------------------------------------------------------+-----------------------+ -- | instance | available device extension2 commands for @instance@ | fp1 | -- +-----------------------+------------------------------------------------------------------------------------+-----------------------+ -- | instance | * (any @pName@ not covered above) | @NULL@ | -- +-----------------------+------------------------------------------------------------------------------------+-----------------------+ -- -- vkGetInstanceProcAddr behavior -- -- [1] -- The returned function pointer /must/ only be called with a -- dispatchable object (the first parameter) that is @instance@ or a -- child of @instance@, e.g. 'VkInstance', 'VkPhysicalDevice', -- 'VkDevice', 'Graphics.Vulkan.Core10.Queue.VkQueue', or -- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer'. -- -- [2] -- An “available device extension” is a device extension supported by -- any physical device enumerated by @instance@. -- -- == Valid Usage (Implicit) -- -- - If @instance@ is not @NULL@, @instance@ /must/ be a valid -- @VkInstance@ handle -- -- - @pName@ /must/ be a null-terminated UTF-8 string -- -- = See Also -- -- 'PFN_vkVoidFunction', 'VkInstance' foreign import ccall "vkGetInstanceProcAddr" vkGetInstanceProcAddr :: ("instance" ::: VkInstance) -> ("pName" ::: Ptr CChar) -> IO PFN_vkVoidFunction -- | vkGetPhysicalDeviceProperties - Returns properties of a physical device -- -- = Parameters -- -- - @physicalDevice@ is the handle to the physical device whose -- properties will be queried. -- -- - @pProperties@ points to an instance of the -- 'VkPhysicalDeviceProperties' structure, that will be filled with -- returned information. -- -- == Valid Usage (Implicit) -- -- - @physicalDevice@ /must/ be a valid @VkPhysicalDevice@ handle -- -- - @pProperties@ /must/ be a valid pointer to a -- @VkPhysicalDeviceProperties@ structure -- -- = See Also -- -- 'VkPhysicalDevice', 'VkPhysicalDeviceProperties' foreign import ccall "vkGetPhysicalDeviceProperties" vkGetPhysicalDeviceProperties :: ("physicalDevice" ::: VkPhysicalDevice) -> ("pProperties" ::: Ptr VkPhysicalDeviceProperties) -> IO () -- | vkGetPhysicalDeviceQueueFamilyProperties - Reports properties of the -- queues of the specified physical device -- -- = Parameters -- -- - @physicalDevice@ is the handle to the physical device whose -- properties will be queried. -- -- - @pQueueFamilyPropertyCount@ is a pointer to an integer related to -- the number of queue families available or queried, as described -- below. -- -- - @pQueueFamilyProperties@ is either @NULL@ or a pointer to an array -- of 'VkQueueFamilyProperties' structures. -- -- = Description -- -- If @pQueueFamilyProperties@ is @NULL@, then the number of queue families -- available is returned in @pQueueFamilyPropertyCount@. Otherwise, -- @pQueueFamilyPropertyCount@ /must/ point to a variable set by the user -- to the number of elements in the @pQueueFamilyProperties@ array, and on -- return the variable is overwritten with the number of structures -- actually written to @pQueueFamilyProperties@. If -- @pQueueFamilyPropertyCount@ is less than the number of queue families -- available, at most @pQueueFamilyPropertyCount@ structures will be -- written. -- -- == Valid Usage (Implicit) -- -- - @physicalDevice@ /must/ be a valid @VkPhysicalDevice@ handle -- -- - @pQueueFamilyPropertyCount@ /must/ be a valid pointer to a -- @uint32_t@ value -- -- - If the value referenced by @pQueueFamilyPropertyCount@ is not @0@, -- and @pQueueFamilyProperties@ is not @NULL@, @pQueueFamilyProperties@ -- /must/ be a valid pointer to an array of @pQueueFamilyPropertyCount@ -- @VkQueueFamilyProperties@ structures -- -- = See Also -- -- 'VkPhysicalDevice', 'VkQueueFamilyProperties' foreign import ccall "vkGetPhysicalDeviceQueueFamilyProperties" vkGetPhysicalDeviceQueueFamilyProperties :: ("physicalDevice" ::: VkPhysicalDevice) -> ("pQueueFamilyPropertyCount" ::: Ptr Word32) -> ("pQueueFamilyProperties" ::: Ptr VkQueueFamilyProperties) -> IO () -- | vkGetPhysicalDeviceMemoryProperties - Reports memory information for the -- specified physical device -- -- = Parameters -- -- - @physicalDevice@ is the handle to the device to query. -- -- - @pMemoryProperties@ points to an instance of -- @VkPhysicalDeviceMemoryProperties@ structure in which the properties -- are returned. -- -- == Valid Usage (Implicit) -- -- - @physicalDevice@ /must/ be a valid @VkPhysicalDevice@ handle -- -- - @pMemoryProperties@ /must/ be a valid pointer to a -- @VkPhysicalDeviceMemoryProperties@ structure -- -- = See Also -- -- 'VkPhysicalDevice', 'VkPhysicalDeviceMemoryProperties' foreign import ccall "vkGetPhysicalDeviceMemoryProperties" vkGetPhysicalDeviceMemoryProperties :: ("physicalDevice" ::: VkPhysicalDevice) -> ("pMemoryProperties" ::: Ptr VkPhysicalDeviceMemoryProperties) -> IO () -- | vkGetPhysicalDeviceFeatures - Reports capabilities of a physical device -- -- = Parameters -- -- - @physicalDevice@ is the physical device from which to query the -- supported features. -- -- - @pFeatures@ is a pointer to a 'VkPhysicalDeviceFeatures' structure -- in which the physical device features are returned. For each -- feature, a value of @VK_TRUE@ specifies that the feature is -- supported on this physical device, and @VK_FALSE@ specifies that the -- feature is not supported. -- -- == Valid Usage (Implicit) -- -- - @physicalDevice@ /must/ be a valid @VkPhysicalDevice@ handle -- -- - @pFeatures@ /must/ be a valid pointer to a -- @VkPhysicalDeviceFeatures@ structure -- -- = See Also -- -- 'VkPhysicalDevice', 'VkPhysicalDeviceFeatures' foreign import ccall "vkGetPhysicalDeviceFeatures" vkGetPhysicalDeviceFeatures :: ("physicalDevice" ::: VkPhysicalDevice) -> ("pFeatures" ::: Ptr VkPhysicalDeviceFeatures) -> IO () -- | vkGetPhysicalDeviceFormatProperties - Lists physical device’s format -- capabilities -- -- = Parameters -- -- - @physicalDevice@ is the physical device from which to query the -- format properties. -- -- - @format@ is the format whose properties are queried. -- -- - @pFormatProperties@ is a pointer to a 'VkFormatProperties' structure -- in which physical device properties for @format@ are returned. -- -- == Valid Usage (Implicit) -- -- - @physicalDevice@ /must/ be a valid @VkPhysicalDevice@ handle -- -- - @format@ /must/ be a valid 'Graphics.Vulkan.Core10.Core.VkFormat' -- value -- -- - @pFormatProperties@ /must/ be a valid pointer to a -- @VkFormatProperties@ structure -- -- = See Also -- -- 'Graphics.Vulkan.Core10.Core.VkFormat', 'VkFormatProperties', -- 'VkPhysicalDevice' foreign import ccall "vkGetPhysicalDeviceFormatProperties" vkGetPhysicalDeviceFormatProperties :: ("physicalDevice" ::: VkPhysicalDevice) -> ("format" ::: VkFormat) -> ("pFormatProperties" ::: Ptr VkFormatProperties) -> IO () -- | vkGetPhysicalDeviceImageFormatProperties - Lists physical device’s image -- format capabilities -- -- = Parameters -- -- - @physicalDevice@ is the physical device from which to query the -- image capabilities. -- -- - @format@ is a 'Graphics.Vulkan.Core10.Core.VkFormat' value -- specifying the image format, corresponding to -- 'Graphics.Vulkan.Core10.Image.VkImageCreateInfo'::@format@. -- -- - @type@ is a 'VkImageType' value specifying the image type, -- corresponding to -- 'Graphics.Vulkan.Core10.Image.VkImageCreateInfo'::@imageType@. -- -- - @tiling@ is a 'VkImageTiling' value specifying the image tiling, -- corresponding to -- 'Graphics.Vulkan.Core10.Image.VkImageCreateInfo'::@tiling@. -- -- - @usage@ is a bitmask of 'VkImageUsageFlagBits' specifying the -- intended usage of the image, corresponding to -- 'Graphics.Vulkan.Core10.Image.VkImageCreateInfo'::@usage@. -- -- - @flags@ is a bitmask of 'VkImageCreateFlagBits' specifying -- additional parameters of the image, corresponding to -- 'Graphics.Vulkan.Core10.Image.VkImageCreateInfo'::@flags@. -- -- - @pImageFormatProperties@ points to an instance of the -- 'VkImageFormatProperties' structure in which capabilities are -- returned. -- -- = Description -- -- The @format@, @type@, @tiling@, @usage@, and @flags@ parameters -- correspond to parameters that would be consumed by -- 'Graphics.Vulkan.Core10.Image.vkCreateImage' (as members of -- @VkImageCreateInfo@). -- -- If @format@ is not a supported image format, or if the combination of -- @format@, @type@, @tiling@, @usage@, and @flags@ is not supported for -- images, then @vkGetPhysicalDeviceImageFormatProperties@ returns -- @VK_ERROR_FORMAT_NOT_SUPPORTED@. -- -- The limitations on an image format that are reported by -- @vkGetPhysicalDeviceImageFormatProperties@ have the following property: -- if @usage1@ and @usage2@ of type 'VkImageUsageFlags' are such that the -- bits set in @usage1@ are a subset of the bits set in @usage2@, and -- @flags1@ and @flags2@ of type 'VkImageCreateFlags' are such that the -- bits set in @flags1@ are a subset of the bits set in @flags2@, then the -- limitations for @usage1@ and @flags1@ /must/ be no more strict than the -- limitations for @usage2@ and @flags2@, for all values of @format@, -- @type@, and @tiling@. -- -- == Valid Usage (Implicit) -- -- - @physicalDevice@ /must/ be a valid @VkPhysicalDevice@ handle -- -- - @format@ /must/ be a valid 'Graphics.Vulkan.Core10.Core.VkFormat' -- value -- -- - @type@ /must/ be a valid 'VkImageType' value -- -- - @tiling@ /must/ be a valid 'VkImageTiling' value -- -- - @usage@ /must/ be a valid combination of 'VkImageUsageFlagBits' -- values -- -- - @usage@ /must/ not be @0@ -- -- - @flags@ /must/ be a valid combination of 'VkImageCreateFlagBits' -- values -- -- - @pImageFormatProperties@ /must/ be a valid pointer to a -- @VkImageFormatProperties@ structure -- -- == Return Codes -- -- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)] -- - @VK_SUCCESS@ -- -- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)] -- - @VK_ERROR_OUT_OF_HOST_MEMORY@ -- -- - @VK_ERROR_OUT_OF_DEVICE_MEMORY@ -- -- - @VK_ERROR_FORMAT_NOT_SUPPORTED@ -- -- = See Also -- -- 'Graphics.Vulkan.Core10.Core.VkFormat', 'VkImageCreateFlags', -- 'VkImageFormatProperties', 'VkImageTiling', 'VkImageType', -- 'VkImageUsageFlags', 'VkPhysicalDevice' foreign import ccall "vkGetPhysicalDeviceImageFormatProperties" vkGetPhysicalDeviceImageFormatProperties :: ("physicalDevice" ::: VkPhysicalDevice) -> ("format" ::: VkFormat) -> ("type" ::: VkImageType) -> ("tiling" ::: VkImageTiling) -> ("usage" ::: VkImageUsageFlags) -> ("flags" ::: VkImageCreateFlags) -> ("pImageFormatProperties" ::: Ptr VkImageFormatProperties) -> IO VkResult -- | VkExtent3D - Structure specifying a three-dimensional extent -- -- = See Also -- -- 'Graphics.Vulkan.Core10.CommandBufferBuilding.VkBufferImageCopy', -- 'Graphics.Vulkan.Core10.CommandBufferBuilding.VkImageCopy', -- 'Graphics.Vulkan.Core10.Image.VkImageCreateInfo', -- 'VkImageFormatProperties', -- 'Graphics.Vulkan.Core10.CommandBufferBuilding.VkImageResolve', -- 'VkQueueFamilyProperties', -- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.VkSparseImageFormatProperties', -- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.VkSparseImageMemoryBind' data VkExtent3D = VkExtent3D { -- | @width@ is the width of the extent. vkWidth :: Word32 , -- | @height@ is the height of the extent. vkHeight :: Word32 , -- | @depth@ is the depth of the extent. vkDepth :: Word32 } deriving (Eq, Show) instance Storable VkExtent3D where sizeOf ~_ = 12 alignment ~_ = 4 peek ptr = VkExtent3D <$> peek (ptr `plusPtr` 0) <*> peek (ptr `plusPtr` 4) <*> peek (ptr `plusPtr` 8) poke ptr poked = poke (ptr `plusPtr` 0) (vkWidth (poked :: VkExtent3D)) *> poke (ptr `plusPtr` 4) (vkHeight (poked :: VkExtent3D)) *> poke (ptr `plusPtr` 8) (vkDepth (poked :: VkExtent3D)) -- | VkPhysicalDeviceProperties - Structure specifying physical device -- properties -- -- = Description -- -- The @vendorID@ and @deviceID@ fields are provided to allow applications -- to adapt to device characteristics that are not adequately exposed by -- other Vulkan queries. -- -- __Note__ -- -- These /may/ include performance profiles, hardware errata, or other -- characteristics. -- -- The /vendor/ identified by @vendorID@ is the entity responsible for the -- most salient characteristics of the underlying implementation of the -- 'VkPhysicalDevice' being queried. -- -- __Note__ -- -- For example, in the case of a discrete GPU implementation, this /should/ -- be the GPU chipset vendor. In the case of a hardware accelerator -- integrated into a system-on-chip (SoC), this /should/ be the supplier of -- the silicon IP used to create the accelerator. -- -- If the vendor has a [PCI vendor -- ID](https://pcisig.com/membership/member-companies), the low 16 bits of -- @vendorID@ /must/ contain that PCI vendor ID, and the remaining bits -- /must/ be set to zero. Otherwise, the value returned /must/ be a valid -- Khronos vendor ID, obtained as described in the [Vulkan Documentation -- and -- Extensions](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vulkan-styleguide) -- document in the section “Registering a Vendor ID with Khronos”. Khronos -- vendor IDs are allocated starting at 0x10000, to distinguish them from -- the PCI vendor ID namespace. -- -- The vendor is also responsible for the value returned in @deviceID@. If -- the implementation is driven primarily by a [PCI -- device](https://pcisig.com/) with a [PCI device -- ID](https://pcisig.com/), the low 16 bits of @deviceID@ /must/ contain -- that PCI device ID, and the remaining bits /must/ be set to zero. -- Otherwise, the choice of what values to return /may/ be dictated by -- operating system or platform policies - but /should/ uniquely identify -- both the device version and any major configuration options (for -- example, core count in the case of multicore devices). -- -- __Note__ -- -- The same device ID /should/ be used for all physical implementations of -- that device version and configuration. For example, all uses of a -- specific silicon IP GPU version and configuration /should/ use the same -- device ID, even if those uses occur in different SoCs. -- -- = See Also -- -- 'VkPhysicalDeviceLimits', -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.VkPhysicalDeviceProperties2', -- 'VkPhysicalDeviceSparseProperties', 'VkPhysicalDeviceType', -- 'vkGetPhysicalDeviceProperties' data VkPhysicalDeviceProperties = VkPhysicalDeviceProperties { -- | @apiVersion@ is the version of Vulkan supported by the device, encoded -- as described in the [API Version Numbers and -- Semantics](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-versionnum) -- section. vkApiVersion :: Word32 , -- | @driverVersion@ is the vendor-specified version of the driver. vkDriverVersion :: Word32 , -- | @vendorID@ is a unique identifier for the /vendor/ (see below) of the -- physical device. vkVendorID :: Word32 , -- | @deviceID@ is a unique identifier for the physical device among devices -- available from the vendor. vkDeviceID :: Word32 , -- | @deviceType@ is a 'VkPhysicalDeviceType' specifying the type of device. vkDeviceType :: VkPhysicalDeviceType , -- | @deviceName@ is a null-terminated UTF-8 string containing the name of -- the device. vkDeviceName :: Vector VK_MAX_PHYSICAL_DEVICE_NAME_SIZE CChar , -- | @pipelineCacheUUID@ is an array of size @VK_UUID_SIZE@, containing 8-bit -- values that represent a universally unique identifier for the device. vkPipelineCacheUUID :: Vector VK_UUID_SIZE Word8 , -- | @limits@ is the 'VkPhysicalDeviceLimits' structure which specifies -- device-specific limits of the physical device. See -- [Limits](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-limits) -- for details. vkLimits :: VkPhysicalDeviceLimits , -- | @sparseProperties@ is the 'VkPhysicalDeviceSparseProperties' structure -- which specifies various sparse related properties of the physical -- device. See [Sparse -- Properties](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#sparsememory-physicalprops) -- for details. vkSparseProperties :: VkPhysicalDeviceSparseProperties } deriving (Eq, Show) instance Storable VkPhysicalDeviceProperties where sizeOf ~_ = 824 alignment ~_ = 8 peek ptr = VkPhysicalDeviceProperties <$> 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` 276) <*> peek (ptr `plusPtr` 296) <*> peek (ptr `plusPtr` 800) poke ptr poked = poke (ptr `plusPtr` 0) (vkApiVersion (poked :: VkPhysicalDeviceProperties)) *> poke (ptr `plusPtr` 4) (vkDriverVersion (poked :: VkPhysicalDeviceProperties)) *> poke (ptr `plusPtr` 8) (vkVendorID (poked :: VkPhysicalDeviceProperties)) *> poke (ptr `plusPtr` 12) (vkDeviceID (poked :: VkPhysicalDeviceProperties)) *> poke (ptr `plusPtr` 16) (vkDeviceType (poked :: VkPhysicalDeviceProperties)) *> poke (ptr `plusPtr` 20) (vkDeviceName (poked :: VkPhysicalDeviceProperties)) *> poke (ptr `plusPtr` 276) (vkPipelineCacheUUID (poked :: VkPhysicalDeviceProperties)) *> poke (ptr `plusPtr` 296) (vkLimits (poked :: VkPhysicalDeviceProperties)) *> poke (ptr `plusPtr` 800) (vkSparseProperties (poked :: VkPhysicalDeviceProperties)) -- | VkApplicationInfo - Structure specifying application info -- -- == Valid Usage (Implicit) -- -- - @sType@ /must/ be @VK_STRUCTURE_TYPE_APPLICATION_INFO@ -- -- - @pNext@ /must/ be @NULL@ -- -- - If @pApplicationName@ is not @NULL@, @pApplicationName@ /must/ be a -- null-terminated UTF-8 string -- -- - If @pEngineName@ is not @NULL@, @pEngineName@ /must/ be a -- null-terminated UTF-8 string -- -- = See Also -- -- 'VkInstanceCreateInfo', 'Graphics.Vulkan.Core10.Core.VkStructureType' data VkApplicationInfo = VkApplicationInfo { -- | @sType@ is the type of this structure. vkSType :: VkStructureType , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure. vkPNext :: Ptr () , -- | @pApplicationName@ is @NULL@ or is a pointer to a null-terminated UTF-8 -- string containing the name of the application. vkPApplicationName :: Ptr CChar , -- | @applicationVersion@ is an unsigned integer variable containing the -- developer-supplied version number of the application. vkApplicationVersion :: Word32 , -- | @pEngineName@ is @NULL@ or is a pointer to a null-terminated UTF-8 -- string containing the name of the engine (if any) used to create the -- application. vkPEngineName :: Ptr CChar , -- | @engineVersion@ is an unsigned integer variable containing the -- developer-supplied version number of the engine used to create the -- application. vkEngineVersion :: Word32 , -- | @apiVersion@ is the version of the Vulkan API against which the -- application expects to run, encoded as described in the [API Version -- Numbers and -- Semantics](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-versionnum) -- section. If @apiVersion@ is 0 the implementation /must/ ignore it, -- otherwise if the implementation does not support the requested -- @apiVersion@, or an effective substitute for @apiVersion@, it /must/ -- return @VK_ERROR_INCOMPATIBLE_DRIVER@. The patch version number -- specified in @apiVersion@ is ignored when creating an instance object. -- Only the major and minor versions of the instance /must/ match those -- requested in @apiVersion@. vkApiVersion :: Word32 } deriving (Eq, Show) instance Storable VkApplicationInfo where sizeOf ~_ = 48 alignment ~_ = 8 peek ptr = VkApplicationInfo <$> peek (ptr `plusPtr` 0) <*> peek (ptr `plusPtr` 8) <*> peek (ptr `plusPtr` 16) <*> peek (ptr `plusPtr` 24) <*> peek (ptr `plusPtr` 32) <*> peek (ptr `plusPtr` 40) <*> peek (ptr `plusPtr` 44) poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkApplicationInfo)) *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkApplicationInfo)) *> poke (ptr `plusPtr` 16) (vkPApplicationName (poked :: VkApplicationInfo)) *> poke (ptr `plusPtr` 24) (vkApplicationVersion (poked :: VkApplicationInfo)) *> poke (ptr `plusPtr` 32) (vkPEngineName (poked :: VkApplicationInfo)) *> poke (ptr `plusPtr` 40) (vkEngineVersion (poked :: VkApplicationInfo)) *> poke (ptr `plusPtr` 44) (vkApiVersion (poked :: VkApplicationInfo)) -- | VkAllocationCallbacks - Structure containing callback function pointers -- for memory allocation -- -- == Valid Usage -- -- - @pfnAllocation@ /must/ be a valid pointer to a valid user-defined -- 'PFN_vkAllocationFunction' -- -- - @pfnReallocation@ /must/ be a valid pointer to a valid user-defined -- 'PFN_vkReallocationFunction' -- -- - @pfnFree@ /must/ be a valid pointer to a valid user-defined -- 'PFN_vkFreeFunction' -- -- - If either of @pfnInternalAllocation@ or @pfnInternalFree@ is not -- @NULL@, both /must/ be valid callbacks -- -- = See Also -- -- 'PFN_vkAllocationFunction', 'PFN_vkFreeFunction', -- 'PFN_vkInternalAllocationNotification', -- 'PFN_vkInternalFreeNotification', 'PFN_vkReallocationFunction', -- 'Graphics.Vulkan.Core10.Memory.vkAllocateMemory', -- 'Graphics.Vulkan.Extensions.VK_KHR_android_surface.vkCreateAndroidSurfaceKHR', -- 'Graphics.Vulkan.Core10.Buffer.vkCreateBuffer', -- 'Graphics.Vulkan.Core10.BufferView.vkCreateBufferView', -- 'Graphics.Vulkan.Core10.CommandPool.vkCreateCommandPool', -- 'Graphics.Vulkan.Core10.Pipeline.vkCreateComputePipelines', -- 'Graphics.Vulkan.Extensions.VK_EXT_debug_report.vkCreateDebugReportCallbackEXT', -- 'Graphics.Vulkan.Extensions.VK_EXT_debug_utils.vkCreateDebugUtilsMessengerEXT', -- 'Graphics.Vulkan.Core10.DescriptorSet.vkCreateDescriptorPool', -- 'Graphics.Vulkan.Core10.DescriptorSet.vkCreateDescriptorSetLayout', -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_descriptor_update_template.vkCreateDescriptorUpdateTemplate', -- 'Graphics.Vulkan.Extensions.VK_KHR_descriptor_update_template.vkCreateDescriptorUpdateTemplateKHR', -- 'Graphics.Vulkan.Core10.Device.vkCreateDevice', -- 'Graphics.Vulkan.Extensions.VK_KHR_display.vkCreateDisplayModeKHR', -- 'Graphics.Vulkan.Extensions.VK_KHR_display.vkCreateDisplayPlaneSurfaceKHR', -- 'Graphics.Vulkan.Core10.Event.vkCreateEvent', -- 'Graphics.Vulkan.Core10.Fence.vkCreateFence', -- 'Graphics.Vulkan.Core10.Pass.vkCreateFramebuffer', -- 'Graphics.Vulkan.Core10.Pipeline.vkCreateGraphicsPipelines', -- 'Graphics.Vulkan.Extensions.VK_MVK_ios_surface.vkCreateIOSSurfaceMVK', -- 'Graphics.Vulkan.Core10.Image.vkCreateImage', -- 'Graphics.Vulkan.Core10.ImageView.vkCreateImageView', -- 'Graphics.Vulkan.Extensions.VK_NVX_device_generated_commands.vkCreateIndirectCommandsLayoutNVX', -- 'vkCreateInstance', -- 'Graphics.Vulkan.Extensions.VK_MVK_macos_surface.vkCreateMacOSSurfaceMVK', -- 'Graphics.Vulkan.Extensions.VK_KHR_mir_surface.vkCreateMirSurfaceKHR', -- 'Graphics.Vulkan.Extensions.VK_NVX_device_generated_commands.vkCreateObjectTableNVX', -- 'Graphics.Vulkan.Core10.PipelineCache.vkCreatePipelineCache', -- 'Graphics.Vulkan.Core10.PipelineLayout.vkCreatePipelineLayout', -- 'Graphics.Vulkan.Core10.Query.vkCreateQueryPool', -- 'Graphics.Vulkan.Core10.Pass.vkCreateRenderPass', -- 'Graphics.Vulkan.Core10.Sampler.vkCreateSampler', -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_sampler_ycbcr_conversion.vkCreateSamplerYcbcrConversion', -- 'Graphics.Vulkan.Extensions.VK_KHR_sampler_ycbcr_conversion.vkCreateSamplerYcbcrConversionKHR', -- 'Graphics.Vulkan.Core10.QueueSemaphore.vkCreateSemaphore', -- 'Graphics.Vulkan.Core10.Shader.vkCreateShaderModule', -- 'Graphics.Vulkan.Extensions.VK_KHR_display_swapchain.vkCreateSharedSwapchainsKHR', -- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.vkCreateSwapchainKHR', -- 'Graphics.Vulkan.Extensions.VK_EXT_validation_cache.vkCreateValidationCacheEXT', -- 'Graphics.Vulkan.Extensions.VK_NN_vi_surface.vkCreateViSurfaceNN', -- 'Graphics.Vulkan.Extensions.VK_KHR_wayland_surface.vkCreateWaylandSurfaceKHR', -- 'Graphics.Vulkan.Extensions.VK_KHR_win32_surface.vkCreateWin32SurfaceKHR', -- 'Graphics.Vulkan.Extensions.VK_KHR_xcb_surface.vkCreateXcbSurfaceKHR', -- 'Graphics.Vulkan.Extensions.VK_KHR_xlib_surface.vkCreateXlibSurfaceKHR', -- 'Graphics.Vulkan.Core10.Buffer.vkDestroyBuffer', -- 'Graphics.Vulkan.Core10.BufferView.vkDestroyBufferView', -- 'Graphics.Vulkan.Core10.CommandPool.vkDestroyCommandPool', -- 'Graphics.Vulkan.Extensions.VK_EXT_debug_report.vkDestroyDebugReportCallbackEXT', -- 'Graphics.Vulkan.Extensions.VK_EXT_debug_utils.vkDestroyDebugUtilsMessengerEXT', -- 'Graphics.Vulkan.Core10.DescriptorSet.vkDestroyDescriptorPool', -- 'Graphics.Vulkan.Core10.DescriptorSet.vkDestroyDescriptorSetLayout', -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_descriptor_update_template.vkDestroyDescriptorUpdateTemplate', -- 'Graphics.Vulkan.Extensions.VK_KHR_descriptor_update_template.vkDestroyDescriptorUpdateTemplateKHR', -- 'Graphics.Vulkan.Core10.Device.vkDestroyDevice', -- 'Graphics.Vulkan.Core10.Event.vkDestroyEvent', -- 'Graphics.Vulkan.Core10.Fence.vkDestroyFence', -- 'Graphics.Vulkan.Core10.Pass.vkDestroyFramebuffer', -- 'Graphics.Vulkan.Core10.Image.vkDestroyImage', -- 'Graphics.Vulkan.Core10.ImageView.vkDestroyImageView', -- 'Graphics.Vulkan.Extensions.VK_NVX_device_generated_commands.vkDestroyIndirectCommandsLayoutNVX', -- 'vkDestroyInstance', -- 'Graphics.Vulkan.Extensions.VK_NVX_device_generated_commands.vkDestroyObjectTableNVX', -- 'Graphics.Vulkan.Core10.Pipeline.vkDestroyPipeline', -- 'Graphics.Vulkan.Core10.PipelineCache.vkDestroyPipelineCache', -- 'Graphics.Vulkan.Core10.PipelineLayout.vkDestroyPipelineLayout', -- 'Graphics.Vulkan.Core10.Query.vkDestroyQueryPool', -- 'Graphics.Vulkan.Core10.Pass.vkDestroyRenderPass', -- 'Graphics.Vulkan.Core10.Sampler.vkDestroySampler', -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_sampler_ycbcr_conversion.vkDestroySamplerYcbcrConversion', -- 'Graphics.Vulkan.Extensions.VK_KHR_sampler_ycbcr_conversion.vkDestroySamplerYcbcrConversionKHR', -- 'Graphics.Vulkan.Core10.QueueSemaphore.vkDestroySemaphore', -- 'Graphics.Vulkan.Core10.Shader.vkDestroyShaderModule', -- 'Graphics.Vulkan.Extensions.VK_KHR_surface.vkDestroySurfaceKHR', -- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.vkDestroySwapchainKHR', -- 'Graphics.Vulkan.Extensions.VK_EXT_validation_cache.vkDestroyValidationCacheEXT', -- 'Graphics.Vulkan.Core10.Memory.vkFreeMemory', -- 'Graphics.Vulkan.Extensions.VK_EXT_display_control.vkRegisterDeviceEventEXT', -- 'Graphics.Vulkan.Extensions.VK_EXT_display_control.vkRegisterDisplayEventEXT' data VkAllocationCallbacks = VkAllocationCallbacks { -- | @pUserData@ is a value to be interpreted by the implementation of the -- callbacks. When any of the callbacks in @VkAllocationCallbacks@ are -- called, the Vulkan implementation will pass this value as the first -- parameter to the callback. This value /can/ vary each time an allocator -- is passed into a command, even when the same object takes an allocator -- in multiple commands. vkPUserData :: Ptr () , -- | @pfnAllocation@ is a pointer to an application-defined memory allocation -- function of type 'PFN_vkAllocationFunction'. vkPfnAllocation :: PFN_vkAllocationFunction , -- | @pfnReallocation@ is a pointer to an application-defined memory -- reallocation function of type 'PFN_vkReallocationFunction'. vkPfnReallocation :: PFN_vkReallocationFunction , -- | @pfnFree@ is a pointer to an application-defined memory free function of -- type 'PFN_vkFreeFunction'. vkPfnFree :: PFN_vkFreeFunction , -- | @pfnInternalAllocation@ is a pointer to an application-defined function -- that is called by the implementation when the implementation makes -- internal allocations, and it is of type -- 'PFN_vkInternalAllocationNotification'. vkPfnInternalAllocation :: PFN_vkInternalAllocationNotification , -- | @pfnInternalFree@ is a pointer to an application-defined function that -- is called by the implementation when the implementation frees internal -- allocations, and it is of type 'PFN_vkInternalFreeNotification'. vkPfnInternalFree :: PFN_vkInternalFreeNotification } deriving (Eq, Show) instance Storable VkAllocationCallbacks where sizeOf ~_ = 48 alignment ~_ = 8 peek ptr = VkAllocationCallbacks <$> peek (ptr `plusPtr` 0) <*> peek (ptr `plusPtr` 8) <*> peek (ptr `plusPtr` 16) <*> peek (ptr `plusPtr` 24) <*> peek (ptr `plusPtr` 32) <*> peek (ptr `plusPtr` 40) poke ptr poked = poke (ptr `plusPtr` 0) (vkPUserData (poked :: VkAllocationCallbacks)) *> poke (ptr `plusPtr` 8) (vkPfnAllocation (poked :: VkAllocationCallbacks)) *> poke (ptr `plusPtr` 16) (vkPfnReallocation (poked :: VkAllocationCallbacks)) *> poke (ptr `plusPtr` 24) (vkPfnFree (poked :: VkAllocationCallbacks)) *> poke (ptr `plusPtr` 32) (vkPfnInternalAllocation (poked :: VkAllocationCallbacks)) *> poke (ptr `plusPtr` 40) (vkPfnInternalFree (poked :: VkAllocationCallbacks)) -- | VkInstanceCreateInfo - Structure specifying parameters of a newly -- created instance -- -- == Valid Usage (Implicit) -- -- - @sType@ /must/ be @VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO@ -- -- - Each @pNext@ member of any structure (including this one) in the -- @pNext@ chain /must/ be either @NULL@ or a pointer to a valid -- instance of -- 'Graphics.Vulkan.Extensions.VK_EXT_debug_report.VkDebugReportCallbackCreateInfoEXT', -- 'Graphics.Vulkan.Extensions.VK_EXT_debug_utils.VkDebugUtilsMessengerCreateInfoEXT', -- or -- 'Graphics.Vulkan.Extensions.VK_EXT_validation_flags.VkValidationFlagsEXT' -- -- - Each @sType@ member in the @pNext@ chain /must/ be unique -- -- - @flags@ /must/ be @0@ -- -- - If @pApplicationInfo@ is not @NULL@, @pApplicationInfo@ /must/ be a -- valid pointer to a valid @VkApplicationInfo@ structure -- -- - If @enabledLayerCount@ is not @0@, @ppEnabledLayerNames@ /must/ be a -- valid pointer to an array of @enabledLayerCount@ null-terminated -- UTF-8 strings -- -- - If @enabledExtensionCount@ is not @0@, @ppEnabledExtensionNames@ -- /must/ be a valid pointer to an array of @enabledExtensionCount@ -- null-terminated UTF-8 strings -- -- = See Also -- -- 'VkApplicationInfo', 'VkInstanceCreateFlags', -- 'Graphics.Vulkan.Core10.Core.VkStructureType', 'vkCreateInstance' data VkInstanceCreateInfo = VkInstanceCreateInfo { -- | @sType@ is the type of this structure. vkSType :: VkStructureType , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure. vkPNext :: Ptr () , -- | @flags@ is reserved for future use. vkFlags :: VkInstanceCreateFlags , -- | @pApplicationInfo@ is @NULL@ or a pointer to an instance of -- @VkApplicationInfo@. If not @NULL@, this information helps -- implementations recognize behavior inherent to classes of applications. -- 'VkApplicationInfo' is defined in detail below. vkPApplicationInfo :: Ptr VkApplicationInfo , -- | @enabledLayerCount@ is the number of global layers to enable. vkEnabledLayerCount :: Word32 , -- | @ppEnabledLayerNames@ is a pointer to an array of @enabledLayerCount@ -- null-terminated UTF-8 strings containing the names of layers to enable -- for the created instance. See the -- [Layers](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#extended-functionality-layers) -- section for further details. vkPPEnabledLayerNames :: Ptr (Ptr CChar) , -- | @enabledExtensionCount@ is the number of global extensions to enable. vkEnabledExtensionCount :: Word32 , -- | @ppEnabledExtensionNames@ is a pointer to an array of -- @enabledExtensionCount@ null-terminated UTF-8 strings containing the -- names of extensions to enable. vkPPEnabledExtensionNames :: Ptr (Ptr CChar) } deriving (Eq, Show) instance Storable VkInstanceCreateInfo where sizeOf ~_ = 64 alignment ~_ = 8 peek ptr = VkInstanceCreateInfo <$> peek (ptr `plusPtr` 0) <*> peek (ptr `plusPtr` 8) <*> peek (ptr `plusPtr` 16) <*> peek (ptr `plusPtr` 24) <*> peek (ptr `plusPtr` 32) <*> peek (ptr `plusPtr` 40) <*> peek (ptr `plusPtr` 48) <*> peek (ptr `plusPtr` 56) poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkInstanceCreateInfo)) *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkInstanceCreateInfo)) *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkInstanceCreateInfo)) *> poke (ptr `plusPtr` 24) (vkPApplicationInfo (poked :: VkInstanceCreateInfo)) *> poke (ptr `plusPtr` 32) (vkEnabledLayerCount (poked :: VkInstanceCreateInfo)) *> poke (ptr `plusPtr` 40) (vkPPEnabledLayerNames (poked :: VkInstanceCreateInfo)) *> poke (ptr `plusPtr` 48) (vkEnabledExtensionCount (poked :: VkInstanceCreateInfo)) *> poke (ptr `plusPtr` 56) (vkPPEnabledExtensionNames (poked :: VkInstanceCreateInfo)) -- | VkQueueFamilyProperties - Structure providing information about a queue -- family -- -- = Description -- -- The value returned in @minImageTransferGranularity@ has a unit of -- compressed texel blocks for images having a block-compressed format, and -- a unit of texels otherwise. -- -- Possible values of @minImageTransferGranularity@ are: -- -- - (0,0,0) which indicates that only whole mip levels /must/ be -- transferred using the image transfer operations on the corresponding -- queues. In this case, the following restrictions apply to all offset -- and extent parameters of image transfer operations: -- -- - The @x@, @y@, and @z@ members of a -- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.VkOffset3D' -- parameter /must/ always be zero. -- -- - The @width@, @height@, and @depth@ members of a 'VkExtent3D' -- parameter /must/ always match the width, height, and depth of -- the image subresource corresponding to the parameter, -- respectively. -- -- - (Ax, Ay, Az) where Ax, Ay, and Az are all integer powers of two. In -- this case the following restrictions apply to all image transfer -- operations: -- -- - @x@, @y@, and @z@ of a -- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.VkOffset3D' -- parameter /must/ be integer multiples of Ax, Ay, and Az, -- respectively. -- -- - @width@ of a 'VkExtent3D' parameter /must/ be an integer -- multiple of Ax, or else @x@ + @width@ /must/ equal the width of -- the image subresource corresponding to the parameter. -- -- - @height@ of a 'VkExtent3D' parameter /must/ be an integer -- multiple of Ay, or else @y@ + @height@ /must/ equal the height -- of the image subresource corresponding to the parameter. -- -- - @depth@ of a 'VkExtent3D' parameter /must/ be an integer -- multiple of Az, or else @z@ + @depth@ /must/ equal the depth of -- the image subresource corresponding to the parameter. -- -- - If the format of the image corresponding to the parameters is -- one of the block-compressed formats then for the purposes of the -- above calculations the granularity /must/ be scaled up by the -- compressed texel block dimensions. -- -- Queues supporting graphics and\/or compute operations /must/ report -- (1,1,1) in @minImageTransferGranularity@, meaning that there are no -- additional restrictions on the granularity of image transfer operations -- for these queues. Other queues supporting image transfer operations are -- only /required/ to support whole mip level transfers, thus -- @minImageTransferGranularity@ for queues belonging to such queue -- families /may/ be (0,0,0). -- -- The [Device -- Memory](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-device) -- section describes memory properties queried from the physical device. -- -- For physical device feature queries see the -- [Features](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features) -- chapter. -- -- = See Also -- -- 'VkExtent3D', -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.VkQueueFamilyProperties2', -- 'VkQueueFlags', 'vkGetPhysicalDeviceQueueFamilyProperties' data VkQueueFamilyProperties = VkQueueFamilyProperties { -- | @queueFlags@ is a bitmask of 'VkQueueFlagBits' indicating capabilities -- of the queues in this queue family. vkQueueFlags :: VkQueueFlags , -- | @queueCount@ is the unsigned integer count of queues in this queue -- family. vkQueueCount :: Word32 , -- | @timestampValidBits@ is the unsigned integer count of meaningful bits in -- the timestamps written via @vkCmdWriteTimestamp@. The valid range for -- the count is 36..64 bits, or a value of 0, indicating no support for -- timestamps. Bits outside the valid range are guaranteed to be zeros. vkTimestampValidBits :: Word32 , -- | @minImageTransferGranularity@ is the minimum granularity supported for -- image transfer operations on the queues in this queue family. vkMinImageTransferGranularity :: VkExtent3D } deriving (Eq, Show) instance Storable VkQueueFamilyProperties where sizeOf ~_ = 24 alignment ~_ = 4 peek ptr = VkQueueFamilyProperties <$> peek (ptr `plusPtr` 0) <*> peek (ptr `plusPtr` 4) <*> peek (ptr `plusPtr` 8) <*> peek (ptr `plusPtr` 12) poke ptr poked = poke (ptr `plusPtr` 0) (vkQueueFlags (poked :: VkQueueFamilyProperties)) *> poke (ptr `plusPtr` 4) (vkQueueCount (poked :: VkQueueFamilyProperties)) *> poke (ptr `plusPtr` 8) (vkTimestampValidBits (poked :: VkQueueFamilyProperties)) *> poke (ptr `plusPtr` 12) (vkMinImageTransferGranularity (poked :: VkQueueFamilyProperties)) -- | VkPhysicalDeviceMemoryProperties - Structure specifying physical device -- memory properties -- -- = Description -- -- The @VkPhysicalDeviceMemoryProperties@ structure describes a number of -- /memory heaps/ as well as a number of /memory types/ that /can/ be used -- to access memory allocated in those heaps. Each heap describes a memory -- resource of a particular size, and each memory type describes a set of -- memory properties (e.g. host cached vs uncached) that /can/ be used with -- a given memory heap. Allocations using a particular memory type will -- consume resources from the heap indicated by that memory type’s heap -- index. More than one memory type /may/ share each heap, and the heaps -- and memory types provide a mechanism to advertise an accurate size of -- the physical memory resources while allowing the memory to be used with -- a variety of different properties. -- -- The number of memory heaps is given by @memoryHeapCount@ and is less -- than or equal to @VK_MAX_MEMORY_HEAPS@. Each heap is described by an -- element of the @memoryHeaps@ array as a 'VkMemoryHeap' structure. The -- number of memory types available across all memory heaps is given by -- @memoryTypeCount@ and is less than or equal to @VK_MAX_MEMORY_TYPES@. -- Each memory type is described by an element of the @memoryTypes@ array -- as a 'VkMemoryType' structure. -- -- At least one heap /must/ include @VK_MEMORY_HEAP_DEVICE_LOCAL_BIT@ in -- 'VkMemoryHeap'::@flags@. If there are multiple heaps that all have -- similar performance characteristics, they /may/ all include -- @VK_MEMORY_HEAP_DEVICE_LOCAL_BIT@. In a unified memory architecture -- (UMA) system there is often only a single memory heap which is -- considered to be equally “local” to the host and to the device, and such -- an implementation /must/ advertise the heap as device-local. -- -- Each memory type returned by 'vkGetPhysicalDeviceMemoryProperties' -- /must/ have its @propertyFlags@ set to one of the following values: -- -- - 0 -- -- - @VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT@ | -- @VK_MEMORY_PROPERTY_HOST_COHERENT_BIT@ -- -- - @VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT@ | -- @VK_MEMORY_PROPERTY_HOST_CACHED_BIT@ -- -- - @VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT@ | -- @VK_MEMORY_PROPERTY_HOST_CACHED_BIT@ | -- @VK_MEMORY_PROPERTY_HOST_COHERENT_BIT@ -- -- - @VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT@ -- -- - @VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT@ | -- @VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT@ | -- @VK_MEMORY_PROPERTY_HOST_COHERENT_BIT@ -- -- - @VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT@ | -- @VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT@ | -- @VK_MEMORY_PROPERTY_HOST_CACHED_BIT@ -- -- - @VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT@ | -- @VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT@ | -- @VK_MEMORY_PROPERTY_HOST_CACHED_BIT@ | -- @VK_MEMORY_PROPERTY_HOST_COHERENT_BIT@ -- -- - @VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT@ | -- @VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT@ -- -- There /must/ be at least one memory type with both the -- @VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT@ and -- @VK_MEMORY_PROPERTY_HOST_COHERENT_BIT@ bits set in its @propertyFlags@. -- There /must/ be at least one memory type with the -- @VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT@ bit set in its @propertyFlags@. -- -- For each pair of elements __X__ and __Y__ returned in @memoryTypes@, -- __X__ /must/ be placed at a lower index position than __Y__ if: -- -- - either the set of bit flags returned in the @propertyFlags@ member -- of __X__ is a strict subset of the set of bit flags returned in the -- @propertyFlags@ member of __Y__. -- -- - or the @propertyFlags@ members of __X__ and __Y__ are equal, and -- __X__ belongs to a memory heap with greater performance (as -- determined in an implementation-specific manner). -- -- __Note__ -- -- There is no ordering requirement between __X__ and __Y__ elements for -- the case their @propertyFlags@ members are not in a subset relation. -- That potentially allows more than one possible way to order the same set -- of memory types. Notice that the [list of all allowed memory property -- flag -- combinations](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-device-bitmask-list) -- is written in the required order. But if instead -- @VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT@ was before -- @VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT@ | -- @VK_MEMORY_PROPERTY_HOST_COHERENT_BIT@, the list would still be in the -- required order. -- -- This ordering requirement enables applications to use a simple search -- loop to select the desired memory type along the lines of: -- -- > // Find a memory in `memoryTypeBitsRequirement` that includes all of `requiredProperties` -- > int32_t findProperties(const VkPhysicalDeviceMemoryProperties* pMemoryProperties, -- > uint32_t memoryTypeBitsRequirement, -- > VkMemoryPropertyFlags requiredProperties) { -- > const uint32_t memoryCount = pMemoryProperties->memoryTypeCount; -- > for (uint32_t memoryIndex = 0; memoryIndex < memoryCount; ++memoryIndex) { -- > const uint32_t memoryTypeBits = (1 << memoryIndex); -- > const bool isRequiredMemoryType = memoryTypeBitsRequirement & memoryTypeBits; -- > -- > const VkMemoryPropertyFlags properties = -- > pMemoryProperties->memoryTypes[memoryIndex].propertyFlags; -- > const bool hasRequiredProperties = -- > (properties & requiredProperties) == requiredProperties; -- > -- > if (isRequiredMemoryType && hasRequiredProperties) -- > return static_cast<int32_t>(memoryIndex); -- > } -- > -- > // failed to find memory type -- > return -1; -- > } -- > -- > // Try to find an optimal memory type, or if it does not exist try fallback memory type -- > // `device` is the VkDevice -- > // `image` is the VkImage that requires memory to be bound -- > // `memoryProperties` properties as returned by vkGetPhysicalDeviceMemoryProperties -- > // `requiredProperties` are the property flags that must be present -- > // `optimalProperties` are the property flags that are preferred by the application -- > VkMemoryRequirements memoryRequirements; -- > vkGetImageMemoryRequirements(device, image, &memoryRequirements); -- > int32_t memoryType = -- > findProperties(&memoryProperties, memoryRequirements.memoryTypeBits, optimalProperties); -- > if (memoryType == -1) // not found; try fallback properties -- > memoryType = -- > findProperties(&memoryProperties, memoryRequirements.memoryTypeBits, requiredProperties); -- -- = See Also -- -- 'VkMemoryHeap', 'VkMemoryType', -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.VkPhysicalDeviceMemoryProperties2', -- 'vkGetPhysicalDeviceMemoryProperties' data VkPhysicalDeviceMemoryProperties = VkPhysicalDeviceMemoryProperties { -- | @memoryTypeCount@ is the number of valid elements in the @memoryTypes@ -- array. vkMemoryTypeCount :: Word32 , -- | @memoryTypes@ is an array of 'VkMemoryType' structures describing the -- /memory types/ that /can/ be used to access memory allocated from the -- heaps specified by @memoryHeaps@. vkMemoryTypes :: Vector VK_MAX_MEMORY_TYPES VkMemoryType , -- | @memoryHeapCount@ is the number of valid elements in the @memoryHeaps@ -- array. vkMemoryHeapCount :: Word32 , -- | @memoryHeaps@ is an array of 'VkMemoryHeap' structures describing the -- /memory heaps/ from which memory /can/ be allocated. vkMemoryHeaps :: Vector VK_MAX_MEMORY_HEAPS VkMemoryHeap } deriving (Eq, Show) instance Storable VkPhysicalDeviceMemoryProperties where sizeOf ~_ = 520 alignment ~_ = 8 peek ptr = VkPhysicalDeviceMemoryProperties <$> peek (ptr `plusPtr` 0) <*> peek (ptr `plusPtr` 4) <*> peek (ptr `plusPtr` 260) <*> peek (ptr `plusPtr` 264) poke ptr poked = poke (ptr `plusPtr` 0) (vkMemoryTypeCount (poked :: VkPhysicalDeviceMemoryProperties)) *> poke (ptr `plusPtr` 4) (vkMemoryTypes (poked :: VkPhysicalDeviceMemoryProperties)) *> poke (ptr `plusPtr` 260) (vkMemoryHeapCount (poked :: VkPhysicalDeviceMemoryProperties)) *> poke (ptr `plusPtr` 264) (vkMemoryHeaps (poked :: VkPhysicalDeviceMemoryProperties)) -- | VkMemoryType - Structure specifying memory type -- -- = See Also -- -- 'VkMemoryPropertyFlags', 'VkPhysicalDeviceMemoryProperties' data VkMemoryType = VkMemoryType { -- | @propertyFlags@ is a bitmask of 'VkMemoryPropertyFlagBits' of properties -- for this memory type. vkPropertyFlags :: VkMemoryPropertyFlags , -- | @heapIndex@ describes which memory heap this memory type corresponds to, -- and /must/ be less than @memoryHeapCount@ from the -- 'VkPhysicalDeviceMemoryProperties' structure. vkHeapIndex :: Word32 } deriving (Eq, Show) instance Storable VkMemoryType where sizeOf ~_ = 8 alignment ~_ = 4 peek ptr = VkMemoryType <$> peek (ptr `plusPtr` 0) <*> peek (ptr `plusPtr` 4) poke ptr poked = poke (ptr `plusPtr` 0) (vkPropertyFlags (poked :: VkMemoryType)) *> poke (ptr `plusPtr` 4) (vkHeapIndex (poked :: VkMemoryType)) -- | VkMemoryHeap - Structure specifying a memory heap -- -- = See Also -- -- @VkDeviceSize@, 'VkMemoryHeapFlags', 'VkPhysicalDeviceMemoryProperties' data VkMemoryHeap = VkMemoryHeap { -- | @size@ is the total memory size in bytes in the heap. vkSize :: VkDeviceSize , -- | @flags@ is a bitmask of 'VkMemoryHeapFlagBits' specifying attribute -- flags for the heap. vkFlags :: VkMemoryHeapFlags } deriving (Eq, Show) instance Storable VkMemoryHeap where sizeOf ~_ = 16 alignment ~_ = 8 peek ptr = VkMemoryHeap <$> peek (ptr `plusPtr` 0) <*> peek (ptr `plusPtr` 8) poke ptr poked = poke (ptr `plusPtr` 0) (vkSize (poked :: VkMemoryHeap)) *> poke (ptr `plusPtr` 8) (vkFlags (poked :: VkMemoryHeap)) -- | VkFormatProperties - Structure specifying image format properties -- -- = Description -- -- __Note__ -- -- If no format feature flags are supported, the format itself is not -- supported, and images of that format cannot be created. -- -- If @format@ is a block-compression format, then buffers /must/ not -- support any features for the format. -- -- = See Also -- -- 'VkFormatFeatureFlags', -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.VkFormatProperties2', -- 'vkGetPhysicalDeviceFormatProperties' data VkFormatProperties = VkFormatProperties { -- | @linearTilingFeatures@ is a bitmask of 'VkFormatFeatureFlagBits' -- specifying features supported by images created with a @tiling@ -- parameter of @VK_IMAGE_TILING_LINEAR@. vkLinearTilingFeatures :: VkFormatFeatureFlags , -- | @optimalTilingFeatures@ is a bitmask of 'VkFormatFeatureFlagBits' -- specifying features supported by images created with a @tiling@ -- parameter of @VK_IMAGE_TILING_OPTIMAL@. vkOptimalTilingFeatures :: VkFormatFeatureFlags , -- | @bufferFeatures@ is a bitmask of 'VkFormatFeatureFlagBits' specifying -- features supported by buffers. vkBufferFeatures :: VkFormatFeatureFlags } deriving (Eq, Show) instance Storable VkFormatProperties where sizeOf ~_ = 12 alignment ~_ = 4 peek ptr = VkFormatProperties <$> peek (ptr `plusPtr` 0) <*> peek (ptr `plusPtr` 4) <*> peek (ptr `plusPtr` 8) poke ptr poked = poke (ptr `plusPtr` 0) (vkLinearTilingFeatures (poked :: VkFormatProperties)) *> poke (ptr `plusPtr` 4) (vkOptimalTilingFeatures (poked :: VkFormatProperties)) *> poke (ptr `plusPtr` 8) (vkBufferFeatures (poked :: VkFormatProperties)) -- | VkImageFormatProperties - Structure specifying a image format properties -- -- = Members -- -- - @maxExtent@ are the maximum image dimensions. See the [Allowed -- Extent -- Values](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-extentperimagetype) -- section below for how these values are constrained by @type@. -- -- - @maxMipLevels@ is the maximum number of mipmap levels. -- @maxMipLevels@ /must/ be equal to ⌈log2(max(@width@, @height@, -- @depth@))⌉ + 1, where @width@, @height@, and @depth@ are taken from -- the corresponding members of @maxExtent@, except when one of the -- following conditions is true, in which case it /may/ instead be @1@: -- -- - @vkGetPhysicalDeviceImageFormatProperties@::@tiling@ was -- @VK_IMAGE_TILING_LINEAR@ -- -- - the -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.VkPhysicalDeviceImageFormatInfo2'::@pNext@ -- chain included an instance of -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_memory_capabilities.VkPhysicalDeviceExternalImageFormatInfo' -- with a handle type included in the @handleTypes@ member for -- which mipmap image support is not required -- -- - @maxArrayLayers@ is the maximum number of array layers. -- @maxArrayLayers@ /must/ either be equal to 1 or be greater than or -- equal to the @maxImageArrayLayers@ member of -- 'VkPhysicalDeviceLimits'. A value of 1 is valid only if @tiling@ is -- @VK_IMAGE_TILING_LINEAR@ or if @type@ is @VK_IMAGE_TYPE_3D@. -- -- - @sampleCounts@ is a bitmask of 'VkSampleCountFlagBits' specifying -- all the supported sample counts for this image as described -- [below](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-supported-sample-counts). -- -- - @maxResourceSize@ is an upper bound on the total image size in -- bytes, inclusive of all image subresources. Implementations /may/ -- have an address space limit on total size of a resource, which is -- advertised by this property. @maxResourceSize@ /must/ be at least -- 231. -- -- = Description -- -- __Note__ -- -- There is no mechanism to query the size of an image before creating it, -- to compare that size against @maxResourceSize@. If an application -- attempts to create an image that exceeds this limit, the creation will -- fail and 'Graphics.Vulkan.Core10.Image.vkCreateImage' will return -- @VK_ERROR_OUT_OF_DEVICE_MEMORY@. While the advertised limit /must/ be at -- least 231, it /may/ not be possible to create an image that approaches -- that size, particularly for @VK_IMAGE_TYPE_1D@. -- -- If the combination of parameters to -- @vkGetPhysicalDeviceImageFormatProperties@ is not supported by the -- implementation for use in 'Graphics.Vulkan.Core10.Image.vkCreateImage', -- then all members of @VkImageFormatProperties@ will be filled with zero. -- -- __Note__ -- -- Filling @VkImageFormatProperties@ with zero for unsupported formats is -- an exception to the usual rule that output structures have undefined -- contents on error. This exception was unintentional, but is preserved -- for backwards compatibility. -- -- = See Also -- -- @VkDeviceSize@, 'VkExtent3D', -- 'Graphics.Vulkan.Extensions.VK_NV_external_memory_capabilities.VkExternalImageFormatPropertiesNV', -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.VkImageFormatProperties2', -- 'VkSampleCountFlags', 'vkGetPhysicalDeviceImageFormatProperties' data VkImageFormatProperties = VkImageFormatProperties { -- No documentation found for Nested "VkImageFormatProperties" "maxExtent" vkMaxExtent :: VkExtent3D , -- No documentation found for Nested "VkImageFormatProperties" "maxMipLevels" vkMaxMipLevels :: Word32 , -- No documentation found for Nested "VkImageFormatProperties" "maxArrayLayers" vkMaxArrayLayers :: Word32 , -- No documentation found for Nested "VkImageFormatProperties" "sampleCounts" vkSampleCounts :: VkSampleCountFlags , -- No documentation found for Nested "VkImageFormatProperties" "maxResourceSize" vkMaxResourceSize :: VkDeviceSize } deriving (Eq, Show) instance Storable VkImageFormatProperties where sizeOf ~_ = 32 alignment ~_ = 8 peek ptr = VkImageFormatProperties <$> peek (ptr `plusPtr` 0) <*> peek (ptr `plusPtr` 12) <*> peek (ptr `plusPtr` 16) <*> peek (ptr `plusPtr` 20) <*> peek (ptr `plusPtr` 24) poke ptr poked = poke (ptr `plusPtr` 0) (vkMaxExtent (poked :: VkImageFormatProperties)) *> poke (ptr `plusPtr` 12) (vkMaxMipLevels (poked :: VkImageFormatProperties)) *> poke (ptr `plusPtr` 16) (vkMaxArrayLayers (poked :: VkImageFormatProperties)) *> poke (ptr `plusPtr` 20) (vkSampleCounts (poked :: VkImageFormatProperties)) *> poke (ptr `plusPtr` 24) (vkMaxResourceSize (poked :: VkImageFormatProperties)) -- | VkPhysicalDeviceFeatures - Structure describing the fine-grained -- features that can be supported by an implementation -- -- = Members -- -- The members of the @VkPhysicalDeviceFeatures@ structure describe the -- following features: -- -- = Description -- -- - @robustBufferAccess@ specifies that accesses to buffers are -- bounds-checked against the range of the buffer descriptor (as -- determined by @VkDescriptorBufferInfo@::@range@, -- @VkBufferViewCreateInfo@::@range@, or the size of the buffer). Out -- of bounds accesses /must/ not cause application termination, and the -- effects of shader loads, stores, and atomics /must/ conform to an -- implementation-dependent behavior as described below. -- -- - A buffer access is considered to be out of bounds if any of the -- following are true: -- -- - The pointer was formed by @OpImageTexelPointer@ and the -- coordinate is less than zero or greater than or equal to the -- number of whole elements in the bound range. -- -- - The pointer was not formed by @OpImageTexelPointer@ and the -- object pointed to is not wholly contained within the bound -- range. This includes accesses performed via /variable -- pointers/ where the buffer descriptor being accessed cannot -- be statically determined. Uninitialized pointers and -- pointers equal to @OpConstantNull@ are treated as pointing -- to a zero-sized object, so all accesses through such -- pointers are considered to be out of bounds. -- -- __Note__ -- -- If a SPIR-V @OpLoad@ instruction loads a structure and the -- tail end of the structure is out of bounds, then all members -- of the structure are considered out of bounds even if the -- members at the end are not statically used. -- -- - If any buffer access in a given SPIR-V block is determined -- to be out of bounds, then any other access of the same type -- (load, store, or atomic) in the same SPIR-V block that -- accesses an address less than 16 bytes away from the out of -- bounds address /may/ also be considered out of bounds. -- -- - Out-of-bounds buffer loads will return any of the following -- values: -- -- - Values from anywhere within the memory range(s) bound to the -- buffer (possibly including bytes of memory past the end of -- the buffer, up to the end of the bound range). -- -- - Zero values, or (0,0,0,x) vectors for vector reads where x -- is a valid value represented in the type of the vector -- components and /may/ be any of: -- -- - 0, 1, or the maximum representable positive integer -- value, for signed or unsigned integer components -- -- - 0.0 or 1.0, for floating-point components -- -- - Out-of-bounds writes /may/ modify values within the memory -- range(s) bound to the buffer, but /must/ not modify any other -- memory. -- -- - Out-of-bounds atomics /may/ modify values within the memory -- range(s) bound to the buffer, but /must/ not modify any other -- memory, and return an undefined value. -- -- - Vertex input attributes are considered out of bounds if the -- offset of the attribute in the bound vertex buffer range plus -- the size of the attribute is greater than either: -- -- - @vertexBufferRangeSize@, if @bindingStride@ == 0; or -- -- - (@vertexBufferRangeSize@ - (@vertexBufferRangeSize@ % -- @bindingStride@)) -- -- where @vertexBufferRangeSize@ is the byte size of the memory -- range bound to the vertex buffer binding and @bindingStride@ is -- the byte stride of the corresponding vertex input binding. -- Further, if any vertex input attribute using a specific vertex -- input binding is out of bounds, then all vertex input attributes -- using that vertex input binding for that vertex shader -- invocation are considered out of bounds. -- -- - If a vertex input attribute is out of bounds, it will be -- assigned one of the following values: -- -- - Values from anywhere within the memory range(s) bound to -- the buffer, converted according to the format of the -- attribute. -- -- - Zero values, format converted according to the format of -- the attribute. -- -- - Zero values, or (0,0,0,x) vectors, as described above. -- -- - If @robustBufferAccess@ is not enabled, out of bounds accesses -- /may/ corrupt any memory within the process and cause undefined -- behavior up to and including application termination. -- -- - @fullDrawIndexUint32@ specifies the full 32-bit range of indices is -- supported for indexed draw calls when using a -- 'Graphics.Vulkan.Core10.CommandBufferBuilding.VkIndexType' of -- @VK_INDEX_TYPE_UINT32@. @maxDrawIndexedIndexValue@ is the maximum -- index value that /may/ be used (aside from the primitive restart -- index, which is always 232-1 when the -- 'Graphics.Vulkan.Core10.CommandBufferBuilding.VkIndexType' is -- @VK_INDEX_TYPE_UINT32@). If this feature is supported, -- @maxDrawIndexedIndexValue@ /must/ be 232-1; otherwise it /must/ be -- no smaller than 224-1. See -- [maxDrawIndexedIndexValue](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-limits-maxDrawIndexedIndexValue). -- -- - @imageCubeArray@ specifies whether image views with a -- 'Graphics.Vulkan.Core10.ImageView.VkImageViewType' of -- @VK_IMAGE_VIEW_TYPE_CUBE_ARRAY@ /can/ be created, and that the -- corresponding @SampledCubeArray@ and @ImageCubeArray@ SPIR-V -- capabilities /can/ be used in shader code. -- -- - @independentBlend@ specifies whether the -- @VkPipelineColorBlendAttachmentState@ settings are controlled -- independently per-attachment. If this feature is not enabled, the -- @VkPipelineColorBlendAttachmentState@ settings for all color -- attachments /must/ be identical. Otherwise, a different -- @VkPipelineColorBlendAttachmentState@ /can/ be provided for each -- bound color attachment. -- -- - @geometryShader@ specifies whether geometry shaders are supported. -- If this feature is not enabled, the @VK_SHADER_STAGE_GEOMETRY_BIT@ -- and @VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT@ enum values /must/ not -- be used. This also specifies whether shader modules /can/ declare -- the @Geometry@ capability. -- -- - @tessellationShader@ specifies whether tessellation control and -- evaluation shaders are supported. If this feature is not enabled, -- the @VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT@, -- @VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT@, -- @VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT@, -- @VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT@, and -- @VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO@ enum -- values /must/ not be used. This also specifies whether shader -- modules /can/ declare the @Tessellation@ capability. -- -- - @sampleRateShading@ specifies whether [Sample -- Shading](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#primsrast-sampleshading) -- and multisample interpolation are supported. If this feature is not -- enabled, the @sampleShadingEnable@ member of the -- @VkPipelineMultisampleStateCreateInfo@ structure /must/ be set to -- @VK_FALSE@ and the @minSampleShading@ member is ignored. This also -- specifies whether shader modules /can/ declare the -- @SampleRateShading@ capability. -- -- - @dualSrcBlend@ specifies whether blend operations which take two -- sources are supported. If this feature is not enabled, the -- @VK_BLEND_FACTOR_SRC1_COLOR@, -- @VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR@, -- @VK_BLEND_FACTOR_SRC1_ALPHA@, and -- @VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA@ enum values /must/ not be -- used as source or destination blending factors. See -- [{html_spec_relative}#framebuffer-dsb](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#framebuffer-dsb). -- -- - @logicOp@ specifies whether logic operations are supported. If this -- feature is not enabled, the @logicOpEnable@ member of the -- @VkPipelineColorBlendStateCreateInfo@ structure /must/ be set to -- @VK_FALSE@, and the @logicOp@ member is ignored. -- -- - @multiDrawIndirect@ specifies whether multiple draw indirect is -- supported. If this feature is not enabled, the @drawCount@ parameter -- to the @vkCmdDrawIndirect@ and @vkCmdDrawIndexedIndirect@ commands -- /must/ be 0 or 1. The @maxDrawIndirectCount@ member of the -- @VkPhysicalDeviceLimits@ structure /must/ also be 1 if this feature -- is not supported. See -- [maxDrawIndirectCount](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-limits-maxDrawIndirectCount). -- -- - @drawIndirectFirstInstance@ specifies whether indirect draw calls -- support the @firstInstance@ parameter. If this feature is not -- enabled, the @firstInstance@ member of all @VkDrawIndirectCommand@ -- and @VkDrawIndexedIndirectCommand@ structures that are provided to -- the @vkCmdDrawIndirect@ and @vkCmdDrawIndexedIndirect@ commands -- /must/ be 0. -- -- - @depthClamp@ specifies whether depth clamping is supported. If this -- feature is not enabled, the @depthClampEnable@ member of the -- @VkPipelineRasterizationStateCreateInfo@ structure /must/ be set to -- @VK_FALSE@. Otherwise, setting @depthClampEnable@ to @VK_TRUE@ will -- enable depth clamping. -- -- - @depthBiasClamp@ specifies whether depth bias clamping is supported. -- If this feature is not enabled, the @depthBiasClamp@ member of the -- @VkPipelineRasterizationStateCreateInfo@ structure /must/ be set to -- 0.0 unless the @VK_DYNAMIC_STATE_DEPTH_BIAS@ dynamic state is -- enabled, and the @depthBiasClamp@ parameter to @vkCmdSetDepthBias@ -- /must/ be set to 0.0. -- -- - @fillModeNonSolid@ specifies whether point and wireframe fill modes -- are supported. If this feature is not enabled, the -- @VK_POLYGON_MODE_POINT@ and @VK_POLYGON_MODE_LINE@ enum values -- /must/ not be used. -- -- - @depthBounds@ specifies whether depth bounds tests are supported. If -- this feature is not enabled, the @depthBoundsTestEnable@ member of -- the @VkPipelineDepthStencilStateCreateInfo@ structure /must/ be set -- to @VK_FALSE@. When @depthBoundsTestEnable@ is set to @VK_FALSE@, -- the @minDepthBounds@ and @maxDepthBounds@ members of the -- @VkPipelineDepthStencilStateCreateInfo@ structure are ignored. -- -- - @wideLines@ specifies whether lines with width other than 1.0 are -- supported. If this feature is not enabled, the @lineWidth@ member of -- the @VkPipelineRasterizationStateCreateInfo@ structure /must/ be set -- to 1.0 unless the @VK_DYNAMIC_STATE_LINE_WIDTH@ dynamic state is -- enabled, and the @lineWidth@ parameter to @vkCmdSetLineWidth@ /must/ -- be set to 1.0. When this feature is supported, the range and -- granularity of supported line widths are indicated by the -- @lineWidthRange@ and @lineWidthGranularity@ members of the -- @VkPhysicalDeviceLimits@ structure, respectively. -- -- - @largePoints@ specifies whether points with size greater than 1.0 -- are supported. If this feature is not enabled, only a point size of -- 1.0 written by a shader is supported. The range and granularity of -- supported point sizes are indicated by the @pointSizeRange@ and -- @pointSizeGranularity@ members of the @VkPhysicalDeviceLimits@ -- structure, respectively. -- -- - @alphaToOne@ specifies whether the implementation is able to replace -- the alpha value of the color fragment output from the fragment -- shader with the maximum representable alpha value for fixed-point -- colors or 1.0 for floating-point colors. If this feature is not -- enabled, then the @alphaToOneEnable@ member of the -- @VkPipelineMultisampleStateCreateInfo@ structure /must/ be set to -- @VK_FALSE@. Otherwise setting @alphaToOneEnable@ to @VK_TRUE@ will -- enable alpha-to-one behavior. -- -- - @multiViewport@ specifies whether more than one viewport is -- supported. If this feature is not enabled, the @viewportCount@ and -- @scissorCount@ members of the @VkPipelineViewportStateCreateInfo@ -- structure /must/ be set to 1. Similarly, the @viewportCount@ -- parameter to the @vkCmdSetViewport@ command and the @scissorCount@ -- parameter to the @vkCmdSetScissor@ command /must/ be 1, and the -- @firstViewport@ parameter to the @vkCmdSetViewport@ command and the -- @firstScissor@ parameter to the @vkCmdSetScissor@ command /must/ be -- 0. -- -- - @samplerAnisotropy@ specifies whether anisotropic filtering is -- supported. If this feature is not enabled, the @anisotropyEnable@ -- member of the @VkSamplerCreateInfo@ structure /must/ be @VK_FALSE@. -- -- - @textureCompressionETC2@ specifies whether all of the ETC2 and EAC -- compressed texture formats are supported. If this feature is -- enabled, then the @VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT@, -- @VK_FORMAT_FEATURE_BLIT_SRC_BIT@ and -- @VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT@ features /must/ -- be supported in @optimalTilingFeatures@ for the following formats: -- -- - @VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK@ -- -- - @VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK@ -- -- - @VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK@ -- -- - @VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK@ -- -- - @VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK@ -- -- - @VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK@ -- -- - @VK_FORMAT_EAC_R11_UNORM_BLOCK@ -- -- - @VK_FORMAT_EAC_R11_SNORM_BLOCK@ -- -- - @VK_FORMAT_EAC_R11G11_UNORM_BLOCK@ -- -- - @VK_FORMAT_EAC_R11G11_SNORM_BLOCK@ -- -- 'vkGetPhysicalDeviceFormatProperties' and -- 'vkGetPhysicalDeviceImageFormatProperties' /can/ be used to check -- for additional supported properties of individual formats. -- -- - @textureCompressionASTC_LDR@ specifies whether all of the ASTC LDR -- compressed texture formats are supported. If this feature is -- enabled, then the @VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT@, -- @VK_FORMAT_FEATURE_BLIT_SRC_BIT@ and -- @VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT@ features /must/ -- be supported in @optimalTilingFeatures@ for the following formats: -- -- - @VK_FORMAT_ASTC_4x4_UNORM_BLOCK@ -- -- - @VK_FORMAT_ASTC_4x4_SRGB_BLOCK@ -- -- - @VK_FORMAT_ASTC_5x4_UNORM_BLOCK@ -- -- - @VK_FORMAT_ASTC_5x4_SRGB_BLOCK@ -- -- - @VK_FORMAT_ASTC_5x5_UNORM_BLOCK@ -- -- - @VK_FORMAT_ASTC_5x5_SRGB_BLOCK@ -- -- - @VK_FORMAT_ASTC_6x5_UNORM_BLOCK@ -- -- - @VK_FORMAT_ASTC_6x5_SRGB_BLOCK@ -- -- - @VK_FORMAT_ASTC_6x6_UNORM_BLOCK@ -- -- - @VK_FORMAT_ASTC_6x6_SRGB_BLOCK@ -- -- - @VK_FORMAT_ASTC_8x5_UNORM_BLOCK@ -- -- - @VK_FORMAT_ASTC_8x5_SRGB_BLOCK@ -- -- - @VK_FORMAT_ASTC_8x6_UNORM_BLOCK@ -- -- - @VK_FORMAT_ASTC_8x6_SRGB_BLOCK@ -- -- - @VK_FORMAT_ASTC_8x8_UNORM_BLOCK@ -- -- - @VK_FORMAT_ASTC_8x8_SRGB_BLOCK@ -- -- - @VK_FORMAT_ASTC_10x5_UNORM_BLOCK@ -- -- - @VK_FORMAT_ASTC_10x5_SRGB_BLOCK@ -- -- - @VK_FORMAT_ASTC_10x6_UNORM_BLOCK@ -- -- - @VK_FORMAT_ASTC_10x6_SRGB_BLOCK@ -- -- - @VK_FORMAT_ASTC_10x8_UNORM_BLOCK@ -- -- - @VK_FORMAT_ASTC_10x8_SRGB_BLOCK@ -- -- - @VK_FORMAT_ASTC_10x10_UNORM_BLOCK@ -- -- - @VK_FORMAT_ASTC_10x10_SRGB_BLOCK@ -- -- - @VK_FORMAT_ASTC_12x10_UNORM_BLOCK@ -- -- - @VK_FORMAT_ASTC_12x10_SRGB_BLOCK@ -- -- - @VK_FORMAT_ASTC_12x12_UNORM_BLOCK@ -- -- - @VK_FORMAT_ASTC_12x12_SRGB_BLOCK@ -- -- 'vkGetPhysicalDeviceFormatProperties' and -- 'vkGetPhysicalDeviceImageFormatProperties' /can/ be used to check -- for additional supported properties of individual formats. -- -- - @textureCompressionBC@ specifies whether all of the BC compressed -- texture formats are supported. If this feature is enabled, then the -- @VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT@, -- @VK_FORMAT_FEATURE_BLIT_SRC_BIT@ and -- @VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT@ features /must/ -- be supported in @optimalTilingFeatures@ for the following formats: -- -- - @VK_FORMAT_BC1_RGB_UNORM_BLOCK@ -- -- - @VK_FORMAT_BC1_RGB_SRGB_BLOCK@ -- -- - @VK_FORMAT_BC1_RGBA_UNORM_BLOCK@ -- -- - @VK_FORMAT_BC1_RGBA_SRGB_BLOCK@ -- -- - @VK_FORMAT_BC2_UNORM_BLOCK@ -- -- - @VK_FORMAT_BC2_SRGB_BLOCK@ -- -- - @VK_FORMAT_BC3_UNORM_BLOCK@ -- -- - @VK_FORMAT_BC3_SRGB_BLOCK@ -- -- - @VK_FORMAT_BC4_UNORM_BLOCK@ -- -- - @VK_FORMAT_BC4_SNORM_BLOCK@ -- -- - @VK_FORMAT_BC5_UNORM_BLOCK@ -- -- - @VK_FORMAT_BC5_SNORM_BLOCK@ -- -- - @VK_FORMAT_BC6H_UFLOAT_BLOCK@ -- -- - @VK_FORMAT_BC6H_SFLOAT_BLOCK@ -- -- - @VK_FORMAT_BC7_UNORM_BLOCK@ -- -- - @VK_FORMAT_BC7_SRGB_BLOCK@ -- -- 'vkGetPhysicalDeviceFormatProperties' and -- 'vkGetPhysicalDeviceImageFormatProperties' /can/ be used to check -- for additional supported properties of individual formats. -- -- - @occlusionQueryPrecise@ specifies whether occlusion queries -- returning actual sample counts are supported. Occlusion queries are -- created in a @VkQueryPool@ by specifying the @queryType@ of -- @VK_QUERY_TYPE_OCCLUSION@ in the @VkQueryPoolCreateInfo@ structure -- which is passed to @vkCreateQueryPool@. If this feature is enabled, -- queries of this type /can/ enable @VK_QUERY_CONTROL_PRECISE_BIT@ in -- the @flags@ parameter to @vkCmdBeginQuery@. If this feature is not -- supported, the implementation supports only boolean occlusion -- queries. When any samples are passed, boolean queries will return a -- non-zero result value, otherwise a result value of zero is returned. -- When this feature is enabled and @VK_QUERY_CONTROL_PRECISE_BIT@ is -- set, occlusion queries will report the actual number of samples -- passed. -- -- - @pipelineStatisticsQuery@ specifies whether the pipeline statistics -- queries are supported. If this feature is not enabled, queries of -- type @VK_QUERY_TYPE_PIPELINE_STATISTICS@ /cannot/ be created, and -- none of the -- 'Graphics.Vulkan.Core10.Query.VkQueryPipelineStatisticFlagBits' bits -- /can/ be set in the @pipelineStatistics@ member of the -- @VkQueryPoolCreateInfo@ structure. -- -- - @vertexPipelineStoresAndAtomics@ specifies whether storage buffers -- and images support stores and atomic operations in the vertex, -- tessellation, and geometry shader stages. If this feature is not -- enabled, all storage image, storage texel buffers, and storage -- buffer variables used by these stages in shader modules /must/ be -- decorated with the @NonWriteable@ decoration (or the @readonly@ -- memory qualifier in GLSL). -- -- - @fragmentStoresAndAtomics@ specifies whether storage buffers and -- images support stores and atomic operations in the fragment shader -- stage. If this feature is not enabled, all storage image, storage -- texel buffers, and storage buffer variables used by the fragment -- stage in shader modules /must/ be decorated with the @NonWriteable@ -- decoration (or the @readonly@ memory qualifier in GLSL). -- -- - @shaderTessellationAndGeometryPointSize@ specifies whether the -- @PointSize@ built-in decoration is available in the tessellation -- control, tessellation evaluation, and geometry shader stages. If -- this feature is not enabled, members decorated with the @PointSize@ -- built-in decoration /must/ not be read from or written to and all -- points written from a tessellation or geometry shader will have a -- size of 1.0. This also specifies whether shader modules /can/ -- declare the @TessellationPointSize@ capability for tessellation -- control and evaluation shaders, or if the shader modules /can/ -- declare the @GeometryPointSize@ capability for geometry shaders. An -- implementation supporting this feature /must/ also support one or -- both of the -- [@tessellationShader@](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-tessellationShader) -- or -- [@geometryShader@](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-geometryShader) -- features. -- -- - @shaderImageGatherExtended@ specifies whether the extended set of -- image gather instructions are available in shader code. If this -- feature is not enabled, the @OpImage@*@Gather@ instructions do not -- support the @Offset@ and @ConstOffsets@ operands. This also -- specifies whether shader modules /can/ declare the -- @ImageGatherExtended@ capability. -- -- - @shaderStorageImageExtendedFormats@ specifies whether the extended -- storage image formats are available in shader code. If this feature -- is not enabled, the formats requiring the -- @StorageImageExtendedFormats@ capability are not supported for -- storage images. This also specifies whether shader modules /can/ -- declare the @StorageImageExtendedFormats@ capability. -- -- - @shaderStorageImageMultisample@ specifies whether multisampled -- storage images are supported. If this feature is not enabled, images -- that are created with a @usage@ that includes -- @VK_IMAGE_USAGE_STORAGE_BIT@ /must/ be created with @samples@ equal -- to @VK_SAMPLE_COUNT_1_BIT@. This also specifies whether shader -- modules /can/ declare the @StorageImageMultisample@ capability. -- -- - @shaderStorageImageReadWithoutFormat@ specifies whether storage -- images require a format qualifier to be specified when reading from -- storage images. If this feature is not enabled, the @OpImageRead@ -- instruction /must/ not have an @OpTypeImage@ of @Unknown@. This also -- specifies whether shader modules /can/ declare the -- @StorageImageReadWithoutFormat@ capability. -- -- - @shaderStorageImageWriteWithoutFormat@ specifies whether storage -- images require a format qualifier to be specified when writing to -- storage images. If this feature is not enabled, the @OpImageWrite@ -- instruction /must/ not have an @OpTypeImage@ of @Unknown@. This also -- specifies whether shader modules /can/ declare the -- @StorageImageWriteWithoutFormat@ capability. -- -- - @shaderUniformBufferArrayDynamicIndexing@ specifies whether arrays -- of uniform buffers /can/ be indexed by /dynamically uniform/ integer -- expressions in shader code. If this feature is not enabled, -- resources with a descriptor type of -- @VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER@ or -- @VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC@ /must/ be indexed only -- by constant integral expressions when aggregated into arrays in -- shader code. This also specifies whether shader modules /can/ -- declare the @UniformBufferArrayDynamicIndexing@ capability. -- -- - @shaderSampledImageArrayDynamicIndexing@ specifies whether arrays of -- samplers or sampled images /can/ be indexed by dynamically uniform -- integer expressions in shader code. If this feature is not enabled, -- resources with a descriptor type of @VK_DESCRIPTOR_TYPE_SAMPLER@, -- @VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER@, or -- @VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE@ /must/ be indexed only by -- constant integral expressions when aggregated into arrays in shader -- code. This also specifies whether shader modules /can/ declare the -- @SampledImageArrayDynamicIndexing@ capability. -- -- - @shaderStorageBufferArrayDynamicIndexing@ specifies whether arrays -- of storage buffers /can/ be indexed by dynamically uniform integer -- expressions in shader code. If this feature is not enabled, -- resources with a descriptor type of -- @VK_DESCRIPTOR_TYPE_STORAGE_BUFFER@ or -- @VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC@ /must/ be indexed only -- by constant integral expressions when aggregated into arrays in -- shader code. This also specifies whether shader modules /can/ -- declare the @StorageBufferArrayDynamicIndexing@ capability. -- -- - @shaderStorageImageArrayDynamicIndexing@ specifies whether arrays of -- storage images /can/ be indexed by dynamically uniform integer -- expressions in shader code. If this feature is not enabled, -- resources with a descriptor type of -- @VK_DESCRIPTOR_TYPE_STORAGE_IMAGE@ /must/ be indexed only by -- constant integral expressions when aggregated into arrays in shader -- code. This also specifies whether shader modules /can/ declare the -- @StorageImageArrayDynamicIndexing@ capability. -- -- - @shaderClipDistance@ specifies whether clip distances are supported -- in shader code. If this feature is not enabled, any members -- decorated with the @ClipDistance@ built-in decoration /must/ not be -- read from or written to in shader modules. This also specifies -- whether shader modules /can/ declare the @ClipDistance@ capability. -- -- - @shaderCullDistance@ specifies whether cull distances are supported -- in shader code. If this feature is not enabled, any members -- decorated with the @CullDistance@ built-in decoration /must/ not be -- read from or written to in shader modules. This also specifies -- whether shader modules /can/ declare the @CullDistance@ capability. -- -- - @shaderFloat64@ specifies whether 64-bit floats (doubles) are -- supported in shader code. If this feature is not enabled, 64-bit -- floating-point types /must/ not be used in shader code. This also -- specifies whether shader modules /can/ declare the @Float64@ -- capability. -- -- - @shaderInt64@ specifies whether 64-bit integers (signed and -- unsigned) are supported in shader code. If this feature is not -- enabled, 64-bit integer types /must/ not be used in shader code. -- This also specifies whether shader modules /can/ declare the @Int64@ -- capability. -- -- - @shaderInt16@ specifies whether 16-bit integers (signed and -- unsigned) are supported in shader code. If this feature is not -- enabled, 16-bit integer types /must/ not be used in shader code. -- This also specifies whether shader modules /can/ declare the @Int16@ -- capability. -- -- - @shaderResourceResidency@ specifies whether image operations that -- return resource residency information are supported in shader code. -- If this feature is not enabled, the @OpImageSparse@* instructions -- /must/ not be used in shader code. This also specifies whether -- shader modules /can/ declare the @SparseResidency@ capability. The -- feature requires at least one of the @sparseResidency*@ features to -- be supported. -- -- - @shaderResourceMinLod@ specifies whether image operations that -- specify the minimum resource LOD are supported in shader code. If -- this feature is not enabled, the @MinLod@ image operand /must/ not -- be used in shader code. This also specifies whether shader modules -- /can/ declare the @MinLod@ capability. -- -- - @sparseBinding@ specifies whether resource memory /can/ be managed -- at opaque sparse block level instead of at the object level. If this -- feature is not enabled, resource memory /must/ be bound only on a -- per-object basis using the @vkBindBufferMemory@ and -- @vkBindImageMemory@ commands. In this case, buffers and images -- /must/ not be created with @VK_BUFFER_CREATE_SPARSE_BINDING_BIT@ and -- @VK_IMAGE_CREATE_SPARSE_BINDING_BIT@ set in the @flags@ member of -- the @VkBufferCreateInfo@ and @VkImageCreateInfo@ structures, -- respectively. Otherwise resource memory /can/ be managed as -- described in [Sparse Resource -- Features](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#sparsememory-sparseresourcefeatures). -- -- - @sparseResidencyBuffer@ specifies whether the device /can/ access -- partially resident buffers. If this feature is not enabled, buffers -- /must/ not be created with @VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT@ -- set in the @flags@ member of the @VkBufferCreateInfo@ structure. -- -- - @sparseResidencyImage2D@ specifies whether the device /can/ access -- partially resident 2D images with 1 sample per pixel. If this -- feature is not enabled, images with an @imageType@ of -- @VK_IMAGE_TYPE_2D@ and @samples@ set to @VK_SAMPLE_COUNT_1_BIT@ -- /must/ not be created with @VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT@ -- set in the @flags@ member of the @VkImageCreateInfo@ structure. -- -- - @sparseResidencyImage3D@ specifies whether the device /can/ access -- partially resident 3D images. If this feature is not enabled, images -- with an @imageType@ of @VK_IMAGE_TYPE_3D@ /must/ not be created with -- @VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT@ set in the @flags@ member of -- the @VkImageCreateInfo@ structure. -- -- - @sparseResidency2Samples@ specifies whether the physical device -- /can/ access partially resident 2D images with 2 samples per pixel. -- If this feature is not enabled, images with an @imageType@ of -- @VK_IMAGE_TYPE_2D@ and @samples@ set to @VK_SAMPLE_COUNT_2_BIT@ -- /must/ not be created with @VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT@ -- set in the @flags@ member of the @VkImageCreateInfo@ structure. -- -- - @sparseResidency4Samples@ specifies whether the physical device -- /can/ access partially resident 2D images with 4 samples per pixel. -- If this feature is not enabled, images with an @imageType@ of -- @VK_IMAGE_TYPE_2D@ and @samples@ set to @VK_SAMPLE_COUNT_4_BIT@ -- /must/ not be created with @VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT@ -- set in the @flags@ member of the @VkImageCreateInfo@ structure. -- -- - @sparseResidency8Samples@ specifies whether the physical device -- /can/ access partially resident 2D images with 8 samples per pixel. -- If this feature is not enabled, images with an @imageType@ of -- @VK_IMAGE_TYPE_2D@ and @samples@ set to @VK_SAMPLE_COUNT_8_BIT@ -- /must/ not be created with @VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT@ -- set in the @flags@ member of the @VkImageCreateInfo@ structure. -- -- - @sparseResidency16Samples@ specifies whether the physical device -- /can/ access partially resident 2D images with 16 samples per pixel. -- If this feature is not enabled, images with an @imageType@ of -- @VK_IMAGE_TYPE_2D@ and @samples@ set to @VK_SAMPLE_COUNT_16_BIT@ -- /must/ not be created with @VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT@ -- set in the @flags@ member of the @VkImageCreateInfo@ structure. -- -- - @sparseResidencyAliased@ specifies whether the physical device /can/ -- correctly access data aliased into multiple locations. If this -- feature is not enabled, the @VK_BUFFER_CREATE_SPARSE_ALIASED_BIT@ -- and @VK_IMAGE_CREATE_SPARSE_ALIASED_BIT@ enum values /must/ not be -- used in @flags@ members of the @VkBufferCreateInfo@ and -- @VkImageCreateInfo@ structures, respectively. -- -- - @variableMultisampleRate@ specifies whether all pipelines that will -- be bound to a command buffer during a subpass with no attachments -- /must/ have the same value for -- @VkPipelineMultisampleStateCreateInfo@::@rasterizationSamples@. If -- set to @VK_TRUE@, the implementation supports variable multisample -- rates in a subpass with no attachments. If set to @VK_FALSE@, then -- all pipelines bound in such a subpass /must/ have the same -- multisample rate. This has no effect in situations where a subpass -- uses any attachments. -- -- - @inheritedQueries@ specifies whether a secondary command buffer -- /may/ be executed while a query is active. -- -- = See Also -- -- @VkBool32@, 'Graphics.Vulkan.Core10.Device.VkDeviceCreateInfo', -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.VkPhysicalDeviceFeatures2', -- 'vkGetPhysicalDeviceFeatures' data VkPhysicalDeviceFeatures = VkPhysicalDeviceFeatures { -- No documentation found for Nested "VkPhysicalDeviceFeatures" "robustBufferAccess" vkRobustBufferAccess :: VkBool32 , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "fullDrawIndexUint32" vkFullDrawIndexUint32 :: VkBool32 , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "imageCubeArray" vkImageCubeArray :: VkBool32 , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "independentBlend" vkIndependentBlend :: VkBool32 , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "geometryShader" vkGeometryShader :: VkBool32 , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "tessellationShader" vkTessellationShader :: VkBool32 , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "sampleRateShading" vkSampleRateShading :: VkBool32 , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "dualSrcBlend" vkDualSrcBlend :: VkBool32 , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "logicOp" vkLogicOp :: VkBool32 , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "multiDrawIndirect" vkMultiDrawIndirect :: VkBool32 , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "drawIndirectFirstInstance" vkDrawIndirectFirstInstance :: VkBool32 , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "depthClamp" vkDepthClamp :: VkBool32 , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "depthBiasClamp" vkDepthBiasClamp :: VkBool32 , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "fillModeNonSolid" vkFillModeNonSolid :: VkBool32 , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "depthBounds" vkDepthBounds :: VkBool32 , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "wideLines" vkWideLines :: VkBool32 , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "largePoints" vkLargePoints :: VkBool32 , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "alphaToOne" vkAlphaToOne :: VkBool32 , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "multiViewport" vkMultiViewport :: VkBool32 , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "samplerAnisotropy" vkSamplerAnisotropy :: VkBool32 , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "textureCompressionETC2" vkTextureCompressionETC2 :: VkBool32 , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "textureCompressionASTC_LDR" vkTextureCompressionASTC_LDR :: VkBool32 , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "textureCompressionBC" vkTextureCompressionBC :: VkBool32 , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "occlusionQueryPrecise" vkOcclusionQueryPrecise :: VkBool32 , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "pipelineStatisticsQuery" vkPipelineStatisticsQuery :: VkBool32 , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "vertexPipelineStoresAndAtomics" vkVertexPipelineStoresAndAtomics :: VkBool32 , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "fragmentStoresAndAtomics" vkFragmentStoresAndAtomics :: VkBool32 , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "shaderTessellationAndGeometryPointSize" vkShaderTessellationAndGeometryPointSize :: VkBool32 , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "shaderImageGatherExtended" vkShaderImageGatherExtended :: VkBool32 , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "shaderStorageImageExtendedFormats" vkShaderStorageImageExtendedFormats :: VkBool32 , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "shaderStorageImageMultisample" vkShaderStorageImageMultisample :: VkBool32 , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "shaderStorageImageReadWithoutFormat" vkShaderStorageImageReadWithoutFormat :: VkBool32 , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "shaderStorageImageWriteWithoutFormat" vkShaderStorageImageWriteWithoutFormat :: VkBool32 , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "shaderUniformBufferArrayDynamicIndexing" vkShaderUniformBufferArrayDynamicIndexing :: VkBool32 , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "shaderSampledImageArrayDynamicIndexing" vkShaderSampledImageArrayDynamicIndexing :: VkBool32 , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "shaderStorageBufferArrayDynamicIndexing" vkShaderStorageBufferArrayDynamicIndexing :: VkBool32 , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "shaderStorageImageArrayDynamicIndexing" vkShaderStorageImageArrayDynamicIndexing :: VkBool32 , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "shaderClipDistance" vkShaderClipDistance :: VkBool32 , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "shaderCullDistance" vkShaderCullDistance :: VkBool32 , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "shaderFloat64" vkShaderFloat64 :: VkBool32 , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "shaderInt64" vkShaderInt64 :: VkBool32 , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "shaderInt16" vkShaderInt16 :: VkBool32 , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "shaderResourceResidency" vkShaderResourceResidency :: VkBool32 , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "shaderResourceMinLod" vkShaderResourceMinLod :: VkBool32 , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "sparseBinding" vkSparseBinding :: VkBool32 , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "sparseResidencyBuffer" vkSparseResidencyBuffer :: VkBool32 , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "sparseResidencyImage2D" vkSparseResidencyImage2D :: VkBool32 , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "sparseResidencyImage3D" vkSparseResidencyImage3D :: VkBool32 , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "sparseResidency2Samples" vkSparseResidency2Samples :: VkBool32 , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "sparseResidency4Samples" vkSparseResidency4Samples :: VkBool32 , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "sparseResidency8Samples" vkSparseResidency8Samples :: VkBool32 , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "sparseResidency16Samples" vkSparseResidency16Samples :: VkBool32 , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "sparseResidencyAliased" vkSparseResidencyAliased :: VkBool32 , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "variableMultisampleRate" vkVariableMultisampleRate :: VkBool32 , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "inheritedQueries" vkInheritedQueries :: VkBool32 } deriving (Eq, Show) 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) (vkFullDrawIndexUint32 (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) (vkTextureCompressionETC2 (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) (vkShaderFloat64 (poked :: VkPhysicalDeviceFeatures)) *> poke (ptr `plusPtr` 160) (vkShaderInt64 (poked :: VkPhysicalDeviceFeatures)) *> poke (ptr `plusPtr` 164) (vkShaderInt16 (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) (vkSparseResidencyImage2D (poked :: VkPhysicalDeviceFeatures)) *> poke (ptr `plusPtr` 188) (vkSparseResidencyImage3D (poked :: VkPhysicalDeviceFeatures)) *> poke (ptr `plusPtr` 192) (vkSparseResidency2Samples (poked :: VkPhysicalDeviceFeatures)) *> poke (ptr `plusPtr` 196) (vkSparseResidency4Samples (poked :: VkPhysicalDeviceFeatures)) *> poke (ptr `plusPtr` 200) (vkSparseResidency8Samples (poked :: VkPhysicalDeviceFeatures)) *> poke (ptr `plusPtr` 204) (vkSparseResidency16Samples (poked :: VkPhysicalDeviceFeatures)) *> poke (ptr `plusPtr` 208) (vkSparseResidencyAliased (poked :: VkPhysicalDeviceFeatures)) *> poke (ptr `plusPtr` 212) (vkVariableMultisampleRate (poked :: VkPhysicalDeviceFeatures)) *> poke (ptr `plusPtr` 216) (vkInheritedQueries (poked :: VkPhysicalDeviceFeatures)) -- | VkPhysicalDeviceSparseProperties - Structure specifying physical device -- sparse memory properties -- -- = See Also -- -- @VkBool32@, 'VkPhysicalDeviceProperties' data VkPhysicalDeviceSparseProperties = VkPhysicalDeviceSparseProperties { -- | @residencyStandard2DBlockShape@ is @VK_TRUE@ if the physical device will -- access all single-sample 2D sparse resources using the standard sparse -- image block shapes (based on image format), as described in the -- [Standard Sparse Image Block Shapes (Single -- Sample)](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#sparsememory-sparseblockshapessingle) -- table. If this property is not supported the value returned in the -- @imageGranularity@ member of the @VkSparseImageFormatProperties@ -- structure for single-sample 2D images is not /required/ to match the -- standard sparse image block dimensions listed in the table. vkResidencyStandard2DBlockShape :: VkBool32 , -- | @residencyStandard2DMultisampleBlockShape@ is @VK_TRUE@ if the physical -- device will access all multisample 2D sparse resources using the -- standard sparse image block shapes (based on image format), as described -- in the [Standard Sparse Image Block Shapes -- (MSAA)](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#sparsememory-sparseblockshapesmsaa) -- table. If this property is not supported, the value returned in the -- @imageGranularity@ member of the @VkSparseImageFormatProperties@ -- structure for multisample 2D images is not /required/ to match the -- standard sparse image block dimensions listed in the table. vkResidencyStandard2DMultisampleBlockShape :: VkBool32 , -- | @residencyStandard3DBlockShape@ is @VK_TRUE@ if the physical device will -- access all 3D sparse resources using the standard sparse image block -- shapes (based on image format), as described in the [Standard Sparse -- Image Block Shapes (Single -- Sample)](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#sparsememory-sparseblockshapessingle) -- table. If this property is not supported, the value returned in the -- @imageGranularity@ member of the @VkSparseImageFormatProperties@ -- structure for 3D images is not /required/ to match the standard sparse -- image block dimensions listed in the table. vkResidencyStandard3DBlockShape :: VkBool32 , -- | @residencyAlignedMipSize@ is @VK_TRUE@ if images with mip level -- dimensions that are not integer multiples of the corresponding -- dimensions of the sparse image block /may/ be placed in the mip tail. If -- this property is not reported, only mip levels with dimensions smaller -- than the @imageGranularity@ member of the -- @VkSparseImageFormatProperties@ structure will be placed in the mip -- tail. If this property is reported the implementation is allowed to -- return @VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT@ in the @flags@ -- member of @VkSparseImageFormatProperties@, indicating that mip level -- dimensions that are not integer multiples of the corresponding -- dimensions of the sparse image block will be placed in the mip tail. vkResidencyAlignedMipSize :: VkBool32 , -- | @residencyNonResidentStrict@ specifies whether the physical device /can/ -- consistently access non-resident regions of a resource. If this property -- is @VK_TRUE@, access to non-resident regions of resources will be -- guaranteed to return values as if the resource were populated with 0; -- writes to non-resident regions will be discarded. vkResidencyNonResidentStrict :: VkBool32 } deriving (Eq, Show) instance Storable VkPhysicalDeviceSparseProperties where sizeOf ~_ = 20 alignment ~_ = 4 peek ptr = VkPhysicalDeviceSparseProperties <$> peek (ptr `plusPtr` 0) <*> peek (ptr `plusPtr` 4) <*> peek (ptr `plusPtr` 8) <*> peek (ptr `plusPtr` 12) <*> peek (ptr `plusPtr` 16) poke ptr poked = poke (ptr `plusPtr` 0) (vkResidencyStandard2DBlockShape (poked :: VkPhysicalDeviceSparseProperties)) *> poke (ptr `plusPtr` 4) (vkResidencyStandard2DMultisampleBlockShape (poked :: VkPhysicalDeviceSparseProperties)) *> poke (ptr `plusPtr` 8) (vkResidencyStandard3DBlockShape (poked :: VkPhysicalDeviceSparseProperties)) *> poke (ptr `plusPtr` 12) (vkResidencyAlignedMipSize (poked :: VkPhysicalDeviceSparseProperties)) *> poke (ptr `plusPtr` 16) (vkResidencyNonResidentStrict (poked :: VkPhysicalDeviceSparseProperties)) -- | VkPhysicalDeviceLimits - Structure reporting implementation-dependent -- physical device limits -- -- = Members -- -- - @maxImageDimension1D@ is the maximum dimension (@width@) supported -- for all images created with an @imageType@ of @VK_IMAGE_TYPE_1D@. -- -- - @maxImageDimension2D@ is the maximum dimension (@width@ or @height@) -- supported for all images created with an @imageType@ of -- @VK_IMAGE_TYPE_2D@ and without @VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT@ -- set in @flags@. -- -- - @maxImageDimension3D@ is the maximum dimension (@width@, @height@, -- or @depth@) supported for all images created with an @imageType@ of -- @VK_IMAGE_TYPE_3D@. -- -- - @maxImageDimensionCube@ is the maximum dimension (@width@ or -- @height@) supported for all images created with an @imageType@ of -- @VK_IMAGE_TYPE_2D@ and with @VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT@ -- set in @flags@. -- -- - @maxImageArrayLayers@ is the maximum number of layers -- (@arrayLayers@) for an image. -- -- - @maxTexelBufferElements@ is the maximum number of addressable texels -- for a buffer view created on a buffer which was created with the -- @VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT@ or -- @VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT@ set in the @usage@ member -- of the @VkBufferCreateInfo@ structure. -- -- - @maxUniformBufferRange@ is the maximum value that /can/ be specified -- in the @range@ member of any -- 'Graphics.Vulkan.Core10.DescriptorSet.VkDescriptorBufferInfo' -- structures passed to a call to -- 'Graphics.Vulkan.Core10.DescriptorSet.vkUpdateDescriptorSets' for -- descriptors of type @VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER@ or -- @VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC@. -- -- - @maxStorageBufferRange@ is the maximum value that /can/ be specified -- in the @range@ member of any -- 'Graphics.Vulkan.Core10.DescriptorSet.VkDescriptorBufferInfo' -- structures passed to a call to -- 'Graphics.Vulkan.Core10.DescriptorSet.vkUpdateDescriptorSets' for -- descriptors of type @VK_DESCRIPTOR_TYPE_STORAGE_BUFFER@ or -- @VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC@. -- -- - @maxPushConstantsSize@ is the maximum size, in bytes, of the pool of -- push constant memory. For each of the push constant ranges indicated -- by the @pPushConstantRanges@ member of the -- @VkPipelineLayoutCreateInfo@ structure, (@offset@ + @size@) /must/ -- be less than or equal to this limit. -- -- - @maxMemoryAllocationCount@ is the maximum number of device memory -- allocations, as created by -- 'Graphics.Vulkan.Core10.Memory.vkAllocateMemory', which /can/ -- simultaneously exist. -- -- - @maxSamplerAllocationCount@ is the maximum number of sampler -- objects, as created by -- 'Graphics.Vulkan.Core10.Sampler.vkCreateSampler', which /can/ -- simultaneously exist on a device. -- -- - @bufferImageGranularity@ is the granularity, in bytes, at which -- buffer or linear image resources, and optimal image resources /can/ -- be bound to adjacent offsets in the same @VkDeviceMemory@ object -- without aliasing. See [Buffer-Image -- Granularity](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#resources-bufferimagegranularity) -- for more details. -- -- - @sparseAddressSpaceSize@ is the total amount of address space -- available, in bytes, for sparse memory resources. This is an upper -- bound on the sum of the size of all sparse resources, regardless of -- whether any memory is bound to them. -- -- - @maxBoundDescriptorSets@ is the maximum number of descriptor sets -- that /can/ be simultaneously used by a pipeline. All @DescriptorSet@ -- decorations in shader modules /must/ have a value less than -- @maxBoundDescriptorSets@. See -- [{html_spec_relative}#descriptorsets-sets](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-sets). -- -- - @maxPerStageDescriptorSamplers@ is the maximum number of samplers -- that /can/ be accessible to a single shader stage in a pipeline -- layout. Descriptors with a type of @VK_DESCRIPTOR_TYPE_SAMPLER@ or -- @VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER@ count against this -- limit. Only descriptors in descriptor set layouts created without -- the @VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT@ -- bit set count against this limit. A descriptor is accessible to a -- shader stage when the @stageFlags@ member of the -- @VkDescriptorSetLayoutBinding@ structure has the bit for that shader -- stage set. See -- [{html_spec_relative}#descriptorsets-sampler](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-sampler) -- and -- [{html_spec_relative}#descriptorsets-combinedimagesampler](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-combinedimagesampler). -- -- - @maxPerStageDescriptorUniformBuffers@ is the maximum number of -- uniform buffers that /can/ be accessible to a single shader stage in -- a pipeline layout. Descriptors with a type of -- @VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER@ or -- @VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC@ count against this -- limit. Only descriptors in descriptor set layouts created without -- the @VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT@ -- bit set count against this limit. A descriptor is accessible to a -- shader stage when the @stageFlags@ member of the -- @VkDescriptorSetLayoutBinding@ structure has the bit for that shader -- stage set. See -- [{html_spec_relative}#descriptorsets-uniformbuffer](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-uniformbuffer) -- and -- [{html_spec_relative}#descriptorsets-uniformbufferdynamic](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-uniformbufferdynamic). -- -- - @maxPerStageDescriptorStorageBuffers@ is the maximum number of -- storage buffers that /can/ be accessible to a single shader stage in -- a pipeline layout. Descriptors with a type of -- @VK_DESCRIPTOR_TYPE_STORAGE_BUFFER@ or -- @VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC@ count against this -- limit. Only descriptors in descriptor set layouts created without -- the @VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT@ -- bit set count against this limit. A descriptor is accessible to a -- pipeline shader stage when the @stageFlags@ member of the -- @VkDescriptorSetLayoutBinding@ structure has the bit for that shader -- stage set. See -- [{html_spec_relative}#descriptorsets-storagebuffer](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-storagebuffer) -- and -- [{html_spec_relative}#descriptorsets-storagebufferdynamic](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-storagebufferdynamic). -- -- - @maxPerStageDescriptorSampledImages@ is the maximum number of -- sampled images that /can/ be accessible to a single shader stage in -- a pipeline layout. Descriptors with a type of -- @VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER@, -- @VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE@, or -- @VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER@ count against this limit. -- Only descriptors in descriptor set layouts created without the -- @VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT@ bit -- set count against this limit. A descriptor is accessible to a -- pipeline shader stage when the @stageFlags@ member of the -- @VkDescriptorSetLayoutBinding@ structure has the bit for that shader -- stage set. See -- [{html_spec_relative}#descriptorsets-combinedimagesampler](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-combinedimagesampler), -- [{html_spec_relative}#descriptorsets-sampledimage](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-sampledimage), -- and -- [{html_spec_relative}#descriptorsets-uniformtexelbuffer](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-uniformtexelbuffer). -- -- - @maxPerStageDescriptorStorageImages@ is the maximum number of -- storage images that /can/ be accessible to a single shader stage in -- a pipeline layout. Descriptors with a type of -- @VK_DESCRIPTOR_TYPE_STORAGE_IMAGE@, or -- @VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER@ count against this limit. -- Only descriptors in descriptor set layouts created without the -- @VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT@ bit -- set count against this limit. A descriptor is accessible to a -- pipeline shader stage when the @stageFlags@ member of the -- @VkDescriptorSetLayoutBinding@ structure has the bit for that shader -- stage set. See -- [{html_spec_relative}#descriptorsets-storageimage](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-storageimage), -- and -- [{html_spec_relative}#descriptorsets-storagetexelbuffer](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-storagetexelbuffer). -- -- - @maxPerStageDescriptorInputAttachments@ is the maximum number of -- input attachments that /can/ be accessible to a single shader stage -- in a pipeline layout. Descriptors with a type of -- @VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT@ count against this limit. Only -- descriptors in descriptor set layouts created without the -- @VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT@ bit -- set count against this limit. A descriptor is accessible to a -- pipeline shader stage when the @stageFlags@ member of the -- @VkDescriptorSetLayoutBinding@ structure has the bit for that shader -- stage set. These are only supported for the fragment stage. See -- [{html_spec_relative}#descriptorsets-inputattachment](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-inputattachment). -- -- - @maxPerStageResources@ is the maximum number of resources that /can/ -- be accessible to a single shader stage in a pipeline layout. -- Descriptors with a type of -- @VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER@, -- @VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE@, -- @VK_DESCRIPTOR_TYPE_STORAGE_IMAGE@, -- @VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER@, -- @VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER@, -- @VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER@, -- @VK_DESCRIPTOR_TYPE_STORAGE_BUFFER@, -- @VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC@, -- @VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC@, or -- @VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT@ count against this limit. Only -- descriptors in descriptor set layouts created without the -- @VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT@ bit -- set count against this limit. For the fragment shader stage the -- framebuffer color attachments also count against this limit. -- -- - @maxDescriptorSetSamplers@ is the maximum number of samplers that -- /can/ be included in descriptor bindings in a pipeline layout across -- all pipeline shader stages and descriptor set numbers. Descriptors -- with a type of @VK_DESCRIPTOR_TYPE_SAMPLER@ or -- @VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER@ count against this -- limit. Only descriptors in descriptor set layouts created without -- the @VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT@ -- bit set count against this limit. See -- [{html_spec_relative}#descriptorsets-sampler](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-sampler) -- and -- [{html_spec_relative}#descriptorsets-combinedimagesampler](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-combinedimagesampler). -- -- - @maxDescriptorSetUniformBuffers@ is the maximum number of uniform -- buffers that /can/ be included in descriptor bindings in a pipeline -- layout across all pipeline shader stages and descriptor set numbers. -- Descriptors with a type of @VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER@ or -- @VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC@ count against this -- limit. Only descriptors in descriptor set layouts created without -- the @VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT@ -- bit set count against this limit. See -- [{html_spec_relative}#descriptorsets-uniformbuffer](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-uniformbuffer) -- and -- [{html_spec_relative}#descriptorsets-uniformbufferdynamic](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-uniformbufferdynamic). -- -- - @maxDescriptorSetUniformBuffersDynamic@ is the maximum number of -- dynamic uniform buffers that /can/ be included in descriptor -- bindings in a pipeline layout across all pipeline shader stages and -- descriptor set numbers. Descriptors with a type of -- @VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC@ count against this -- limit. Only descriptors in descriptor set layouts created without -- the @VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT@ -- bit set count against this limit. See -- [{html_spec_relative}#descriptorsets-uniformbufferdynamic](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-uniformbufferdynamic). -- -- - @maxDescriptorSetStorageBuffers@ is the maximum number of storage -- buffers that /can/ be included in descriptor bindings in a pipeline -- layout across all pipeline shader stages and descriptor set numbers. -- Descriptors with a type of @VK_DESCRIPTOR_TYPE_STORAGE_BUFFER@ or -- @VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC@ count against this -- limit. Only descriptors in descriptor set layouts created without -- the @VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT@ -- bit set count against this limit. See -- [{html_spec_relative}#descriptorsets-storagebuffer](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-storagebuffer) -- and -- [{html_spec_relative}#descriptorsets-storagebufferdynamic](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-storagebufferdynamic). -- -- - @maxDescriptorSetStorageBuffersDynamic@ is the maximum number of -- dynamic storage buffers that /can/ be included in descriptor -- bindings in a pipeline layout across all pipeline shader stages and -- descriptor set numbers. Descriptors with a type of -- @VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC@ count against this -- limit. Only descriptors in descriptor set layouts created without -- the @VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT@ -- bit set count against this limit. See -- [{html_spec_relative}#descriptorsets-storagebufferdynamic](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-storagebufferdynamic). -- -- - @maxDescriptorSetSampledImages@ is the maximum number of sampled -- images that /can/ be included in descriptor bindings in a pipeline -- layout across all pipeline shader stages and descriptor set numbers. -- Descriptors with a type of -- @VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER@, -- @VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE@, or -- @VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER@ count against this limit. -- Only descriptors in descriptor set layouts created without the -- @VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT@ bit -- set count against this limit. See -- [{html_spec_relative}#descriptorsets-combinedimagesampler](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-combinedimagesampler), -- [{html_spec_relative}#descriptorsets-sampledimage](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-sampledimage), -- and -- [{html_spec_relative}#descriptorsets-uniformtexelbuffer](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-uniformtexelbuffer). -- -- - @maxDescriptorSetStorageImages@ is the maximum number of storage -- images that /can/ be included in descriptor bindings in a pipeline -- layout across all pipeline shader stages and descriptor set numbers. -- Descriptors with a type of @VK_DESCRIPTOR_TYPE_STORAGE_IMAGE@, or -- @VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER@ count against this limit. -- Only descriptors in descriptor set layouts created without the -- @VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT@ bit -- set count against this limit. See -- [{html_spec_relative}#descriptorsets-storageimage](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-storageimage), -- and -- [{html_spec_relative}#descriptorsets-storagetexelbuffer](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-storagetexelbuffer). -- -- - @maxDescriptorSetInputAttachments@ is the maximum number of input -- attachments that /can/ be included in descriptor bindings in a -- pipeline layout across all pipeline shader stages and descriptor set -- numbers. Descriptors with a type of -- @VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT@ count against this limit. Only -- descriptors in descriptor set layouts created without the -- @VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT@ bit -- set count against this limit. See -- [{html_spec_relative}#descriptorsets-inputattachment](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-inputattachment). -- -- - @maxVertexInputAttributes@ is the maximum number of vertex input -- attributes that /can/ be specified for a graphics pipeline. These -- are described in the array of @VkVertexInputAttributeDescription@ -- structures that are provided at graphics pipeline creation time via -- the @pVertexAttributeDescriptions@ member of the -- @VkPipelineVertexInputStateCreateInfo@ structure. See -- [{html_spec_relative}#fxvertex-attrib](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fxvertex-attrib) -- and -- [{html_spec_relative}#fxvertex-input](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fxvertex-input). -- -- - @maxVertexInputBindings@ is the maximum number of vertex buffers -- that /can/ be specified for providing vertex attributes to a -- graphics pipeline. These are described in the array of -- @VkVertexInputBindingDescription@ structures that are provided at -- graphics pipeline creation time via the @pVertexBindingDescriptions@ -- member of the @VkPipelineVertexInputStateCreateInfo@ structure. The -- @binding@ member of @VkVertexInputBindingDescription@ /must/ be less -- than this limit. See -- [{html_spec_relative}#fxvertex-input](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fxvertex-input). -- -- - @maxVertexInputAttributeOffset@ is the maximum vertex input -- attribute offset that /can/ be added to the vertex input binding -- stride. The @offset@ member of the -- @VkVertexInputAttributeDescription@ structure /must/ be less than or -- equal to this limit. See -- [{html_spec_relative}#fxvertex-input](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fxvertex-input). -- -- - @maxVertexInputBindingStride@ is the maximum vertex input binding -- stride that /can/ be specified in a vertex input binding. The -- @stride@ member of the @VkVertexInputBindingDescription@ structure -- /must/ be less than or equal to this limit. See -- [{html_spec_relative}#fxvertex-input](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fxvertex-input). -- -- - @maxVertexOutputComponents@ is the maximum number of components of -- output variables which /can/ be output by a vertex shader. See -- [{html_spec_relative}#shaders-vertex](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#shaders-vertex). -- -- - @maxTessellationGenerationLevel@ is the maximum tessellation -- generation level supported by the fixed-function tessellation -- primitive generator. See -- [{html_spec_relative}#tessellation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#tessellation). -- -- - @maxTessellationPatchSize@ is the maximum patch size, in vertices, -- of patches that /can/ be processed by the tessellation control -- shader and tessellation primitive generator. The -- @patchControlPoints@ member of the -- @VkPipelineTessellationStateCreateInfo@ structure specified at -- pipeline creation time and the value provided in the -- @OutputVertices@ execution mode of shader modules /must/ be less -- than or equal to this limit. See -- [{html_spec_relative}#tessellation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#tessellation). -- -- - @maxTessellationControlPerVertexInputComponents@ is the maximum -- number of components of input variables which /can/ be provided as -- per-vertex inputs to the tessellation control shader stage. -- -- - @maxTessellationControlPerVertexOutputComponents@ is the maximum -- number of components of per-vertex output variables which /can/ be -- output from the tessellation control shader stage. -- -- - @maxTessellationControlPerPatchOutputComponents@ is the maximum -- number of components of per-patch output variables which /can/ be -- output from the tessellation control shader stage. -- -- - @maxTessellationControlTotalOutputComponents@ is the maximum total -- number of components of per-vertex and per-patch output variables -- which /can/ be output from the tessellation control shader stage. -- -- - @maxTessellationEvaluationInputComponents@ is the maximum number of -- components of input variables which /can/ be provided as per-vertex -- inputs to the tessellation evaluation shader stage. -- -- - @maxTessellationEvaluationOutputComponents@ is the maximum number of -- components of per-vertex output variables which /can/ be output from -- the tessellation evaluation shader stage. -- -- - @maxGeometryShaderInvocations@ is the maximum invocation count -- supported for instanced geometry shaders. The value provided in the -- @Invocations@ execution mode of shader modules /must/ be less than -- or equal to this limit. See -- [{html_spec_relative}#geometry](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#geometry). -- -- - @maxGeometryInputComponents@ is the maximum number of components of -- input variables which /can/ be provided as inputs to the geometry -- shader stage. -- -- - @maxGeometryOutputComponents@ is the maximum number of components of -- output variables which /can/ be output from the geometry shader -- stage. -- -- - @maxGeometryOutputVertices@ is the maximum number of vertices which -- /can/ be emitted by any geometry shader. -- -- - @maxGeometryTotalOutputComponents@ is the maximum total number of -- components of output, across all emitted vertices, which /can/ be -- output from the geometry shader stage. -- -- - @maxFragmentInputComponents@ is the maximum number of components of -- input variables which /can/ be provided as inputs to the fragment -- shader stage. -- -- - @maxFragmentOutputAttachments@ is the maximum number of output -- attachments which /can/ be written to by the fragment shader stage. -- -- - @maxFragmentDualSrcAttachments@ is the maximum number of output -- attachments which /can/ be written to by the fragment shader stage -- when blending is enabled and one of the dual source blend modes is -- in use. See -- [{html_spec_relative}#framebuffer-dsb](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#framebuffer-dsb) -- and -- [dualSrcBlend](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-dualSrcBlend). -- -- - @maxFragmentCombinedOutputResources@ is the total number of storage -- buffers, storage images, and output buffers which /can/ be used in -- the fragment shader stage. -- -- - @maxComputeSharedMemorySize@ is the maximum total storage size, in -- bytes, of all variables declared with the @WorkgroupLocal@ storage -- class in shader modules (or with the @shared@ storage qualifier in -- GLSL) in the compute shader stage. -- -- - @maxComputeWorkGroupCount@[3] is the maximum number of local -- workgroups that /can/ be dispatched by a single dispatch command. -- These three values represent the maximum number of local workgroups -- for the X, Y, and Z dimensions, respectively. The workgroup count -- parameters to the dispatch commands /must/ be less than or equal to -- the corresponding limit. See -- [{html_spec_relative}#dispatch](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#dispatch). -- -- - @maxComputeWorkGroupInvocations@ is the maximum total number of -- compute shader invocations in a single local workgroup. The product -- of the X, Y, and Z sizes as specified by the @LocalSize@ execution -- mode in shader modules and by the object decorated by the -- @WorkgroupSize@ decoration /must/ be less than or equal to this -- limit. -- -- - @maxComputeWorkGroupSize@[3] is the maximum size of a local compute -- workgroup, per dimension. These three values represent the maximum -- local workgroup size in the X, Y, and Z dimensions, respectively. -- The @x@, @y@, and @z@ sizes specified by the @LocalSize@ execution -- mode and by the object decorated by the @WorkgroupSize@ decoration -- in shader modules /must/ be less than or equal to the corresponding -- limit. -- -- - @subPixelPrecisionBits@ is the number of bits of subpixel precision -- in framebuffer coordinates xf and yf. See -- [{html_spec_relative}#primsrast](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#primsrast). -- -- - @subTexelPrecisionBits@ is the number of bits of precision in the -- division along an axis of an image used for minification and -- magnification filters. 2@subTexelPrecisionBits@ is the actual number -- of divisions along each axis of the image represented. Sub-texel -- values calculated during image sampling will snap to these locations -- when generating the filtered results. -- -- - @mipmapPrecisionBits@ is the number of bits of division that the LOD -- calculation for mipmap fetching get snapped to when determining the -- contribution from each mip level to the mip filtered results. -- 2@mipmapPrecisionBits@ is the actual number of divisions. -- -- __Note__ -- -- For example, if this value is 2 bits then when linearly filtering -- between two levels, each level could: contribute: 0%, 33%, 66%, or -- 100% (this is just an example and the amount of contribution -- /should/ be covered by different equations in the spec). -- -- - @maxDrawIndexedIndexValue@ is the maximum index value that /can/ be -- used for indexed draw calls when using 32-bit indices. This excludes -- the primitive restart index value of 0xFFFFFFFF. See -- [fullDrawIndexUint32](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-fullDrawIndexUint32). -- -- - @maxDrawIndirectCount@ is the maximum draw count that is supported -- for indirect draw calls. See -- [multiDrawIndirect](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-multiDrawIndirect). -- -- - @maxSamplerLodBias@ is the maximum absolute sampler LOD bias. The -- sum of the @mipLodBias@ member of the @VkSamplerCreateInfo@ -- structure and the @Bias@ operand of image sampling operations in -- shader modules (or 0 if no @Bias@ operand is provided to an image -- sampling operation) are clamped to the range -- [-@maxSamplerLodBias@,+@maxSamplerLodBias@]. See -- [{html_spec_relative}#samplers-mipLodBias](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#samplers-mipLodBias). -- -- - @maxSamplerAnisotropy@ is the maximum degree of sampler anisotropy. -- The maximum degree of anisotropic filtering used for an image -- sampling operation is the minimum of the @maxAnisotropy@ member of -- the @VkSamplerCreateInfo@ structure and this limit. See -- [{html_spec_relative}#samplers-maxAnisotropy](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#samplers-maxAnisotropy). -- -- - @maxViewports@ is the maximum number of active viewports. The -- @viewportCount@ member of the @VkPipelineViewportStateCreateInfo@ -- structure that is provided at pipeline creation /must/ be less than -- or equal to this limit. -- -- - @maxViewportDimensions@[2] are the maximum viewport dimensions in -- the X (width) and Y (height) dimensions, respectively. The maximum -- viewport dimensions /must/ be greater than or equal to the largest -- image which /can/ be created and used as a framebuffer attachment. -- See [Controlling the -- Viewport](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vertexpostproc-viewport). -- -- - @viewportBoundsRange@[2] is the [minimum, maximum] range that the -- corners of a viewport /must/ be contained in. This range /must/ be -- at least [-2 × @size@, 2 × @size@ - 1], where @size@ = -- max(@maxViewportDimensions@[0], @maxViewportDimensions@[1]). See -- [Controlling the -- Viewport](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vertexpostproc-viewport). -- -- __Note__ -- -- The intent of the @viewportBoundsRange@ limit is to allow a maximum -- sized viewport to be arbitrarily shifted relative to the output -- target as long as at least some portion intersects. This would give -- a bounds limit of [-@size@ + 1, 2 × @size@ - 1] which would allow -- all possible non-empty-set intersections of the output target and -- the viewport. Since these numbers are typically powers of two, -- picking the signed number range using the smallest possible number -- of bits ends up with the specified range. -- -- - @viewportSubPixelBits@ is the number of bits of subpixel precision -- for viewport bounds. The subpixel precision that floating-point -- viewport bounds are interpreted at is given by this limit. -- -- - @minMemoryMapAlignment@ is the minimum /required/ alignment, in -- bytes, of host visible memory allocations within the host address -- space. When mapping a memory allocation with -- 'Graphics.Vulkan.Core10.Memory.vkMapMemory', subtracting @offset@ -- bytes from the returned pointer will always produce an integer -- multiple of this limit. See -- [{html_spec_relative}#memory-device-hostaccess](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-device-hostaccess). -- -- - @minTexelBufferOffsetAlignment@ is the minimum /required/ alignment, -- in bytes, for the @offset@ member of the @VkBufferViewCreateInfo@ -- structure for texel buffers. When a buffer view is created for a -- buffer which was created with -- @VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT@ or -- @VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT@ set in the @usage@ member -- of the @VkBufferCreateInfo@ structure, the @offset@ /must/ be an -- integer multiple of this limit. -- -- - @minUniformBufferOffsetAlignment@ is the minimum /required/ -- alignment, in bytes, for the @offset@ member of the -- @VkDescriptorBufferInfo@ structure for uniform buffers. When a -- descriptor of type @VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER@ or -- @VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC@ is updated, the @offset@ -- /must/ be an integer multiple of this limit. Similarly, dynamic -- offsets for uniform buffers /must/ be multiples of this limit. -- -- - @minStorageBufferOffsetAlignment@ is the minimum /required/ -- alignment, in bytes, for the @offset@ member of the -- @VkDescriptorBufferInfo@ structure for storage buffers. When a -- descriptor of type @VK_DESCRIPTOR_TYPE_STORAGE_BUFFER@ or -- @VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC@ is updated, the @offset@ -- /must/ be an integer multiple of this limit. Similarly, dynamic -- offsets for storage buffers /must/ be multiples of this limit. -- -- - @minTexelOffset@ is the minimum offset value for the @ConstOffset@ -- image operand of any of the @OpImageSample@* or @OpImageFetch@* -- image instructions. -- -- - @maxTexelOffset@ is the maximum offset value for the @ConstOffset@ -- image operand of any of the @OpImageSample@* or @OpImageFetch@* -- image instructions. -- -- - @minTexelGatherOffset@ is the minimum offset value for the @Offset@ -- or @ConstOffsets@ image operands of any of the @OpImage@*@Gather@ -- image instructions. -- -- - @maxTexelGatherOffset@ is the maximum offset value for the @Offset@ -- or @ConstOffsets@ image operands of any of the @OpImage@*@Gather@ -- image instructions. -- -- - @minInterpolationOffset@ is the minimum negative offset value for -- the @offset@ operand of the @InterpolateAtOffset@ extended -- instruction. -- -- - @maxInterpolationOffset@ is the maximum positive offset value for -- the @offset@ operand of the @InterpolateAtOffset@ extended -- instruction. -- -- - @subPixelInterpolationOffsetBits@ is the number of subpixel -- fractional bits that the @x@ and @y@ offsets to the -- @InterpolateAtOffset@ extended instruction /may/ be rounded to as -- fixed-point values. -- -- - @maxFramebufferWidth@ is the maximum width for a framebuffer. The -- @width@ member of the @VkFramebufferCreateInfo@ structure /must/ be -- less than or equal to this limit. -- -- - @maxFramebufferHeight@ is the maximum height for a framebuffer. The -- @height@ member of the @VkFramebufferCreateInfo@ structure /must/ be -- less than or equal to this limit. -- -- - @maxFramebufferLayers@ is the maximum layer count for a layered -- framebuffer. The @layers@ member of the @VkFramebufferCreateInfo@ -- structure /must/ be less than or equal to this limit. -- -- - @framebufferColorSampleCounts@ is a bitmask1 of -- 'VkSampleCountFlagBits' indicating the color sample counts that are -- supported for all framebuffer color attachments with floating- or -- fixed-point formats. There is no limit that specifies the color -- sample counts that are supported for all color attachments with -- integer formats. -- -- - @framebufferDepthSampleCounts@ is a bitmask1 of -- 'VkSampleCountFlagBits' indicating the supported depth sample counts -- for all framebuffer depth\/stencil attachments, when the format -- includes a depth component. -- -- - @framebufferStencilSampleCounts@ is a bitmask1 of -- 'VkSampleCountFlagBits' indicating the supported stencil sample -- counts for all framebuffer depth\/stencil attachments, when the -- format includes a stencil component. -- -- - @framebufferNoAttachmentsSampleCounts@ is a bitmask1 of -- 'VkSampleCountFlagBits' indicating the supported sample counts for a -- framebuffer with no attachments. -- -- - @maxColorAttachments@ is the maximum number of color attachments -- that /can/ be used by a subpass in a render pass. The -- @colorAttachmentCount@ member of the @VkSubpassDescription@ -- structure /must/ be less than or equal to this limit. -- -- - @sampledImageColorSampleCounts@ is a bitmask1 of -- 'VkSampleCountFlagBits' indicating the sample counts supported for -- all 2D images created with @VK_IMAGE_TILING_OPTIMAL@, @usage@ -- containing @VK_IMAGE_USAGE_SAMPLED_BIT@, and a non-integer color -- format. -- -- - @sampledImageIntegerSampleCounts@ is a bitmask1 of -- 'VkSampleCountFlagBits' indicating the sample counts supported for -- all 2D images created with @VK_IMAGE_TILING_OPTIMAL@, @usage@ -- containing @VK_IMAGE_USAGE_SAMPLED_BIT@, and an integer color -- format. -- -- - @sampledImageDepthSampleCounts@ is a bitmask1 of -- 'VkSampleCountFlagBits' indicating the sample counts supported for -- all 2D images created with @VK_IMAGE_TILING_OPTIMAL@, @usage@ -- containing @VK_IMAGE_USAGE_SAMPLED_BIT@, and a depth format. -- -- - @sampledImageStencilSampleCounts@ is a bitmask1 of -- 'VkSampleCountFlagBits' indicating the sample supported for all 2D -- images created with @VK_IMAGE_TILING_OPTIMAL@, @usage@ containing -- @VK_IMAGE_USAGE_SAMPLED_BIT@, and a stencil format. -- -- - @storageImageSampleCounts@ is a bitmask1 of 'VkSampleCountFlagBits' -- indicating the sample counts supported for all 2D images created -- with @VK_IMAGE_TILING_OPTIMAL@, and @usage@ containing -- @VK_IMAGE_USAGE_STORAGE_BIT@. -- -- - @maxSampleMaskWords@ is the maximum number of array elements of a -- variable decorated with the @SampleMask@ built-in decoration. -- -- - @timestampComputeAndGraphics@ specifies support for timestamps on -- all graphics and compute queues. If this limit is set to @VK_TRUE@, -- all queues that advertise the @VK_QUEUE_GRAPHICS_BIT@ or -- @VK_QUEUE_COMPUTE_BIT@ in the -- @VkQueueFamilyProperties@::@queueFlags@ support -- @VkQueueFamilyProperties@::@timestampValidBits@ of at least 36. See -- [Timestamp -- Queries](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#queries-timestamps). -- -- - @timestampPeriod@ is the number of nanoseconds /required/ for a -- timestamp query to be incremented by 1. See [Timestamp -- Queries](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#queries-timestamps). -- -- - @maxClipDistances@ is the maximum number of clip distances that -- /can/ be used in a single shader stage. The size of any array -- declared with the @ClipDistance@ built-in decoration in a shader -- module /must/ be less than or equal to this limit. -- -- - @maxCullDistances@ is the maximum number of cull distances that -- /can/ be used in a single shader stage. The size of any array -- declared with the @CullDistance@ built-in decoration in a shader -- module /must/ be less than or equal to this limit. -- -- - @maxCombinedClipAndCullDistances@ is the maximum combined number of -- clip and cull distances that /can/ be used in a single shader stage. -- The sum of the sizes of any pair of arrays declared with the -- @ClipDistance@ and @CullDistance@ built-in decoration used by a -- single shader stage in a shader module /must/ be less than or equal -- to this limit. -- -- - @discreteQueuePriorities@ is the number of discrete priorities that -- /can/ be assigned to a queue based on the value of each member of -- @VkDeviceQueueCreateInfo@::@pQueuePriorities@. This /must/ be at -- least 2, and levels /must/ be spread evenly over the range, with at -- least one level at 1.0, and another at 0.0. See -- [{html_spec_relative}#devsandqueues-priority](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#devsandqueues-priority). -- -- - @pointSizeRange@[2] is the range [@minimum@,@maximum@] of supported -- sizes for points. Values written to variables decorated with the -- @PointSize@ built-in decoration are clamped to this range. -- -- - @lineWidthRange@[2] is the range [@minimum@,@maximum@] of supported -- widths for lines. Values specified by the @lineWidth@ member of the -- @VkPipelineRasterizationStateCreateInfo@ or the @lineWidth@ -- parameter to @vkCmdSetLineWidth@ are clamped to this range. -- -- - @pointSizeGranularity@ is the granularity of supported point sizes. -- Not all point sizes in the range defined by @pointSizeRange@ are -- supported. This limit specifies the granularity (or increment) -- between successive supported point sizes. -- -- - @lineWidthGranularity@ is the granularity of supported line widths. -- Not all line widths in the range defined by @lineWidthRange@ are -- supported. This limit specifies the granularity (or increment) -- between successive supported line widths. -- -- - @strictLines@ specifies whether lines are rasterized according to -- the preferred method of rasterization. If set to @VK_FALSE@, lines -- /may/ be rasterized under a relaxed set of rules. If set to -- @VK_TRUE@, lines are rasterized as per the strict definition. See -- [Basic Line Segment -- Rasterization](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#primsrast-lines-basic). -- -- - @standardSampleLocations@ specifies whether rasterization uses the -- standard sample locations as documented in -- [Multisampling](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#primsrast-multisampling). -- If set to @VK_TRUE@, the implementation uses the documented sample -- locations. If set to @VK_FALSE@, the implementation /may/ use -- different sample locations. -- -- - @optimalBufferCopyOffsetAlignment@ is the optimal buffer offset -- alignment in bytes for @vkCmdCopyBufferToImage@ and -- @vkCmdCopyImageToBuffer@. The per texel alignment requirements are -- enforced, but applications /should/ use the optimal alignment for -- optimal performance and power use. -- -- - @optimalBufferCopyRowPitchAlignment@ is the optimal buffer row pitch -- alignment in bytes for @vkCmdCopyBufferToImage@ and -- @vkCmdCopyImageToBuffer@. Row pitch is the number of bytes between -- texels with the same X coordinate in adjacent rows (Y coordinates -- differ by one). The per texel alignment requirements are enforced, -- but applications /should/ use the optimal alignment for optimal -- performance and power use. -- -- - @nonCoherentAtomSize@ is the size and alignment in bytes that bounds -- concurrent access to [host-mapped device -- memory](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-device-hostaccess). -- -- - 'Graphics.Vulkan.Extensions.VK_EXT_discard_rectangles.VkPhysicalDeviceDiscardRectanglePropertiesEXT'::@maxDiscardRectangles@ -- is the maximum number of active discard rectangles. This limit can -- be queried by setting the @pNext@ pointer from a -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.VkPhysicalDeviceProperties2' -- object to an instance of -- 'Graphics.Vulkan.Extensions.VK_EXT_discard_rectangles.VkPhysicalDeviceDiscardRectanglePropertiesEXT' -- and using @vkGetPhysicalDeviceProperties2@ to fill out the members. -- -- - 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_maintenance2.VkPhysicalDevicePointClippingProperties'::@pointClippingBehavior@ -- defines the clipping behavior of points. This limit can be queried -- by setting the @pNext@ pointer from a -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.VkPhysicalDeviceProperties2' -- object to an instance of -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_maintenance2.VkPhysicalDevicePointClippingProperties' -- and using @vkGetPhysicalDeviceProperties2@ to fill out the members. -- -- - @VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT@::@maxVertexAttribDivisor@ -- is the maximum value of the number of instances that will repeat the -- value of vertex attribute data when instanced rendering is enabled. -- This limit can be queried by setting the @pNext@ pointer from a -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.VkPhysicalDeviceProperties2' -- object to an instance of -- 'Graphics.Vulkan.Extensions.VK_EXT_vertex_attribute_divisor.VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT' -- and using @vkGetPhysicalDeviceProperties2@ to fill out the members. -- -- = Description -- -- [1] -- For all bitmasks of 'VkSampleCountFlagBits', the sample count limits -- defined above represent the minimum supported sample counts for each -- image type. Individual images /may/ support additional sample -- counts, which are queried using -- 'vkGetPhysicalDeviceImageFormatProperties' as described in -- [Supported Sample -- Counts](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-supported-sample-counts). -- -- = See Also -- -- @VkBool32@, @VkDeviceSize@, 'VkPhysicalDeviceProperties', -- 'VkSampleCountFlags' data VkPhysicalDeviceLimits = VkPhysicalDeviceLimits { -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxImageDimension1D" vkMaxImageDimension1D :: Word32 , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxImageDimension2D" vkMaxImageDimension2D :: Word32 , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxImageDimension3D" vkMaxImageDimension3D :: Word32 , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxImageDimensionCube" vkMaxImageDimensionCube :: Word32 , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxImageArrayLayers" vkMaxImageArrayLayers :: Word32 , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxTexelBufferElements" vkMaxTexelBufferElements :: Word32 , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxUniformBufferRange" vkMaxUniformBufferRange :: Word32 , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxStorageBufferRange" vkMaxStorageBufferRange :: Word32 , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxPushConstantsSize" vkMaxPushConstantsSize :: Word32 , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxMemoryAllocationCount" vkMaxMemoryAllocationCount :: Word32 , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxSamplerAllocationCount" vkMaxSamplerAllocationCount :: Word32 , -- No documentation found for Nested "VkPhysicalDeviceLimits" "bufferImageGranularity" vkBufferImageGranularity :: VkDeviceSize , -- No documentation found for Nested "VkPhysicalDeviceLimits" "sparseAddressSpaceSize" vkSparseAddressSpaceSize :: VkDeviceSize , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxBoundDescriptorSets" vkMaxBoundDescriptorSets :: Word32 , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxPerStageDescriptorSamplers" vkMaxPerStageDescriptorSamplers :: Word32 , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxPerStageDescriptorUniformBuffers" vkMaxPerStageDescriptorUniformBuffers :: Word32 , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxPerStageDescriptorStorageBuffers" vkMaxPerStageDescriptorStorageBuffers :: Word32 , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxPerStageDescriptorSampledImages" vkMaxPerStageDescriptorSampledImages :: Word32 , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxPerStageDescriptorStorageImages" vkMaxPerStageDescriptorStorageImages :: Word32 , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxPerStageDescriptorInputAttachments" vkMaxPerStageDescriptorInputAttachments :: Word32 , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxPerStageResources" vkMaxPerStageResources :: Word32 , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxDescriptorSetSamplers" vkMaxDescriptorSetSamplers :: Word32 , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxDescriptorSetUniformBuffers" vkMaxDescriptorSetUniformBuffers :: Word32 , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxDescriptorSetUniformBuffersDynamic" vkMaxDescriptorSetUniformBuffersDynamic :: Word32 , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxDescriptorSetStorageBuffers" vkMaxDescriptorSetStorageBuffers :: Word32 , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxDescriptorSetStorageBuffersDynamic" vkMaxDescriptorSetStorageBuffersDynamic :: Word32 , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxDescriptorSetSampledImages" vkMaxDescriptorSetSampledImages :: Word32 , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxDescriptorSetStorageImages" vkMaxDescriptorSetStorageImages :: Word32 , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxDescriptorSetInputAttachments" vkMaxDescriptorSetInputAttachments :: Word32 , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxVertexInputAttributes" vkMaxVertexInputAttributes :: Word32 , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxVertexInputBindings" vkMaxVertexInputBindings :: Word32 , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxVertexInputAttributeOffset" vkMaxVertexInputAttributeOffset :: Word32 , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxVertexInputBindingStride" vkMaxVertexInputBindingStride :: Word32 , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxVertexOutputComponents" vkMaxVertexOutputComponents :: Word32 , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxTessellationGenerationLevel" vkMaxTessellationGenerationLevel :: Word32 , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxTessellationPatchSize" vkMaxTessellationPatchSize :: Word32 , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxTessellationControlPerVertexInputComponents" vkMaxTessellationControlPerVertexInputComponents :: Word32 , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxTessellationControlPerVertexOutputComponents" vkMaxTessellationControlPerVertexOutputComponents :: Word32 , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxTessellationControlPerPatchOutputComponents" vkMaxTessellationControlPerPatchOutputComponents :: Word32 , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxTessellationControlTotalOutputComponents" vkMaxTessellationControlTotalOutputComponents :: Word32 , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxTessellationEvaluationInputComponents" vkMaxTessellationEvaluationInputComponents :: Word32 , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxTessellationEvaluationOutputComponents" vkMaxTessellationEvaluationOutputComponents :: Word32 , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxGeometryShaderInvocations" vkMaxGeometryShaderInvocations :: Word32 , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxGeometryInputComponents" vkMaxGeometryInputComponents :: Word32 , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxGeometryOutputComponents" vkMaxGeometryOutputComponents :: Word32 , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxGeometryOutputVertices" vkMaxGeometryOutputVertices :: Word32 , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxGeometryTotalOutputComponents" vkMaxGeometryTotalOutputComponents :: Word32 , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxFragmentInputComponents" vkMaxFragmentInputComponents :: Word32 , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxFragmentOutputAttachments" vkMaxFragmentOutputAttachments :: Word32 , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxFragmentDualSrcAttachments" vkMaxFragmentDualSrcAttachments :: Word32 , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxFragmentCombinedOutputResources" vkMaxFragmentCombinedOutputResources :: Word32 , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxComputeSharedMemorySize" vkMaxComputeSharedMemorySize :: Word32 , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxComputeWorkGroupCount" vkMaxComputeWorkGroupCount :: Vector 3 Word32 , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxComputeWorkGroupInvocations" vkMaxComputeWorkGroupInvocations :: Word32 , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxComputeWorkGroupSize" vkMaxComputeWorkGroupSize :: Vector 3 Word32 , -- No documentation found for Nested "VkPhysicalDeviceLimits" "subPixelPrecisionBits" vkSubPixelPrecisionBits :: Word32 , -- No documentation found for Nested "VkPhysicalDeviceLimits" "subTexelPrecisionBits" vkSubTexelPrecisionBits :: Word32 , -- No documentation found for Nested "VkPhysicalDeviceLimits" "mipmapPrecisionBits" vkMipmapPrecisionBits :: Word32 , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxDrawIndexedIndexValue" vkMaxDrawIndexedIndexValue :: Word32 , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxDrawIndirectCount" vkMaxDrawIndirectCount :: Word32 , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxSamplerLodBias" vkMaxSamplerLodBias :: CFloat , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxSamplerAnisotropy" vkMaxSamplerAnisotropy :: CFloat , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxViewports" vkMaxViewports :: Word32 , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxViewportDimensions" vkMaxViewportDimensions :: Vector 2 Word32 , -- No documentation found for Nested "VkPhysicalDeviceLimits" "viewportBoundsRange" vkViewportBoundsRange :: Vector 2 CFloat , -- No documentation found for Nested "VkPhysicalDeviceLimits" "viewportSubPixelBits" vkViewportSubPixelBits :: Word32 , -- No documentation found for Nested "VkPhysicalDeviceLimits" "minMemoryMapAlignment" vkMinMemoryMapAlignment :: CSize , -- No documentation found for Nested "VkPhysicalDeviceLimits" "minTexelBufferOffsetAlignment" vkMinTexelBufferOffsetAlignment :: VkDeviceSize , -- No documentation found for Nested "VkPhysicalDeviceLimits" "minUniformBufferOffsetAlignment" vkMinUniformBufferOffsetAlignment :: VkDeviceSize , -- No documentation found for Nested "VkPhysicalDeviceLimits" "minStorageBufferOffsetAlignment" vkMinStorageBufferOffsetAlignment :: VkDeviceSize , -- No documentation found for Nested "VkPhysicalDeviceLimits" "minTexelOffset" vkMinTexelOffset :: Int32 , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxTexelOffset" vkMaxTexelOffset :: Word32 , -- No documentation found for Nested "VkPhysicalDeviceLimits" "minTexelGatherOffset" vkMinTexelGatherOffset :: Int32 , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxTexelGatherOffset" vkMaxTexelGatherOffset :: Word32 , -- No documentation found for Nested "VkPhysicalDeviceLimits" "minInterpolationOffset" vkMinInterpolationOffset :: CFloat , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxInterpolationOffset" vkMaxInterpolationOffset :: CFloat , -- No documentation found for Nested "VkPhysicalDeviceLimits" "subPixelInterpolationOffsetBits" vkSubPixelInterpolationOffsetBits :: Word32 , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxFramebufferWidth" vkMaxFramebufferWidth :: Word32 , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxFramebufferHeight" vkMaxFramebufferHeight :: Word32 , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxFramebufferLayers" vkMaxFramebufferLayers :: Word32 , -- No documentation found for Nested "VkPhysicalDeviceLimits" "framebufferColorSampleCounts" vkFramebufferColorSampleCounts :: VkSampleCountFlags , -- No documentation found for Nested "VkPhysicalDeviceLimits" "framebufferDepthSampleCounts" vkFramebufferDepthSampleCounts :: VkSampleCountFlags , -- No documentation found for Nested "VkPhysicalDeviceLimits" "framebufferStencilSampleCounts" vkFramebufferStencilSampleCounts :: VkSampleCountFlags , -- No documentation found for Nested "VkPhysicalDeviceLimits" "framebufferNoAttachmentsSampleCounts" vkFramebufferNoAttachmentsSampleCounts :: VkSampleCountFlags , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxColorAttachments" vkMaxColorAttachments :: Word32 , -- No documentation found for Nested "VkPhysicalDeviceLimits" "sampledImageColorSampleCounts" vkSampledImageColorSampleCounts :: VkSampleCountFlags , -- No documentation found for Nested "VkPhysicalDeviceLimits" "sampledImageIntegerSampleCounts" vkSampledImageIntegerSampleCounts :: VkSampleCountFlags , -- No documentation found for Nested "VkPhysicalDeviceLimits" "sampledImageDepthSampleCounts" vkSampledImageDepthSampleCounts :: VkSampleCountFlags , -- No documentation found for Nested "VkPhysicalDeviceLimits" "sampledImageStencilSampleCounts" vkSampledImageStencilSampleCounts :: VkSampleCountFlags , -- No documentation found for Nested "VkPhysicalDeviceLimits" "storageImageSampleCounts" vkStorageImageSampleCounts :: VkSampleCountFlags , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxSampleMaskWords" vkMaxSampleMaskWords :: Word32 , -- No documentation found for Nested "VkPhysicalDeviceLimits" "timestampComputeAndGraphics" vkTimestampComputeAndGraphics :: VkBool32 , -- No documentation found for Nested "VkPhysicalDeviceLimits" "timestampPeriod" vkTimestampPeriod :: CFloat , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxClipDistances" vkMaxClipDistances :: Word32 , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxCullDistances" vkMaxCullDistances :: Word32 , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxCombinedClipAndCullDistances" vkMaxCombinedClipAndCullDistances :: Word32 , -- No documentation found for Nested "VkPhysicalDeviceLimits" "discreteQueuePriorities" vkDiscreteQueuePriorities :: Word32 , -- No documentation found for Nested "VkPhysicalDeviceLimits" "pointSizeRange" vkPointSizeRange :: Vector 2 CFloat , -- No documentation found for Nested "VkPhysicalDeviceLimits" "lineWidthRange" vkLineWidthRange :: Vector 2 CFloat , -- No documentation found for Nested "VkPhysicalDeviceLimits" "pointSizeGranularity" vkPointSizeGranularity :: CFloat , -- No documentation found for Nested "VkPhysicalDeviceLimits" "lineWidthGranularity" vkLineWidthGranularity :: CFloat , -- No documentation found for Nested "VkPhysicalDeviceLimits" "strictLines" vkStrictLines :: VkBool32 , -- No documentation found for Nested "VkPhysicalDeviceLimits" "standardSampleLocations" vkStandardSampleLocations :: VkBool32 , -- No documentation found for Nested "VkPhysicalDeviceLimits" "optimalBufferCopyOffsetAlignment" vkOptimalBufferCopyOffsetAlignment :: VkDeviceSize , -- No documentation found for Nested "VkPhysicalDeviceLimits" "optimalBufferCopyRowPitchAlignment" vkOptimalBufferCopyRowPitchAlignment :: VkDeviceSize , -- No documentation found for Nested "VkPhysicalDeviceLimits" "nonCoherentAtomSize" vkNonCoherentAtomSize :: VkDeviceSize } deriving (Eq, Show) instance Storable VkPhysicalDeviceLimits where sizeOf ~_ = 504 alignment ~_ = 8 peek ptr = VkPhysicalDeviceLimits <$> 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` 48) <*> peek (ptr `plusPtr` 56) <*> 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) <*> peek (ptr `plusPtr` 220) <*> peek (ptr `plusPtr` 232) <*> peek (ptr `plusPtr` 236) <*> peek (ptr `plusPtr` 248) <*> peek (ptr `plusPtr` 252) <*> peek (ptr `plusPtr` 256) <*> peek (ptr `plusPtr` 260) <*> peek (ptr `plusPtr` 264) <*> peek (ptr `plusPtr` 268) <*> peek (ptr `plusPtr` 272) <*> peek (ptr `plusPtr` 276) <*> peek (ptr `plusPtr` 280) <*> peek (ptr `plusPtr` 288) <*> peek (ptr `plusPtr` 296) <*> peek (ptr `plusPtr` 304) <*> peek (ptr `plusPtr` 312) <*> peek (ptr `plusPtr` 320) <*> peek (ptr `plusPtr` 328) <*> peek (ptr `plusPtr` 336) <*> peek (ptr `plusPtr` 340) <*> peek (ptr `plusPtr` 344) <*> peek (ptr `plusPtr` 348) <*> peek (ptr `plusPtr` 352) <*> peek (ptr `plusPtr` 356) <*> peek (ptr `plusPtr` 360) <*> peek (ptr `plusPtr` 364) <*> peek (ptr `plusPtr` 368) <*> peek (ptr `plusPtr` 372) <*> peek (ptr `plusPtr` 376) <*> peek (ptr `plusPtr` 380) <*> peek (ptr `plusPtr` 384) <*> peek (ptr `plusPtr` 388) <*> peek (ptr `plusPtr` 392) <*> peek (ptr `plusPtr` 396) <*> peek (ptr `plusPtr` 400) <*> peek (ptr `plusPtr` 404) <*> peek (ptr `plusPtr` 408) <*> peek (ptr `plusPtr` 412) <*> peek (ptr `plusPtr` 416) <*> peek (ptr `plusPtr` 420) <*> peek (ptr `plusPtr` 424) <*> peek (ptr `plusPtr` 428) <*> peek (ptr `plusPtr` 432) <*> peek (ptr `plusPtr` 436) <*> peek (ptr `plusPtr` 440) <*> peek (ptr `plusPtr` 444) <*> peek (ptr `plusPtr` 452) <*> peek (ptr `plusPtr` 460) <*> peek (ptr `plusPtr` 464) <*> peek (ptr `plusPtr` 468) <*> peek (ptr `plusPtr` 472) <*> peek (ptr `plusPtr` 480) <*> peek (ptr `plusPtr` 488) <*> peek (ptr `plusPtr` 496) poke ptr poked = poke (ptr `plusPtr` 0) (vkMaxImageDimension1D (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 4) (vkMaxImageDimension2D (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 8) (vkMaxImageDimension3D (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 12) (vkMaxImageDimensionCube (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 16) (vkMaxImageArrayLayers (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 20) (vkMaxTexelBufferElements (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 24) (vkMaxUniformBufferRange (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 28) (vkMaxStorageBufferRange (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 32) (vkMaxPushConstantsSize (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 36) (vkMaxMemoryAllocationCount (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 40) (vkMaxSamplerAllocationCount (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 48) (vkBufferImageGranularity (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 56) (vkSparseAddressSpaceSize (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 64) (vkMaxBoundDescriptorSets (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 68) (vkMaxPerStageDescriptorSamplers (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 72) (vkMaxPerStageDescriptorUniformBuffers (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 76) (vkMaxPerStageDescriptorStorageBuffers (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 80) (vkMaxPerStageDescriptorSampledImages (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 84) (vkMaxPerStageDescriptorStorageImages (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 88) (vkMaxPerStageDescriptorInputAttachments (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 92) (vkMaxPerStageResources (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 96) (vkMaxDescriptorSetSamplers (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 100) (vkMaxDescriptorSetUniformBuffers (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 104) (vkMaxDescriptorSetUniformBuffersDynamic (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 108) (vkMaxDescriptorSetStorageBuffers (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 112) (vkMaxDescriptorSetStorageBuffersDynamic (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 116) (vkMaxDescriptorSetSampledImages (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 120) (vkMaxDescriptorSetStorageImages (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 124) (vkMaxDescriptorSetInputAttachments (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 128) (vkMaxVertexInputAttributes (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 132) (vkMaxVertexInputBindings (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 136) (vkMaxVertexInputAttributeOffset (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 140) (vkMaxVertexInputBindingStride (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 144) (vkMaxVertexOutputComponents (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 148) (vkMaxTessellationGenerationLevel (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 152) (vkMaxTessellationPatchSize (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 156) (vkMaxTessellationControlPerVertexInputComponents (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 160) (vkMaxTessellationControlPerVertexOutputComponents (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 164) (vkMaxTessellationControlPerPatchOutputComponents (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 168) (vkMaxTessellationControlTotalOutputComponents (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 172) (vkMaxTessellationEvaluationInputComponents (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 176) (vkMaxTessellationEvaluationOutputComponents (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 180) (vkMaxGeometryShaderInvocations (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 184) (vkMaxGeometryInputComponents (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 188) (vkMaxGeometryOutputComponents (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 192) (vkMaxGeometryOutputVertices (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 196) (vkMaxGeometryTotalOutputComponents (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 200) (vkMaxFragmentInputComponents (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 204) (vkMaxFragmentOutputAttachments (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 208) (vkMaxFragmentDualSrcAttachments (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 212) (vkMaxFragmentCombinedOutputResources (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 216) (vkMaxComputeSharedMemorySize (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 220) (vkMaxComputeWorkGroupCount (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 232) (vkMaxComputeWorkGroupInvocations (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 236) (vkMaxComputeWorkGroupSize (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 248) (vkSubPixelPrecisionBits (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 252) (vkSubTexelPrecisionBits (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 256) (vkMipmapPrecisionBits (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 260) (vkMaxDrawIndexedIndexValue (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 264) (vkMaxDrawIndirectCount (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 268) (vkMaxSamplerLodBias (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 272) (vkMaxSamplerAnisotropy (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 276) (vkMaxViewports (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 280) (vkMaxViewportDimensions (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 288) (vkViewportBoundsRange (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 296) (vkViewportSubPixelBits (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 304) (vkMinMemoryMapAlignment (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 312) (vkMinTexelBufferOffsetAlignment (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 320) (vkMinUniformBufferOffsetAlignment (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 328) (vkMinStorageBufferOffsetAlignment (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 336) (vkMinTexelOffset (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 340) (vkMaxTexelOffset (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 344) (vkMinTexelGatherOffset (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 348) (vkMaxTexelGatherOffset (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 352) (vkMinInterpolationOffset (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 356) (vkMaxInterpolationOffset (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 360) (vkSubPixelInterpolationOffsetBits (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 364) (vkMaxFramebufferWidth (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 368) (vkMaxFramebufferHeight (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 372) (vkMaxFramebufferLayers (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 376) (vkFramebufferColorSampleCounts (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 380) (vkFramebufferDepthSampleCounts (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 384) (vkFramebufferStencilSampleCounts (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 388) (vkFramebufferNoAttachmentsSampleCounts (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 392) (vkMaxColorAttachments (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 396) (vkSampledImageColorSampleCounts (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 400) (vkSampledImageIntegerSampleCounts (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 404) (vkSampledImageDepthSampleCounts (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 408) (vkSampledImageStencilSampleCounts (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 412) (vkStorageImageSampleCounts (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 416) (vkMaxSampleMaskWords (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 420) (vkTimestampComputeAndGraphics (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 424) (vkTimestampPeriod (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 428) (vkMaxClipDistances (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 432) (vkMaxCullDistances (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 436) (vkMaxCombinedClipAndCullDistances (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 440) (vkDiscreteQueuePriorities (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 444) (vkPointSizeRange (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 452) (vkLineWidthRange (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 460) (vkPointSizeGranularity (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 464) (vkLineWidthGranularity (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 468) (vkStrictLines (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 472) (vkStandardSampleLocations (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 480) (vkOptimalBufferCopyOffsetAlignment (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 488) (vkOptimalBufferCopyRowPitchAlignment (poked :: VkPhysicalDeviceLimits)) *> poke (ptr `plusPtr` 496) (vkNonCoherentAtomSize (poked :: VkPhysicalDeviceLimits)) -- | VkQueueFlags - Bitmask of VkQueueFlagBits -- -- = Description -- -- @VkQueueFlags@ is a bitmask type for setting a mask of zero or more -- 'VkQueueFlagBits'. -- -- = See Also -- -- 'VkQueueFamilyProperties', 'VkQueueFlagBits' type VkQueueFlags = VkQueueFlagBits -- | VkMemoryPropertyFlags - Bitmask of VkMemoryPropertyFlagBits -- -- = Description -- -- @VkMemoryPropertyFlags@ is a bitmask type for setting a mask of zero or -- more 'VkMemoryPropertyFlagBits'. -- -- = See Also -- -- 'VkMemoryPropertyFlagBits', 'VkMemoryType' type VkMemoryPropertyFlags = VkMemoryPropertyFlagBits -- | VkMemoryHeapFlags - Bitmask of VkMemoryHeapFlagBits -- -- = Description -- -- @VkMemoryHeapFlags@ is a bitmask type for setting a mask of zero or more -- 'VkMemoryHeapFlagBits'. -- -- = See Also -- -- 'VkMemoryHeap', 'VkMemoryHeapFlagBits' type VkMemoryHeapFlags = VkMemoryHeapFlagBits -- | VkImageUsageFlags - Bitmask of VkImageUsageFlagBits -- -- = Description -- -- @VkImageUsageFlags@ is a bitmask type for setting a mask of zero or more -- 'VkImageUsageFlagBits'. -- -- = See Also -- -- 'Graphics.Vulkan.Core10.Image.VkImageCreateInfo', -- 'VkImageUsageFlagBits', -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_maintenance2.VkImageViewUsageCreateInfo', -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.VkPhysicalDeviceImageFormatInfo2', -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.VkPhysicalDeviceSparseImageFormatInfo2', -- 'Graphics.Vulkan.Extensions.VK_KHR_shared_presentable_image.VkSharedPresentSurfaceCapabilitiesKHR', -- 'Graphics.Vulkan.Extensions.VK_EXT_display_surface_counter.VkSurfaceCapabilities2EXT', -- 'Graphics.Vulkan.Extensions.VK_KHR_surface.VkSurfaceCapabilitiesKHR', -- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.VkSwapchainCreateInfoKHR', -- 'Graphics.Vulkan.Extensions.VK_NV_external_memory_capabilities.vkGetPhysicalDeviceExternalImageFormatPropertiesNV', -- 'vkGetPhysicalDeviceImageFormatProperties', -- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.vkGetPhysicalDeviceSparseImageFormatProperties' type VkImageUsageFlags = VkImageUsageFlagBits -- | VkImageCreateFlags - Bitmask of VkImageCreateFlagBits -- -- = Description -- -- @VkImageCreateFlags@ is a bitmask type for setting a mask of zero or -- more 'VkImageCreateFlagBits'. -- -- = See Also -- -- 'VkImageCreateFlagBits', -- 'Graphics.Vulkan.Core10.Image.VkImageCreateInfo', -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.VkPhysicalDeviceImageFormatInfo2', -- 'Graphics.Vulkan.Extensions.VK_NV_external_memory_capabilities.vkGetPhysicalDeviceExternalImageFormatPropertiesNV', -- 'vkGetPhysicalDeviceImageFormatProperties' type VkImageCreateFlags = VkImageCreateFlagBits -- | VkFormatFeatureFlags - Bitmask of VkFormatFeatureFlagBits -- -- = Description -- -- @VkFormatFeatureFlags@ is a bitmask type for setting a mask of zero or -- more 'VkFormatFeatureFlagBits'. -- -- = See Also -- -- 'Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.VkAndroidHardwareBufferFormatPropertiesANDROID', -- 'VkFormatFeatureFlagBits', 'VkFormatProperties' type VkFormatFeatureFlags = VkFormatFeatureFlagBits -- | VkSampleCountFlags - Bitmask of VkSampleCountFlagBits -- -- = Description -- -- @VkSampleCountFlags@ is a bitmask type for setting a mask of zero or -- more 'VkSampleCountFlagBits'. -- -- = See Also -- -- 'VkImageFormatProperties', 'VkPhysicalDeviceLimits', -- 'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.VkPhysicalDeviceSampleLocationsPropertiesEXT', -- 'VkSampleCountFlagBits' type VkSampleCountFlags = VkSampleCountFlagBits -- | VkDeviceSize - Vulkan device memory size and offsets -- -- = See Also -- -- 'Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.VkAndroidHardwareBufferPropertiesANDROID', -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_bind_memory2.VkBindBufferMemoryInfo', -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_bind_memory2.VkBindImageMemoryInfo', -- 'Graphics.Vulkan.Core10.CommandBufferBuilding.VkBufferCopy', -- 'Graphics.Vulkan.Core10.Buffer.VkBufferCreateInfo', -- 'Graphics.Vulkan.Core10.CommandBufferBuilding.VkBufferImageCopy', -- 'Graphics.Vulkan.Core10.CommandBufferBuilding.VkBufferMemoryBarrier', -- 'Graphics.Vulkan.Core10.BufferView.VkBufferViewCreateInfo', -- 'Graphics.Vulkan.Extensions.VK_NVX_device_generated_commands.VkCmdProcessCommandsInfoNVX', -- 'Graphics.Vulkan.Core10.DescriptorSet.VkDescriptorBufferInfo', -- 'VkImageFormatProperties', -- 'Graphics.Vulkan.Extensions.VK_NVX_device_generated_commands.VkIndirectCommandsTokenNVX', -- 'Graphics.Vulkan.Core10.Memory.VkMappedMemoryRange', -- 'Graphics.Vulkan.Core10.Memory.VkMemoryAllocateInfo', 'VkMemoryHeap', -- 'Graphics.Vulkan.Core10.MemoryManagement.VkMemoryRequirements', -- 'Graphics.Vulkan.Extensions.VK_EXT_external_memory_host.VkPhysicalDeviceExternalMemoryHostPropertiesEXT', -- 'VkPhysicalDeviceLimits', -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_maintenance3.VkPhysicalDeviceMaintenance3Properties', -- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.VkSparseImageMemoryBind', -- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.VkSparseImageMemoryRequirements', -- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.VkSparseMemoryBind', -- 'Graphics.Vulkan.Core10.Image.VkSubresourceLayout', -- 'Graphics.Vulkan.Core10.MemoryManagement.vkBindBufferMemory', -- 'Graphics.Vulkan.Core10.MemoryManagement.vkBindImageMemory', -- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdBindIndexBuffer', -- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdBindVertexBuffers', -- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdCopyQueryPoolResults', -- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdDispatchIndirect', -- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdDrawIndexedIndirect', -- 'Graphics.Vulkan.Extensions.VK_AMD_draw_indirect_count.vkCmdDrawIndexedIndirectCountAMD', -- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdDrawIndirect', -- 'Graphics.Vulkan.Extensions.VK_AMD_draw_indirect_count.vkCmdDrawIndirectCountAMD', -- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdFillBuffer', -- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdUpdateBuffer', -- 'Graphics.Vulkan.Extensions.VK_AMD_buffer_marker.vkCmdWriteBufferMarkerAMD', -- 'Graphics.Vulkan.Core10.Memory.vkGetDeviceMemoryCommitment', -- 'Graphics.Vulkan.Core10.Query.vkGetQueryPoolResults', -- 'Graphics.Vulkan.Core10.Memory.vkMapMemory' type VkDeviceSize = Word64